Tak na przyszłość: pisz co ten kod ma robić (tu nie było się trudno domyślić, ale w większych programach może być to problemem) i pisz w których linijkach zwrócił błędy (wtedy często można je wyłapać bez kompilowania go). Wtedy łatwiej go poprawić.
Pierwszy błąd (który akurat nie miał wpływu na działanie programu, ale na czytelność kodu) to użycie zapisanego na stałe w kodzie rozmiaru tablicy. Jak kod się rozrośnie to ktoś może zachodzić w głowę co oznacza to 999 (albo jak ktoś inny go czyta - ja na początku czytałem funkcje pomocnicze i nie zauważyłem tablicy w mainie, więc zachodziłem w głowę skąd ta liczba się wzięła). Lepiej zrobić sobie deklarację preprocesora albo jeszcze lepiej wartość stałą. Nie wiem dokładnie jak przyjęło się to robić w C++ (sam programuję głównie w C), więc wpiszę deklarację preprocesora - chociaż z tego co słyszałem, to nie jest najlepsza praktyka, ale na pewno lepsza niż pisanie wszędzie 999.
Przy okazji: zmieniłem "K2" na "k2", żeby było widać, że to zmienna, a nie coś zdefiniowanego w preprocesorze.
Drugi błąd to wywołanie funkcji "losowanie(4, 7, k, liczbA)", a następnie przypisanie do wybranej komórki tablicy wskaźnika na tę funkcję (czyli jej identyfikatora):
liczbA[k] = losowanie;
Jeżeli chcesz przypisać do "liczbA[k]" wartość zwracaną przez tę funkcję, powinno to wyglądać w ten sposób:
liczbA[k] = losowanie(4, 7, k, liczbA);
Ale tak naprawdę nie ma takiej potrzeby, bo przecież Twoja funkcja "losowanie" sama wpisuje do zadanej komórki tablicy daną liczbę. Wystarczy więc:
losowanie(4, 7, k, liczbA);
Ale to o czym mówiłem jest ważne, bo przy użyciu funkcji sumującej popełniłeś ten sam błąd.
Zapamiętaj sobie to:
Jeżeli mamy jakąś funkcję, np.:
funkcja przyklad (int blabla)
{
return blabla;
}
To:
przyklad - wskaźnik na tę funkcję (zmienna zawierająca jej położenie w pamięci, o typie wskaźnika na int - i stąd te krzyki kompilatora na temat niepoprawnej konwersji).
przyklad(2) - wywołanie funkcji przyklad z parametrem 2, po czym wstawienie w miejsce równania, w którym pojawił się ten zapis, wartości zwróconej przez nią.
Przy okazji - używanie "using namespace std;" nie jest dobrą praktyką, bo jakkolwiek ułatwia wiele rzeczy, to powoduje konflikty nazw kiedy mamy parę bibliotek z takimi samymi nazwami funkcji. Ale z drugiej strony bez tego jest trudniej, więc może to i lepiej że na początku każdy nauczyciel/książka nie mówi jak się programuje bez tego.
Poza poprawą tych błędów ulepszyłem też odrobinę kod, zmniejszyłem tablicę (bo nie szło przy takim rozmiarze sprawdzić czy program działa poprawnie) i dodałem wypisywanie znaków nowej linii (bo nie szło rozróżnić liczb między sobą). Nie poprawiałem strony algorytmicznej kodu, bo założyłem, że skoro niektóre rzeczy robisz naokoło to dlatego, że podręcznik kazał Ci przećwiczyć kilka konstrukcji.
Kod po poprawieniu:
#include <iostream>
#include <cstdlib>
#include <ctime>
#define ROZMIAR_TABLICY 10
using namespace std;
int losowanie(int od, int ile, int k2, int liczbB[])
{
liczbB[k2] = (rand() % ile ) + od;
return liczbB[k2];
}
int sumowanie(int liczbB[], int k2)
{
int wynik = liczbB[0];
do
{
wynik = wynik + liczbB[k2];
k2++;
}
while (k2 < ROZMIAR_TABLICY);
return wynik;
}
int wypisywanie(int ws, int liczbB[])
{
int Q = 0;
cout << ":";
do
{
cout << liczbB[Q] << ":";
Q++;
}
while(Q < ROZMIAR_TABLICY);
cout << endl << ws << endl;
}
int main()
{
srand(time(NULL));
int liczbA[ROZMIAR_TABLICY];
int k = 0;
do
{
losowanie(4, 7, k, liczbA);
k++;
}
while (k < ROZMIAR_TABLICY);
int wynik2 = sumowanie(liczbA, 1);
wypisywanie(wynik2, liczbA);
return EXIT_SUCCESS;
}
Wersja z tabulatorami zamiast spacji:
#include <iostream>
#include <cstdlib>
#include <ctime>
#define ROZMIAR_TABLICY 10
using namespace std;
int losowanie(int od, int ile, int k2, int liczbB[])
{
liczbB[k2] = (rand() % ile ) + od;
return liczbB[k2];
}
int sumowanie(int liczbB[], int k2)
{
int wynik = liczbB[0];
do
{
wynik = wynik + liczbB[k2];
k2++;
}
while (k2 < ROZMIAR_TABLICY);
return wynik;
}
int wypisywanie(int ws, int liczbB[])
{
int Q = 0;
cout << ":";
do
{
cout << liczbB[Q] << ":";
Q++;
}
while(Q < ROZMIAR_TABLICY);
cout << endl << ws << endl;
}
int main()
{
srand(time(NULL));
int liczbA[ROZMIAR_TABLICY];
int k = 0;
do
{
losowanie(4, 7, k, liczbA);
k++;
}
while (k < ROZMIAR_TABLICY);
int wynik2 = sumowanie(liczbA, 1);
wypisywanie(wynik2, liczbA);
return EXIT_SUCCESS;
}