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

Funkcja zliczająca sumę tablicy dynamicznej

Object Storage Arubacloud
0 głosów
1,392 wizyt
pytanie zadane 29 marca 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)

Hejka
Trochę męczę się już z tym przykładem ale nie potrafię zauważyć błędu więc zgłaszam się po pomoc.


Ten program działa, jeśli podamy tylko jedną liczbę, jeśli więcej to suma jest z kosmosu wzięta.
Byłby ktoś tak miły i wytłumaczył co zrobiłem źle?

2 odpowiedzi

0 głosów
odpowiedź 29 marca 2016 przez mariush Dyskutant (7,860 p.)
edycja 29 marca 2016 przez mariush

Przy wpisywaniu liczb do tablicy za każdym razem alokujesz dla niej pamięć na nowo.

tablica = new int [licznik];

Po czym wsadzasz do niej 1 liczbę na indeksie pozycji licznik. Poprzednie miejsca przed licznikiem są wypełnione śmieciami z pamięci.

while(cin >> liczba)
{
    //robisz kopie tablicy
    int* tablica_kopia = nullptr;

    if(tablica) {
        tablica_kopia = new int[tablica_size];    //alokujesz pamięć dla kopii i wypełniasz ją danymi
        delete [] tablica;   //czyścisz główną tablicę
        tablica = nullptr;
    }

    tablica_size++;

    tablica = new int[tablica_size];
    //kopiujesz liczby z tablica_kopia do tablica i na ostatniej pozycji wstawiasz wpisaną liczbę
    delete [] tablica_kopia;
}

W bibliotece <numeric> masz funkcję sumującą podany zakres

int suma = accumulate(tablica, tablica+tablica_size, 0);

I pamiętaj, zawsze gdy alokujesz pamięc przy pomocy new musisz ją zwolnić za pomocą delete!

komentarz 29 marca 2016 przez L33TT12 Gaduła (3,950 p.)
Ale jakbym zaalokował pamięć gdzie indziej, to skąd program miałby wiedzieć ile liczb podałem?
komentarz 29 marca 2016 przez mariush Dyskutant (7,860 p.)
Po dodaniu liczby alokujesz pamięć dla tablicy mieszczącej 1 element więcej. Z tym, że najpierw musisz zrobić kopię tego co już jest w tablicy, bo inaczej stracisz to co wcześniej tam wsadziłeś.
komentarz 29 marca 2016 przez L33TT12 Gaduła (3,950 p.)

Lol, przypadkowo tak ustawiłem i nagle program działa tak jak ma działać, ale dlaczego w indeksie zapisują się liczby zanim został on stworzony?

 

0 głosów
odpowiedź 29 marca 2016 przez Mateusz11 Pasjonat (22,910 p.)

Znowu kod na zdjęciu... serio? angry

Podobne pytania

0 głosów
2 odpowiedzi 562 wizyt
+1 głos
1 odpowiedź 857 wizyt
0 głosów
1 odpowiedź 425 wizyt
pytanie zadane 26 czerwca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)

92,542 zapytań

141,383 odpowiedzi

319,482 komentarzy

61,929 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...