[Lekcja 21] Problem z powtarzaniem : /
Ostatnio zmodyfikowano 2012-11-02 12:48
przemo098 Temat założony przez niniejszego użytkownika |
[Lekcja 21] Problem z powtarzaniem : / » 2012-11-02 11:19:14 Witam wszystkich w lekcji 22 spróbowałem sił by napisać sam od 0 program losujacy nie powtarzające się liczby całkowite z tym że nie działa ale nawet nie rozumiem dlaczego siedzę już z 4h kombinuję ale 0 a tu macie program, problem jest chyba gdzieś w pętli for ale nie wiem w czym dokładnie : /, i losuje aż 2 liczby... #include <iostream> #include <cstdlib> #include <ctime> #include <cstdio>
void wylosujLiczbe( int a[], int b ) { int e = 0, c = 0, z = 0; while( z < 5 ) { a[ e ] =(( rand() % 10 ) + 1 ); for( c = 0; c < e; c++ ) { if( a[ c - 1 ] = a[ e ] ) { a[ e ] =(( rand() % 10 ) + 1 ); c = 0; } } std::cout << a[ e ] << ", "; c = 0; z++; e++; } }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; wylosujLiczbe( tablica, 10 ); return 0; }
Proszę o pomoc |
|
DejaVu |
» 2012-11-02 11:41:57 Jeżeli szukasz rozwiązania, to: Jeżeli szukasz rady to: 1. napisz osobną funkcję wczytującą liczby do tablicy 2. napisz osobną funkcję losującą jedną wartość z tablicy 3. napisz osobną funkcję sprawdzającą czy w tablicy przekazanej poprzez argument istnieje podana wartość 4. złóż to do kupy Jeżeli oczekujesz, że ktoś Ci wskaże błędy w Twoim programie to niestety będziesz musiał dłuuugo poczekać (oraz nie ma gwarancji, że w ogóle ktokolwiek zabierze głos). PS. Problem dotyczy rozdziału 21, a nie 22 ( Losowanie bez powtórzeń). |
|
przemo098 Temat założony przez niniejszego użytkownika |
» 2012-11-02 11:45:52 Tak to ja też umiem zrobić, ale nie mogę tego w 1 funkcji zawrzeć : /, a może nie da się zrobić tak jak ja chcę :P. I faktycznie pomyliłem lekcje, przepraszam za pomyłkę ;(. |
|
DejaVu |
» 2012-11-02 11:49:12 Da się zrobić w jednej funkcji. |
|
przemo098 Temat założony przez niniejszego użytkownika |
» 2012-11-02 12:48:49 Dzięki za rady ;), jednak napisałem program wg. 1 pomysłu. #include <iostream> #include <cstdlib> #include <ctime> #include <cstdio>
void wylosujLiczbe( int a[], int b ) { int e = 0, c = 0, z = 0; a[ e ] =(( rand() % 10 ) + 1 ); std::cout << a[ e ] << ", \n"; while( z < 4 ) { e++; a[ e ] =(( rand() % 10 ) + 1 ); for( c = 0; c < e; c++ ) { if( a[ e ] == a[ c ] ) { a[ e ] =(( rand() % 10 ) + 1 ); c = 0; } if( a[ e ] == a[ 0 ] ) { a[ e ] =(( rand() % 10 ) + 1 ); c = 0; } } std::cout << a[ e ] << ", \n"; z++; } }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; wylosujLiczbe( tablica, 10 ); return 0; } Ale natknąłem na problem liczba 1 powtarzała się ale bardzo bardzo rzadko co mnie dziwiło dlatego dopisałem sprawdzenie jeszcze dla pierwszej liczby może teraz mi wytłumaczysz dlaczego tak się działo ? Bo te początki są trudne i jeszcze nie ogarniam za bardzo ;) tutaj kod: for( c = 0; c < e; c++ ) { if( a[ e ] == a[ c ] ) { a[ e ] =(( rand() % 10 ) + 1 ); c = 0; } if( a[ e ] == a[ 0 ] ) { a[ e ] =(( rand() % 10 ) + 1 ); c = 0; } }
|
|
« 1 » |