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

Program źle dodaje liczby ujemne

0 głosów
727 wizyt
pytanie zadane 20 sierpnia 2015 w C i C++ przez Szahid Pasjonat (20,970 p.)

Przy liczbach dotatnich nie ma żadnych probleów i wszystko działa jak należy ale jak wpisuje ujemne to wyskakują strasznie duże liczby w odpowiedzi. Oto mój kod.

#include <iostream>



using namespace std;
int testy;
int ilosc;
int suma;

int odp[2] ;

int main()

{
    int s=0;// zmienna pomocnicza do przepisania sumy do tablicy
    cin>>testy;
    for(int i=0; i<testy; i++)
    {

        cin>>ilosc;


        int*tablica;
        tablica= new int[ilosc];
        for(int i=0; i<ilosc; i++)
        {

            cin>>tablica[i];


        }


        for (int x=0; x<=ilosc; x++)
        {
            suma+=tablica[x];
        }
        int s=0;
     
odp[s]=suma;
s++;


        delete [] tablica;

    }
    cout<< odp[0]<<endl;
    cout<<odp[1]<<endl;





    return 0;
}

Dodam jeszcze że program miał działać następująco- 

- poprać liczbę testów do wyknaia ( ile zostawów liczb będzie sumowanych)

- pobrać ( zmnienną w poszczególnych testach)  ilość liczb które będą sumowane 

- na koniec wypisać sumy po dwóch testach

4 odpowiedzi

+1 głos
odpowiedź 20 sierpnia 2015 przez Ceki Mądrala (5,310 p.)
Nie będe dalej analizował kodu bo już widzę że pętla w pętli ma tą sama zmienną czyli "i" . ;)
+1 głos
odpowiedź 20 sierpnia 2015 przez criss Mędrzec (172,570 p.)

W drugiej petli z x-em: x<ilosc zamiast x<=ilosc. Wychodzisz poza tablice i do sumy dodaja sie smieci z pamieci.
Btw po co s++ jesli i tak zawsze s jest zerowane?

komentarz 20 sierpnia 2015 przez Szahid Pasjonat (20,970 p.)
Słuszna uwaga. Wystawie s poza pętle żeby się zwiększałó po iteracjii.
komentarz 20 sierpnia 2015 przez Szahid Pasjonat (20,970 p.)
Już to nawet zrobiłem bo s już jest poza pętlą tylko że togo starego nie skasowałem :)
0 głosów
odpowiedź 20 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
Takie coś wystarczy?:

http://wklej.org/hash/4dba8f3cc2a/
0 głosów
odpowiedź 20 sierpnia 2015 przez Szahid Pasjonat (20,970 p.)

Po wprowadzeniu poprawek kod wygląda tak :

#include <iostream>



using namespace std;
int testy;
int ilosc;
int suma;

int odp[2] ;

int main()

{
    int s=0;// zmienna pomocnicza do przepisania sumy do tablicy
    cin>>testy;
    for(int i=0; i<testy; i++)
    {

        cin>>ilosc;


        int*tablica;
        tablica= new int[ilosc];
        for(int z=0; z<ilosc; z++)
        {

            cin>>tablica[z];


        }


        for (int x=0; x<ilosc; x++)
        {
            suma+=tablica[x];
        }


odp[s]=suma;
s++;


        delete [] tablica;

    }
cout<<odp[0]<<endl;
cout<<odp[1]<<endl;




    return 0;
}

ale chyba ostatnia pętla nie działa poprawnie bo nie liczy drugiej sumy i uzyskuje dwie takie zame odpowiedzi na koniec 

Podobne pytania

0 głosów
2 odpowiedzi 375 wizyt
pytanie zadane 4 października 2015 w C i C++ przez Burgonys Początkujący (440 p.)
0 głosów
1 odpowiedź 571 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,420 p.)
0 głosów
2 odpowiedzi 2,525 wizyt
pytanie zadane 16 maja 2016 w C i C++ przez Corazzo Obywatel (1,040 p.)

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...