Nosferatu272 Temat założony przez niniejszego użytkownika |
Rozdział 21, Zadanie 1, » 2014-06-02 20:19:42 Witam. Kompilator nie wyrzuca żadnych błędów, jednakże aplikacja się wiesza po rozpoczęciu losowania. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int mod_los( int a, int b, int c ) { int wynik; wynik =( rand() % 3 ) + 1; switch( wynik ) { case 1: return a; case 2: return b; case 3: return c; } }
bool czyJuzbyla( int baza[], int ilewbazie, int lwylosowana ) { int licznik = 0; do { if( baza[ licznik ] == lwylosowana ) return true; licznik++; } while( licznik < ilewbazie ); return false; }
void losowanie( int baza[] ) { cout << endl << "Czas na losowanie!" << endl;; system( "pause" ); int ileLosowan = 2; do { int wynik = mod_los( baza[ 0 ], baza[ 1 ], baza[ 2 ] ); if( czyJuzbyla( baza, 3, wynik ) == false ) { cout << "Wylosowano:" << wynik << endl; ileLosowan--; } } while( ileLosowan > 0 ); }
int main() { srand( time( NULL ) ); int baza[ 3 ]; int licznik = 1; bool czyPoprawnie; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 0 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); licznik++; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 1 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); licznik++; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 2 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); losowanie( baza ); return 0; }
Jak rozwiązać ten problem? |
|
pekfos |
» 2014-06-02 20:27:06 czyJuzbyla() tu sprawdza, czy liczba wylosowana z tablicy jest w tej tablicy. Bez sensu.. jak i kilka innych rzeczy w tym kodzie. |
|
Nosferatu272 Temat założony przez niniejszego użytkownika |
» 2014-06-02 20:48:45 A teraz? Poza tym co jeszcze jest "bez sensu" i dlaczego? Program dalej nie odpowiada dokładnie w tym samym momencie. bool czyJuzbyla( int tablica[], int ilewbazie, int lwylosowana ) { int licznik = 0; do { if( tablica[ licznik ] == lwylosowana ) return true; licznik++; } while( licznik < ilewbazie ); return false; }
void losowanie( int baza[] ) { cout << endl << "Czas na losowanie!" << endl;; system( "pause" ); int ileLosowan = 2; int wynik[ 2 ]; int licznik = 0; do { wynik[ licznik ] = mod_los( baza[ 0 ], baza[ 1 ], baza[ 2 ] ); if( czyJuzbyla( wynik, 2, wynik[ licznik ] ) == false ) { cout << "Wylosowano:" << wynik[ licznik ] << endl; licznik++; } } while( licznik < ileLosowan ); }
|
|
Nosferatu272 Temat założony przez niniejszego użytkownika |
» 2014-06-02 21:51:33 Dobra, udało mi się rozwiązać problem i program działa, choć dalej jestem ciekaw co w nim jest "bez sensu": #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int mod_los( int a, int b, int c ) { int wynik; wynik =( rand() % 3 ) + 1; switch( wynik ) { case 1: return a; case 2: return b; case 3: return c; } }
bool czyJuzbyla( int tablica[], int ilewbazie, int lwylosowana ) { int licznik = 0; do { if( tablica[ licznik ] == lwylosowana ) return true; licznik++; } while( licznik < ilewbazie ); return false; }
void losowanie( int baza[] ) { cout << endl << "Czas na losowanie!" << endl;; system( "pause" ); int ileLosowan = 2; int wynik[ 2 ]; int licznik = 0; int proba; do { proba = mod_los( baza[ 0 ], baza[ 1 ], baza[ 2 ] ); if( czyJuzbyla( wynik, 2, proba ) == false ) { wynik[ licznik ] = proba; cout << "Wylosowano:" << wynik[ licznik ] << endl; licznik++; } } while( ileLosowan > licznik ); }
int main() { srand( time( NULL ) ); int baza[ 3 ]; int licznik = 1; bool czyPoprawnie; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 0 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); licznik++; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 1 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); licznik++; do { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> baza[ 2 ]; czyPoprawnie = cin.good(); cin.clear(); cin.sync(); } while( czyPoprawnie != true ); losowanie( baza ); return 0; }
|
|
PaSaSaP |
» 2014-06-02 22:54:47 Nie lubię pętli do..while(). Kod w mainie się powtarza. Mógłbyś zrobić do tego osobną funkcję albo opakować w jakąś pętlę. Po podaniu takich samych wartości program znajduje się w pętli nieskończonej. Użytkownik sam musi martwić się o wprowadzane dane. Funkcja mod_los() mogła by zostać zastąpiona przez losowanie indeksu dla tej całej bazy. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyJuzbyla( int tablica[], int ilewbazie, int lwylosowana ) { for(int i = 0; i < ilewbazie; i++) if(tablica[i] == lwylosowana) return true;
return false; }
void losowanie( int baza[] ) {
cout << endl << "Czas na losowanie!" << endl;; system( "pause" );
int ileLosowan = 2; int wynik[ 2 ]; int licznik = 0; int proba;
do { proba = baza[rand() % 3]; if( czyJuzbyla( wynik, 2, proba ) == false ) { wynik[ licznik ] = proba; cout << "Wylosowano:" << wynik[ licznik ] << endl; licznik++; }
} while( ileLosowan > licznik );
}
int main(void) { srand( time( NULL ) );
int baza[ 3 ]; int licznik = 1; bool czyPoprawnie; int wartosc;
while(licznik < 4) { cout << "Wpisz liczbe nr " << licznik << ":"; cin >> wartosc; if(!cin) continue; if(czyJuzbyla(baza, 3, wartosc)) continue; baza[licznik - 1] = wartosc; licznik++; }
losowanie( baza );
return 0; }
|
|
« 1 » |