kamillo Temat założony przez niniejszego użytkownika |
Porównanie dwóch tablic jednowymiarowych. » 2016-09-27 11:30:46 Witam, nie potrafię sobie poradzić od dłuższego czasu z porównaniem dwóch tablic. Wpadłem na pomysł napisania totalizatora sportowego, ale nie potrafię przebrnąć porównania liczb wpisanych i liczb wylosowanych. Próbowałem porównać tablicę poprzez dwie zagnieżdżone pętle FOR, ale efekt był mizerny :( Dlatego wpadłem na pomysł wyciągania pojedynczych liczb z jednej tablicy i przyrównywania jej do n+1 pozycji drugiej tablicy. Sporadycznie program w dobrym momencie zwraca wartosc true funkcji porowananie() i nalicza punkty, ale nie wiem w którym miejscu jest jeszcze błąd. Wydaje mi się, że problemem może być kontrukcja pętli While w funkcji porownanie(), ale nie mam juz pomysłu jak ją inaczej przebudować. Wiem, że jeszcze muszę to pozabezpieczać, przed błędami, typu złe dane, ale to już inna bajka ;) Kod: #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
int losowanie() { return( rand() % 48 ) + 1; }
bool sprawdzanie( int sprawdzone[], int pozycja, int wylosowana ) { int i = 0; while( i < pozycja ) { if( sprawdzone[ i ] == wylosowana ) return true; i++; } return false; }
void wpisanie( int wpisane[] ) { cout << "Podaj szesc liczb: " << endl; for( int i = 0; i < 6; i++ ) cin >> wpisane[ i ]; }
bool porownanie( int rowna, int sprawdzone[], int pozycja ) { int i = 0; while( i < pozycja ) { if( sprawdzone[ i ] == rowna ) { return true; } i++; } return false; }
int main() { srand( time( 0 ) ); int losowane[ 6 ]; int sprawdzone[ 6 ]; int wpisane[ 6 ]; int i = 0; int punkty = 0; while( i < 6 ) { int wylosowana = losowanie(); if( sprawdzanie( sprawdzone, i, wylosowana ) == false ) { sprawdzone[ i ] = wylosowana; i++; } } wpisanie( wpisane ); i = 0; while( i < 6 ) { int rowna = wpisane[ i ]; if( porownanie( rowna, sprawdzone, i ) == true ) { punkty++; } i++; } cout << "Ilosc trafionych liczb to: " << punkty << endl << endl; for( int i = 0; i < 6; i++ ) cout << sprawdzone[ i ] << ", "; }
|
|
mateczek |
» 2016-09-27 12:40:38 Co jest nie tak z porównywarką na dwóch pętlach for ?? #include <iostream> using namespace std; int compare( int tab1[], int tab2[] ) { int punkty = 0; for( int i = 0; i < 6; i++ ) { for( int k = 0; k < 6; k++ ) { if( tab1[ i ] == tab2[ k ] ) punkty++; } } return punkty; }
int main() { int tab[ 6 ] = { 1, 2, 3, 4, 5, 6 }; int tab1[ 6 ] = { 2, 1, 3, 6, 5, 4 }; int tab3[ 6 ] = { 12, 1, 15, 23, 44, 54 }; cout << compare( tab, tab1 ) << endl; cout << compare( tab1, tab3 ) << endl; }
|
|
karambaHZP |
» 2016-09-27 14:25:21 #include <iostream> #include <array> #include <algorithm> using namespace std;
void showHitNumbers( const array < int, 6 >& arr1, const array < int, 6 >& arr2 ) { for( size_t i = 0; i < arr1.size(); ++i ) { if( find( arr2.cbegin(), arr2.cend(), arr1[ i ] ) != arr2.cend() ) { cout << arr1[ i ] << ' '; } } } int main() { array < int, 6 > arr1 = { 1, 2, 3, 4, 5, 6 }; array < int, 6 > arr2 = { 2, 1, 3, 6, 5, 4 }; array < int, 6 > arr3 = { 12, 1, 15, 23, 44, 54 }; showHitNumbers( arr1, arr2 ); cout << '\n'; showHitNumbers( arr1, arr3 ); } |
|
michal11 |
» 2016-09-27 15:27:51 Dodam jeszcze funkcje do sprawdzania czy jakikolwiek element jednej tablicy znajduje się w drugiej tablicy: return std::find_first_of( arr1.cbegin(), arr1.cend(), arr2.cbegin(), arr2.cend() ) != arr1.cend(); |
|
kamillo Temat założony przez niniejszego użytkownika |
» 2016-09-27 23:10:29 Bardzo dziękuje za pomoc ;) @Mateczek Ta moja podwójna pętla FOR była wcześniej bezmyślnie umieszczona w pętli while i to psuło wszystko, bo jeszcze dodatkowe 6 razy powtarzało. |
|
« 1 » |