Rozdział 21 Praca domowa
Ostatnio zmodyfikowano 2018-10-04 21:57
bulidomex321 Temat założony przez niniejszego użytkownika |
Rozdział 21 Praca domowa » 2018-10-04 13:25:09 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. Zadanie rozwiązałem w poniższy sposób: #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void WyswietlTablice( int * t ) { for( unsigned int i = 0; i < 3; i++ ) { cout << t[ i ] << endl; } }
void Losuj( int * t ) { cout << "Zostana wylosowane 2 liczby z posrod 3 podanych bez powtorzen" << endl; int losowana1, losowana2; do { losowana1 =( rand() % 3 ); losowana2 =( rand() % 3 ); } while( t[ losowana1 ] == t[ losowana2 ] ); cout << "Wylosowane liczby to: " << t[ losowana1 ] << " oraz: " << t[ losowana2 ]; }
bool czyPodanoDobrze( int * t )
{ if( t[ 0 ] == t[ 1 ] == t[ 2 ] ) { cout << "Sproboj jeszcze raz" << endl; return true; } else { return false; } }
void PodajLiczby( int * t ) { cout << "Pamietaj ze nie mozesz podac trzy razy tej samej cyfry!" << endl; do { for( unsigned int i = 0; i < 3; i++ ) { cout << "Podaj " << i + 1 << " liczbe: "; cin >> t[ i ]; } cout << endl; } while( czyPodanoDobrze( t ) == true ); }
int main() { srand( time( 0 ) ); int tablica[ 2 ]; PodajLiczby( tablica ); Losuj( tablica ); return 0; }
Ogólnie program działa, chciałem go zabezpieczyć przed wpisaniem 3 tych samych liczb. Gdy wprowadzimy trzy razy "1" do tablicy wszystko działa dobrze, program prosi nas znowu o podanie 3 liczb Natomiast gdy wprowadzimy obojętnie jakie inne liczby 3 razy takie same np trzy razy podamy "2" program się krzaczy. Nie rozumiem dlaczego. Proszę o wsparcie :D. |
|
rupson |
» 2018-10-04 16:42:15 Co to za zapis: t[ 0 ] == t[ 1 ] == t[ 2 ] ? Rozdział 12 tu się przyda :) Drugie pytanie, dlaczego w argumentach funkcji używasz wskaźników? |
|
YooSy |
» 2018-10-04 16:50:09 Unikaj magic number. Zamiast nich używaj zmiennych o opisowej nazwie. np. const int rozmiarTablicy = 3; int liczbyUzytkownika[ romziarTabilicy ]; |
|
bulidomex321 Temat założony przez niniejszego użytkownika |
» 2018-10-04 21:57:47 Wskaźników używam, ponieważ w rozdziale 19 było napisane że tak możemy przekazywać tablicę do funkcji. Pozbyłem się magicznych liczb, i użyłem iloczynu logicznego. Teraz wszystko działa Rozwiązanie: void WyswietlTablice( int * t, const int rozmiarTablicy ) { for( unsigned int i = 0; i < rozmiarTablicy + 1; i++ ) { cout << t[ i ] << endl; } }
void Losuj( int * t ) { cout << "Zostana wylosowane 2 liczby z posrod 3 podanych bez powtorzen" << endl; int losowana1, losowana2; do { losowana1 =( rand() % 3 ); losowana2 =( rand() % 3 ); } while( t[ losowana1 ] == t[ losowana2 ] ); cout << "Wylosowane liczby to: " << t[ losowana1 ] << " oraz: " << t[ losowana2 ]; }
bool czyPodanoDobrze( int * t ) { if( t[ 0 ] == t[ 1 ] && t[ 2 ] == t[ 1 ] && t[ 0 ] == t[ 2 ] ) { cout << "Sproboj jeszcze raz" << endl; return true; } else { return false; } }
void PodajLiczby( int * t, const int rozmiarTablicy ) { cout << "Pamietaj ze nie mozesz podac trzy razy tej samej cyfry!" << endl; do { for( unsigned int i = 0; i < rozmiarTablicy + 1; i++ ) { cout << "Podaj " << i + 1 << " liczbe: "; cin >> t[ i ]; } cout << endl; } while( czyPodanoDobrze( t ) == true ); }
int main() { srand( time( 0 ) ); const int rozmiarTablicy = 2; int tablica[ rozmiarTablicy ]; PodajLiczby( tablica, rozmiarTablicy ); WyswietlTablice( tablica, rozmiarTablicy ); Losuj( tablica ); return 0; }
Dzięki za pomoc ;) |
|
« 1 » |