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
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