mati220 Temat założony przez niniejszego użytkownika |
[Kurs] Losowanie bez powtórzeń- dziwne liczby » 2014-03-14 20:58:34 Witam. Napisałem program losowania bez powtórzeń. Wszystko działa jak trzeba, liczby losują się z przedziału od 1 do 10 i nie powtarzają się. Jednak nieraz jak uruchamiam program pokazują się jakieś dziwne liczby chociaż zadeklarowałem że mają być losowane z przedziału od 1 do 10. Kod: #include<iostream> #include<ctime> #include<cstdlib> using namespace std;
int losowanie() { return( rand() % 10 ) + 1; }
int sprawdzanie( int liczba, int liczby[], int ile ) { int i = 0; if( ile == 0 ) return false; do { if( liczby[ i ] == liczba ) return true; i++; } while( i < 5 ); return false; }
int wypisywanie( int liczby[], int ile ) { int a = 1; ile = 0; do { cout << "Liczba " << a << " to: " << liczby[ ile ] << endl; a++; ile++; } while( ile < 5 ); } int main() { srand( time( 0 ) ); int liczba, ile = 0; int liczby[ 5 ]; cout << "Losowanie liczb bez powtorzen" << endl; do { liczba = losowanie(); if( sprawdzanie( liczba, liczby, ile ) == false ) liczby[ ile ] = liczba; ile++; } while( ile < 5 ); wypisywanie( liczby, ile ); return 0; }
|
|
MrPoxipol |
» 2014-03-14 21:12:06 pokazują się jakieś dziwne liczby |
Jakie? |
|
mati220 Temat założony przez niniejszego użytkownika |
» 2014-03-15 20:14:23 Typu "2293512", "1982172373" itp. Ewentualnie sam możesz sprawdzić jeśli masz kompilator. |
|
SeaMonster131 |
» 2014-03-15 20:26:16 do { liczba = losowanie(); if( sprawdzanie( liczba, liczby, ile ) == false ) liczby[ ile ] = liczba; ile++; } while( ile < 5 );
Jeżeli dana liczba istnieje już w tablicy, to powtórz losowanie. |
|
mati220 Temat założony przez niniejszego użytkownika |
» 2014-03-19 20:48:13 Teraz mam pytanie apropo: 1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. Próbowałem i normalnie losowało tyle że czasami się powtarzały. Doszedłem do takiego czegoś i teraz albo nie wykonuje się ani razu albo wywala program. Jakieś pomysły? #include<iostream> #include<ctime> #include<cstdlib> using namespace std;
int dodawanie_liczb( int liczby[], int wiela ) { int x = 1; do { cout << "Podaj " << x << " liczbe: " << endl; cin >> liczby[ wiela ]; wiela++; x++; } while( wiela < 3 ); return liczby[ wiela ]; }
int losowanie() { return( rand() % 3 ) + 0; }
int sprawdzanie( int liczba[], int ile, int i ) { int wiela = 0; if( ile == 0 ) return false; do { if( liczba[ i ] == liczba[ wiela ] ) return true; wiela++; } while( wiela < 3 ); return false; }
int wypisywanie( int liczby[], int liczba[], int wiela, int ile ) { int a = 1; wiela = 0; ile = 0; do { ile = liczba[ wiela ]; cout << "Liczba " << a << " to: " << liczby[ ile ] << endl; a++; wiela++; } while( wiela < 2 ); } int main() { srand( time( 0 ) ); int liczba[ 2 ], ile = 0, wiela = 0, i = 0, d = 0; int liczby[ 3 ]; dodawanie_liczb( liczby, wiela ); do { d = losowanie(); if( sprawdzanie( liczba, ile, i ) == false ) { liczba[ wiela ] = d; i++; ile++; wiela++; } } while( ile < 3 ); wypisywanie( liczby, liczba, wiela, ile ); return 0; }
|
|
OczkoSX |
» 2014-03-19 22:12:32 Nie przeglądałem kodu, ale mogę ci poradzić abyś zmienne przekazywał przez referencję. Wtedy bazujesz na oryginalnej zmiennej a nie na jej kopii. No i oczywiście nie musisz tworzyć zmiennej czasowej więc nie marnujesz tylu zasobów komputera. Jeśli coś ci nie działa to jeśli twoje IDE to obsługuje (np. jest to w Visual'u), to włącz krokowanie, analizujesz działanie programu krok po kroku co umożliwia podgląd w którym miejscu, i gdzie jest błąd ;) |
|
libed |
» 2014-03-20 18:42:35 #include <iostream> #include <ctime> #include <cstdlib>
const unsigned int rozmiar = 3;
void dodaj_liczby( int tab[] ) { for( unsigned int i = 0; i < rozmiar; ++i ) { std::cout << "Podaj " << i + 1 << " liczbe: "; std::cin >> tab[ i ]; } }
void wypisz_liczbe( int liczba ) { std::cout << "Wylosowana liczba: " << liczba << "\n"; }
int losuj() { return rand() % 3; }
bool jeszcze_nie_bylo( int liczba, int & poprzednia ) { if( liczba == poprzednia ) return false; poprzednia = liczba; return true; }
int main( int argc, char ** argv ) { srand( time( NULL ) ); int tablica[ rozmiar ] = { 0 }; dodaj_liczby( tablica ); int wylosowano = 0, pierwsza = - 1; while( wylosowano != 2 ) { int indeks = losuj(); if( jeszcze_nie_bylo( tablica[ indeks ], pierwsza ) ) { wypisz_liczbe( tablica[ indeks ] ); wylosowano++; } } return 0; } |
|
« 1 » |