Mashnar Temat założony przez niniejszego użytkownika |
C++ - Duży lotek na funkcjach i tablicach » 2016-11-27 22:47:49 Mam problem z porównaniem liczb z dwóch tablic ( w tym przypadku z wylosowanymi liczbami przez komputer i tymi wpisanymi przez użytkownika). Jak mogę napisać aby wypisało mi ile liczb trafiłeś? Probowałem z ifami w funkcji policz lecz coś mi nie działa, tak jakby nie odczytywał w ogole danych z tablic z innych funkcji. #include <iostream> #include <cstdlib> #include <time.h>
using namespace std;
void podaj( int liczby[ 6 ] ) { cout << "Witaj w kumulacji duzego lotka! " << endl; cout << " Na poczatku podaj swoje 6 liczb " << endl; for( int i = 0; i <= 5; i++ ) { cin >> liczby[ i ]; } } void losuj( int wylos[ 6 ] ) { time_t t; srand(( unsigned ) time( & t ) ); cout << "Nastepuje zwolnienie blokady" << endl; cout << " Wylosowane dzis liczby TO " << endl; for( int i = 0; i <= 5; i++ ) { wylos[ i ] = rand() % 49 + 1; } for( int j = 0; j <= 5; j++ ) { cout << wylos[ j ] << ","; } } int policz( int liczby[ 6 ], int wylos[ 6 ] ) { int ilosc = 0; for( int i = 0; i >= 5; i++ ) { if( liczby[ i ] == wylos[ i ] ) ilosc++; } cout << ilosc; }
int main() { int liczby[ 6 ]; int wylos[ 6 ]; int traf; losuj( wylos ); podaj( liczby ); policz( liczby, wylos ); return 0; }
|
|
DejaVu |
» 2016-11-28 10:49:06 Twój kod jest nieprawidłowy. Wykonujesz losowanie z powtórzeniami, a nie bez powtórzeń. |
|
darko202 |
» 2016-11-28 11:08:20 |
|
Anim |
» 2016-11-28 12:05:36 Dodatkowo zauważ, że porównujesz czy na konkretnych miejscach są te same liczby, a nie czy w zbiorze liczb wyniki się pokrywają, czyli załózmy ,że wylosowałeś:
1,15,8, 48,20,21,
a następnie podałeś własne liczby:
15 ,1, 48, 8, 21, 20
Zauważ, że trafiłem szóstkę, a mimo to wynik w Twoim kodzie będzie 0 (jak poprawisz to o czym wspomniał @DejaVu i @darko202). Posortuj najpierw wartości w tablicach. |
|
Mashnar Temat założony przez niniejszego użytkownika |
» 2016-11-28 19:38:14 Dziękuje za pomoc ale nadal nawet po sortowaniu nie działa ( sprawdzałem czy funkcja sort działa). Ma ktoś jakiś pomysł? #include <iostream> #include <cstdlib> #include <time.h> #include <algorithm> using namespace std;
void podaj( int liczby[ 6 ] ) { cout << "Witaj w kumulacji duzego lotka! " << endl; cout << " Na poczatku podaj swoje 6 liczb " << endl; for( int i = 0; i <= 5; i++ ) { cin >> liczby[ i ]; } } void losuj( int wylos[ 6 ] ) { int x; time_t t; srand(( unsigned ) time( & t ) ); cout << "Nastepuje zwolnienie blokady" << endl; cout << " Wylosowane dzis liczby TO " << endl; for( int i = 0; i <= 5; i++ ) { do { x = rand() % 49 + 1; } while(( wylos[ 0 ] == x ) ||( wylos[ 1 ] == x ) || ( wylos[ 2 ] == x ) ||( wylos[ 3 ] == x ) ||( wylos[ 4 ] == x ) ||( wylos[ 5 ] == x ) ); wylos[ i ] = x; } for( int j = 0; j <= 5; j++ ) { cout << wylos[ j ] << ","; } } int policz( int liczby[ 6 ], int wylos[ 6 ] ) { int ilosc = 0; sort( liczby, liczby + 6 ); sort( wylos, wylos + 6 ); for( int i = 0; i <= 5; i++ ) { if( liczby[ i ] == wylos[ i ] ) ilosc++; } cout << ilosc; }
int main() { int liczby[ 6 ]; int wylos[ 6 ]; int traf; losuj( wylos ); podaj( liczby ); policz( liczby, wylos ); return 0; }
|
|
mateczek |
» 2016-11-28 22:11:20 przy takim algorytmie sprawdzającym losowanie musisz wyzerować tablice !!! int liczby[ 6 ] { 0 }; int wylos[ 6 ] { 0 };
|
|
Mashnar Temat założony przez niniejszego użytkownika |
» 2016-11-28 22:31:35 Hmm..ale jak wyzeruje tablice to przecież nie bedzie miala elementów dobrze rozumiem? Ale jeśli tak , to w ktorym miejscu? |
|
mateczek |
» 2016-11-28 22:50:03 będzie miała wszystkie zera. W obecnej sytuacji masz losowe liczby w tablicach. Tablice zerujesz przy deklaracji, deklaracja ma wyglądać tak int liczby[ 6 ] { 0 }; po prostu dopisz te klamry z zerami do swojej deklaracji!!! Możesz również zmienić trochę algorytm losowania. I sprawdzać tablicę tylko do jej aktualnego rozmiaru a nie po całości. #include <iostream> #include <time.h> using namespace std;
bool czyByla( int tabl[], int liczba, int actualSize ) { for( int i = 0; i < actualSize; i++ ) { if( tabl[ i ] == liczba ) return true; } return false; }
void losuj( int wylos[] ) { int x; time_t t; srand(( unsigned ) time( & t ) ); cout << "Nastepuje zwolnienie blokady" << endl; cout << " Wylosowane dzis liczby TO " << endl; for( int i = 0; i <= 5; i++ ) { do { x = rand() % 49 + 1; } while( czyByla( wylos, x, i ) ); wylos[ i ] = x; cout << x << " "; } }
int policz( int liczby[], int wylos[] ) { int ilosc = 0; for( int i = 0; i <= 5; i++ ) { for( int j = 0; j <= 5; j++ ) { if( liczby[ i ] == wylos[ j ] ) ilosc++; } } return ilosc; }
|
|
« 1 » 2 |