greenhouse Temat założony przez niniejszego użytkownika |
praca domowa z roz 21 - losowanie bez powtorzen » 2011-04-18 16:11:57 Program ma losować 2 liczby spośród 3 podanych przez użytkownika, jednak te wylosowane liczby są wybierane z całego zbioru liczb całkowitych. Gdzie tu jest błąd?
#include <iostream> #include <cstdlib> #include <ctime>
int wpisz( int a[], int i ) { do { std::cin >> a[ i ]; i++; } while( i < 3 ); }
int losowanie( int tab[], int ile ) { do { tab[ ile ] = rand(); ile++; } while( ile < 2 ); }
bool czybylawylosowana( int a, int tab[], int ile ) { if( ile < 1 ) return false; int i = 0; do { if( tab[ i ] == a ) return true; i++; } while( i < ile ); return false; }
int wypisz( int a[], int i ) { do { std::cout << a[ i ] << " ,"; i++; } while( i < 2 ); }
int main() { srand( time( 0 ) ); int liczba[ 3 ]; int licznik = 0; wpisz( liczba, licznik ); do { int wylosowana = losowanie( liczba, licznik ); if( czybylawylosowana( wylosowana, liczba, licznik ) == false ) { liczba[ licznik ] = wylosowana; licznik++; } } while( licznik <= 2 ); std::cout << "Wylosowano: "; licznik = 0; wypisz( liczba, licznik ); return 0; }
|
|
pekfos |
» 2011-04-18 16:16:20 licznik jest przekazywany przez wartość. jeśli gdzieś go później używasz to napraw to. jeśli nie, to uczyń go lokalnym. |
|
greenhouse Temat założony przez niniejszego użytkownika |
» 2011-04-18 16:25:24 Jestem mocno początkujący, więc nie bardzo rozumiem co do mnie napisałeś.
Mógłbyś wskazać co zmienić w kodzie (lub jeszcze lepiej sam go zmienić)? |
|
pekfos |
» 2011-04-18 16:29:41 int wpisz( int a[], int i ) { do { std::cin >> a[ i ]; i++; } while( i < 3 ); } zmień na to int wpisz( int a[] ) { for( int i = 0; i < 3; ++i ) std::cin >> a[ i ]; } może jest to niezwiązane z problemem (nie mam czasu twego kodu czytać) ale takie rozwiązanie zabezpiecza przed zbędnym bałaganem w kodzie. to samo zrób z innymi funkcjami. kod będzie łatwiejszy w sprawdzaniu. |
|
greenhouse Temat założony przez niniejszego użytkownika |
» 2011-04-18 17:01:07 Ok to jak ktoś miałby chwilę to prosiłbym o przejrzenie kodu.
Nie wiem jak się używa pętli 'for', więc nie chcę bezmyślnie zmieniać kodu, chciałbym zrozumieć co jest źle w tym co napisałem.
Ale oczywiście jestem wdzięczny za uwagi Pekfos. |
|
DejaVu |
» 2011-04-18 17:20:20 Porównaj sobie swoją funkcję czybylawylosowana do funkcji wypisz. Zwróć uwagę na zmienną i . |
|
greenhouse Temat założony przez niniejszego użytkownika |
» 2011-04-18 18:37:53 Zmieniłem to co wydawało mi się błędne, ale wciąż nie działa..
Kod poniżej. Jakieś dalsze wskazówki?
#include <iostream> #include <cstdlib> #include <ctime>
int wpisz( int a[], int i ) { do { std::cin >> a[ i ]; i++; } while( i < 3 ); }
int losowanie( int tab[], int i ) { do { tab[ i ] = rand(); i++; } while( i < 2 ); }
bool czybylawylosowana( int a, int tab[], int i ) { if( tab[ i ] == a ) return true; else return false; }
int wypisz( int a[], int i ) { do { std::cout << a[ i ] << " ,"; i++; } while( i < 2 ); }
int main() { srand( time( 0 ) ); int liczba[ 3 ]; int licznik = 0; wpisz( liczba, licznik ); do { int wylosowana = losowanie( liczba, licznik ); if( czybylawylosowana( wylosowana, liczba, licznik ) == false ) { liczba[ licznik ] = wylosowana; licznik++; } } while( licznik <= 2 ); std::cout << "Wylosowano: "; licznik = 0; wypisz( liczba, licznik ); return 0; }
|
|
DejaVu |
» 2011-04-18 19:15:43 |
|
« 1 » 2 3 |