zadanie domowe rozdział 21
Ostatnio zmodyfikowano 2014-11-23 13:17
dafuck17 Temat założony przez niniejszego użytkownika |
zadanie domowe rozdział 21 » 2014-11-22 16:15:28 treść zadania: 1. 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. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wczytywanieLiczb( int tablica[], int licznik ) { do { cin.clear(); cin.sync(); cin >> tablica[ licznik ]; licznik++; } while( licznik < 3 ); }
bool losowanie( int tablica[], int licznik, int losowanie1, int losowanie2 ) { cout << "W sklad losowania wchodza liczby: " << endl; do { cout << tablica[ licznik ] << ", " << endl; licznik++; } while( licznik < 3 ); if( tablica[ 0 ] == tablica[ 1 ] == tablica[ 2 ] ) { return false; } cout << "Losowanie 2 liczb bez powtorzen..." << endl << endl; losowanie1 = tablica[ rand() % licznik ]; do { losowanie2 = tablica[ rand() % licznik ]; } while( losowanie2 == losowanie1 ); cout << "Wylosowane liczby:" << losowanie1 << ", " << losowanie2 << endl; return true; }
int main() { srand( time( 0 ) ); int tablica[ 3 ]; int licznik = 0; int a; int b; cout << "Wczytaj 3 liczby naturalne:" << endl; wczytywanieLiczb( tablica, licznik ); if( losowanie( tablica, licznik, a, b ) == false ) { cout << "Wylosowane liczby są nieprawidlowe" << endl << "Wprowadz liczby ponownie" << endl; wczytywanieLiczb( tablica, licznik ); } else { cout << " Koniec programu" << endl; } return 0; }
Przetestowałem program i wyszło na to że... if( tablica[ 0 ] == tablica[ 1 ] == tablica[ 2 ] ) { return false; } ... nie działa tak jakbym chciał. Chcę żeby wyżej przedstawiony skrawek kodu działał tak że jeśli podane 3 liczby będą takie same polecenie if zwracało fałsz, a następnie wykonywało ponowne losowanie. Wie ktoś dlaczego to nie działa? Pozdrawiam :) |
|
Monika90 |
» 2014-11-22 19:36:54 |
|
Rashmistrz |
» 2014-11-23 00:11:29 Operacje porównaniatablica[ 0 ] == tablica[ 1 ] == tablica[ 2 ] , Kolejność działań. :F Na przykład wszystkie te porównywane elementy będą miały wartość "3" to: tablica[ 0 ] == tablica[ 1 ] , zwróci nam prawdę, czyli boolowskie "1". 1 == tablica[ 2 ] , zwróci nam fałsz, bo 1 nie jest równe 3. == tworzy zdanie logiczne. Już rozumiesz swój błąd? Operacje logiczneJeśli pierwszy element jest równy drugiemu i drugi jest równy trzeciemu to na pewno pierwszy jest równy trzeciemu. :P (Poprawki za ciebie nie napiszę, ale podpowiedzieć mogę. C: ) |
|
dafuck17 Temat założony przez niniejszego użytkownika |
» 2014-11-23 13:17:06 Teraz chyba powinno być ok? :) #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wczytywanieLiczb( int tablica[], int licznik ) { do { cin.clear(); cin.sync(); cin >> tablica[ licznik ]; licznik++; } while( licznik < 3 ); }
bool losowanie( int tablica[], int licznik ) { int losowanie1; int losowanie2; cout << "W sklad losowania wchodza liczby: " << endl; do { cout << tablica[ licznik ] << ", " << endl; licznik++; } while( licznik < 3 ); if( tablica[ 2 ] == tablica[ 1 ] && tablica[ 1 ] == tablica[ 0 ] ) return false; cout << "Losowanie 2 liczb bez powtorzen..." << endl << endl; losowanie1 = tablica[ rand() % licznik ]; do { losowanie2 = tablica[ rand() % licznik ]; } while( losowanie2 == losowanie1 ); cout << "Wylosowane liczby:" << losowanie1 << ", " << losowanie2 << endl; return true; }
int main() { srand( time( 0 ) ); int tablica[ 3 ]; int licznik = 0; cout << "Wczytaj 3 liczby naturalne:" << endl; wczytywanieLiczb( tablica, licznik ); if( losowanie( tablica, licznik ) == false ) { cout << "Wylosowane liczby sa nieprawidlowe" << endl << "Wprowadz liczby ponownie" << endl; wczytywanieLiczb( tablica, licznik ); if( losowanie( tablica, licznik ) == false ) cout << "Koniec programu" << endl; } else { cout << "Koniec programu" << endl; } return 0; }
Dzięki rash zajebiście tłumaczysz :D |
|
« 1 » |