matematykaszkolna.pl
petla while n: mam problem z tym fragmentem double x0=0.0, xk=3.0,h=0.1, x; x=x0; while(x<xk) { printf("%lf\n",x); if(x==2); break; } nie wiem dlaczego mi nie przerywa petli tylko drukuje do 3
25 maj 23:16
Nienor: W zasadzie to ta pętla powinna być nieskończona, chyba, że coś tam jest o zmienianiu się x0. Po co if w środku while Po co x=x0
25 maj 23:48
Nienor: I co w ogóle chcesz osiągnąć tym programem
25 maj 23:48
n: sory tam jest po break x+=h; chce zeby jak osiągnie 2 to wszedł do drugiej petli,ale z tym sobie poradze,ale ten warunek mi sie nie spelnia
26 maj 00:06
n: mam rozwiązac dane rownanie rozniczkowe metoda rk4, dla zmieniającego sie parametru i chwili 3s, myslalem zeby w while zrobić rózniczkowanie dla alfy np 0.01, a potem w petli dla alfy 0.01........1.0
26 maj 00:10
Nienor: Na pętli for chyba by to ładniej szło. A pętli ci nie przerywa, tylko drukuje do 3, bo break wyrzuca cię z pętli if, z powrotem do pętli while, w której ma marszować do 3, więc marszuje.
26 maj 00:33
Nienor: Jak chcesz, żeby cię wywaliło w konkretne miejsce, to używasz goto. Na pętli for: double x; for(x=0.0; x<=2.01; x=x+0.01) printf("%lf", x); Dochodzi do 2.
26 maj 00:38
n: ok dzięki a mam jescze jedno pytanie, znalazlem numerycznie przebieg omegi i alfy w czasie i mam teraz znależc okres, tylko jak?
26 maj 00:46
Nienor: Nie jestem pewna. Może da się to zrobić z definicji (chodzi o to, żeby znaleźć co ile jest równe tyle samo)
26 maj 00:51
n: a może znaleźć miejsce zerowe z pewną niedokladnosci tj w przedziale x>−0.01 &&x<0.01, a potem pomnożyć przez dwa, tylko że nie mam pewności czy trafi w tym przedziale rozwiązanie i ile ich bedzie
26 maj 00:54
asdf: ja bym nie uzywal wartosci zmiennoprzecinkowych w petlach...złe podejście
26 maj 01:12
asdf: chodzi o argumenty w nawiasach, tu: for(...)
26 maj 01:13
n: ma ktos lepszy pomysł?
26 maj 01:21
asdf: a jak tak bardzo chcesz na petli while dzialac (bez poprawiana doubli itd..)to: double x0=0.0; double xk=3.0; double tmp=0; h=0.1, x; x=x0; while(x<xk) { printf("%lf\n",x); if(x==2){ tmp = x; // zapisz do zmiennej pomocniczej x=xk+x; // 2+3.0 = 5..czyli przerwie pozniej petle } x = x + h; } if(!tmp){ // jak tmp != 0 x=tmp; // zamieniasz x na to co wczesniej przypisales, przed zamiana x na x+xk } i dzialasz dalej na tym x emotka
26 maj 01:21
asdf: co to goto − to jest tylko po to, by tego nie używać Kiedys tego uzywali i jakoś wycofać im sie nie chce, ale kladzie sie nacisk na to, by tego nie uzywac.
26 maj 01:24