#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int losowanie(int liczba_wylosowana) {
liczba_wylosowana = rand() % 10 + 1;
return liczba_wylosowana;
}
bool warunek(int pojemnik_2[5], int liczba_1) {
for (int i = 0; i <= 5; i++) {
if (liczba_1 == pojemnik_2[i]) return false;
}
return true;
}
int main() {
srand(time(NULL));
cout << "Wylosuje liczbe od 1 do 10:" << endl;
int pojemnik[5];
int liczba = 0;
int i = 0;
do {
i++;
losowanie(liczba);
warunek(pojemnik, liczba);
pojemnik[i] = liczba;
cout << pojemnik[i] << ",";
} while (i != 5);
return 0;
}
int liczba = 0;
pozniej nigdzie nie zmieniasz tej zmiennej
pojemnik[i] = liczba;
a Twoja funkcja losujaca niby cos tam zwraca ale nigdzie tego wyniku nie przypisujesz
z uwag ogolnych
- nie korzystaj z tablic, od tego masz std::vector czy std::array
- nie time.h tylko ctime
- rand jest obsolete. Zobacz sobie (mozesz sam sprawdzic) jak sie robi to od C++11
Przypisz do jakiejś zmiennej pseudolosową liczbę zwróconą przez funkcję losowanie().
warunek(pojemnik, liczba);
- tu pewnie też będziesz się dziwił, że nie działa, a tymczasem nic nie robisz z otrzymanym wynikiem.
Na przyszłość:
- nazywaj wszystko po angielsku
- funkcje coś robią, więc w nazwie ma być czasownik + określenie do czego się odnosi czynność, a nie sam rzeczownik, np. wylosuj (getRandomNumber), sprawdźWarunek (checkCondition). Przy czym ta ostatnia nazwa jest też słaba, bo nie wiadomo na co ten warunek, więc najlepiej checkIfTableContainsNumber.
- Przekazywanie parametru przez wartość i referencję koniecznie przeczytaj bo wyraźnie nie rozumiesz
- słabe nazwy zmiennych
- co robi
warunek
wmain
? (nic, ignorujesz wartość zwracaną przez funkcję) - ignorujesz wartość zwracaną przez
losowanie
- losowanie bez powtórzeń na małych zbiorach najłatwiej (ale niekoniecznie najwydajniej) jest zrobić mieszając kontener z pożądanymi liczbami i biorąc z niego
n
pierwszych liczb
pojemnik[i] = liczba; a to dlaczego sie nie przypisuje
Ależ przypisuje się:
int liczba = 0; // liczba == 0
do {
i++;
losowanie(liczba); // nadal liczba == 0, bo ani do funkcji nie przekazujesz referencji, ani nie używasz wartości przez funkcję zwróconej
warunek(pojemnik, liczba); // liczba == 0
pojemnik[i] = liczba; // liczba == 0, więc pojemnik[i] = 0
Amen.
no ale program dalej powtarza liczby..dlaczego przy warunku return false ..program zapisuje i wpypisuje ta liczbe
A gdzie sprawdzasz ten warunek? I gdzie powtarzasz szukanie w przypadku, gdy wylosowałeś już znalezioną?
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.