threaz Temat założony przez niniejszego użytkownika |
Rozdział 21, zadanie 1, napisanie funkcji sprawdzającej. » 2014-06-01 15:13:29 Witam wszystkich użytkowników. Zwracam się do Was z pytaniem do zadania pierwszego w lekcji 21(Losowanie bez powtórzeń), które postaram się wyjaśnić zaraz pod kodem. #include <iostream> #include <cstdlib> #include <ctime>
void wczytanie( int tab[] ) { int i = 0; do { std::cout << "Podaj " << i + 1 << " liczbe: "; std::cin >> tab[ i ]; i++; } while( i < 3 ); }
bool sprawdzenie( int tab1[], int Indeks ) { int i = 0; }
int main() { srand( time( NULL ) ); int tablica[ 3 ], tablica1[ 2 ]; wczytanie( tablica ); int indeks; int i = 0; do { indeks = std::rand() % 3; if( sprawdzenie( tablica1, indeks ) == false ) { tablica1[ i ] = tablica[ indeks ]; i++; } } while( i < 2 ); i = 0; do { std::cout << tablica1[ i ] << ", "; i++; } while( i < 2 ); return 0; }
Wyjaśnię teraz co chciałem osiągnać i z czym mam problem. 1. Funkcja wczytanie ma za zadanie wczytać 3 liczby od użytkownika i zapisać je do tablicy, którą przekazuję do niej w funkcji main. 2. Pomyślałem, że jeśli zapisałem poszczególne liczby jako, tablica[0], tablica[1], tablica[2], to teraz chcąc wylosować jedną z nich muszę wylosować po prostu jeden z indeksów 0, 1, 2. 3. Wylosowany indeks muszę sprawdzić przy pomocy funkcji sprawdzanie: jeśli true > wracam do losowania, jeśli false(podany indeks jeszcze nie został wylosowany) > zapisuję go do nowej tablicy (tablica1), wracam do losowania. 4. Wypisuję na ekran zawartość drugiej tablicy (tablica1), czyli dwóch liczb wylosowanych spośród 3. Problem w tym, że nie potrafię prawidłowo sformułować funkcji sprawdzanie. Do czego aktualnie doszedłem to: bool sprawdzenie( int tab[], int Indeks ) { int i = 0; do { if(...) return true; i++; } while( i < 3 ); return false; }
|
|
pekfos |
» 2014-06-01 15:20:01 tab[ i ] == Indeks ? Do tego program jest niepoprawny. Sprawdzasz 3 elementy, tablica ma 2 i do tego niezainicjalizowane. |
|
threaz Temat założony przez niniejszego użytkownika |
» 2014-06-01 15:45:19 Druga tablica ma służyć do przechowywania wartości już wybranych. Czyli tych 2 z 3, dlatego ma dwa elementy. Warość nadaję im tutaj: { tablica1[ i ] = tablica[ indeks ]; i++; }
} while( i < 2 ); Czyli załóżmy, że wylosowałem liczbę 1, czyli indeks = 1. Pierwszemu elementowi nowej tablicy, czyli tablica1[0] nadaję więc wartość tablica[1], czyli druga z wpisanych przeze mnie liczb. |
|
pekfos |
» 2014-06-01 16:06:59 Sprawdzasz 3 elementy, tablica ma 2 i do tego niezainicjalizowane. |
|
|
threaz Temat założony przez niniejszego użytkownika |
» 2014-06-01 17:49:04 Dzięki za wskazówki chociaż postanowiłem zabrać się do tego jeszcze raz. Napisałem to zupełnie inaczej. Nie wiem czy nie zbyt topornie. #include <iostream> #include <cstdlib> #include <ctime>
void wczytanie( int tab[] ) { int i = 0; do { std::cout << "Podaj " << i + 1 << " liczbe: "; std::cin >> tab[ i ]; i++; } while( i < 3 ); }
bool sprawdzenie( int pierwsza, int druga ) { if( pierwsza == druga ) return true; return false; }
int losowanie() { return std::rand() % 3; }
int main() { srand( time( NULL ) ); int tablica[ 3 ]; wczytanie( tablica ); int a, b; a = losowanie(); do { b = losowanie(); } while( sprawdzenie( a, b ) == true ); std::cout << tablica[ a ] << std::endl; std::cout << tablica[ b ] << std::endl; return 0; }
Gdyby komuś chciało się przejrzeć, prosiłbym o uwagi i wytknięcie ewentualnych błędów. Pozdrawiam[/b] |
|
pekfos |
» 2014-06-01 17:53:12 Topornie. Istnienie i używanie sprawdzenie() w tym kodzie, to rozciąganie banalnego zapisu bez większego sensu. Zamiast while( sprawdzenie( a, b ) == true ) wystarczy while( a == b ) . |
|
threaz Temat założony przez niniejszego użytkownika |
» 2014-06-01 21:51:38 Dzięki za pomoc. Już mi się udało. Wstawię swój kod, może komuś się przyda. #include <iostream> #include <cstdlib> #include <ctime>
void pobieranie( int tab[] ) { int i = 0; do { std::cout << "Podaj " << i + 1 << " liczbe: "; std::cin >> tab[ i ]; i++; } while( i < 3 ); }
int losowanie() { return rand() % 3; }
bool sprawdzenie( int tab[], int iLiczba, int ile ) { if( ile == 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int main() { srand( time( 0 ) ); int tablica[ 3 ], tabliczka[ 2 ]; int liczba, wylosowane = 0; pobieranie( tablica ); do { liczba = losowanie(); if( sprawdzenie( tabliczka, liczba, wylosowane ) == false ) { tabliczka[ wylosowane ] = liczba; wylosowane++; } } while( wylosowane < 2 ); std::cout << "Wylosowane przez Ciebie liczby to: " << std::endl; wylosowane = 0; do { std::cout << tablica[ tabliczka[ wylosowane ] ] << ", "; wylosowane++; } while( wylosowane < 2 ); return 0; }
|
|
« 1 » |