Zadanie z sumą liczb parzystych, mały problem

0

Witajcie
Dopiero zaczynam przygodę z C++, natrafiłem na zadanie, w którym program ma sumować liczby parzyste od podanej do -50 (trochę bez sensu, ale okej). Postanowiłem troche je zmodyfikować, każąc programowi wyświetlać która to liczba. I tutaj natrafiłem na problem - dlaczego program usilnie zaczyna wyświetlać dopiero od liczby mniejszej o 1 w stosunku do podanej? Oczywiście dało się to rozwiązać w ten sposób

cout <<numer<<". "<< liczba+1<<endl;

Ale raz że no nie jest to jak mniemam najbardziej optymalne rozwiązanie, a dwa - to zaburza wynik sumy, bo przykladowo jeśli użytkownik wpisze "4" to owszem, na ekranie pojawi się od 4, ale sumować zaczyna od 3.

Kod:

#include <iostream>
using namespace std
int numer=0,liczba,suma=0;

int main()
{
    cout << "Podaj od ktorej liczby chcesz wyswietlac: ";
    cin >> liczba;
   while (liczba>-50)
    {
    numer++;
    liczba--;
     cout <<numer<<". "<< liczba<<endl;
     if (liczba%2==0)
        suma=suma+liczba;
    }
        cout <<"Suma liczb parzystych jest rowna "<< suma<<endl;
 return 0;
} 

Rozumiem, że po prostu program od razu uruchamia pętlę schodząc o jedną liczbę w dół, ale dalej nie umiem na to nic zaradzić.

1

Możesz użyć pętli for rosnącej lub malejącej lub podobnie używając pętli while, przy okazji pozbywając się zmiennych globalnych.

#include <iostream>

using namespace std;

int main()
{
   const int limit {-50};

   int liczba {0} , number {0} , suma1 {0} , suma2 {0} , suma3 {0} , suma4 {0};

   cout << "Podaj od ktorej liczby chcesz wyswietlac: " << endl;
   cin >> liczba;

   for( int i=limit ; i<=liczba ; ++i )
   {
       if( i%2 == 0 ) suma1 += i;
       cout << "numer = " << i-limit+1 << " : liczba = " << i << " : suma = " << suma1 << endl;
   }

   cout << endl;

   for( int i=liczba ; i>=limit ; --i )
   {
       if( i%2 == 0 ) suma2 += i;
       cout << "numer = " << liczba-i+1 << " : liczba = " << i << " : suma = " << suma2 << endl;
   }

   cout << endl;

   number = liczba;
   while( number >= limit )
   {
       if( number%2 == 0 ) suma3 += number;
       cout << "numer = " << liczba-number+1 << " : liczba = " << number << " : suma = " << suma3 << endl;
       --number;
   }

   cout << endl;

   number = limit;
   while( number <= liczba )
   {
       if( number%2 == 0 ) suma4 += number;
       cout << "numer = " << number-limit+1 << " : liczba = " << number << " : suma = " << suma4 << endl;
       ++number;
   }

   cout << endl;
   cout << "for malejace   : Suma1 liczb parzystych jest rowna " << suma1 <<endl;
   cout << "for rosnace    : Suma2 liczb parzystych jest rowna " << suma2 <<endl;
   cout << "while malejace : Suma3 liczb parzystych jest rowna " << suma3 <<endl;
   cout << "while rosnace  : Suma4 liczb parzystych jest rowna " << suma4 <<endl;
   return 0;
}
0

Dzieki wielkie że Ci się chciało :D Jest to dla mnie coś nowego, i będę sobie analizował powoli. Czyli nie da się wprowadzić jakiejś drobnej modyfikacji do mojego kodu, żeby jak użytkownik wpisze 4 to żeby się wyświetlało i sumowało od 4?

1
Bartek Porwisz napisał(a):
   while (liczba>-50)
    {
    numer++;
    liczba--;
     cout <<numer<<". "<< liczba<<endl;
     if (liczba%2==0) suma=suma+liczba;
    }

Najpierw zmniejszasz wartość zmiennej liczba, a dopiero potem ją wypisujesz i dodajesz do sumy. Po prostu przesuń dekrementację.

1 użytkowników online, w tym zalogowanych: 0, gości: 1