wirusomaniak Temat założony przez niniejszego użytkownika |
Problem praca domowa rozdział 21 » 2016-01-16 22:32:15 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void wczytaj( int t[], int R ) { short i = 0; do { cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:"; cin >> t[ i ]; cout << "ERROR: " << cin.fail() << endl; cin.clear(); cin.sync(); i++; } while( i < R ); } void wypisz( int t[], int R ) { int i = 0; do { cout << "wylosowana nr." <<( i + 1 ) << "to: " << t[ i ] << endl; i++; } while( i < R ); } int losowanie( int t[], int R, int i ) { do { int liczba = rand(); if( liczba == t[ i ] ) { i++; return liczba; } } while( i < R ); return 0; } bool czyBylaWylosowana( int liczba, int t[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( liczba == t[ i ] ) return true; i++; } while( i < ile ); return false; } int main() { srand( time( NULL ) ); int tablica[ 3 ]; int wylosowane[ 2 ]; int wylosowanych = 0; int ile = 0; wczytaj( tablica, 3 ); do { int liczba = losowanie( tablica, 3, ile ); if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 2 ); wypisz( wylosowane, 2 ); return 0; } Program się kompiluje wszystko w porządku ale bo wykonaniu funkcji wczytaj nic dalej się nie dzieje, dlaczego?. Bo jakoś nie umiem znaleźć niezgodności. |
|
carlosmay |
» 2016-01-16 22:42:55 Deklarujesz, że funkcje 'wczytaj', 'wypisz' oraz 'losowanie' będą zwracać wartość, tymczasem tego nie robią. Ma to niezdefiniowane zachowanie. |
|
wirusomaniak Temat założony przez niniejszego użytkownika |
» 2016-01-16 22:49:29 Poprawiłem. Ale po skompilowaniu nadal nic się nie dzieje po wykonaniu funkcji wczytaj. |
|
wirusomaniak Temat założony przez niniejszego użytkownika |
» 2016-01-16 23:18:10 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void wczytaj( int t[], int R ) { short i = 0; do { cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:"; cin >> t[ i ]; cout << "ERROR: " << cin.fail() << endl; cin.clear(); cin.sync(); i++; } while( i < R ); } int losowanie() { return( rand() % 10 ) + 0; } bool czyBylaWylosowana( int liczba, int t[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( liczba == t[ i ] ) return true; i++; } while( i < ile ); return false; } int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowane[ 8 ]; int wylosowanych = 0; wczytaj( tablica, 10 ); do { int liczba = losowanie(); if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { cout << "wylosowana nr." <<( wylosowanych + 1 ) << "to: " << tablica[ liczba ] << endl; wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 8 ); return 0; } Doszedłem do wniosku, że tamten sposób myślenia nie objął dobrego kierunku więc wpadłem na inny pomysł i nieco zmodyfikowałem kod po skompilowaniu program spełnił oczekiwania :) |
|
wirusomaniak Temat założony przez niniejszego użytkownika |
» 2016-01-16 23:49:09 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void wypisz( int t[], int R ) { int i = 0; do { cout << "wylosowana nr." <<( i + 1 ) << "to: " << t[ i ] << endl; i++; } while( i < R ); } void wczytaj( int t[], int R ) { short i = 0; do { cout << "podaj liczbe nr:" <<( i + 1 ) << "\n:"; cin >> t[ i ]; cout << "ERROR: " << cin.fail() << endl; cin.clear(); cin.sync(); i++; } while( i < R ); } int losowanie( int t[] ) { return t[( rand() % 10 ) + 0 ]; } bool czyBylaWylosowana( int liczba, int t[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( liczba == t[ i ] ) return true; i++; } while( i < ile ); return false; } int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowane[ 8 ]; int wylosowanych = 0; wczytaj( tablica, 10 ); do { int liczba = losowanie( tablica ); if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 8 ); wypisz( wylosowane, 8 ); return 0; } To jest ostateczny kod chyba bo tamten nie zapisywał wylosowanej do tablicy wylosowanych. Temat zamykam i przepraszam że założyłem tak szybko temat dłużej pomyślałem i w końcu sam doszedłem do rozwiązania problemu. |
|
« 1 » |