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