[lekcja 21]Problem z zadaniem domowym
Ostatnio zmodyfikowano 2013-05-04 15:43
Matix8741 Temat założony przez niniejszego użytkownika |
[lekcja 21]Problem z zadaniem domowym » 2013-05-04 14:22:43 Chodzi o pierwsze zadanie. 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. |
Napisałem program może trochę nie praktyczny ze względu na dużą ilość if-ów przy większej ilości losowanych liczb. Przejrzałem kod ze 3 razy i w tej wersji nie mogę znaleźć błędu, a można wpisać tylko 2 liczby i losuje dowolną liczbę tzn. bez wcześniej podanych ograniczeń. Proszę o pomoc bo tu nawet nie chodzi o to, że nie mogę lub mi się nie chce pisać programu od nowa, ale chcę zrozumień w czym rzecz. #include <ctime> #include <cstdlib> #include <iostream> int wpisz( int a ) { int liczby[ 3 ]; do { std::cin.clear(); std::cin.sync(); std::cin >> liczby[ a ]; } while( std::cin.fail() ==!false ); return liczby[ a ]; } int losuj( int max, int min ) { return( rand() % max ) + min; } int main() { srand( time( NULL ) ); int liczba = 0; int los[ 3 ]; int a = 0; int maks; int mini; int wylos[ 2 ]; std::cout << "wpisz trzy liczby do wylosowania!" << std::endl; do { wpisz( liczba ); los[ a ] = wpisz( liczba ); a++; liczba++; } while( a > 3 ); if( los[ 0 ] >= los[ 1 ] && los[ 2 ] ) maks = los[ 0 ]; else if( los[ 1 ] >= los[ 0 ] && los[ 2 ] ) maks = los[ 1 ]; else maks = los[ 2 ]; if( los[ 0 ] <= los[ 1 ] && los[ 2 ] ) mini = los[ 0 ]; else if( los[ 1 ] <= los[ 0 ] && los[ 2 ] ) mini = los[ 1 ]; else mini = los[ 2 ]; a = 0; wylos[ 0, 1 ] = losuj( maks, mini ); std::cout << "wylosowane: " << wylos[ 0 ]; if( wylos[ 0 ] == los[ 2 ] ) { do { std::cout << "wylosowane: " << wylos[ 1 ]; } while( wylos[ 1 ] == los[ 2 ] ); } if( wylos[ 0 ] == los[ 1 ] ) { do { std::cout << "wylosowane: " << wylos[ 1 ]; } while( wylos[ 1 ] == los[ 1 ] ); } if( wylos[ 0 ] == los[ 0 ] ) { do { std::cout << "wylosowane: " << wylos[ 1 ]; } while( wylos[ 1 ] == los[ 0 ] ); } return 0; } |
|
pekfos |
» 2013-05-04 15:09:28 można wpisać tylko 2 liczby |
Bo pętla, w której wczytujesz nie ma sensu. losuje dowolną liczbę tzn. bez wcześniej podanych ograniczeń |
Jakich ograniczeń? Kod jest w ogóle nie na temat. Przeczytaj dokładnie treść zadania. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
co? » 2013-05-04 15:19:21 Jeżeli chodzi o treść zadania to: użytkownik ma wpisać 3 liczby, np. 5000, 2000 i 1000,a program ma wylosować dwie z nich, np. 1000 i 2000(bez powtórzeń tzn. np. 2x1000) i następnie wypisać je na ekran czy nie? A co do pętli to chodzi Ci o pętle w funkcji int wpisz, czy w int main ? |
|
pekfos |
» 2013-05-04 15:27:36 do { wpisz( liczba ); los[ a ] = wpisz( liczba ); a++; liczba++; } while( a > 3 );
użytkownik ma wpisać 3 liczby, np. 5000, 2000 i 1000,a program ma wylosować dwie z nich, np. 1000 i 2000(bez powtórzeń tzn. np. 2x1000) i następnie wypisać je na ekran czy nie? |
Tak. Twój program robi co innego. Zamiast wylosować 2 liczby z podanych przez użytkownika, losujesz dowolną liczbę z zakresu podanego przez użytkownika. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-05-04 15:43:04 Ok, wielkie dzięki już rozumiem ! zamykam temat. |
|
« 1 » |