[ lekcja 21 ]Problemik z losowanie bez powtórzeń
Ostatnio zmodyfikowano 2013-06-28 15:51
Proleks Temat założony przez niniejszego użytkownika |
» 2013-06-27 17:48:27 Hmm jak napiszę w kodzie samo to się nie skompiluje : wistu\Pulpit\C++\uczymyreturn1.cpp|17|error: invalid conversion from 'int*' to 'int'| |
|
pekfos |
» 2013-06-27 17:49:33 Bo wczytane to tablica, a zwracasz liczbę (jedną). |
|
Proleks Temat założony przez niniejszego użytkownika |
» 2013-06-27 17:53:13 #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wczytujemy( int wczytane[], int a ) { int licznik = 0; cout << "Podaj 3 liczby " << endl; do { cin >> wczytane[ licznik ]; licznik++; } while( licznik < 3 ); return wczytane; }
int wylosuj_liczby() { return( rand() % 3 ); }
bool czybyla( int ile, int tablica[], int licznik ) { if( licznik <= 0 ) return false; int i = 0; do { if( tablica[ i ] == ile ) i++; return true; } while( i < licznik ); return false; } int main() { srand( time( NULL ) ); int wczytane[ 3 ]; int wylosowane = 0; wczytujemy( wczytane, 3 ); int ile[ 0 ]; int licznik = 0; do { wylosowane = wczytane[ wylosuj_liczby() ]; if( czybyla( wylosowane, ile, licznik ) ); { cout << ile[ licznik ] << " , "; licznik++; } } while( licznik < 2 ); system( "pause" ); return 0; } [ cpp ] chyba na dzisiaj nie mam łba do tego :/ ( dać sobie spokój ? ) |
|
jankowalski25 |
» 2013-06-27 17:57:40 |
|
Proleks Temat założony przez niniejszego użytkownika |
» 2013-06-27 22:17:57 Przeczytałem na nowo od tego momentu skąd podał administrator wyżej i napisałem taki kod prawie działa , lecz po takie mam błedy : 2 razy każe mi wpisywać liczby i na końcu mi nie losuje dwóch liczb tylko wyświetla 1 z góry i podaje jako drugą zawsze 1 :/ Oto kodzik : Mam nadzieje ,że jest owiele lepszy od tego pierwszego :p Chociaż możliwe ,że skopałem coś z funkcją int losuj() ,ponieważ ją pisałem jako ( jakby to nazwać ) wymysł dlaczego mi nie losowało liczby na końcu ale nadal nie działa :/ #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int podaj( int podaj[] ) { int licznik = 0; cout << "Podaj 3 liczby " << endl; do { cin >> podaj[ licznik ]; licznik++; } while( licznik < 3 ); return false; }
int czybyla( int iliczba, int tab[], int ile ) { if( ile <= 0 ) return false; int licznik = 0; do { if( tab[ licznik ] == iliczba ) return true; licznik++; } while( licznik < ile ); return false; }
int losuj() { return(( rand() % 3 ) + 1 ); } int main() { srand( time( NULL ) ); int podan[ 3 ]; int wybrane = 0; do { podaj( podan ); int podane = losuj(); if( czybyla( podane, podan, wybrane ) ); podan[ wybrane ] = podane; wybrane++; } while( wybrane < 2 ); wybrane = 0; do { cout << podan[ wybrane ] << " , "; wybrane++; } while( wybrane < 2 ); }
|
|
Geniusz |
» 2013-06-27 23:01:04 Umieściłeś wywołanie funkcji "podaj( int podaj[] )" w pętli, która się wykonuje dwa razy. do { podaj( podan ); int podane = losuj(); if( czybyla( podane, podan, wybrane ) ); podan[ wybrane ] = podane; wybrane++; } while( wybrane < 2 ); W rezultacie kompilator poprosi cię dwukrotnie o podanie trzech liczb. #edit1 I nie losuje Ci trzech liczb, ponieważ ustawiłeś, że pętla do...while przerywa się gdy "wybrane" nie jest mniejsze od 2, więc po wylosowaniu dwóch liczb, pętla się przerywa. } while( wybrane < 2 ); #edit2 Po warunku w if nie stawia się średnika if( czybyla( podane, podan, wybrane ) ); #edit3 Ogólnie to bezsensu jest to podawanie liczb, skoro i tak do tablicy przypisujesz całkiem inne liczby, wylosowane funkcją "losuj()" int podane = losuj(); if( czybyla( podane, podan, wybrane ) );
podan[ wybrane ] = podane;
|
|
Proleks Temat założony przez niniejszego użytkownika |
» 2013-06-27 23:26:17 Ok przeniosłem podaj( podan ); usunąłem średnik po if , ale nie zrozumiałeś mnie do końca ja chce żeby pokazywały się dwie liczby tylko chodzi o to by były one losowane z 3 co podał ktoś tzn : Ktoś podał liczby np. : 3 5 7 I teraz chce zrobić tak by program losował dwie liczby z tych trzech które mają zostać wpisane na sam koniec :p o coś takiego mi chodzi jak się wyraziłem nie jasno to sory . // Edit : wywaliłem ta funkcje int losuj() myślałem ,że będzie ona robiła to co opisałem wyżej . mój odświeżony kod : #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int podaj( int podaj[] ) { int licznik = 0; cout << "Podaj 3 liczby " << endl; do { cin >> podaj[ licznik ]; licznik++; } while( licznik < 3 ); return false; }
int czybyla( int iliczba, int tab[], int ile ) { if( ile <= 0 ) return false; int licznik = 0; do { if( tab[ licznik ] == iliczba ) return true; licznik++; } while( licznik < ile ); return false; }
int main() { srand( time( NULL ) ); int podan[ 3 ]; int wybrane = 0; int podane = podaj( podan ); do { if( czybyla( podane, podan, wybrane ) ) podan[ wybrane ] = podane; wybrane++; } while( wybrane < 2 ); wybrane = 0; do { cout << podan[ wybrane ] << " , "; wybrane++; } while( wybrane < 2 ); }
|
|
Geniusz |
» 2013-06-27 23:55:24 W funkcji "podaj( int podaj[] )" to zwracanie false możesz spokojnie usunąć, bo i tak nie ma to żadnego wpływu na działanie programu a typ zwracanego rezultatu zamienić na void. Tą losującą funkcję wstaw, ale to co zwraca przypisuj nie do tablicy, tylko do zmiennej określającej element tablicy. Czyli coś w tym stylu : do { wybrane = losuj(); cout << podan[ wybrane ] << " , "; wybrane++; } while( wybrane < 2 );
|
|
1 2 « 3 » 4 5 6 |