TheEhe Temat założony przez niniejszego użytkownika |
[C++]Problem z porównywaniem tablic » 2015-12-23 21:17:07 Witam ostatnio rozpocząłem swoją przygodę z C++. Postanowiłem napisać program "Totolotek" który po wpisaniu 6 liczb zapisanych w tablicy ma porównywać je z tymi wylosowanymi przez komputer. Jeżeli są takie same pogratulować wygranej jeśli nie ma losować dalej. Podczas uruchamiana programu nie potrafię zrozumieć na jakiej zasadzie porównuje on te tablice. Proszę o pomoc w sprawie dokładnego porównywania przedstawionych tablic. Oto cały kod programu: #include <iostream> #include <windows.h> #include <time.h>
using namespace std;
int strzaly[ 5 ], totolotek[ 5 ], liczba_prob = 1, totek;
int main() { srand( time( NULL ) ); cout << "Witaj w Totolotku!" << endl; cout << "Witaj w Totolotku! Podaj swoje 6 strzalow (Od 1 do 49): " << endl; for( int i = 0; i <= 5; i++ ) { cout << "Strzal " << i + 1 << " :"; cin >> strzaly[ i ]; } while( strzaly[ 5 ] != totolotek[ 5 ] ) { liczba_prob++; for( int i = 0; i <= 5; i++ ) { totolotek[ i ] = rand() % 49 + 1; } if( strzaly[ 5 ] == totolotek[ 5 ] ) { cout << "Udalo ci sie wygrac za " << liczba_prob << " proba."; } cout << "Wylosowane: " << totolotek[ 0 ] << ", " << totolotek[ 1 ] << ", " << totolotek[ 2 ] << ", " << totolotek[ 3 ] << ", " << totolotek[ 4 ] << ", " << totolotek[ 5 ] << " Twoje strzaly: " << strzaly[ 0 ] << ", " << strzaly[ 1 ] << ", " << strzaly[ 2 ] << ", " << strzaly[ 3 ] << ", " << strzaly[ 4 ] << ", " << strzaly[ 5 ] << endl; } return 0; } |
|
carlosmay |
» 2015-12-23 21:33:44 strzaly[ 5 ] == totolotek[ 5 ]
|
tak sprawdzasz tylko szóste liczby w tablicach. Musisz zrobić to na piechotę, w pętli. Posortuj to co podał użytkownik, oraz to co wylosował komputer. Następnie sprawdzasz po kolei, obie tablice indeksami. strzaly[ 5 ] != totolotek[ 5 ]
|
a pętla while zakończy swoje działanie jeśli ostatnie elementy tablicy będą równe, niezależnie od pozostałych elementów. |
|
TheEhe Temat założony przez niniejszego użytkownika |
» 2016-10-28 14:39:01 Wznowiłem prace na totolotkiem popracowałem troszkę nad algorytmem sprawdzającym czy liczby w tablicach są takie same nie zależnie od ich kolejności. Niestety utknąłem w martwym punkcie. Proszę was o jakieś wskazówki co robię źle ? Oto kod programu: #include <iostream> #include <windows.h> #include <time.h>
using namespace std;
bool BylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
bool sprawdzanie( int strzaly[], int wylosowane[] ) { int ile = 0; for( int j = 0; j <= 1; j++ ) { cout << endl; for( int i = 0; i <= 1; i++ ) { if( strzaly[ j ] == wylosowane[ i ] ) { ile++; } } } cout << endl << "Liczby powtarzajace sie: " << ile << endl; if( ile == 2 ) { return true; } else return false; }
int wylosuj() { return( rand() % 3 ) + 1; }
int main() { srand( time( NULL ) ); cout << "Witaj w TOTOLOTKU!" << endl; int strzaly[ 3 ]; cout << "Podaj swoje 2 nie powtarzajacych sie strzalow (Od 1 do 49): " << endl; cin >> strzaly[ 0 ] >> strzaly[ 1 ] ; int wylosowane[ 2 ]; int wylosowanych = 0; do { int liczba = wylosuj(); if( BylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych <= 2 ); cout << "Wylosowane: " << wylosowane[ 0 ] << " " << wylosowane[ 1 ]; wylosowanych = 0; sprawdzanie( strzaly, wylosowane ); return 0; }
|
|
mateczek |
» 2016-10-28 19:39:51 zobacz takie podejście. po wylosowaniu usuwasz wylosowaną z puli #include <iostream> #include<ctime> #include<vector> using namespace std; int main() { srand( time( 0 ) ); vector < int > pula; vector < int > wylosowane; for( int i = 1; i <= 49; i++ ) pula.push_back( i ); for( int i = 0; i < 6; i++ ) { int index = rand() % pula.size(); wylosowane.push_back( pula[ index ] ); pula.erase( pula.begin() + index ); } for( int los: wylosowane ) cout << los << " "; } |
|
karambaHZP |
» 2016-10-28 19:46:40 Najprościej użyć std::set<>. Losujesz póki rozmiar kontenera mniejszy od 6. |
|
TheEhe Temat założony przez niniejszego użytkownika |
» 2016-10-28 21:40:34 Zmieniłem zakres liczb i napisałem co dzieje się po kolei. Jednak dla zmiennej sterującej J (funkcji sprawdzającej czy liczby w tablicach są takie same) szufladka w tablicy o numerze J pokazuje złą liczbe znajdującą się w tej tablicy. Wklejam kod + ss. Nie wiem dla czego tak się dzieje. Podaje link do wyniku działania programu: https://drive.google.com/open?id=0Bziwvf3Wg3nuZ3RCUGxrdkR0RHM #include <iostream> #include <windows.h> #include <time.h>
using namespace std;
bool BylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int main() { srand( time( NULL ) ); cout << "Witaj w TOTOLOTKU!" << endl; cout << "Podaj swoje 3 nie powtarzajace sie strzaly (Od 1 do 4): " << endl; int strzaly[ 3 ]; cin >> strzaly[ 0 ] >> strzaly[ 1 ] >> strzaly[ 2 ]; cout << "Strzaly podane: " << strzaly[ 0 ] << " " << strzaly[ 1 ] << " " << strzaly[ 2 ] << endl; int wylosowane[ 3 ]; int wylosowanych = 0; do { int liczba = rand() % 4 + 1; if( BylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych <= 3 ); cout << "Wylosowane: " << wylosowane[ 0 ] << " " << wylosowane[ 1 ] << " " << wylosowane[ 2 ] << endl; int ile = 0; for( int j = 0; j <= 2; j++ ) { cout << endl; for( int i = 0; i <= 2; i++ ) { cout << "J: " << j << endl; if( strzaly[ j ] == wylosowane[ i ] ) { ile++; } cout << "Strzaly: " << strzaly[ j ] << endl; cout << "wylosowane: " << wylosowane[ i ] << endl; cout << "Ile: " << ile << endl; } } cout << "Liczby powtarzajace sie: " << ile << endl; if( ile == 3 ) { return true; } else return false; return 0; }
|
|
karambaHZP |
» 2016-10-28 21:53:23 #include <windows.h> #include <time.h> |
zamień na #include <cstdlib> #include <ctime>
Kod podziel na więcej funkcji: |
|
TheEhe Temat założony przez niniejszego użytkownika |
» 2016-10-28 22:59:19 Okej wszystko rozumiem tylko zerknij na screna którego załączyłem pod linkiem i wyjaśnij w miarę możliwości jak to się stało.
https://drive.google.com/open?id=0Bziwvf3Wg3nuZ3RCUGxrdkR0RHM |
|
« 1 » 2 |