Losowanie bez powtórzeń. Kurs, zadanie domowe nr 1.
Ostatnio zmodyfikowano 2014-02-01 21:22
blazerek Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń. Kurs, zadanie domowe nr 1. » 2014-01-25 19:10:25 Treść zadania. 1. Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje. Bardzo długo szukałem błędu w kodzie. Podstawiałem liczby i krok po kroku obserwowałem co się z nimi stanie, ale nie mogę znaleźć przyczyny. Program czasem wypisuje powtarzające się liczby. Z góry dziękuje za pomoc. #include<iostream> #include<cstdlib> #include<ctime> using namespace std; int a = 0; int ta[ 3 ]; int wynik[ 2 ]; int m; int wczytanie( int tab[ 3 ] ) { cout << "Podaj 3 liczby " << endl; for( int i = 0; i < 3; i++ ) { cin >> tab[ i ]; ta[ a ] = tab[ i ]; a++; } }
int czybylawylosowana( int liczba1, int kl, int ta1[ 3 ] ) { int i = 0; if( kl <= 0 ) return false; do { if( liczba1 == ta1[ i ] ) return true; i++; } while( i < kl ); return false; }
int main() { srand( time( NULL ) ); int tablica[ 3 ]; int k = 0; int liczba; wczytanie( tablica ); cout << "##################" << endl; for( int i = 0; i < 3; i++ ) { cout << ta[ i ] << endl; } cout << "###################" << endl; do { m =( rand() % 3 ) + 0; liczba = ta[ m ]; if( czybylawylosowana( liczba, k, ta ) == false ) { wynik[ k ] = liczba; cout << wynik[ k ] << endl;; k++; } } while( k < 2 ); system( "pause" ); }
|
|
DejaVu |
» 2014-01-27 14:53:45 Tablice globalne to zło. Źle zabrałeś się za zadanie. W kodzie nie powinno być żadnej tablicy globalnej. Ponadto zapisujesz i czytach dane z innych tablic. |
|
leon_w |
» 2014-01-27 17:18:48 Poza tym nawet by to działało, gdybyś do funkcji sprawdzającej wysyłał tablicę "wynik", zamiast tablicy gdzie wpisuje się liczby. |
|
blazerek Temat założony przez niniejszego użytkownika |
» 2014-01-29 20:10:58 Dzięki za odpowiedzi. Poprawiłem zadanie nie używając tablic globalnych(kod poniżej). Teraz działa, ale mam 2 pytania. 1. Dlaczego tablice globalne to zło? 2. Czy w poniższym kodzie popełniłem jeszcze jakieś karygodne błędy, które powinienem poprawiać? #include<iostream> #include<cstdlib> #include<ctime> using namespace std; void wczytanie( int tablica[] ) { cout << "podaj 3 liczby" << endl; for( int i = 0; i < 3; i++ ) { cin >> tablica[ i ]; } } int sprawdzenie( int tablica[], int n, int liczb1, int wynik1[] ) { if( liczb1 <= 0 ) return false; if( tablica[ n ] == wynik1[ 0 ] ) return true; return false; }
int main() { srand( time( NULL ) ); int tab[ 3 ]; int liczb = 0; int wynik[ 2 ]; wczytanie( tab ); cout << "########" << endl; int m; do { m =( rand() % 3 ) + 0;; if( sprawdzenie( tab, m, liczb, wynik ) == false ) { wynik[ liczb ] = tab[ m ]; cout << wynik[ liczb ] << endl; liczb++; } } while( liczb < 2 ); return 0; } [ / cpp } |
|
Deyvin |
Zmiana typu » 2014-01-31 10:46:00 Cześć. Według mnie mógłbyś jeszcze zmienić typ funkcji "sprawdzenie" z int na bool. Jeśli źle prawię proszę mnie poprawić :) |
|
ktos-tam |
» 2014-02-01 21:22:40 1. Bo zżerają RAM i muszą istnieć przez cały czas pracy programu. |
|
« 1 » |