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

Rozdział 22. Omówienie pętli for - zadanie

Ostatnio zmodyfikowano 2017-08-24 14:00
Autor Wiadomość
thomson92
Temat założony przez niniejszego użytkownika
Rozdział 22. Omówienie pętli for - zadanie
» 2017-08-24 13:26:20
Cytuje zadanie:
"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."


Wszystko idzie prawie idealnie. Porównuje do siebie te samą tablice:

C/C++
if( tab[ i ] > tab[ x + 1 ] )
     x++;
else
     i++;


i program wyswietla mi normalnie największą wartość:

C/C++
if( i == 9 || x == 8 )
{
    if( tab[ i ] > tab[ x + 1 ] )
         cout << "najwieksza liczba z tablicy to1: " << tab[ i ] << " :" << i << endl;
    else
         cout << "najwieksza liczba z tablicy to2: " << tab[ x + 1 ] << " :" << x + 1 << endl;
   
}

Niestety po wyświetleniu najwyższej wartości pętla ciągle się wykonuje (do ok. 11stego indeksu, któego tablica nie obejmuje) inkrementując "x" lub "i" w zależności od tego, która wartość wcześniej była mniejsza. Nie wiem co zrobiłem źle, może przekombinowałem przy tworzeniu warunków dla pętli for ponieważ tam nie umieściłem iteracji tylko wewnątrz pętli ponieważ w moim zamyśle jeżeli tab jest większe od tab[x + 1] (gdzie x = i) to program powinien iterować tylko "x" a nie "i" więc musiałem to zrobić w taki sposób.

Tutaj cała funkcja:

C/C++
void petlafor()
{
    int tab[ 10 ];
   
    for( int i = 0; i < 10; i++ )
    {
        tab[ i ] = rand() %( 30 - 9 ) + 10;
        cout << "liczba z tablicy nr" << i + 1 << " :" << tab[ i ] << endl;
    }
   
    for( int i = 9; i >= 0; i-- )
    {
        cout << "Wartosci tablicy od konca " << i + 1 << " :" << tab[ i ] << endl;
    }
   
    int x = 0;
   
    for( int i = 0; i < 10 || x < 9; )
    {
       
        cout << "wartosc i: " << i << endl; //sprawdzam, które indeksy tablicy beda ze soba porownywane
        cout << "wartosc x: " << x + 1 << endl;
       
        if( tab[ i ] > tab[ x + 1 ] )
             x++;
        else
             i++;
       
        if( i == 9 || x == 8 )
        {
            if( tab[ i ] > tab[ x + 1 ] )
                 cout << "najwieksza liczba z tablicy to1: " << tab[ i ] << " :" << i << endl;
            else
                 cout << "najwieksza liczba z tablicy to2: " << tab[ x + 1 ] << " :" << x + 1 << endl;
           
        }
    }
   
}

Z góry dzieki za wszelkie podpowiedzi.
P-164262
karambaHZP
» 2017-08-24 14:00:23
Do znalezienia największej i najmniejszej wartości użyj dodatkowej zmiennej.
np:
C/C++
int max = tablica[ 0 ];
for( int i = 1; i < rozmiarTablicy; ++i )
{
    if( tablica[ i ] > max )
    {
        max = tablica[ i ];
    }
}
P-164266
« 1 »
  Strona 1 z 1