24 paź 23:16
Mariusz:
Podstawienia Eulera są ok ale niektórzy tacy jak Banaś zakazują ich stosowania
i wtedy trzeba kombinować
Kiedyś chciałem tłumaczenie geometrycznej interpretacji podstawień Eulera
z rosyjskiej wersji Fichtenholza bo
primo miałem wątpliwości co do polskiego tłumaczenia
secundo potrzebowałem angielskiego tłumaczenia na inne forum
Wiadomo że najlepiej tłumaczy się z oryginału a
oryginał jest czy się to komu podoba czy nie rosyjski
Sam niestety nie mogłem tego sprawdzić bo za późno się urodziłem
i zdążyli usunąć rosyjski z programu nauczania
24 paź 23:33
5-latek : Ale pasuje ci to ?
24 paź 23:36
jc: Mariusz, zadanie z całkowania: jaki kształt przyjmuje kręcąca się skakanka?
24 paź 23:44
Mariusz:
Jeśli chodzi o geometryczną interpretację podstawień Eulera to
w polskim tłumaczeniu jest
...jako punkt (x
0,y
0) przyjmujemy punkt w nieskończoności na krzywej ...
przetnijmy krzywą prostymi równoległymi do asymptoty
(będą one przechodzić przez wspomniany punkt w nieskończoności )...
Można przyjąć za (x
0,y
0) punkt w nieskończoności
Na pewno będą przechodzić przez ten punkt w nieskończoności
Tu nasuwa się pytanie czym jest nieskończoność
Chodzi o to że Banaś zakazuje podstawień Eulera
Przeglądając Fichtenholza znalazłem taki rozkład dla funkcji trygonometrycznych
| R(u,v)−R(−u,v) | | R(−u,v)−R(−u,−v) | | R(−u,−v)+R(u,v) | |
R(u,v)= |
| + |
| + |
| |
| 2 | | 2 | | 2 | |
Wpadłem na pomysł aby znaleźć coś podobnego dla pierwiastka
25 paź 00:20
5-latek : jesli zakazuje to powimien pokazac co w zamian
25 paź 00:36
Mariusz:
Masz rację że powinien ale ...
Zostawmy podstawienia Eulera
Liczyłeś exponentę macierzy ?
Interesuje mnie sposób wykorzystujący raczej rozkład macierzy
niż macierz fundamentalną układu równań różniczkowych
Pisałeś coś w Pascalu lub w C
Chodzi mi o struktury danych
Tablica średnio się nadaje do współpracy z plikiem bo z góry trzeba znać jej rozmiar
Lepsza byłaby np lista ponieważ dostęp do do elementów listy tak jak i do pliku jest
sekwencyjny
a dodawanie elementów do listy ograniczone jest tylko ilością pamięci
Będzie to działać dla małych plików bo pamięci RAM jest ma ogół mniej niż tej dyskowej
25 paź 08:57
jc: Mariusz, do czego potrzebna Ci eksponenta macierzy?
Równania różniczkowe to jedno, ale są jeszcze grupy Liego, zastosowania w fizyce
statystycznej, ...
A co do wyboru struktury danych, to zaczynamy od określenia wykonywanych
operacji i wymagań związanych z zasobami i czasem wykonania.
25 paź 09:31
Mariusz:
Do innych zastosowań niż równania różniczkowe metoda z macierzą fundamentalną układu
powinna być dobra
Co do tej struktury danych to całkiem niedawno chciałem napisać program który
eliminowałby powtarzające się linie w pliku i struktura danych taka jak lista
wyeliminowałaby potrzebę wielokrotnego czytania pliku
25 paź 10:42
jc: Mariusz, z plikiem możesz postępować następująco:
dopisujesz kolumnę z kolejnymi numerami (czas n)
sortujesz wg oryginalnych wierzy (czas n ln n)
usuwasz powtarzające się wiersze (leżą kolo siebie, czas n)
sortujesz wg numerów (czas n)
usuwasz numery (czas n)
Każdą operację możesz wykonać gotowymi narzędziami.
Być może jest gotowiec na wszystko.
25 paź 11:13
b.: Wracając do podstawień Eulera, można je zastąpić podstawieniami:
gdy mamy √1−x2 −−> x = sin t lub x=cos t,
gdy mamy √1+x2 −−> x = sh t
gdy mamy √x2−1 −−> x = ch t.
25 paź 11:20
jc: b, Mariusz dobrze o tym wie, ale jest zachwycony podstawieniami Eulera.
Dodam, że w drugim przypadku można pozbyć się pierwiastka podstawiając x = tg t.
25 paź 11:29
Mariusz:
b tak ale te całki są wprowadzane po całkach z funkcji wymiernej to raz
a dwa jak ja chodziłem do szkoły to całki były jeszcze w średniej i nie było tam hiperbolicusów
Dlaczego jestem zachwycony podstawieniami Eulera − ponieważ sprowadzają one całki
z pierwiastkiem z trójmianu kwadratowego bezpośrednio do całek z funkcji wymiernych
Gdyby zakazać podstawień Eulera podobny efekt otrzymalibyśmy rozbijając całkę postaci
∫R(x,
√ax2+bx+c)dx na sumę całek postaci
∫R(x,
√ax2+bx+c)dx=
∫R
1(x)dx+
| | |
∫R2(√ax2+bx+c) |
| dx+ |
| √ax2+bx+c | |
| | | 1 | |
∫R3( |
| ) |
| dx |
| √ax2+bx+c | | (ax2+bx+c)√ax2+bx+c | |
Problemem może okazać się znalezienie takich funkcji R
1(x), R
2(x), R
3(x)
jc korzystając z twojego pomysłu ile razy będziemy musieli czytać plik
25 paź 12:40
5-latek : Mariusz
Nie znam sie na zdanym z Twoich problemow
Jednak czy z problemem z problemem z informatyki nie powinienes zwrocic sie na dobrym forum z
informatyki ?
Tak samo z calek . Mozesz napisac list (nie emalia do Pana/i Babas (nie weim kto to jest z
prosba o spotkanie w tej sprawie .
Przeciez z tego co wiem to sie juz nie uczysz i masz czas .. Pozdrawiam
25 paź 13:09
jc: Mariusz, ile razy widziałeś sensowne zastosowanie takich całek? Ja potrafię wymienić
koło 10. W połowie przypadków z różnych powodów lepiej podstawiać inaczej,
np. w problemie Keplera.
Co do ilości odczytywania pliku, to zależy jak zrealizujesz program, szczególnie sortowanie.
Czy interesuje jednokrotne wykonanie zadania? Jak duży jest Twój plik?
Czy zainteresowanie jest czysto teoretyczne?
25 paź 13:18
jc: Oczywiście liczby, nie ilości.
25 paź 13:25
Mariusz:
5−latek spróbuj zwrócić się z jakimkolwiek problemem na forum informatyczne
Zobaczymy co ci odpiszą
Jaki duży plik kilkaset do kilka tysięcy linii
Jeżeli chodzi o to ile razy czytać plik to najlepiej tylko raz
Co do tego programu to na dobrą sprawę program był nieco inny
ale przy pewnych założeniach dał się sprowadzić do tego co już kilka wpisów temu napisałem
Mamy plik A oraz plik B
Jako wynik wypisujemy linie które występują w pliku A
ale nie występują w pliku B
Wynik zapisujemy do pliku
Jeśli piszemy w C to ścieżki do plików możemy podawać z linii poleceń
Najlepiej by było gdybyśmy pliki czytali tylko raz
25 paź 14:20
jc: Sortujesz A i B.
Przesuwasz się równocześnie po A i B i wpisujesz do C, co trzeba.
Jedno przejście po każdym z plików A i B.
Pliki możesz posortować programem systemowym np. sort
Program w każdym momencie pamięta tylko linię z A i linię z B,
czyli wystarczy pamięć na dwie linie.
Nawet nie wiem, czy taki program trzeba pisać, czy nie wystarczy odpowiednie polecenie.
25 paź 14:51
52: jc programujesz w C++ ?
25 paź 14:53
jc: Pytaj, może akurat będę wiedział, ale teraz idę już do pracy.
Może Dziadek Mróz przeczyta.
25 paź 14:56
52: jc masz gg ? Albo coś takiego żeby na forum nie gadać ?
Ogólnie jest sprawa, że się cały czas uczę tego C++ i chciałbym, aby ktoś czasami coś sprawdził
podpowiedział itd.
25 paź 14:59
Mariusz:
Wracając do listy to kiedyś próbowałem ją napisać ale wyskoczył mi błąd segmentation fault
25 paź 21:15
jc: 52, nie mam gg, w C++ piszę teraz wyjątkowo, ale coś tam mi zostało.
Jest trochę przystępnych podręczników, ale język ciągle się rozwija.
Przypomnij, gdzie się uczysz.
25 paź 21:30
52: PWr, ale jeśli chodzi o programowanie to jestem noga i teraz sam sobie robie zadanka i klepie
kod.
25 paź 21:31
jc: Dobre były książki Grębosza. Nie wiem na ile aktualne.
25 paź 21:53
Mariusz:
Symfonia C++ standard to C++03
chociaż ostatnie wydanie jest z grudnia 2015
25 paź 22:36
hiko: do c++ polecam c++ stephena praty, bardziej dogłebna niż grębosz i bez zbędnego owijania w
bawełne
25 paź 23:10
Mariusz:
Jeśli chodzi o zadanie z 25 paź 14:20
to myślałem o dwóch listach , jedna byłaby znakowa i przechowywałaby jedną linię pliku
(nie wiemy jakiej długości jest linia i ile pamięci zaallokować na łańcuch który w C
jest tablicą znakową)
a druga lista przechowywałaby wszystkie linie pliku
Linia przechowywana byłaby oczywiście w łańcuchu ,
długość linii poznamy wczytując tę linię do listy
Można oczywiście do węzła listy dodać zmienną całkowitą przechowującą numer linii w pliku
Te dwie listy są po to aby czytać obydwa pliki tylko raz
Gdy próbowałem napisać taką listę to wyskakiwał mi błąd segmentation fault
Węzeł jednej listy mógłby wyglądać tak
struct wezel1
{
char znak;
struct wezel1 *nastepny;
};
Węzeł drugiej listy mógłby wyglądać tak
struct wezel2
{
int numer;
char* linia;
struct wezel2 *poprzedni;
struct wezel2 *nastepny;
};
Najpierw używamy listy jednokierunkowej aby poznać długość linii
i przekopiować ją do tablicy znakowej znajdującej się w węźle listy dwukierunkowej
Po przekopiowaniu zawartości listy znakowej do
tablicy znakowej znajdującej się w węźle listy dwukierunkowej listę jednokierunkową usuwamy
Tylko jak napisać funkcje obsługujące te listy
Jak próbowałem napisać takie funkcje to dostawałem błędy jak segmentation fault
26 paź 09:39
jc: Oto program, który czyta dwa uporządkowane pliki aa.txt, bb.txt i wypisuje
linie (słowa) z pliku aa.txt, których nie ma w pliku bb.txt.
Pliki powinny być posortowane, co możesz zrobić jakim narzędziem systemowym.
Czy o to chodziło?
−−−−−
#include<stdio.h>
#include<string.h>
int main(){
FILE *fa = fopen("aa.txt", "r");
FILE *fb = fopen("bb.txt", "r");
char s[100], t[100];
int aa, bb;
aa=fscanf(fa, "%s", s);
bb=fscanf(fb, "%s", t);
while(aa==1 && bb==1){
if( strcmp(s,t) < 0 ){
printf("%s\n", s);
aa=fscanf(fa, "%s", s);
} else if(strcmp(s,t) > 0)
bb=fscanf(fb, "%s", t);
else {
aa=fscanf(fa, "%s", s);
bb=fscanf(fb, "%s", t);
}
}
while( aa==1 ){
printf("%s\n", s);
aa=fscanf(fa, "%s", s);
}
fclose(fa);
fclose(fb);
return 0;
}
26 paź 20:31
Mariusz:
Z grubsza tak ale linia może zawierać spacje
Poza tym czy ja wiem czy sortowanie narzędziami systemowymi to dobry pomysł
Dlaczego chciałem wczytywać plik do pamięci − aby czytać każdy z plików tylko raz
Dlaczego chciałem użyć listy −
ponieważ nie znamy ani liczby znaków w linii, ani nie znamy liczby linii w pliku
26 paź 22:21
Mariusz:
jc a może ty podaj przykład zagadnienia do którego rozwiązania użyłbyś listy
albo struktur na niej opartych jak stos czy kolejka
26 paź 22:27
jc: Stos kojarzy mi się głównie z podprogramami. Własny stos można użyć
do zamiany zwykłej notacji na odwrotną polską, do interpretera programów w odwrotnej
notacji (są języki programowania wykorzystujące taką notację np. postscrpt).
Kolejki można użyć do programie porównującym pliki
(kiedyś użyłem w tym celu kolejki cyklicznej).
Kilka razy użyłem kolejki priorytetowej (sortowanie, kody Huffmana, minimalne drzewo
rozpinające, może coś jeszcze).
Kiedy uczyłem algorytmów, zdarzało mi się implementować struktury wskaźnikowe
(zwykle drzewa).
26 paź 22:50
jc: O programie, jak chcesz czytać wierszami, musisz zmienić instrukcje czytania i pisania.
26 paź 22:52
Mariusz:
Napisać program który poda liczbę znaków w każdej linii
i liczbę linii w danym pliku a wyniki zapamięta
27 paź 09:29
jc: Program liczy wszystkie znaki w linii, łącznie ze znakiem przejścia no nowej linii.
Może łatwo modyfikować program tak, aby liczył to, co chcesz.
−−−−−−−−−−−−−−−−−−−−−−−
#include<stdio.h>
int main(){
int n = 0;
int k = 0;
int c;
while( (c=getchar())!= EOF ){
k++;
if( c=='\n' ){
n ++;
printf("%d %d\n", n, k);
k=0;
}
}
return 0;
}
27 paź 11:33
Mariusz:
Tylko jak te dane zapamiętać bez listy
skoro musimy wiedzieć ile pamięci zaallokować jeśli chcemy używać tablicy
Mając liczbę znaków w każdej z linii oraz liczbę linii w pliku
można wczytać plik do tablicy
Ścieżkę do pliku można podać jako argument funkcji main
27 paź 12:25
Mariusz:
Oto jak zmieniłem twój kod
int main(char argc char** argv)
FILE *in;
if ((in = fopen(argv[1], "rt"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return 1;
}
getchar() zamieniłem na getc(in)
fclose(in) − tuż przed return 0;
i wydaje się działać
Programik wywoływać możemy tak
nazwa programu ścieżka do pliku [>> plik z wynikiem ]
to w nawiasie kwadratowym jest opcjonalne gdybyśmy chcieli uzyskane dane dalej wykorzystać
27 paź 13:17
Mariusz:
Problem z tym kodem jest taki że że liczbę linii w pliku znamy dopiero na końcu działania
programu ale aby wczytać plik do tablicy tę liczbę powinniśmy znać na początku
27 paź 13:46
Mariusz:
Jakiś czas temu napisałem program rozwiązujący problem Flawiusza na tablicy
oid table(int n,int k,int* t)
{
int i,s,c;
for(i=0; i<n; i++)
t[i]=1;
s=0;
c=n;
i=0;
while(c>=k)
{
s+=t[i];
if(s==k)
{
t[i]=0;
s=0;
c−−;
}
i=(i+1)%n;
}
}
Podobno można go napisać na liście cyklicznej
28 paź 18:59