Problem z zadaniem z kursu o pętli for
Ostatnio zmodyfikowano 2013-02-06 23:17
Geniusz Temat założony przez niniejszego użytkownika |
Problem z zadaniem z kursu o pętli for » 2013-02-06 19:27:43 Witam, dopiero zaczynam naukę programowania i rozwiązywałem jedno z zadań z Kursu C++, jednak po napisaniu kodu, działanie programu nie zgadzało się z początkowymi założeniami. Proszę o pomoc czyli o wyjaśnienie, co jest źle w moim kodzie, albo o podsunięcie jakiegoś rozwiązania. Treść zadania : Napisz program który wykona wszystkie poniższe kroki w podanej kolejności: Losuje 10 liczb z przedziału od 10 do 30 włącznie i zapisuje je do tablicy; Wypisuje 10 wylosowanych liczb od początku do końca; Wypisuje 10 wylosowanych liczb od końca do początku; Znajduje najmniejszą oraz największą wylosowaną liczbę. Wypisuje najmniejszą i największą wylosowaną liczbę. Program nie może używać pętli innych niż pętla for. Kod napisany przeze mnie : #include <iostream> #include <cstdlib> #include <ctime>
int wylosujLiczby( int itablica[], int ile ) { srand( time( NULL ) ); for( int numer = 0; numer < ile; numer++ ) { itablica[ numer ] =(( rand() % 20 ) + 10 ); } } int wypiszTablice( int itablica[], int ile ) { for( int ilosc = 0; ilosc < ile; ilosc++ ) { std::cout << itablica[ ilosc ] << std::endl; } } int wypiszTabliceOdTylu( int itablica[], int ile ) { for( int ilosc = 10; ilosc > 0; ilosc-- ) { std::cout << itablica[ ilosc ] << std::endl; } }
int znajdzMinimum( int itablica[], int ile ) { int najmniejsza; for( int ilosc = 0; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] < najmniejsza ) itablica[ ilosc ] = najmniejsza; } return najmniejsza; }
int znajdzMaksimum( int itablica[], int ile ) { int najwieksza; for( int ilosc = 0; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] > najwieksza ) itablica[ ilosc ] = najwieksza; } return najwieksza; }
int wypiszMinMax( int iMin, int iMax ) { std::cout << "Najwieksza : " << iMax << std::endl; std::cout << "Najmniejsza : " << iMin << std::endl; }
int main() { int tablica[ 10 ]; wylosujLiczby( tablica, 10 ); wypiszTablice( tablica, 10 ); wypiszTabliceOdTylu( tablica, 10 ); int iMin = znajdzMinimum( tablica, 10 ); int iMax = znajdzMaksimum( tablica, 10 ); wypiszMinMax( iMin, iMax ); return 0; } # Problem rozwiązany, a rozwiązanie znajduje się niżej |
|
ashaneen |
» 2013-02-06 22:20:45 Ekspertem nie jestem ale tam gdzie nie zwracasz wartości do funkcji nie, czyli nie ma zadnego return, funkcja 'powinna' posiadac typ void. losowanie liczb to % zamiast * w (rand()%a)+b; Patrze dalej może jeszcze coś uda mi się podpowiedzieć, bo rozczytając twój kod sam się uczę,a założyłem podobny temat z podobnym problemem :) int znajdzMaksimum( int itablica[], int ile ) { int najwieksza; for( int ilosc = 0; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] > najwieksza ) itablica[ ilosc ] = najwieksza; } return najwieksza; }
Int może być nic większego przy kompilacji sie nie stanie, ale zwróć uwage na build log, bo aż krzyczy z bólu, że mu nie pasuje: ] |
|
Geniusz Temat założony przez niniejszego użytkownika |
» 2013-02-06 22:38:37 Dzięki za wskazanie błędu, już poprawiłem z "*" na "%" ale program dalej nie działa tak jak powinien. Co do void to wydaje mi się, że int też może być. Proszę o dalsze wypowiedzi :) Po kompilacji wyskakuje mi : 11 21 22 19 27 16 14 17 20 12 2357228 12 20 17 14 16 27 19 22 21 Najwieksza : 2009222697 Najmniejsza : 2009222697
Process returned 0 (0x0) execution time : 0.031 s Press any key to continue.
Rzeczywiście, muszę nad tym jeszcze pomyśleć, bo tak to by wychodziło, że ilość jest większa od zmiennej int |
|
Berux |
» 2013-02-06 22:48:24 Tak analizuję i w funkcji znajdującej najmniejszą i największą liczbę powinieneś przypisać do zmiennej, którą potem porównujesz z innymi elementami, pierwszy element tablicy. Zaś w pętli for licznik ustawiasz na 1. Czyli: int znajdzMaksimum( int itablica[], int ile ) { int najwieksza = itablica[ 0 ]; for( int ilosc = 1; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] > najwieksza ) itablica[ ilosc ] = najwieksza; } return najwieksza; } I w funkcji znajdzMinimum analogicznie do powyższego. |
|
Geniusz Temat założony przez niniejszego użytkownika |
» 2013-02-06 22:57:34 Pozmieniałem według twojej rady, ale wtedy pokazuje mi, że najmniejsza i największa są takie same. ...
int znajdzMinimum( int itablica[], int ile ) { int najmniejsza = itablica[ 0 ]; for( int ilosc = 1; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] < najmniejsza ) itablica[ ilosc ] = najmniejsza; } return najmniejsza; }
int znajdzMaksimum( int itablica[], int ile ) { int najwieksza = itablica[ 0 ]; for( int ilosc = 1; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] > najwieksza ) itablica[ ilosc ] = najwieksza; } return najwieksza; }
...
29 27 14 17 19 18 16 15 12 28 2357228 28 12 15 16 18 19 17 14 27 Najwieksza : 29 Najmniejsza : 29
Process returned 0 (0x0) execution time : 0.063 s Press any key to continue.
To wygląda tak jakby po prostu wypisywało pierwszą liczbę, a reszty już nie sprawdza ;/ |
|
ashaneen |
» 2013-02-06 23:04:05 ta pętla jest bezsensu od Tomczyka, poprostu wypisuję pierwszą tablicę.
Próbuje również z tym się uporać, jestem kawałek dalej niż Ty, odwiedź mój temat to napewno coś dla siebie znajdziesz. |
|
Berux |
» 2013-02-06 23:06:57 Zastanów się nad tym: itablica[ ilosc ] = najmniejsza; i itablica[ ilosc ] = najwieksza; Elementowi tablicy przypisujesz wartość zmiennej najwieksza/najmniejsza. Nie powinno być czasem na odwrót? Spróbuj jeszcze zamienić: itablica[ numer ] =(( rand() % 20 ) + 10 ); na to: itablica[ numer ] =( rand() % 20 ) + 10; Nie wiem czy to zadziała, ale sprawdź. /edit: @ashaneen Teraz już poprawiłem na kod w poście, w którym teraz oto piszę. :) |
|
Geniusz Temat założony przez niniejszego użytkownika |
» 2013-02-06 23:17:01 Jutro jeszcze nad tym pomyślę, bo już wyłączyłem komputer i pisze z komórki. Dzięki za pomoc, może coś z tego wyjdzie :) # Sprawdziłem i wszystko działa jak należy, bardzo dziękuje za pomoc. Poprawiony kod : #include <iostream> #include <cstdlib> #include <ctime>
int wylosujLiczby( int itablica[], int ile ) { srand( time( NULL ) ); for( int numer = 0; numer < ile; numer++ ) itablica[ numer ] =( rand() % 20 ) + 10; }
int wypiszTablice( int itablica[], int ile ) { std::cout << "Wylosowane liczby : " << std::endl; for( int ilosc = 0; ilosc < ile; ilosc++ ) std::cout << itablica[ ilosc ] << std::endl; }
int wypiszTabliceOdTylu( int itablica[], int ile ) { std::cout << std::endl << "Wylosowane liczby od tylu : " << std::endl; for( int ilosc = 9; ilosc > - 1; ilosc-- ) std::cout << itablica[ ilosc ] << std::endl; }
int znajdzMinimum( int itablica[], int ile ) { int najmniejsza = itablica[ 0 ]; for( int ilosc = 1; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] < najmniejsza ) najmniejsza = itablica[ ilosc ]; } return najmniejsza; }
int znajdzMaksimum( int itablica[], int ile ) { int najwieksza = itablica[ 0 ]; for( int ilosc = 1; ilosc < ile; ilosc++ ) { if( itablica[ ilosc ] > najwieksza ) najwieksza = itablica[ ilosc ]; } return najwieksza; }
int wypiszMinMax( int iMin, int iMax ) { std::cout << "Najwieksza : " << iMax << std::endl; std::cout << "Najmniejsza : " << iMin << std::endl; }
int main() { int tablica[ 10 ]; wylosujLiczby( tablica, 10 ); wypiszTablice( tablica, 10 ); wypiszTabliceOdTylu( tablica, 10 ); int iMin = znajdzMinimum( tablica, 10 ); int iMax = znajdzMaksimum( tablica, 10 ); wypiszMinMax( iMin, iMax ); return 0; }
Program działa teraz tak : Wylosowane liczby : 17 21 10 19 17 26 23 15 29 25
Wylosowane liczby od tylu : 25 29 15 23 26 17 19 10 21 17 Najwieksza : 29 Najmniejsza : 10
Process returned 0 (0x0) execution time : 0.031 s Press any key to continue.
|
|
« 1 » |