Lekcja 21
Ostatnio zmodyfikowano 2014-06-26 22:22
Terrendi Temat założony przez niniejszego użytkownika |
Lekcja 21 » 2014-06-26 20:35:15 Treść zadania: "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." Mam problem, ponieważ mój program zapętla się(dodałem linijkę kodu, żeby to zobrazować), a ja nie wiem dlaczego tak się dzieje. Mój kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int losuj() { return( rand() % 2 ); } bool czy_byla_wylosowana( int sprawdz, int liczebnik, int wylosowana[] ) { if( liczebnik <= 0 ) return false; int a = 0; do { if( sprawdz == wylosowana[ a ] ) return false; a++; } while( a < 1 ); return true; } int main() { srand( time( 0 ) ); int liczba[ 3 ]; int liczebnik = 0; int wylosowana[ 2 ]; int sprawdz; cout << "Podaj trzy liczby:" << endl; do { cin >> liczba[ liczebnik ]; liczebnik++; } while( liczebnik < 3 ); liczebnik = 0; do { sprawdz = liczba[ losuj() ]; if( czy_byla_wylosowana( sprawdz, liczebnik, wylosowana ) == false ) { sprawdz = wylosowana[ liczebnik ]; liczebnik++; } cout << "To ciagle sie powtarza" << endl; } while( liczebnik < 2 ); liczebnik = 0; do { cout << wylosowana[ liczebnik ] << endl; liczebnik++; } while( liczebnik < 2 ); return 0; }
Do programu można bez problemu wpisać liczby, ale potem wszystko się sypie. Więc liczę na waszą pomoc :) |
|
pekfos |
» 2014-06-26 20:43:40 sprawdz = wylosowana[ liczebnik ];
|
Źle. 3. |
|
Terrendi Temat założony przez niniejszego użytkownika |
» 2014-06-26 21:12:34 Już to poprawiłem i teraz te linijki wyglądają tak: wylosowana[ liczebnik ] = sprawdz; oraz return( rand() % 3 ); Ale albo coś zrobiłem źle poprawiając te linijki, albo w jakimś innym miejscu mam błąd, bo program pod koniec zawsze podaje 2 takie same liczby. Więc mam tu pytanie: co nie działa? |
|
snajperek130 |
» 2014-06-26 22:15:36 Wedlug mnie to masz zle fragment do { if( sprawdz == wylosowana[ a ] ) return false; a++; } while( a < 1 );
return true;
Skoro w main zwracasz false, to sprawdz nie moze sie rownac wylosowana /. Pisalem te zadanie ostatnio i moze to byc bledem . |
|
Terrendi Temat założony przez niniejszego użytkownika |
» 2014-06-26 22:22:51 Dzięki za pomoc, teraz kod wygląda tak: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int losuj() { return( rand() % 3 ); } bool czy_byla_wylosowana( int sprawdz, int liczebnik, int wylosowana[] ) { if( liczebnik <= 0 ) return false; int a = 0; do { if( sprawdz == wylosowana[ a ] ) return true; a++; } while( a < 1 ); return false; } int main() { srand( time( 0 ) ); int liczba[ 3 ]; int liczebnik = 0; int wylosowana[ 2 ]; int sprawdz; cout << "Podaj trzy liczby:" << endl; do { cin >> liczba[ liczebnik ]; liczebnik++; } while( liczebnik < 3 ); liczebnik = 0; do { sprawdz = liczba[ losuj() ]; if( czy_byla_wylosowana( sprawdz, liczebnik, wylosowana ) == false ) { wylosowana[ liczebnik ] = sprawdz; liczebnik++; } } while( liczebnik < 2 ); liczebnik = 0; do { cout << wylosowana[ liczebnik ] << endl; liczebnik++; } while( liczebnik < 2 ); return 0; }
I wszystko działa. Mój błąd polegał na tym że szukałem błędu w złym przypisaniu zmiennej sprawdz do wylosowana. |
|
« 1 » |