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

Język c - suma kolejnych liczb całkowitych z zakresu od N1 do N2

0 głosów
6,818 wizyt
pytanie zadane 27 października 2017 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam

Jestem studentem pierwszego roku informatyki i rozpocząłem naukę programowania w języku C.

Ostatnio na laboratoriach otrzymałem zadanie o treści:  Policz sume kolejnych liczb calkowitych z zakresu od N1 do N2 (N1<N2).
Przykładowo dla liczb 1 i 3 suma wynosi 1+2+3=6.Nie za bardzo wiem jak zrobić tom sumę czyli 

jak zrobić żeby jak np. podam liczbę n1=5 oraz liczbę b=7 to żeby program obliczył mi sumę 5+6+7.Czy ktoś mógłby mi to wytłumaczyć.Dodam jeszczę że program muszę napisać w języku c  a nie c++.Pozdrawiam

2 odpowiedzi

+2 głosów
odpowiedź 27 października 2017 przez Maniti Obywatel (1,220 p.)
wybrane 27 października 2017 przez mn130496
 
Najlepsza

możesz to zrobić np tak 

1. pobierasz n1, n2 

2. deklarujesz zmienną z sumą i zerujesz ją 

3. tworzysz pętlę np. for która będzie zaczynać się od n1 a kończyć na n2 

for(int i = n1; i<= n2; i++)

4. w pętli do sumy dodajesz zmienną i (deklarowaną w pętli) 

5. wypisujesz wynik (zmienną suma) 

komentarz 27 października 2017 przez mn130496 Gaduła (3,530 p.)

ok dziękuje zrobiłem to zadanie ale mi nie działa.Gdy wpisuje 1 i 3 to wyświetla mi 13.Możesz zobaczyć co mam źle?.

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

int main(void)
{
    int n1;
    int n2;
    int i;
    int suma;
    suma=0;
    printf("Podaj liczbę calkowita n1: ");
    scanf("%d", &n1);
    printf("Podaj liczbe calkowita n2: ");
    scanf("%d", &n2);
    for (i=n1;i<n2;i++)
    {
        suma=suma+i;
        printf("%d",suma);
    }

    return (0);
}

 

komentarz 27 października 2017 przez Maniti Obywatel (1,220 p.)
1. w pętli warunek mniejsze równe bo ostatnią liczbę też ma zsumować np,

n1 = 1, n2 = 3 to wykona się dla 1 i 2 a ma dla 1, 2, 3 z tą (<=)

i możesz deklarować interator pętli w pętli  

czyli for(int i = n1; i <= n2; i++)

2.  wypisujesz wartość sumy w pętli a powinieneś po pętli
+1 głos
odpowiedź 16 stycznia 2018 przez J0ker Pasjonat (15,530 p.)
Rozwiązanie zaproponowane przed Pana Maniti jest dobre, ale można to zrobić lepiej.

Wykorzystaj wzór 1+2+3...+n=n(n+1)/2 (możesz go udowodnić indukcyjnie, jeśli nie wierzysz mi, że to prawda)

Zatem suma n1+n1+1+n1+2...+n2= n2(n2+1)/2 -((n1-1)*n1)/2

(Od sumy liczb 1+...+n2 odejmujesz sumę liczb 1+...+n1-1 i w ten sposób otrzymujesz sumę n1+...+n2.

Wykonujesz tutaj tylko 7 działań - 2 dodawania, 2 mnożenia, 2 dzielenia i 1 odejmowanie. Natomiast naiwne

dodawanie tych liczb rośnie liniowo i dla n2-n1>7 mój sposób będzie lepszy i będzie coraz lepszy wraz ze wzrostem

tej różnicy.

Pozdrawiam

Podobne pytania

0 głosów
2 odpowiedzi 5,260 wizyt
pytanie zadane 20 października 2018 w C i C++ przez Drax Użytkownik (630 p.)
0 głosów
1 odpowiedź 2,719 wizyt
0 głosów
1 odpowiedź 558 wizyt

93,600 zapytań

142,525 odpowiedzi

322,993 komentarzy

63,085 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

Kursy INF.02 i INF.03
...