• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

suma ciągu arytmetycznego wykonana za pomocą pętli for, język C

Aruba Cloud - Virtual Private Server VPS
0 głosów
3,168 wizyt
pytanie zadane 23 listopada 2017 w C i C++ przez Bartek Kotarski Początkujący (480 p.)

Witam

Chciałem stworzyć program w języku C, który będzie obliczał sumę ciągu arytmetycznego za pomocą pętli for. Użytkownik podaje jedynie wyraz początkowy, różnice(czyli o ile ciąg ma się zwiększać), oraz wyraz końcowy. W moim programiku jest taki problem, że wynik końcowy nie bierze pod uwagę pierwszego wyrazu początkowego. np dla wyrazu początkowego 2, różnicy 2 i wyrazu końcowego 10 wynik wynosi 28 a powinien 30. Wie ktoś jak można to poprawić ? 

 

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int poczatek,roznica,koniec,wynik=0,i,ilosc_sumowan;
    printf("Podaj wyraz od ktorego chcesz rozpoczac ciag arytmetyczny\n");
    scanf("%d", &poczatek);
    printf("Podaj wyraz o ile ciag arytmetyczny ma sie zwiekszac\n");
    scanf("%d", &roznica);
    printf("Podaj ostatni wyraz ciagu\n");
    scanf("%d", &koniec);
    ilosc_sumowan=(koniec-poczatek)/roznica;
    for(i=0;i<ilosc_sumowan;i++)
    {

        poczatek=poczatek+roznica;
        printf("poczatek %d\n",poczatek);
        wynik+=poczatek;
        printf("wynik %d\n\n",wynik);
    }

    printf("Wynik wynosi %d", wynik);
    return 0;
}

 

komentarz 23 listopada 2017 przez Piotr Batko Stary wyjadacz (13,210 p.)

Wiem, że już rozwiązane, ale mogłeś też między linijki 13 i 14 wstawić to :)
wynik = poczatek;

1 odpowiedź

+2 głosów
odpowiedź 23 listopada 2017 przez k222 Nałogowiec (30,150 p.)

1. 

ilosc_sumowan=(koniec-poczatek)/roznica;

z twojego przykładu wychodzi (10-2)/2 = 4 a powinno być 5 bo 2+4+6+8+10

2.

poczatek=poczatek+roznica;

 wynik+=poczatek;

tutaj już przy pierwszym przejściu masz poczatek = 2+2 (= 4) więc nie uwzględniasz pierwszego wyrazu, bo od razu do niego dodajesz różnicę, czyli zaczynasz od drugiego wyrazu 

komentarz 23 listopada 2017 przez Bartek Kotarski Początkujący (480 p.)
Hmm faktycznie, a jak wykonać aby pętla uwzględniała pierwszy wyraz ? Jestem osobą początkującą, więc sporo nauki jeszcze przede mną.
2
komentarz 23 listopada 2017 przez k222 Nałogowiec (30,150 p.)

No dobra - po pierwsze liczba wyrazów:

ilosc_sumowan=(koniec-poczatek)/roznica;
ilosc_sumowan += 1;

bo przy tej metodzie liczenia wyrazów zawsze wyjdzie ci o jeden mniej, i ten 1 musisz dodać, teraz co do wyniku:

for(i=0;i<ilosc_sumowan;i++)
    {
        wynik+=poczatek;
        printf("poczatek %d\n",poczatek);
        poczatek=poczatek+roznica;
        printf("wynik %d\n\n",wynik);
    }

wystarczy wynik+=poczatek; i poczatek += roznica; zamienić miejscami tak, zey najpierw dodawało element a potem liczyło następny, wtedy policzy Ci także pierwszy

komentarz 23 listopada 2017 przez Bartek Kotarski Początkujący (480 p.)
Dziękuję bardzo !

Podobne pytania

0 głosów
1 odpowiedź 371 wizyt
–5 głosów
1 odpowiedź 246 wizyt
pytanie zadane 16 maja 2017 w C i C++ przez KacperKow Nowicjusz (180 p.)
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 30 sierpnia 2016 w C i C++ przez Miki Bywalec (2,480 p.)

93,327 zapytań

142,323 odpowiedzi

322,397 komentarzy

62,658 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...