Miquel Temat założony przez niniejszego użytkownika |
21. Losowanie bez powtórzeń (lekcja)-analiza kodu w celu wykrycia nieprawidlowosci » 2011-08-16 23:51:32 Prosze o analize ponizszego kodu w celu eliminacji blednych liczb wyswietlanych po losowaniu bez powtorzen. #include<iostream> #include<cstdlib> #include<ctime> using namespace std;
int wprowadzenie() { int liczba; bool zle; do { cout << "Wpisz liczbe: "; cin >> liczba; zle = cin.fail(); cin.clear(); cin.sync(); if( zle == 1 ) cout << "Podales bledny znak. Sproboj ponownie..." << endl; } while( zle ); return liczba; }
int powtorzenie( int tablica[], int wylosowana, int nr ) { if( nr <= 0 ) return false; int i = 0; do { if( tablica[ i ] == wylosowana ) return true; i++; } while( i < nr ); return false; }
int losowanie() { return( rand() % 8 ) + 1; }
int main() { srand( time( NULL ) ); int tablica[ 11 ], pozycja = 0, gotowe[ 10 ], i = 0; do { tablica[ pozycja ] = wprowadzenie(); pozycja++; } while( pozycja < 10 ); do { int wylosowana = losowanie(); if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false ) gotowe[ i ] = tablica[ wylosowana ]; i++; } while( i < 8 ); i = 0; do { cout << "Liczba nr: " << i << " z 10 wynosi " << gotowe[ i ] << endl; i++; } while( i < 8 ); return 0; }
/przypadkowo skasowala sie poprzednia tresc. |
|
SeaMonster131 |
» 2011-08-16 23:57:36 Napisz wszystko poprawnie, tak jak powinno być, stosując zasady interpunkcji i ortografii, następie przeczytaj http://cpp0x.pl/kursy/Kurs-STC/169, a dopiero wtedy Ci pomożemy. |
|
Miquel Temat założony przez niniejszego użytkownika |
» 2011-08-17 00:17:02 Dziekuje bardzo koledze SeaMonster131 za rady i pouczenie. Odnosnie wstawiania kodu w ramke cytatu rzeczywiscie byl to moj blad. W pozostala czesc mej wypowiedzi pozostanie niezmieniona(poniewaz niewygodnie jest uzywac polskich znakow diakrytycznych, kiedy nie jest to konieczne), ewentualnie zmoderowana/usunieta przez moderatora. Poprosilem o pomoc przy kodzie programu, a nie o umoralnienie, prostowanie patriotyczne i prace nad stylem wypowiedzi, mimo wszystko szanuje Twoje zaangazowanie;)
|
|
DejaVu |
» 2011-08-17 01:18:52 Napisz kiedy występuje błąd jeżeli takowy występuje (czytaj: podaj przypadek testowy dla którego program się źle zachowuje) :) |
|
Miquel Temat założony przez niniejszego użytkownika |
» 2011-08-17 07:40:02 Blad polega na podawaniu wartosci innych niz podane do tablicy. Przykladowo podaje liczby: 7,1,2,3,3,2,1,0,5,0. Wyswietla sie 8 losowych o wartosciach: 3,1,0,2293512,2293700,2011794645,2,-2 Dlaczego czesc z wartosci jest zgodna z podanymi, a czesc pozostaje wyrwana z haosu;)? |
|
GoldWolf |
» 2011-08-17 10:58:49 do { int wylosowana = losowanie(); if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false ) gotowe[ i ] = tablica[ wylosowana ]; i++; } while( i < 8 ); Tu masz błąd jeśli IF == FALSE, to wszystko gra., ale jeśli IF == TRUE, to wtedy powinieneś jeszcze raz zrobić losowanie, a Ty nie robisz ponownie losowania tylko dodajesz i++, zwiększasz index, zostawiając w tabeli gotowe taką wartość jaka tam była. |
|
DejaVu |
» 2011-08-17 11:00:54 Wczytywanie masz poprawne, wypisywanie też. Źle masz napisany kod losujący, czyli to:
do { int wylosowana = losowanie(); if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false ) gotowe[ i ] = tablica[ wylosowana ]; i++; } while( i < 8 );
Napisz najpierw losowanie z powtórzeniami poprawnie, a potem rozbuduj program o losowanie bez powtórzeń. |
|
DejaVu |
» 2011-08-17 11:01:39 lol :D |
|
« 1 » 2 |