legionista Temat założony przez niniejszego użytkownika |
[Lekcja 20] Liczby z tablicy nie są losowane bez powtórzeń » 2014-12-14 21:59:45 Staram się zrobić zadanie domowe z lekcji 20. Program działa ale liczby nie są losowane z tablicy bez powtórzeń. Sumie to powtarza mi jedna z liczb w tablicy . Proszę o pomoc, gdzie może znajdować sie błąd. #include <iostream> #include <cstdlib> #include <ctime>
bool czybylawlosowana( int index, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == tab[ index ] ) return true; i++; } while( i < ile ); return false; } int wylosuj() { return( rand() % 3 ) + 0; } int main() { srand( time( NULL ) ); int tablica[ 3 ]; int i = 0; std::cout << "Podaj pierwsza liczbe " << std::endl; std::cin >> tablica[ 0 ]; std::cout << "Podaj druga liczbe " << std::endl; std::cin >> tablica[ 1 ]; std::cout << "Podaj trzecia liczbe " << std::endl; std::cin >> tablica[ 2 ]; int index = wylosuj(); int wylosowanych = 0; int wylosowane[ 2 ]; do { if( czybylawlosowana( index, tablica, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = tablica[ index ]; wylosowanych++; } } while( wylosowanych < 2 ); wylosowanych = 0; do { std::cout << "Wylosowane " << wylosowane[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 2 ); return 0; }
|
|
darko202 |
» 2014-12-14 22:25:24 pierwsze wejście
int wylosowanych = 0; if( czybylawlosowana( index, tablica, wylosowanych ) == false ) ile =0 w bool czybylawlosowana( int index, int tab[], int ile ) if( ile <= 0 ) return false;
następne wylosowanych++ i znów ile = 1,2 bool czybylawlosowana( int index, int tab[], int ile )
do { if( tab[ i ] == tab[ index ] ) return true; i++; } while( i < ile );
szuka aż i<ile czyli nie przeszukuje całej Tablicy
a i jeszcze to w main masz int index = wylosuj(); porównujesz z jedną wartością if( tab[ i ] == tab[ index ] ) + to co wcześniej musisz sprawdzić co właściwie tam robisz
|
|
legionista Temat założony przez niniejszego użytkownika |
» 2014-12-14 23:08:57 Nie za bardzo rozumie błędu w pierwszym wejściu . int index = wylosuj(); Umieściłem w petli do while. |
|
darko202 |
» 2014-12-15 07:43:48 int index = wylosuj(); int wylosowanych = 0; int wylosowane[ 2 ]; do { if( czybylawlosowana( index, tablica, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = tablica[ index ]; wylosowanych++; } } while( wylosowanych < 2 );
wylosowanych = 0; do { std::cout << "Wylosowane " << wylosowane[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 2 );
1. 2. wyświetlasz tablicę wylosowane |
|
darko202 |
» 2014-12-15 07:52:14 odnośnie Twojego pytania ... int main() { ... int index = wylosuj(); int wylosowanych = 0; int wylosowane[ 2 ]; do { if( czybylawlosowana( x, tablica, { 0 lub 1 } ) == false ) {...} } while( wylosowanych < 2 ); wylosowanych = 0; do { std::cout << "Wylosowane " << wylosowane[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 2 ); return 0; }
1.losowanie jakiego ś x = 0, 1 lub 2 wi ę cej si ę to nie zmienia 2.chyba powiniene ś wy ś wietla ć tablica[ wylosowanych ]
|
|
legionista Temat założony przez niniejszego użytkownika |
» 2014-12-15 21:31:40 Ok poradziłem sobie z poprzednim zadaniem, mam jednak problem z drugim 2. Zmodyfikuj program z pierwszego zadania tak, aby użytkownik musiał podać 10 liczb, a 8 z nich będzie losowanych bez powtórzeń. Sprawdź czy wyniki są poprawne. #include <iostream> #include <cstdlib> #include <ctime>
bool funkcja( int tab[], int tabl[], int j, int liczba ) { if( j == 0 ) return false; int k = 0; do { if( tab[ k ] == tabl[ liczba ] ) return true; k++; } while( k < j ); return false; } int wylosuj() { return( rand() % 10 ) + 0; } int main()
{ srand( time( NULL ) ); int i = 0; int tablica[ 10 ]; int random[ 8 ]; int j = 0; do { std::cout << "podaj liczbe " << i + 1 << " " << std::endl; std::cin >> tablica[ i ]; i++; } while( i < 10 ); do { int liczba = wylosuj(); if( funkcja( random, tablica, j, liczba ) == false ); { random[ j ] = tablica[ liczba ]; j++; std::cout << "nr idexu " << liczba << std::endl; std::cout << random[ j ] << std::endl; } } while( j < 8 ); return 0; }
Program nie działa prawidlowo jak tablice random[j] zwraca przypadkowe wartosci |
|
darko202 |
» 2014-12-16 12:03:00 jaką masz wartość wejściową j w linii
if( funkcja( random, tablica, j, liczba ) == false ); w funkcji sprawdzasz if( j == 0 ) return false;
to ma związek z Twoim pytaniem
|
|
« 1 » |