chrust |
» 2016-08-14 19:21:25 Dopiero się uczę więc już więcej nie będę się udzielał, bo nie wychodzi mi to :D |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-08-14 19:25:28 Wynik mi nie wychodzi, randomowe liczby się pojawiają, teraz to pod zgadywanie mi moja nauka podchodzi. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i++ ] == iLiczba ) return true; } while( i < ile ); return false; }
void podjaliczbe( int tab2[] ) { int i = 0; int liczba = 0; cout << "Podaj 3 liczby: " << endl; do { cout << "Liczba: "; cin >> liczba; tab2[ i++ ] = liczba; } while( i < 3 ); }
int losowanie() { int liczba = rand() % 3; return liczba; } int main() { srand( time( NULL ) ); int tab2[ 3 ]; int tab[ 2 ] = { - 1, - 1 }; int liczba = 0; int i = 0; podjaliczbe( tab2 ); do { int liczba = losowanie(); if( czyBylaWylosowana( liczba, tab, i ) == false ) tab[ i++ ] = liczba; } while( i < 2 ); i = 0; do { cout << tab[ i++ ] << endl; } while( i < 2 ); return 0; }
|
|
carlosmay |
» 2016-08-14 19:26:31 Dopiero się uczę więc już więcej nie będę się udzielał, bo nie wychodzi mi to :D |
Nie myli się ten, kto nic nie robi. edit: edytowałem poprzedni post, bo złego for'a skopiowałem. |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-08-14 19:34:55 Mam , mam wypisywanie liczb zrypałem, dzięki panowie, wróciłem się do do wypowiedzi z wskazówkami i była jasna odpowiedź. Jeszcze mam pytanie do douczenia się. int tab[ 2 ] = { - 1, - 1 }; stosować ten zapis czy nie? Z tym zapisem jak i bez tego losowanie jest poprawne. Do kolegi wyżej, pytaj się człowieku, pytaj, jak kto mówią kto pyta nie błądzi ja zadaję tu nieraz głupie pytania ale dostaję odpowiedzi i wiem że coś warto a coś nie warto robić, poza tym poznasz opinie innych odnośnie X działania a to wyjdzie na plus. #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i++ ] == iLiczba ) return true; } while( i < ile ); return false; }
void podjaliczbe( int tab2[] ) { int i = 0; int liczba = 0; cout << "Podaj 3 liczby: " << endl; do { cout << "Liczba: "; cin >> liczba; tab2[ i++ ] = liczba; } while( i < 3 ); }
int losowanie() { int liczba = rand() % 3; return liczba; } int main() { srand( time( NULL ) ); int tab2[ 3 ]; int tab[ 2 ]; int liczba = 0; int i = 0; podjaliczbe( tab2 ); do { int liczba = losowanie(); if( czyBylaWylosowana( liczba, tab, i ) == false ) tab[ i++ ] = liczba; } while( i < 2 ); i = 0; do { cout << tab2[ tab[ i++ ] ] << endl; } while( i < 2 ); return 0; }
|
|
chrust |
» 2016-08-14 19:36:34 Zmien ta linijke:
int liczba = losowanie();
na to:
int liczba = tab2[losowanie()]; |
|
carlosmay |
» 2016-08-14 19:40:39 @Gibas11 dał na to już na to pytanie odpowiedź. Indeksy zawsze są większe lub równe zeru, dzięki -1 mam pewność że 0 w tablicy będzie wylosowanym indeksem a nie domyślną wartością komórki. |
edit: int liczba = tab2[losowanie()]; |
Nie bardzo może tak zrobić, bo program losuje indeksy i sprawdza czy indeksy się nie powtarzają. Pomysł może być dobry, jeśli w kodzie będzie zabezpieczenie, aby użytkownik nie wprowadzał takich samych liczb. Podanie trzech takich samych liczb spowoduj zapętlenie programu, a my nie wiemy jaki to będą liczby, więc opieramy swoje działanie o niepowtarzające się indeksy. |
|
CCbolt Temat założony przez niniejszego użytkownika |
» 2016-08-14 19:58:57 Z tą wiedzą mogę kombinować jak zabezpieczyć program przed wpisaniem 2 identycznych liczb? Czy to jest jeszcze za ciężkie jak na ten poziom? // To przez mój nawyk typu "a co jeśli?" |
|
chrust |
» 2016-08-14 22:18:58 Jeśli chodzi o zabezpieczenie. Parę dni już próbuje, to zrobić. Program działa, ale nie do końca spełnia powierzoną funkcję. Gdy funkcja "sprawdzanie" zwróci 4 razy true, wtedy losuje liczbę przez rand. Mam problem by sprawdzić wylosowaną liczbę przez 'rand', czy już jest w zbiorze wylosowanych i czasem może się powtórzyć. Dzięki za pomoc. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wczytanie_liczb( int tab[], int przedzial ) { int petla = 0; do { cout << "Podaj liczbe: "; cin >> tab[ petla ]; cin.fail(); if( cin.fail() ) { cout << "Blad! Nie podales liczby!" << endl; cin.clear(); cin.sync(); } else petla++; } while( petla < przedzial ); } bool sprawdzanie( int liczba, int tablica[], int l_wyl ) { if( l_wyl <= 0 ) return false; int numer_tab = 0; do { if( tablica[ numer_tab++ ] == liczba ) return true; } while( numer_tab < l_wyl ); return false; }
int losy( int tab[] ) { return rand() % 10; }
int main() { srand( time( 0 ) ); int l_powt = 0; int l_wylosowanych = 0; int ile_wylosowac = 8; int zbior_liczb[ 10 ]; int wylosowane[ 8 ]; wczytanie_liczb( zbior_liczb, 10 ); do { int losowanie = zbior_liczb[ losy( zbior_liczb ) ]; if( sprawdzanie( losowanie, wylosowane, l_wylosowanych ) == false ) { wylosowane[ l_wylosowanych++ ] = losowanie; } else { l_powt++; if( l_powt > 3 ) { cout << "Podales za duzo tych samych liczb. Automatyczna zmiana liczby..." << endl; wylosowane[ l_wylosowanych++ ] =( rand() % 100 ) + 1; l_powt = 0; } } } while( l_wylosowanych < ile_wylosowac ); l_wylosowanych = 0; do { cout << "Wybrana liczba: " << wylosowane[ l_wylosowanych++ ] << endl; } while( l_wylosowanych < ile_wylosowac ); return 0; } |
|
1 2 « 3 » 4 |