carlosmay |
» 2015-09-02 13:37:34 Działa poprawnie. Jest to tylko przykład do analizy. A jeśli użytkownik poda trzy razy tą samą liczbę? (to program się zapętli).
Ty nie wiesz jakie liczby poda użytkownik! Losujesz dwa elementy z trzech, a co w nich jest to wielka tajemnica user'a.
Jeśli chcesz zrobić po swojemu to zabezpiecz program przed wprowadzeniem przez user'a liczby, która już istnieje w tablicy. |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-09-02 15:26:16 Zinterpretowałem zadanie ciut inaczej, patrząc na to z Twojej perspektywy (pewnie lepszej niż mojej, heh) masz rację i zwracam honor. Program działa poprawnie. Jednak patrząc z mojej perspektywy by wylosował po liczbie z tablicy 1 i zapisał do tablicy 2 napisałem coś takiego: (co sądzicie:)
#include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wypelnij_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; cout << "Wypisz " << rozmiar_tablicy << " liczby calkowite: \n"; do { cin.clear(); cin.sync(); cin >> tab[ licznik ]; licznik++; } while( licznik < rozmiar_tablicy ); }
int losowanie_liczb( int z_ilu_liczb_losowac ) { return rand() % z_ilu_liczb_losowac; }
void wyswietl_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; do { cout << "Element " << licznik + 1 << " to: " << tab[ licznik ] << "\n"; licznik++; } while( licznik < rozmiar_tablicy ); }
bool sprawdzenie_wypelnienia( int tab[] ) { if( tab[ 0 ] == tab[ 1 ] && tab[ 1 ] == tab[ 2 ] ) { cout << "Wprowadziles 3 razy ta sama liczbe, ponow probe !! \nKoniec programu"; return 0; } return true; }
bool sprawdzenie_losowania( int tab[], int wylosowana_liczba, int rozmiar_tablicy ) { int licznik = 0; do { if( tab[ licznik ] == wylosowana_liczba ) { return false; } licznik++; } while( licznik < rozmiar_tablicy ); return true; } int main() { srand( time( NULL ) ); const int rozm_tab1 = 3; const int rozm_tab2 = 2; int tab1[ rozm_tab1 ]; int tab2[ rozm_tab2 ]; wypelnij_tablice( tab1, rozm_tab1 ); cout << "Wypisane przez Ciebie liczby to: \n"; wyswietl_tablice( tab1, rozm_tab1 ); int licznik = 0, licznik1 = 0, losowana_liczba = 0; if( sprawdzenie_wypelnienia( tab1 ) == true ) { do { losowana_liczba = tab1[ losowanie_liczb( 3 ) ]; do { if( sprawdzenie_losowania( tab2, losowana_liczba, rozm_tab2 ) == true ) { tab2[ licznik1++ ] = losowana_liczba; } licznik++; } while( licznik < rozm_tab1 ); } while( licznik1 < rozm_tab2 ); cout << "Twoja nowa tablica:\n"; wyswietl_tablice( tab2, rozm_tab2 ); } return 0; }
|
|
carlosmay |
» 2015-09-02 15:47:26 Teraz zmodyfikuj program. Podajesz 10 liczb a losujesz 7.
Do sprawdzania liczb user'a użyj tej samej funkcji, która sprawdza losowane liczby. Na tym polega dobrodziejstwo funkcji, że dobrze napisana daje możliwość wykorzystania w wielu sytuacjach. |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-09-02 15:51:01 I tu mnie masz :) Nie próbuję nawet bo wiem że w tym przypadku mój tok myślenia jest beznadziejny. Zbyt wiele warunków musiałbym napisać abym to osiągnął. W przypadku wielu liczb lepiej (a nawet chyba koniecznie) zastosować trzeba losowanie według indexu z tablicy użytkownika a nie według podanych przez niego liczb. Edit: A oto poprawny program. (oby tak było bo chciałbym przejść już do zadania 2) Proszę o ocenę i zamykam temat :)
#include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wypelnij_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; cout << "Wypisz " << rozmiar_tablicy << " liczby calkowite: \n"; do { cin.clear(); cin.sync(); cin >> tab[ licznik ]; licznik++; } while( licznik < rozmiar_tablicy ); }
int losowanie_liczb( int z_ilu_liczb_losowac ) { return rand() % z_ilu_liczb_losowac; }
void wyswietl_tablice( int tab1[], int tab2[], int rozmiar_tablicy ) { int licznik = 0; do { cout << "Element " << licznik + 1 << " to: " << tab1[ tab2[ licznik ] ] << "\n"; licznik++; } while( licznik < rozmiar_tablicy ); }
bool sprawdzenie_losowania( int tab[], int rozmiar_tablicy, int wylosowany_index ) { if( rozmiar_tablicy < 0 ) { return false; } int licznik = 0; { do { if( tab[ licznik ] == wylosowany_index ) { return false; } licznik++; } while( licznik < rozmiar_tablicy ); } return true; }
int main() { srand( time( NULL ) ); const int rozm_tab1 = 3; const int rozm_tab2 = 2; int tab1[ rozm_tab1 ]; int tab2[ rozm_tab2 ]; wypelnij_tablice( tab1, rozm_tab1 ); int losowany_index = 0; int licznik = 0, licznik1 = 0; do { losowany_index = losowanie_liczb( rozm_tab1 ); do { if( sprawdzenie_losowania( tab2, rozm_tab2, losowany_index ) == true ) { tab2[ licznik1 ] = losowany_index; licznik1++; } licznik++; } while( licznik < rozm_tab1 ); } while( licznik1 < rozm_tab2 ); wyswietl_tablice( tab1, tab2, rozm_tab2 ); return 0; }
|
|
carlosmay |
» 2015-09-02 16:15:59 Zmodyfikowałem tylko funkcję wpisującą liczby user'a i usunąłem funkcję sprawdzającą user'a (do tego celu wykorzystałem funkcję sprawdzającą losowane liczby) oraz wywaliłem dodany warunek. Program z poprawkami ( niepotrzebne części kodu wykomentowane); #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
bool sprawdzenie_losowania( int tab[], int wylosowana_liczba, int rozmiar_tablicy );
void wypelnij_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; int liczba; cout << "Wypisz " << rozmiar_tablicy << " liczby calkowite: \n"; do { cin.clear(); cin.sync(); cin >> liczba; if( sprawdzenie_losowania( tab, liczba, licznik ) ) { tab[ licznik ] = liczba; licznik++; } } while( licznik < rozmiar_tablicy ); }
int losowanie_liczb( int z_ilu_liczb_losowac ) { return rand() % z_ilu_liczb_losowac; }
void wyswietl_tablice( int tab[], int rozmiar_tablicy ) { int licznik = 0; do { cout << "Element " << licznik + 1 << " to: " << tab[ licznik ] << "\n"; licznik++; } while( licznik < rozmiar_tablicy ); }
bool sprawdzenie_losowania( int tab[], int wylosowana_liczba, int rozmiar_tablicy ) { int licznik = 0; do { if( tab[ licznik ] == wylosowana_liczba ) { return false; } licznik++; } while( licznik < rozmiar_tablicy ); return true; } int main() { srand( time( NULL ) ); const int rozm_tab1 = 3; const int rozm_tab2 = 2; int tab1[ rozm_tab1 ]; int tab2[ rozm_tab2 ]; wypelnij_tablice( tab1, rozm_tab1 ); cout << "Wypisane przez Ciebie liczby to: \n"; wyswietl_tablice( tab1, rozm_tab1 ); int licznik = 0, licznik1 = 0, losowana_liczba = 0; do { losowana_liczba = tab1[ losowanie_liczb( 3 ) ]; do { if( sprawdzenie_losowania( tab2, losowana_liczba, rozm_tab2 ) == true ) { tab2[ licznik1++ ] = losowana_liczba; } licznik++; } while( licznik < rozm_tab1 ); } while( licznik1 < rozm_tab2 ); cout << "Twoja nowa tablica:\n"; wyswietl_tablice( tab2, rozm_tab2 ); return 0; }[ \c pp ] |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-09-02 16:22:17 Dzięki za poprawę wersji z losowaniem liczb - w domu ją przeanalizuję. A jak sprawa wygląda z losowaniem po indexie? Wszystko jest ok i mogę ruszać do następnego zadania? |
|
carlosmay |
» 2015-09-02 16:38:20 Jeśli programy działają tak jak mają działać to jest OK. |
|
1 2 « 3 » |