Trust Temat założony przez niniejszego użytkownika |
Lekcja 21. Losowanie tych samych indeksów... » 2012-05-22 23:21:41 Witam ! Głowię się nad losowaniem indeksów. w funkcji wypisz losują sie te same indeksy jest do ciągle indeks o wartości 3. Dlaczego ? #include <cstdlib> #include <iostream> #include <ctime> using namespace std;
int losowanie( int min, int max ) { int l; l =( rand() %( max - min ) + 1 ) + min; return l; }
int wpisz( int t[], int i ) { do { cin >> t[ i ]; i++; } while( i != 3 ); } int wypisz( int t[], int l ) { int indeks = 0; do { l = losowanie( 0, 2 ); cout << " " << t[ l ]; indeks++; l = 0; } while( indeks != 2 ); } int main() { int tablica[ 3 ], los = 0; wpisz( tablica, 0 ); wypisz( tablica, los ); system( "pause" ); return 0; } |
|
DejaVu |
» 2012-05-22 23:24:40 Przemyśl funkcję wypisującą. |
|
Trust Temat założony przez niniejszego użytkownika |
» 2012-05-22 23:44:07 Nic więcej tu chyba nie wymyślę. Jak zmieniłem tak jaki widać niżej program tak samo się zachowuje. Wyrzuca ostatnia cyfrę dwa razy. int wypisz( int t[] ) { int indeks = 0, l; do { l = losowanie( 0, 2 ); cout << " " << t[ l ]; indeks++; } while( indeks != 2 ); }
|
|
DejaVu |
» 2012-05-22 23:48:34 Przeanalizuj funkcję wypisującą WIELOKROTNIE lub napisz ją jeszcze raz bo jest w niej błąd. Każdą linijkę przeanalizuj (nawet oczywistą). |
|
ison |
» 2012-05-23 00:20:36 Błędu w funkcji wypisz jako takiego nie ma, DejaVu chyba chodziło o to, że miało być losowanie bez powtórzeń a ty tego nie sprawdzasz. Losuje ci zawsze t[2] bo pierwsze 2 randy modulo 3 akurat zawsze zwracają 2, możesz określić ziarno randa zależnie od czasu, wrzuć gdzieś na początek programu srand( time( 0 ) ); i problem minie. Poza tym l =( rand() %( max - min ) + 1 ) + min; tu +1 jest w złym miejscu |
|
DejaVu |
» 2012-05-23 01:26:11 Eh...
int wypisz( int t[], int l ) { int indeks = 0; do { l = losowanie( 0, 2 ); cout << " " << l; indeks++; l = 0; } while( indeks != 200 ); }
Wywołaj sobie taką funkcję, przemyśl czy aby na pewno wszystko gra. Uwagi zamieszczone przez kolegę wyżej są słuszne. A ja ze swojej strony mogę dodać, że w Twoim kodzie na pierwszy rzut oka odczytywałem inną intencję niż to co miałeś w zamyśle, więc niezbyt trafne podpowiedzi Ci dawałem :P (sorry, mój błąd - rutyna niszczy człowieka...).
|
|
Trust Temat założony przez niniejszego użytkownika |
» 2012-05-23 23:17:17 noo normalnie LOL ... nie dodałem i się tyle męczę. ehhh Teraz będę pamiętał. :) Dotychczas wiedziałem, ze to musi być, ale jakoś... sami widzicie ;p A ten "+1" to gdzie ma być? Wiem, ze musi być na pewno, bo liczb w przedziale musi być +1. A już wiem, jak to "+1" wyrzuciłem i dałem w int los = losowanie( 0, 3 );
drugi argument jako 3i działa :) Teraz mogę zacząć pisać losowanie dwóch liczb bez powtórzeń. :) Dzięki za pomoc :) Pozdroo |
|
« 1 » |