• 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

0 głosów
2,140 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 1,099 wizyt
+1 głos
1 odpowiedź 1,437 wizyt
0 głosów
1 odpowiedź 814 wizyt
pytanie zadane 26 czerwca 2020 w C i C++ przez Kacperek_code Obywatel (1,690 p.)

93,778 zapytań

142,738 odpowiedzi

323,390 komentarzy

63,382 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.

...