Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyj±tek www.elektroda.pl do Adblock.
Dzięki temu, że ogl±dasz reklamy, wspierasz portal i użytkowników.

[C] Sum± szeregu 55-ciu wyrazów.

knopersik14 16 Wrz 2010 18:43 1626 11
  • #1 16 Wrz 2010 18:43
    knopersik14
    Poziom 9  

    Witam muszę napisać program w c który będzie liczył co¶ takiego 1+1/4+1/8..... i tak 55 wyrazów.

    Zaczełem sam i wychodzi mi co¶ takiego jestem z tego zielony dlatego proszę o pomoc.

    Code:
    #include<stdio.h>
    
    #include<stdlib.h>
    int main(){

    do{
    double a=4.0,wynik,suma;

    wynik=(1/a)+wynik;

    }
    while(a<=216){
    printf("suma wynosi %f", suma);
    }
    system("pause");
    return 0;
    }


    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0 11
  • #2 16 Wrz 2010 19:03
    Łagu
    Poziom 11  

    knopersik14 napisał:
    Witam muszę napisać program w c który będzie liczył co¶ takiego 1+1/4+1/8..... i tak 55 wyrazów.

    I czego w zwi±zku z tym oczekujesz ?

    Ci±g trochę mało precyzyjnie okre¶lony, to ma być:
    1+1/4+1/8+1/12 czy 1+1/4+1/8+1/16, a może jeszcze inaczej?

    0
  • #3 16 Wrz 2010 19:05
    knopersik14
    Poziom 9  

    sorry to ma być 1+1/4+1/8+1/12

    0
  • #4 16 Wrz 2010 19:14
    Łagu
    Poziom 11  

    Brakuje Ci w tym kilku rzeczy.
    "1+1/4+1/8+1/12"
    1. nie masz pocz±tkowej 1 w wyniku.
    2. "a" nie ulega zmianie co krok.
    3. "printf("suma wynosi %f", suma);" powinno być chyba co¶ inne go niż suma lub powinna ona być gdzie¶ okre¶lona.

    0
  • #5 16 Wrz 2010 19:21
    knopersik14
    Poziom 9  

    Czyli jak dobrze rozumiem będzie co¶ takiego:

    Code:
    #include<stdio.h>
    
    #include<stdlib.h>
    int main(){
    double a=4.0, wynik=1, suma;
    while(a<=54){
      wynik=1+1/a + wynik;
        a = a+4;
        suma=wynik;
    printf("suma wynosi %f", suma);
    }
    system("pause");
    return 0;
    }

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0
  • #6 16 Wrz 2010 19:27
    Łagu
    Poziom 11  

    Prawie dobrze tylko tym razem jedynkę wstawiłe¶ dwukrotnie.
    Zmienna "a" ma wynosić ostatecznie 54 ? chyba nie wcze¶niej pisałe¶ 216 i to powinno być raczej tyle ale nie sprawdzałem. Je¶li chcesz żeby było wyliczone, że to już 54 wyraz sumy musisz zastosować kolejn± zmienna i inkrementować j±.

    0
  • #7 16 Wrz 2010 19:31
    knopersik14
    Poziom 9  

    znalazłem bł±d teraz powinno być co¶ takiego tylko czy może kto¶ sprawdzić:

    Code:
    #include<stdio.h>
    
    #include<stdlib.h>
    int main(){
    double a=4.0, wynik=0, suma;
    while(a<=216){
      wynik=1/a + wynik;
        a = a+4;
        suma=wynik;
    }
    printf("suma wynosi %f", suma);

    system("pause");
    return 0;
    }

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    "Do trzech razy sztuka" - kolejny post bez znaczników CODE w odpowiednim miejscu, zostanie nagrodzony ostrzeżeniem! - arnoldziq

    0
  • #8 16 Wrz 2010 19:39
    Łagu
    Poziom 11  

    Code:
    #include<stdio.h> 
    
    #include<stdlib.h>
    int main(){
    double a=4.0, wynik=0, suma;

    while(a<=216){
    wynik=1+1/a + wynik;
    a = a+4;
    suma=wynik;

    printf("suma wynosi %f", suma);

    }

    system("pause");
    return 0;
    }

    "printf("suma wynosi %f", suma);" powinno być za klamr±, przed "system("pause");"
    Gdy jest przed klamr± to znajduje się w pętli "while" i w każdym jej kroku jest wykonywane to polecenie.

    0
  • #9 16 Wrz 2010 19:40
    knopersik14
    Poziom 9  

    Wiem już poprawione i działa dzięki za pomoc

    0
  • #10 16 Wrz 2010 20:09
    Mad.
    Poziom 18  

    Działa, ale błędnie ;)

    1 iteracja pętli while:
    wynik = 1+1/4+0 = 1+1/4

    2 iteracja
    wynik = 1+1/8+1+1/4 = 1+1+1/4+1/8

    n iteracja
    wynik = 1+1+1+1+1...... 1/4+1/8+1/12......

    Chyba już widzisz o co biega ;) Inna sprawa to wyliczenie, kiedy będzie 55 wyrazów jest mało eleganckie. Przykładowo, zrób program, który będzie to samo wykonywał dla 187 wyrazów. Znowu będziesz liczyć na piechotę i wstawiać do while jak±¶ warto¶ć? Tak jak napisał Łagu, zastosuj jeszcze jedn± zmienn±, któr± będziesz inkrementować w kolejnych iteracjach pętli. Jej warto¶ć będziesz sprawdzać w while. Poza tym stosuj wcięcia, aby kod był przejrzysty.

    0
  • #11 16 Wrz 2010 21:39
    robotyka
    Poziom 10  

    Ja użył bym pętli for i wtedy będzie bardziej elegancko, poza tym jako¶ nie widzę żeby pierwszy wyraz był stworzony analogicznie jak pozostałe więc proponowałbym wył±czyć go z pętli i zsumować oddzielnie na pocz±tku

    Code:

    double wynik=0;

    /*Policzenie 1 wyrazu */
    wynik = wynik + 1 (pierwszy wyraz)

    /*Policzenie wyrazów od 2 do 55*/
    for (i = 2;i<55;i++)
    {
    wynik = wynik + 1/(4*(i-1))
    }

    W kodzie dałem (a-1) zamiast iterować od 1 do 54 - bo uważam że kod jest czytelniejszy.

    0
  • #12 16 Wrz 2010 21:49
    Mad.
    Poziom 18  

    Wystarczy ustawić warto¶ć pocz±tkow±, wynik = 1 i liczenie pierwszego wyrazu nie jest potrzebne.

    0