Zadanie domowe rozdział 21 / Problem ze zrozumieniem błędu
Ostatnio zmodyfikowano 2017-09-06 12:25
kundelko Temat założony przez niniejszego użytkownika |
Zadanie domowe rozdział 21 / Problem ze zrozumieniem błędu » 2017-08-28 11:25:27 Witam , zrobiłem pierwsze zadanie domowe z rozdziału 21 . Mój problem polega na tym , że (wydaje mi się ) zrobiłem dobrze zadanie ale nie wiem czemu w przypadku użycia funkcji "losowaniee" , wszystko działa jak powinno ale jak chciałem użyć funkcji "losowanie " nie chciało zakończyć pentli i program nie działał . A przecież te funkcje są identyczne tylko inna kolejność parametrów . Mógłby ktoś pomóc ? / wytłumaczyć błąd w moim rozumowaniu . Poniżej kod z obiema funkcjami . Jeśli ktoś zauważył inne błędy lub jakieś moje złe praktyki proszę o zwrócenie uwagi ;) #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool losowaniee( int n, int b[] ) { int c = 0; do { if( b[ c ] != n ) c++; if( b[ c ] == n ) return false; } while( c != 2 ); return true; }
bool losowanie( int t[], int g ) { int c = 0; do { if( t[ c ] != g ) c++; if( t[ c ] == g ); return false; } while( c != 2 ); return true; }
int main()
{ int k, i = 0, tablica[ 3 ], z = 0, f[ 2 ]; srand( time( 0 ) ); k =( rand() % 3 ) + 0; cout << "Podaj 3 liczby" << endl; do { cin >> tablica[ i ]; i++; } while( i != 3 ); cout << "wylosowane liczby to " << endl; do { if( losowanie( f, k ) == true ) { f[ z ] = k; z++; } else { k =( rand() % 3 ) + 0; } } while( z != 2 ); cout << tablica[ f[ 0 ] ] << endl; cout << tablica[ f[ 1 ] ] << endl; return 0; }
. |
|
maly7 |
» 2017-08-28 12:58:30 W funkcji losowanie za warunkiem if masz średnik: if( t[ c ] == g ); więc jeśli nawet się wykona to nie zwróci false. |
|
mateczek |
» 2017-08-29 07:34:47 bool losowaniee( int n, int b[] ) { int c = 0; do { if( b[ c ] != n ) c++; if( b[ c ] == n ) return false; } while( c != 2 ); return true; }
Jeden błąd poprawiłem (wiązał się z tym że pierwszy warunek sprawdzałeś dla f[c] a drugi dla f[c+1]). A masz jeszcze jeden trudniejszy do wyczajenia. Błąd u mnie się objawia tym, że nie możesz wylosować liczby 2 na pierwszym miejscu. Użyj debugera do namierzenia tego błędu. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; bool losowanie( int t[], int g ) { int c = 0; do { if( t[ c ] == g ) { return false; } c++; } while( c != 2 ); return true; }
int main()
{ int k, i = 0, z = 0; int f[ 2 ]; srand( time( 0 ) ); do { k =( rand() % 3 ) + 0; if( losowanie( f, k ) == true ) { f[ z ] = k; z++; } } while( z != 2 ); cout << f[ 0 ] << endl; cout << f[ 1 ] << endl; return 0; } |
|
matix04 |
» 2017-09-06 11:19:37 Witam Mam pytanie do autora tematu odnośnie jego zadania szczerze mówiąc nie rozumiem jak działa ten jego kod. W ogóle sam mam problem z tym zadaniem domowym i próbowałem przeanalizować kolegi rozwiązanie ale nie rozumiem go :) #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool losowaniee( int b[], int n ) { int c = 0; do { if( b[ c ] != n ) c++; if( b[ c ] == n ) return false; } while( c != 2 ); return true; }
int main()
{ int k, i = 0, tablica[ 3 ], z = 0, f[ 2 ]; srand( time( 0 ) ); k =( rand() % 3 ) + 0; cout << "Podaj 3 liczby" << endl; do { cin >> tablica[ i ]; i++; } while( i != 3 ); cout << "wylosowane liczby to " << endl; do { if( losowaniee( f, k ) == true ) { f[ z ] = k; z++; } else { k =( rand() % 3 ) + 0; } } while( z != 2 ); cout << tablica[ f[ 0 ] ] << endl; cout << tablica[ f[ 1 ] ] << endl; return 0; }
Mógłby ktoś napisać inny przykład rozwiązania tego zadania ?? Pozdrawiam |
|
karambaHZP |
» 2017-09-06 12:25:44 Zacznij pisać od początku. W funkcji main jest za dużo odpowiedzialności, a funkcja losowaniee niczego nie losuje.
int losuj() - zwróci wylosowaną liczbę. bool czyByla() - sprawdzi czy liczba występuje w tablicy i zwróci true lub false. void wypelnijTablice() - wypełnia tablicę randomowymi liczbami. void wypiszTablice() - wypisuje zawartość tablicy. int main() - zostaje tylko podstawowa logika. Wywołania funkcji.
Można to zadanie zrobić dużo prościej, ale narzędziami które nie były omówione. std::vector<> std::shuffle() std::find() std::generate() itd
|
|
« 1 » |