kits Temat założony przez niniejszego użytkownika |
[Lekcja 21] Losowanie bez powtórzeń » 2013-06-13 17:14:45 Witam, od dłuższego czasu nie moge rozwiazac problemu mojego programu, owy problem polega na tym, ze losowane liczby wykraczaja poza dziedzine :( Kompletnie nie wiem w czym popelnilem blad, caly kod zrodlowy wydaje mi sie poprawny i logiczny, a także ,,schludnie,, prowadzony. Prosze o pomoc. Zadanie: Program ma nam wylosować 5 liczb bez powtórzeń. Liczby wylosowane mają być z przedziału od 1 do 10. Z góry dziekuje za pomoc, bedzie to dla mnie cenna wskazowka i pomoca. #include <iostream> #include <cstdlib> #include <ctime>
bool czybyla( int juz_wylosowanych, int tablica_liczb[], int liczba_wylosowana ) { if( juz_wylosowanych <= 0 ) return false; int tutek = 0; do { if( tablica_liczb[ tutek ] == liczba_wylosowana ) return true; tutek++; } while( juz_wylosowanych > tutek ); return false; } int losowanie() { return( rand() % 10 ) + 1; } int main() { srand( time( 0 ) ); int tablica[ 4 ]; int dotejporywylosowanych = 0; do { int ty = losowanie(); if( czybyla( dotejporywylosowanych, tablica, ty ) == false ) { ty = tablica[ dotejporywylosowanych ]; dotejporywylosowanych++; } } while( dotejporywylosowanych < 5 ); dotejporywylosowanych = 0; do { std::cout << tablica[ dotejporywylosowanych ] << "\n"; dotejporywylosowanych++; } while( dotejporywylosowanych < 5 ); return 0; } |
|
pekfos |
» 2013-06-13 17:59:38 ty = tablica[ dotejporywylosowanych ];
Zastanów się, co i gdzie przypisujesz. Program ma nam wylosować 5 |
Zrobiłeś tablicę na 4 liczby. |
|
kits Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:31:13 Rzeczywiście, tu zrobiłem błąd wynikający z nieuwagi. Dzieki za naprowadzenie :) A ten drugi był juz spowodowany nieprawidłowym myśleniem. Jak sie okazało ( i okazać miało :) ) kolejność argumentów w równaniu jest ważna.
Jeszcze raz dzięki za pomoc, teraz programik działa prawidłowo. Może już za szybko posuwam się z tymi kursami, w ciągu 5 dni doszedłem aż do tej lekcji, robiąc wszystkie poprzednie prace domowe i tworząć swoje wlasne male programiki :)
Pozdrawiam |
|
kits Temat założony przez niniejszego użytkownika |
Znowu mam problem z tym losowaniem bez powtórzeń ;/ Program losuje liczby, ktore sie powtarzaja oraz dziwnym trafem jak wpisze liczbe 1, to nigdy jej nie wylosuje i nie wyswietli » 2013-06-19 13:14:48
#include <iostream> #include <cstdlib> #include <ctime> bool funkcja3( int los, int ilejuzwylosowanych, int tablica[] ) { if( ilejuzwylosowanych == 0 ) false; { if( tablica[ 0 ] == los ) true; } false; } int funkcja2() { int k =( rand() % 3 ) + 0; switch( k ) { case 0: return 0; break; case 1: return 1; break; case 2: return 2; break; } } void funkcja1( int L[] ) { std::cout << "Podaj 3 liczby: \n"; for( int indeks = 0; indeks < 3; indeks++ ) { std::cout << "Liczba" << indeks + 1 << " "; std::cin >> L[ indeks ]; std::cout << "\n"; } } int main() { srand( time( 0 ) ); int liczby[ 3 ]; int finishowe[ 2 ]; funkcja1( liczby ); int ilejuzwylos = 0; do { int losik = liczby[ funkcja2() ]; if( funkcja3( losik, ilejuzwylos, finishowe ) == false ) { finishowe[ ilejuzwylos ] = losik; ilejuzwylos++; } } while( ilejuzwylos < 2 ); ilejuzwylos = 0; for( ilejuzwylos = 0; ilejuzwylos < 2; ilejuzwylos++ ) { std::cout << finishowe[ ilejuzwylos ] << "\n"; } return 0; }
. |
|
DejaVu |
» 2013-06-19 14:01:07
Porównaj sobie swoje rozwiązanie z innymi rozwiązaniami... tych tematów aż za dużo. |
|
kits Temat założony przez niniejszego użytkownika |
» 2013-06-21 15:24:04 Przejrzałem już te tematy. Rozumiem je i przeanalizowałem, ale prawie wszystkie dotycza innego polecenia. A ten ktory dotyczy mojego problemu, ma kompletnie różny kod źródłowy (w koncu mozna napisac program na wiele mozliwosci, ktory spelni ta sama funkcje :) ) Usiądę do problemu dzisiaj wieczorem, bo ostatnio mam malo czasu. Dziekuje za wskazówki :) Pozdrawiam. |
|
« 1 » |