Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja 22, zadanie 3 (trzy pytania)

Ostatnio zmodyfikowano 2012-08-12 16:50
Autor Wiadomość
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:
C/C++
#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:
C/C++
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ę.
P-62322
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.
P-62326
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




P-62328
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:


C/C++
for( int i = ile; i <= 0; i-- )
{
    cout << t[ i ] << ", ";
}

Tylko, że nic z tej funkcji mi nie wypisuje.
P-62331
m4tx
» 2012-08-12 15:41:20
C/C++
for( int i = ile; i <= 0; i-- )
Zastanów się nad
<=
... :)
P-62333
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
P-62334
Berux
Temat założony przez niniejszego użytkownika
» 2012-08-12 15:44:43
no, dobra. Zmieniłem to na takie coś:
C/C++
for( int i = ile; i > 0; i-- )
{
    cout << t[ i ] << ", ";
}
 , ale jest ten sam efekt z którym "przyszedłem" na forum.
P-62335
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.
P-62338
« 1 » 2
  Strona 1 z 2 Następna strona