Algorytm obliczający sumą liczb parzystych i nieparzystych

0

Chciałem zrobić program polegający na obliczaniu sumy liczb parzystych i nieparzystych do liczby n.
Po wpisaniu liczby program wyłącza się. Co zrobiłem źle?
Proszę o pomoc.

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int sp = 0; //suma liczba parzystych
int snp = 1; //suma liczba nieparzystych
int p; //liczba parzysta
int n = 1; //liczba nieparzysta
int a; //liczba n
cout<< " Program obliczajacy sume liczb parzystych i nieparzystych"<<"\n";
cout<< " oddzielnie do liczby n"<<endl;
cout<< " Podaj liczbe n=";
cin >> a;

if(n>a)
{
 snp-=n;
     if(p>a)
     {
       sp-=p;
    
       cout<<"Suma liczb nieparzystych wynosi: "<<snp<<endl;
       cout<<"Suma liczb parzystych wynosi: "<<sp<<endl;
       system("PAUSE");         
       return EXIT_SUCCESS; 
     }
     else
     {
       p+=2;
       sp+=p;  
     }         
}
else
{
  n +=2;
  snp+=n;  
}

}

0

Zastanów się, co ten kod robi. Przykładowo przeanalizuj, co się dzieje, gdy podasz z konsoli 10.

0

Gdy podaje obojętnie jaką liczbę dodatnią program wyłącza się, a gdy podam 0 lub niezależnie jaką minusową w sumie liczb nieparzystych pokazuje 0 a w parzystych -2293672

0

Aha no tak. if to pętla jednorazowa i musze zastosować inną.
A skrypt wygląda tak:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int sp = 0; //suma liczba parzystych
int snp = 1; //suma liczba nieparzystych
int p = 0; //liczba parzysta
int n = 1; //liczba nieparzysta
int a; //liczba n
cout<< " Program obliczajacy sume liczb parzystych i nieparzystych"<<"\n";
cout<< " oddzielnie do liczby n"<<endl;
cout<< " Podaj liczbe n=";
cin >> a;

while(n<=a)
{
n+=2;
snp+=n;
}
while(p<=a)
{
p+=2;
sp+=p;
}
snp-=n;
sp-=p;

cout<<"Suma liczb nieparzystych wynosi: "<<snp<<endl;
cout<<"Suma liczb parzystych wynosi: "<<sp<<endl;
system("PAUSE");         
return EXIT_SUCCESS;

}

Temat do zamknięcia

0
zalskill napisał(a)

Aha no tak. if to pętla jednorazowa i musze zastosować inną.
if to NIE jest pętla

0

JA Zaproponuje wzór matematyczny szybciej i prościej :P
Suma ciągu arytmetycznego :P z r=2 odpowiednia dla a1=1 dla nieparzystych lub a1=2 dla parzystych :)

0
Gelldur napisał(a)

JA Zaproponuje wzór matematyczny szybciej i prościej :P
Suma ciągu arytmetycznego :P z r=2 odpowiednia dla a1=1 dla nieparzystych lub a1=2 dla parzystych :)

Nie tylko o to chodzi w zadaniu ;)

0

Wiem, że temat już praktycznie zakończony, ale po co tyle kodu...

#include <iostream>

using namespace std;

int main(int arg, char **argv)
{
    int n, z;
    int pa = 0;
    int np = 0;
    cout << "Podaj n= ";
    cin >> n;
    
    for (int i = 1; i <= n; i++)
    {
	z = i % 2;
	if (z == 0)
	    pa++;
	else
	    np++;
    }
    
    cout << "Suma liczb parzystych dla zakresu od 1 do " << n << endl;
    cout << "Liczb parzystych: " << pa << endl;
    cout << "Liczb nieparzystych: " << np << endl;

    return 0;
}
0

To ja jeszcze trochę skrócę i poprawię idiotyczne błędy.

#include <iostream>

using namespace std;

int main(int arg, char **argv)
{
    int n;
    int pa = 0;
    int np = 0;
    cout << "Podaj n= ";
    cin >> n;

    for (int i = 1; i <= n; i++)
    {
        if ((i % 2) == 0)
            pa+=i;
        else
            np+=i;
    }

    cout << "Suma liczb parzystych z zakresu od 1 do " << n << " " << pa << endl;
    cout << "Suma liczb nieparzystych z zakresu od 1 do " << n << " " << np << endl;

    return 0;
}
0
bo napisał(a)

To ja jeszcze trochę skrócę i poprawię idiotyczne błędy.

#include <iostream>

using namespace std;

int main(int arg, char **argv)
{
    int n;
    int pa = 0;
    int np = 0;
    cout << "Podaj n= ";
    cin >> n;

    for (int i = 1; i <= n; i++)
    {
        if ((i % 2) == 0)
            pa+=i;
        else
            np+=i;
    }

    cout << "Suma liczb parzystych z zakresu od 1 do " << n << " " << pa << endl;
    cout << "Suma liczb nieparzystych z zakresu od 1 do " << n << " " << np << endl;

    return 0;
}

Idiotyczne ? A wydajnościowo jak to się ma do tego powyżej ? Które instrukcje zajmują więcej czasu procesora ? Rzuć listingiem asm z wyjaśnieniem linijek, chętnie przyjrzę się tym błędom, i być może ustrzegę się ich w przyszłości.

0

Nie miałem na myśli wydajności, tylko idiotyczne obliczenia.

        if (z == 0)
            pa++;  //WTF?
        else
            np++;  //WTF?
0

Panie bardzo wydajny "Pocotylekodu" Pana pierwszy program nie działa i nawet nie muszę go wrzucać w kompilator żeby to stwierdzić, bo kosztem "wydajności"(Buhahaha) zapomniał Pan o treści zadania...

0
Sid_ napisał(a)

Panie bardzo wydajny "Pocotylekodu" Pana pierwszy program nie działa i nawet nie muszę go wrzucać w kompilator żeby to stwierdzić, bo kosztem "wydajności"(Buhahaha) zapomniał Pan o treści zadania...

Dobra to nie mądruj tylko zarzuć coś od siebie :)

0

Nie muszę, bo problem został już rozwiązany, a dorzuciłem swoje 3 grosze bo właśnie się mądrowałeś... To:
for (int i = 1; i <= n; i++)
{
if ((i % 2) == 0)
pa+=i;
else
np+=i;
}

wystarczy.

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