Skocz do zawartości


Zdjęcie

[C] nie działająca pętla


  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 tomix91

tomix91
  • Użytkownicy
  • 1 postów

Napisano 06 grudzień 2011 - 11:05

Witam mam do wykonania projekt który liczy z daną przez użytkownika dokładnością wyrazy szeregu newtona (1+x)^1/2 tutaj jest WZÓR i zrobiłem to tak:
double s,x,w,eps;
double xp,xk,dx; 
int i;

int main()
{
printf("Podaj x początkowe, x końcowe, skok i dokładność\n")<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />      
scanf("%lf%lf%lf%lf",&xp,&xk,&dx,&eps)<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
for(x=xp;x<=xk;x+=dx){
i=0;
w=1;
s=0;
while(fabs(w)>eps){
s=s+w;
i++<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
w=w*(0.5-i+1)*pow(x,i)/i; /*WZÓR GŁOWNY ---------------------------------------*/
}
printf("s\t\tx\t\tspr\n")<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
printf("%lf\t%lf\t%lf\n",s,x,pow(1+x,1./2))<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
printf("%d wyraz dał takie przybliżenie\n",i)<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
}
return 0;
}
Chodzi mi o to że jak wzór główny jest bez tej potęgi to wykonuje się pętla cała a jak jest z (czyli tak jak jest powinno być) to liczy pierwszy wyraz i później się program zatrzymuję i czeka na nie wiadomo co.
  • 0


#2 magik092

magik092
  • Użytkownicy
  • 1555 postów

Napisano 06 grudzień 2011 - 12:30

Coś w tym kodzie mi się nie podoba, spójrz
    for(x=xp;x<=xk;x+=dx)
    {
        i=0;
        w=1;
        s=0;
        while(fabs(w)>eps){ //>=, inaczej pętla nigdy się nie wykona choć trzeba jeszcze popracować nad pomysłem
            s=s+w;
            i++<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
            w=w*(0.5-i+1)*pow(x,i)/i; /*WZÓR GŁOWNY*/
        }
        printf("s\t\tx\t\tspr\n")<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />
        printf("%lf\t%lf\t%lf\n",s,x,pow(1+x,1./2))<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />//   while nigdy się nie wykona, s się nie zmienia = 0
        printf("%d wyraz dal takie przyblizenie\n",i)<img src='http://forum.pcfoster.pl/public/style_emoticons/<#EMO_DIR#>/disagree.png' class='bbc_emoticon' alt=';' />// jak wyżej, i się nie zmienia = 0
    }

Poza tym nie twórz zmiennych globalnych :)
  • 0

Dołączona grafika


#3 Duath

Duath
  • Redaktorzy
  • 2117 postów
  • Lokalizacja404

Napisano 06 grudzień 2011 - 18:08

Na moje oko, zmienną x we wzorze ogólnym podmieniłbym na inną.
  • 0

Intel i5-3570K @ 4.2GHz | ASRock Z77 Extreme4 | Corsair Vengeance LP 16GB | Radeon HD7870 | Samsung 840 Pro 128GB | Samsung F3 1TB | Xonar DG | OCZ ModXStream Pro 500W
 

Duath


#4 jarex_67

jarex_67
  • Użytkownicy
  • 151 postów

Napisano 29 sierpień 2017 - 18:20

Spróbuj tutaj jest fajne szkolenie http://geek-on.pl :)


  • 0


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych