• 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,489 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 633 wizyt
+1 głos
1 odpowiedź 916 wizyt
0 głosów
1 odpowiedź 554 wizyt
pytanie zadane 26 czerwca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)

92,760 zapytań

141,684 odpowiedzi

320,470 komentarzy

62,104 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

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!

...