[Rodział 21] Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2014-03-19 15:03
Partit21 Temat założony przez niniejszego użytkownika |
[Rodział 21] Losowanie bez powtórzeń » 2014-03-18 22:07:01 witam! Mogłaby jakaś dobra dusza spojrzeć, dlaczego ten kod nie działa? Treść : Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. Udało mi się wylosować 2 niepowtarzające się liczby, ale z jakiegoś nieznanego mi powodu program utyka w miejscu gdzie zaznaczyłem // #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
bool sprawdzana( int liczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == liczba ) return true; } while( i < 2 ); return false; }
void wpisz( int a[] ) { cout << "wpisz 3 liczby bejbus" << endl; int i = 0; do { cin >> a[ i ]; i++; } while( i < 3 ); }
void pokaz( int tab[], int a ) { do { cout << "wylosowane liczby to : " << endl; cout << tab[ a ]; a++; } while( a < 2 ); } int wylosuj() { return( rand() % 3 ) + 0; }
int main() { srand( time( NULL ) ); int tab[ 3 ]; int lol = 0; wpisz( tab ); cout << "sprawdzamy co nam maszyna wyrzuci" << endl; do { int a = tab[ wylosuj() ]; cout << "pokaz a = " << a << endl; if( sprawdzana( a, tab, lol ) == false ) { tab[ lol ] = a; lol++; } } while( lol < 2 ); cout << " a tu dziala?" << endl; cout << "brawo udalo sie ;D" << endl; return 0; }
Siedzę już od paru godzin i nie mogę zrozumieć dlaczego "on" utyka tam ( a ja razem z nim ;D )[/i] |
|
OczkoSX |
» 2014-03-18 22:35:51 Pewnie warunek w pętli jest cały czas spełniony... |
|
alixir |
» 2014-03-19 08:30:02 Jak na moje oko to widzę 2 błędy: 1. Losujesz liczbę z tablicy i wstawiasz ją do tej samej tablicy. Użyj drugiej tablicy do przechowywania wyników. int wynik[ 2 ]; .. if( sprawdzana( a, wynik, lol ) == false ) { wynik[ lol ] = a; lol++; } 2. W funkcji sprawdzana, są 2 błędy w pętli - brak zwiększania licznika - błędny warunek bool sprawdzana( int liczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == liczba ) return true; i++; } while( i < ile ); return false; }
|
|
Partit21 Temat założony przez niniejszego użytkownika |
» 2014-03-19 15:03:05 Dziękuję bardzo;) zabrakło głupiego licznika ;D |
|
« 1 » |