Liczniki i w losowej kolejnosci bez powtorzen
Ostatnio zmodyfikowano 2015-03-07 14:57
kynol Temat założony przez niniejszego użytkownika |
Liczniki i w losowej kolejnosci bez powtorzen » 2015-03-07 02:04:30 Witam mam problem, chcialem napisac program wyswietlajacy od i=0 do np i=15 i=1 i=2 i=3 ... itd Pozniej chcialem to zrobic tak by wyswietlalo mi te wszystkie i w randomowej kolejnosci bez powtorzen, ale mam problem, napisalem kod, cos jest zle albo o czyms nie wiem i nie dziala :/ #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int main() { srand( time( NULL ) ); int zmienna, pomoc = 3; for( int i = 0; i < pomoc; i++ ) { cout << "i= " << i << endl; zmienna++; } int * p = new int[ zmienna ]; for( int j = 0; j < pomoc; j++ ) { p[ j ] = j; } cout << "PO WYMIESZANIU: " << endl; int wylosowana; bool test; int * tab = new int[ zmienna ]; wylosowana =(( rand() % pomoc ) + 0 ); tab[ 0 ] = p[ wylosowana ]; cout << tab[ 0 ] << endl; for( int k = 1; k < pomoc; ) { wylosowana =(( rand() % pomoc ) + 0 ); for( int z = 0; z < pomoc; z++ ) { if( tab[ z ] == p[ wylosowana ] ) test = false; } if( test == true ) { tab[ k ] = p[ wylosowana ]; k++; } } for( int y = 1; y < pomoc; y++ ) cout << tab[ y ] << endl; delete[] p; delete[] tab; return 0; }
Troche to zawile, ale licze na pomoc co jest zle ;d |
|
aksen |
» 2015-03-07 02:16:27 |
|
Lora |
» 2015-03-07 02:17:06 Mógłbyś to trochę uprościć. Ta pętla ci się nie kończy, bo nigdy nie ustawiasz test na true. Zrób coś takiego: if( tab[ z ] == p[ wylosowana ] ) test = false; else test = true;
|
|
kynol Temat założony przez niniejszego użytkownika |
» 2015-03-07 02:23:48 @aksnet nie chce korzystac z gotowcow, chce wiedziec dlaczego moj program nie dziala.. ;/ @Lora Jak to sie nie konczy warunek konczacy petle z < pomoc co to zmienia? petla sie konczy ale program nie dziala tak jak powinien, poza tym wczesniej napisalem program ze losuje liczby bez powtorzen i zrobilem to w podobny sposob bez tego else i dziala #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int main() { srand( time( NULL ) ); int tab[ 15 ], zmienna; zmienna =(( rand() % 16 ) + 1 ); bool spr; tab[ 0 ] = zmienna; for( int i = 1; i < 15; ) { spr = true; zmienna =(( rand() % 15 ) + 1 ); for( int j = 0; j < 15; j++ ) { if( tab[ j ] == zmienna ) spr = false; } if( spr == true ) { tab[ i ] = zmienna; i++; } } cout << "wylosowane liczby: " << endl; for( int q = 0; q < 15; q++ ) { cout << tab[ q ] << endl; } return 0; }
|
|
Lora |
» 2015-03-07 02:27:58 No przecież ta zewnętrzna pętla się nie kończyła, bo test był zawsze false i nie dochodziło do inkrementacji k. I rzeczywiście wciąż nie działa. |
|
Lora |
» 2015-03-07 02:30:10 Spróbuj tak: test = true; for( int z = 0; z < pomoc; z++ ) { if( tab[ z ] == p[ wylosowana ] ) test = false; }
|
|
kynol Temat założony przez niniejszego użytkownika |
» 2015-03-07 02:31:08 W tym drugim programie co wstawilem kod, petla tez sie nie konczyla? a to dziwne bo sie zakonczyla i wylosowalo bez powtorzen ;P
k inkrementuje wtedy kiedy liczba wylosowana jest inna od liczby w tablicy.. a powinna sie zakonczyc bo na poczatku tej petli jest zmienna ktorej wartosc jest generowana randomowo wiec w koncu bedzie true, tzn powinno byc i powinno dzialac ale nie dziala.. przeanalizuj ten drugi kod co podalem, jest podobnie z zewnetrzna funkcja i program sie buja az huczy :)
@Lora
To niczego nie zmieni.... wez przenalizuj ten program bo ta zmienna test typu bool nie ma tu nic do rzeczy |
|
Lora |
» 2015-03-07 02:32:22 W tym drugim programie robisz to co właśnie napisałem. Widocznie zapomniałeś o tym teraz. |
|
« 1 » 2 3 |