Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program liczący sumę liczb naturalnych wyświetla liczby ujemne

Ostatnio zmodyfikowano 2015-01-25 09:42
Autor Wiadomość
triglavv
Temat założony przez niniejszego użytkownika
Program liczący sumę liczb naturalnych wyświetla liczby ujemne
» 2015-01-25 00:37:05
Program ma obliczać sumę liczb całkowitych od 1 do 1 000 000. W trakcie sumowania, po sumowaniu każdych kolejnych 85 liczb, ma wyświetlać aktualną sumę.
Wydaje mi się, że wszystko jest w porządku, ale jak napisałem w temacie, skompilowany program wyświetla liczby ujemne i ogólnie sumy są oderwane od rzeczywistości. Wiem, że problem jest zapewne banalny, ale nie piętnujcie mnie, w końcu każdy kiedyś zaczynał.

C/C++
#include<iostream>
using namespace std;
int main()
{
    int suma = 0;
    for( int i = 1; i <= 1000000; i++ )
    {
        suma = suma + i;
        if( i % 85 == 0 )
        {
            cout << suma << endl;
        }
    }
    system( "pause" );
    return 0;
}
P-125509
stryku
» 2015-01-25 01:24:01
http://ujeb.se/MgOM
Cała suma jest dużo większa niż pojemność inta, więc występuje przepełnienie kilkudziesięcio(jeżeli nie kilkuset) krotne.
Jeżeli chcesz taką sumę policzyć użyj typu o większym zakresie
P-125510
szarry
» 2015-01-25 09:42:33
Jeśli chodzi o wartości ujemne, to należy zastosować typ unsigned *. Ostatni (najmłodszy) bit w liczbie reprezentuje znak, no i zmniejsza o połowę dostępny zakres. Proponuję uruchomienie dwóch kawałków kodu:
C/C++
char a = 0;
while( 1 ) {
    std::cout <<( int ) a << std::endl;
    a++;
}

C/C++
unsigned char a = 0;
while( 1 ) {
    std::cout <<( int ) a << std::endl;
    a++;
}


$ program1 >> wynik1.txt
   [ctrl]+[d]
$ program2 >> wynik2.txt
   [ctrl]+[d]
P-125512
« 1 »
  Strona 1 z 1