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

Program nie przesyła tablicy do funkcji

Object Storage Arubacloud
0 głosów
190 wizyt
pytanie zadane 20 czerwca 2017 w C i C++ przez Krystian Nowak Początkujący (330 p.)

Witam, piszę program który będzie wynajdywał kolejne liczby zaprzyjaźnione, aktualnie program znajduje podzielniki dla wszystkich liczb z podanego przedziału, mam problem z funkcją która ma sumować te podzielniki, spodziewany token przed ']'. Czy może ktoś coś zaradzić? Ewentualnie dać jakiś sprytny sposób na zrobienie tej funkcji inaczej, chciałbym jednak zaznaczyć że w miarę łatwym i czytelnym sposobem, z góry dziękuję!

 

#include <iostream>

using namespace std;

int zliczacz(int elementy[], int ilosc)
{
    int wynik=0;
    for(int i=0; i<=ilosc; i++)
    {
        wynik+=elementy[i];
    }
    return wynik;
}

int main()
{
    for(int i=1;i<=10;i++)
    {
        cout<<i<<": ";
        int podzielniki[i];
        int podzielnik_nr=0;
        for(int j=1; j<=i; j++)
        {
            if(i%j==0)
            {
                podzielnik_nr++;
                podzielniki[podzielnik_nr]=j;
                cout<<podzielniki[podzielnik_nr]<<" ";
            }
        }
            //dodawanie elementow tablicy 
            cout<<"        -> "<<zliczacz(podzielniki[], i)<<" ";

        cout<<endl;
    }
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 20 czerwca 2017 przez mokrowski Mędrzec (155,460 p.)
wybrane 26 czerwca 2017 przez Krystian Nowak
 
Najlepsza
  1. Linia 3. Nie stosuj using namespace std. Pisz przed wywołaniem std:: (np. std::cout)
  2. Linia 5. ilosc powinien mieć typ size_t. Ma int. Planujesz ujemne wielkości? :-)
  3. Linia 7. Co to jest wynik? Nie lepiej suma?
  4. Linia 8. Stosuj pre-dekrementację a nie post-dekrementację. Konwencja nakazuje indeksować od 0 do elementu przed ilość (czyli < a nie <=)
  5. Linia 17. -- ,, --
  6. Linia 20. To nie jest dozwolone w C++. Tablicę deklaruj dynamicznie z użyciem new i gdzieś na końcu pętli użyj delete [] podzielniki.
  7. Linia 22. Stosuj pre-dekrementację a nie post-dekrementację. Jesteś pewien że należy iterować do wartości docelowej? :-) Myślę że dzielniki kończą się wcześniej.
  8. Linia 32. zliczacz(podzielniki, podzielnik_nr) a nie to co masz... 

I na koniec... przemyśl algorytm. Od jakiej wartości warto próbować dzielić a jakie liczby z całą pewnością wpisać.

komentarz 26 czerwca 2017 przez Krystian Nowak Początkujący (330 p.)
Faktycznie, z tym że cały czas funkcja zamiast zwracać sumę podzielników zwraca jakieś dziwne duże liczby i z tym nie mogę się uporać, a bez tego nie mogę pójść dalej
komentarz 26 czerwca 2017 przez mokrowski Mędrzec (155,460 p.)

Dobrze.. krok po kroku... Czy masz takie wyniki na swoim komputerze?

https://wandbox.org/permlink/y18t5Ke5H3fJZ1st

Jeśli nie, to masz "antyczny" kompilator i linijka 19 powinna wyglądać tak:

podzielniki = new int [i]();

 

komentarz 26 czerwca 2017 przez Krystian Nowak Początkujący (330 p.)
Miałem inne, zmieniłem tą linijkę i faktycznie działa, rozumiem że przyda się szybka zmiana kompilatora, możesz polecić jakiś w miarę prosty i dobry? + czy mógłbyś mi wyjaśnić jak tu zadziałał ten nawias "()"? Oczywiście dziękuje Ci bardzo za pomoc, to bardzo dużo mi daje
komentarz 26 czerwca 2017 przez mokrowski Mędrzec (155,460 p.)
Ten nawias () to uruchomienie konstruktora. W ten sposób tablica wypełnia się samodzielnie zerami. Nowe kompilatory mają to w standardzie języka który wspierają. Stare nie.

W Twoim przypadku dobrym i nowoczesnym kompilatorem będzie gcc lub clang. Dla MS Windows (tak zakładam że pracujesz), dobrym wyborem będzie MinGW-w64 dla systemu 64-bitowego lub zwykły MinGW dla wersji 32-bit. Co do IDE to http://www.codeblocks.org/ lub całe stado innych (eclipse, netbeans itp... )

https://mingw-w64.org/doku.php

http://www.mingw.org/

Jeśli jednak chcesz czegoś "z innej beczki" to Visual Studio Community Edition 2015 lub 2017 (z tym 2017 jeszcze bym zaczekał na pierwsze paczki poprawek). Zawiera także IDE.

Dla systemu GNU/Linux, masz gcc  i clang w pakietach :-) A dla OsX jest standardowy clang lub port'sy.
komentarz 26 czerwca 2017 przez Krystian Nowak Początkujący (330 p.)
Jeszcze raz ogromne dzięki! na pewno skorzystam
0 głosów
odpowiedź 20 czerwca 2017 przez Michał Kazula Pasjonat (19,540 p.)
zliczacz(podzielniki[], i)

Coś mi tu nie pasuje. Przekazujesz pustą tablicę jako argument?

Chyba tak:

zliczacz(podzielniki, i)

 

Podobne pytania

0 głosów
2 odpowiedzi 138 wizyt
pytanie zadane 10 czerwca 2017 w JavaScript przez glocek2121 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 559 wizyt
0 głosów
0 odpowiedzi 235 wizyt
pytanie zadane 11 listopada 2022 w Sprzęt komputerowy przez kondzix_ez Obywatel (1,910 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...