Maciekb Temat założony przez niniejszego użytkownika |
Losowanie liczby bez powtórzeń proszę o pomoc » 2016-07-29 14:28:10 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int a = 0; int sprawdzanie( int tab[], int liczba, int licznik ) { if( licznik < 1 ) { return 1; } else { do { if( tab[ licznik ] == liczba ) return 0; licznik--; } while( licznik > 1 ); return 1; } }
int wylosuj() { return( rand() % 10 ) + 1; }
int main() { srand( time( NULL ) ); int licznik = 0; int tablica[ 5 ]; int liczba = wylosuj(); do { do { liczba = wylosuj(); if( sprawdzanie( tablica, liczba, licznik ) == 0 ) { liczba = wylosuj(); } } while( sprawdzanie( tablica, liczba, licznik ) == 0 ); tablica[ licznik ] = liczba; licznik++; cout << liczba << ","; int a = 0; } while( licznik != 5 ); do { a++; } while( a != 5 ); }
Program wyświetla liczby ale z powtórzeniami dlaczego? |
|
carlosmay |
» 2016-07-29 14:54:26 Cały kod jest zły. Działania w niewłaściwej kolejności. Niektóre niepotrzebne. Napisz kod od nowa (tego nie da się uratować, abyś zrozumiał błędy). Pisz kod po kawałku. Kompiluj i sprawdzaj, czy jest zgodny z oczekiwaniem. Debugger "lekarstwem na wszystko" (prawie). edit: wiedzę, że zdążyłeś odczytać przed edycją. Przeoczyłem jeden szczegół i źle oceniłem. |
|
karambaHZP |
» 2016-07-29 17:24:15 Program losuje osiem z dziesięciu indeksów tablicy wprowadzonej przez użytkownika. Program losuje indeksy, ponieważ nie ma kontroli wprowadzanych liczb i użytkownik może wprowadzić takie same. Wprowadzenie trzech takich samych spowodowałoby zapętlenie. #include <iostream> #include <limits> #include <cstdlib> #include <ctime> using namespace std;
int randomNumber( int rangeBegin, int rangeEnd ) { return rand() %( rangeEnd - rangeBegin + 1 ); }
bool isNumberRepeat( int randomedIndexes[], int size, int indexToCheck ) { if( size == 0 ) { return false; } int i { 0 }; do { if( randomedIndexes[ i++ ] == indexToCheck ) { return true; } } while( i < size ); return false; }
int getNumber() { int number; do { if( !cin.good() ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); } cin >> number; } while( !cin.good() ); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); return number; }
void fillArray( int numbersOfUser[], int size ) { int i { 0 }; do { numbersOfUser[ i++ ] = getNumber(); } while( i < size ); }
void printArray( int randomedIndexes[], int size, int numbersOfUser[] ) { int i { 0 }; do { cout << numbersOfUser[ randomedIndexes[ i++ ] ] << ' '; } while( i < size ); }
int main() { srand( time( 0 ) ); constexpr int SIZE = 10; constexpr int SIZE_RANDOMED_ARRAY = 8; int numbersOfUser[ SIZE ]; int randomedIndexes[ SIZE_RANDOMED_ARRAY ]; fillArray( numbersOfUser, SIZE ); int i { 0 }; do { int randomedIndex = randomNumber( 0, SIZE_RANDOMED_ARRAY ); cout << '\n' << randomedIndex << " - los\t"; if( !isNumberRepeat( randomedIndexes, i, randomedIndex ) ) { cout << randomedIndex << " - zapis"; randomedIndexes[ i++ ] = randomedIndex; } } while( i < SIZE_RANDOMED_ARRAY ); printArray( randomedIndexes, SIZE_RANDOMED_ARRAY, numbersOfUser ); cout << '\n'; }
|
|
Maciekb Temat założony przez niniejszego użytkownika |
» 2016-07-30 17:43:13 Dzięki za pomoc:) |
|
Maciekb Temat założony przez niniejszego użytkownika |
» 2016-07-30 19:00:59 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int losowanie() { return( rand() % 10 ) + 1; } bool sprawdzanie( int tab[], int wylosowanych, int liczba ) { int licznik = 0; if( wylosowanych == 0 ) { cout << "wylosowanych:" << wylosowanych << "liczba:" << liczba << "tablica:" << tab[ wylosowanych ]; return 1; } do { if( liczba == tab[ wylosowanych ] ) return 0; licznik++; cout << "wylosowanych:" << wylosowanych << "liczba:" << liczba << "tablica:" << tab[ wylosowanych ]; } while( wylosowanych > licznik ); return 1; }
int main() { srand( time( NULL ) ); int tablica[ 5 ]; int wylosowanych = 0; int liczba; do { liczba = losowanie(); if( sprawdzanie( tablica, wylosowanych, liczba ) == 1 ) { tablica[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 5 ); wylosowanych = 0; do { cout << "." << tablica[ wylosowanych ] << "."; wylosowanych++; } while( wylosowanych < 5 ); }
Poprawiłem program, ale dalej coś nie działa, dlaczego funkcja nie widzi tablicy? |
|
carlosmay |
» 2016-07-30 20:53:20 Potrzebujesz dwóch tablic: - jedna na liczby użytkownika, - druga na wylosowane wartości. |
|
XxSPIDUxX |
» 2016-08-01 13:16:04 czołem. sam mam problem z tym tematem. wpadłem na pomysł z dwoma tablicami. jednak coś jest tak. może jestem ślepy ale nie wiem. program działa dobrze. jednak po wylosowaniu liczb pojawiają się inne liczby. wpisałem 1,2,3. wyświetliło mi np. 4783124. btw jak to wrzucić do tego okienka z kodem? nie widzę takiego artykułu a wyszukiwarka też nie widzi. więc zamiast pisać tytuł gdzie znaleźć może napiszesz jak to zrobić karambaHZP? #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int podaj_liczby( int tab[], int ile ) { int i = 0; do { cout << "podaj liczbe " << i + 1 << " : "; cin >> tab[ i ]; i++; } while( i < ile ); }
bool czy_byla_wylosowana( int ile, int tab[], int iLiczba ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int losowanie() { return( rand() % 2 ); }
void wyswietl_liczby( int x, int ilosc, int tab[] ) { do { cout << "Wylosowana liczba to: " << tab[ x ] << endl; x++; } while( x < ilosc ); }
int main() { cout << "Witaj w tym pieknym programie. " << endl; srand( time( 0 ) ); int liczby[ 3 ], wylosowanych, liczby_wylosowane[ 2 ], x; wylosowanych = 0; x = 0; podaj_liczby( liczby, 3 ); do { int liczba; liczba = liczby[ losowanie() ]; if( czy_byla_wylosowana( wylosowanych, liczby_wylosowane, liczba ) == false ) { liczba = liczby_wylosowane[ x ]; x++; wylosowanych++; } } while( wylosowanych < 2 ); x = 0; wyswietl_liczby( x, 2, liczby_wylosowane ); return 0; }
|
|
karambaHZP |
» 2016-08-01 14:19:32 btw jak to wrzucić do tego okienka z kodem? |
Przeczytaj artykuł"zakładanie tematów". |
|
« 1 » 2 |