[Lekcja 22] Problem z losowaniem bez powtórzeń
Ostatnio zmodyfikowano 2012-03-16 20:27
Fabjan94 |
» 2012-03-13 21:51:42 Problem polega na tym, że w funkcji: void wypelnij( int t[], int start, int ile, int zasieg ) { int liczba; for( int i = 0; i < ile; i++ ) { liczba = wylosuj( start, zasieg ); if( czyWylosowana( t, liczba, i ) == false ) { t[ i ] = liczba; } } } Jak funkcja czyWylosowana zwróci true to nie wpisuje żadnej wartość do tablicy więc program ustawia ją sam. najlepszym "jak dla mnie" sposobem jest: void wypelnij( int t[], int start, int ile, int zasieg ) { int liczba; for( int i = 0; i < ile; i++ ) { liczba = wylosuj( start, zasieg ); if( czyWylosowana( t, liczba, i ) == false ) { t[ i ] = liczba; } else i--; } }
Oczywiście pozostało Ci jeszcze ustawić by losowała najmniejszą i największą wartość i mógłbyś poprawić w jakiś sposób kod by był "ładniejszy" ;) |
|
V0ldek Temat założony przez niniejszego użytkownika |
» 2012-03-14 15:55:09 Dobra, naprawiłem, teraz losuje dobrze, ale w ogóle nie wyświetla liczby maksymalnej i min, nawet tego tekstu... I nie mogę znaleźć błędu. bool czyMax( int t[], int indeks1, int indeksMax ) { int indeks2; indeks2 = 0; for( int i = 0; i < 1; i++ ) { if( t[ indeks1 ] <= t[ indeks2 ] ) { return false; } else { if( indeks2 == indeksMax ) { return false; } } } return true; }
bool czyMin( int t[], int indeks1, int indeksMax ) { int indeks2; indeks2 = 0; for( int i = 1; i > 0; i++ ) { if( t[ indeks1 ] >= t[ indeks2 ] ) { return false; } else { if( indeks2 == indeksMax ) { return false; } } } return true; }
int znajdzMax( int t[], int ile ) { int liczba; for( int i = 0; i < ile; i++ ) { liczba = t[ i ]; if( czyMax( t, i, ile ) == true ) { return liczba; } } return liczba; }
int znajdzMin( int t[], int ile ) { int liczba; for( int i = 0; i < ile; i++ ) { liczba = t[ i ]; if( czyMin( t, i, ile ) == true ) { return liczba; } } return liczba; }
void wypiszMaxIMin( int t[], int ile ) { int max = znajdzMax( t, ile ); int min = znajdzMin( t, ile ); std::cout << "Najwieksza liczba to: " << max << std::endl; std::cout << "Najmniejsza liczba to: " << min << std::endl; }
|
|
Fabjan94 |
» 2012-03-15 16:40:46 Jak chcesz to moge sie tym zająć ale dopiero w jutro wieczorem. Dziś jedynie mogę Ci zamieścić jak ja to zrobiłem, ale trochę inaczej więc nie wiem jakie korzyści z tego będą jak nie dowiesz się gdzie masz błąd :) |
|
V0ldek Temat założony przez niniejszego użytkownika |
» 2012-03-15 17:31:39 Będę wdzięczny za każdą pomoc, ale wydaje mi się, że lepiej będzie jak znajdę tu błąd. Ja nad tym siedzę codziennie i... chyba po prostu za głupi jestem ;D |
|
Fabjan94 |
» 2012-03-15 18:08:27 To poczytaj sobie do jutra wcześniejsze lekcje, bo tak jak pisałem w tygodniu jedynie mam kilka minut dziennie kompa z netem i bez kompilatora. Po przerobieniu kodu wygląda on tak: int znajdzMax( int t[], int ile ) { int liczba = 10; for( int i = 0; i < ile; i++ ) { if( t[ i ] > liczba ) liczba = t[ i ]; } return liczba; }
int znajdzMin( int t[], int ile ) { int liczba = 30; for( int i = 0; i < ile; i++ ) { if( liczba > t[ i ] ) liczba = t[ i ]; } return liczba; }
void wypiszMaxIMin( int t[], int ile ) { std::cout << "Najwieksza liczba to: " << znajdzMax( t, ile ) << std::endl; std::cout << "Najmniejsza liczba to: " << znajdzMin( t, ile ) << std::endl; } Co zrobiłem? Na początek usunąłem 2 funkcję czyMin i czyMax ponieważ one były nie potrzebne, bo i tak wszystko robimy w jednej. Po drugie dla zmiennej liczba w zależności czy szukamy min czy max przyjąłem odpowiednią wartość :) Oczywiście, żeby kod był jeszcze ładniejszy możesz dla funkcji znajdzMax i znajdzMin przyjąć trzy argumenty ( int t[], int ile, int liczba ) przy czym przy wywoływaniu wypisywałbyś * znajdzMax( t, ile, start ) * znajdzMax( t, ile, stop ) |
|
V0ldek Temat założony przez niniejszego użytkownika |
» 2012-03-16 20:27:31 Ok, sądzę, że ogarniam kod. Nadal nie rozumiem czemu tamten kod nie działał, ale wielkie dzięki za pomoc, teraz spróbuję napisać ten program od początku, aż opanuję to do perfekcji, a potem biorę się za dalszą część kursu. |
|
1 « 2 » |