[Rozdział 21] Zadanie 1
Ostatnio zmodyfikowano 2015-11-24 23:11
Matis28 Temat założony przez niniejszego użytkownika |
[Rozdział 21] Zadanie 1 » 2015-11-24 19:59:09 Cześć! Mam problem z pierwszym zadaniem z tego rodziału. oto mój kod: #include <iostream> #include <ctime>
using namespace std;
void wczytaj( int podane[] ) { int i = 0; int a = 1; do { cout << "podaj " << a << " liczbe" << endl; cin >> podane[ i ]; a++; i++; } while( i != 3 ); }
bool sprawdz( int tab[], int iwylosowane, int wylosowana ) { int i = 0; if( iwylosowane <= 0 ) { return false; } do { if( tab[ i ] == wylosowana ) { return true; } i++; } while( i < iwylosowane ); return false; }
int losuj( int podane[] ) { int losowana = rand() % 3; return podane[ losowana ]; }
int main() { srand( time( NULL ) ); int podane[ 3 ]; int wylosowane[ 2 ]; int iwylosowane = 0; int i = 0; cout << "podaj 3 liczby" << endl; wczytaj( podane ); cout << "Podane liczby to: " << endl; do { cout << podane[ i ] << " "; i++; } while( i != 3 ); cout << endl; do { int wylosowana = losuj( podane ); if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false ) { wylosowana = wylosowane[ iwylosowane ]; iwylosowane++; } } while( iwylosowane < 2 ); i = 0; do { cout << wylosowane[ i ] << endl; i++; } while( i < 2 ); system( "pause" ); return 0; }
Problem jest następujący. Program pyta użytkownika o liczby ale niezależnie od tego jakie wartości poda użytkownik , program zwraca dwa razy -858993460. Siedzę już nad tym trzy godziny i nie mogę dojść dlaczego tak się dzieje. |
|
carlosmay |
» 2015-11-24 20:43:09 wylosowana = wylosowane[ iwylosowane ];
|
|
Andy20 |
» 2015-11-24 20:54:07 Zapomniałeś dodać biblioteki #include <cstdlib> |
|
Matis28 Temat założony przez niniejszego użytkownika |
» 2015-11-24 22:39:02 Dzięki już działa znacznie więcej :D Teraz problemem jest brak losowości wyników. Przy dziesięciu próbach podania 1,2,3 za każdym razem wylosowało 2 i 3 oraz w podanych liczbach wyświetlało tylko ostatnią. tak wygląda zmodyfikowany kod: #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
void wczytaj( int podane[] ) { int i = 0; int a = 1; do { cout << "podaj " << a << " liczbe" << endl; cin >> podane[ i ]; a++; i++; } while( i != 3 ); }
bool sprawdz( int tab[], int iwylosowane, int wylosowana ) { int i = 0; if( iwylosowane <= 0 ) { return false; } do { if( tab[ i ] == wylosowana ) { return true; } i++; } while( i < iwylosowane ); return false; }
int losuj( int podane[] ) { int losowana =( rand() % 3 ) + 0; return podane[ losowana ]; }
int main() { srand( time( NULL ) ); int podane[ 3 ]; int wylosowane[ 2 ]; int iwylosowane = 0; int i = 0; int a; do { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "[1]-skorzystaj \n[0]-wyjdz" << endl; cin >> a; if( a == 0 ) { return 0; } cout << "podaj 3 liczby" << endl; wczytaj( podane ); cout << "Podane liczby to: " << endl; do { cout << podane[ i ] << " "; i++; } while( i != 3 ); cout << endl; do { int wylosowana = losuj( podane ); if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false ) { wylosowane[ iwylosowane ] = wylosowana; iwylosowane++; } } while( iwylosowane < 2 ); i = 0; cout << "wylosowane liczby to: "; do { cout << wylosowane[ i ] << ", "; i++; } while( i < 2 ); cout << endl; system( "pause" ); } while( a != 0 ); return 0; }
|
|
carlosmay |
» 2015-11-24 23:01:58 Powinno być dobrze. Kolega Andy20 sugerował <cstdlib> . Wstaw kod. |
|
Matis28 Temat założony przez niniejszego użytkownika |
» 2015-11-24 23:11:33 Przebudowałem to trochę. Wstawiłem całość do innej funkcji a w main dałem tylko pętle z wyborem czy skorzystać czy wyjść i działa. Dzięki za pomoc :) Oto ostateczna wersja może komuś kiedyś pomoże :) #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
void wczytaj( int podane[] ) { int i = 0; int a = 1; do { cout << "podaj " << a << " liczbe" << endl; cin >> podane[ i ]; a++; i++; } while( i != 3 ); }
bool sprawdz( int tab[], int iwylosowane, int wylosowana ) { int i = 0; if( iwylosowane <= 0 ) { return false; } do { if( tab[ i ] == wylosowana ) { return true; } i++; } while( i < iwylosowane ); return false; }
int losuj( int podane[] ) { int losowana = rand() % 3; return podane[ losowana ]; }
void calosc() { int podane[ 3 ]; int wylosowane[ 2 ]; int iwylosowane = 0; int i = 0; cout << "podaj 3 liczby" << endl; wczytaj( podane ); cout << "Podane liczby to: " << endl; do { cout << podane[ i ] << " "; i++; } while( i != 3 ); cout << endl; do { int wylosowana = losuj( podane ); if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false ) { wylosowane[ iwylosowane ] = wylosowana; iwylosowane++; } } while( iwylosowane < 2 ); i = 0; cout << "wylosowane liczby to: "; do { cout << wylosowane[ i ] << ", "; i++; } while( i < 2 ); cout << endl; return; }
int main() { srand( time( NULL ) ); int a; do { cout << "[1]-skorzystaj\n[0]-wyjdz" << endl; cin >> a; if( a == 1 ) { calosc(); } else { return 0; } } while( a != 0 ); return 0; }
|
|
« 1 » |