• 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

VPS Starter Arubacloud
0 głosów
332 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 (156,260 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 (156,260 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 (156,260 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 157 wizyt
pytanie zadane 10 czerwca 2017 w JavaScript przez glocek2121 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 731 wizyt
0 głosów
0 odpowiedzi 283 wizyt
pytanie zadane 11 listopada 2022 w Sprzęt komputerowy przez kondzix_ez Obywatel (1,930 p.)

92,947 zapytań

141,899 odpowiedzi

321,118 komentarzy

62,283 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...