Berux Temat założony przez niniejszego użytkownika |
Lekcja 22, zadanie 3 (trzy pytania) » 2012-08-12 15:08:55 Witam. Sorry, że tak często piszę na forum, ale z tym problemem nie umiem sobie sam poradzić. 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.
Uwaga! Wszystkie programy mają wykorzystywać funkcje. Przykładowo: kod funkcji main dla ostatniego programu powinien wyglądać następująco: C/C++ 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; } Pozostałe programy powinny mieć zbudowaną funkcję main analogicznie do powyższego przykładu. |
Mój dotychczasowy kod: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std; void wylosujLiczby( int t[], int ile ) { srand( time( NULL ) ); for( int i = 0; i < ile; i++ ) { t[ i ] =( rand() % 21 ) + 10; } }
void wypiszTablice( int t[], int ile ) { for( int i = 0; i < ile; i++ ) { cout << t[ i ] << ", "; } }
void wypiszTabliceOdTylu( int t[], int ile ) { cout << "" << endl; for( int i = 0; ile > i; ile-- ) { cout << t[ ile ] << ", "; } } int main() { int tablica[ 10 ]; wylosujLiczby( tablica, 10 ); wypiszTablice( tablica, 10 ); wypiszTabliceOdTylu( tablica, 10 ); return 0; }
Problem nr 1 tkwi w tym, że wypisuje mi coś dziwnego z funkcji wypiszTabliceOdTylu. Przykładowy wynik programu: 27, 10, 29, 28, 11, 11, 18, 22, 28, 15, 2147348480, 15, 28, 22, 18, 11, 11, 28, 29, 10, 27 nr 2: Przeglądałem forum i nie rozumiem dlaczego ktoś funkcję znajdzMinimum oraz znajdzMaksimum napisał tak. Czy mógłby mi to ktoś wytłumaczyć? Kod: int znajdzMinimum( int tablica[], int liczba ) { int min = tablica[ 0 ]; min++; for( int licznik = 0; licznik < liczba; licznik++ ) if( tablica[ licznik ] < min ) min = tablica[ licznik ]; return min; }
int znajdzMaksimum( int tablica[], int liczba ) { int max; for( int licznik = 0; licznik < liczba; licznik++ ) if( tablica[ licznik ] > max ) max = tablica[ licznik ]; return max; }
Z góry dziękuję. |
|
DejaVu |
» 2012-08-12 15:26:41 Której instrukcji nie rozumiesz? Jakbyś rozumiał wszystkie instrukcje to byś rozumiał działanie całego kodu. A co do wypisywania od tyłu - nie działa bo źle napisałeś kod w funkcji. Sam powinieneś dojść co zrobiłeś źle. |
|
tirou |
» 2012-08-12 15:30:46 for( int i = 0; ile > i; ile-- ) a co to za bzdury ? :P
Wypisujesz liczby od końca. Czyli nie zaczynasz od 0 tylko od i=ile, warunek powinien być i > 0 gdyż tablice w cpp zaczynamy od "0". Następnie zmiejszasz i=ile, czyli i--.
Funkcje znajdujące minimum/max działają następująco:
jako int min nadajemy wartosc pierwszego elementu tablicy, następnie za pomocą pętli for przeglądamy całą tablicę, i teraz najważniejszy warunek: jeżeli element w tablicy o indeksie licznik jest mniejszy od min który ma wartość elementu nr 1 w naszej tablicy, to wartośći "min" nadajemy nową wartość odpowiadającą elementowi aktualnie przeglądanego o indeksie "licznik". Aż dojedziemy do końca tablicy a w zmiennej min , będzie wartość najmniejsza z tablicy. Wartość największą szuka się analogicznie z różnicą w warunku if.
PS. Tam w programie znajdzMinimum, chyba jest błąd, gdyż nie powinno być min++, bo to powoduje przejście do kolejnego elementu, i jeżeli np najmniejszym elementem byłby pierwszy element tablicy to program by go nie wykrył.
Edit/ Tylko jak mi program wykonuje działanie to nie wiem czemu element który powinien być na ost miejscu jest na pierwszym :S
|
|
Berux Temat założony przez niniejszego użytkownika |
» 2012-08-12 15:39:54 Teraz już rozumiem te obie funkcje. Oprócz tej z tym wypisywaniem. Według tego co zrozumiałem z twojej wypowiedzi, napisałem coś takiego: for( int i = ile; i <= 0; i-- ) { cout << t[ i ] << ", "; }
Tylko, że nic z tej funkcji mi nie wypisuje. |
|
m4tx |
» 2012-08-12 15:41:20 for( int i = ile; i <= 0; i-- )
Zastanów się nad <= ... :) |
|
tirou |
» 2012-08-12 15:42:07 zmiejszasz i i-- dopoki, nie będzie mniejsze od 0 i > 0 a u ciebie jak jest? :)
Znow u mnie problem mam z pierwszym elementem w tablicy bo MA byc na koncu cholera ! ;p (a jest na poczatku ) :S |
|
Berux Temat założony przez niniejszego użytkownika |
» 2012-08-12 15:44:43 no, dobra. Zmieniłem to na takie coś: for( int i = ile; i > 0; i-- ) { cout << t[ i ] << ", "; } , ale jest ten sam efekt z którym "przyszedłem" na forum. |
|
tirou |
» 2012-08-12 15:56:16 Mamy gdzieś mały błędzik w warunku w pętli bo wyświetla zawsze pierwszą liczbę źle, a reszta idzie dobrze. |
|
« 1 » 2 |