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

Rozdział 22 Zadanie 3

Ostatnio zmodyfikowano 2018-03-18 22:00
Autor Wiadomość
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
Rozdział 22 Zadanie 3
» 2018-03-18 18:15:03
Treść polecenia:

"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."

Właśnie jestem w punkcie w  którym mam napisać funkcję znajdującą najmniejsza/najwieksza. Utknąłem. Wg mnie to co napisałem może by działało gdyby liczby w tych wylosowanych się nie powtarzały. Proszę o podpowiedź jakąś jak napisać na pętlach for znajdywanie najmniejszej/najwiekszej liczby w tablicy.

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

void losowanieliczb( int tab[] )
{
    int zmienna;
    for( int i = 0; i <= 9; i++ )
    {
        zmienna = rand() % 21 + 10;
        tab[ i ] = zmienna;
    }
}

void wypisanieOdPoczatku( int tab[] )
{
    cout << endl << "Oto wylosowane liczby od poczatku do konca:" << endl;
    for( int i = 0; i <= 9; i++ )
    {
        cout << "Liczba nr: " << i + 1 << " to: " << tab[ i ] << endl;
    }
}

void wypisanieOdKonca( int tab[] )
{
    cout << endl << "Oto wylosowane liczby od konca do poczatku:" << endl;
    for( int i = 9; i >= 0; i-- )
    {
        cout << "Liczba nr: " << i + 1 << " to: " << tab[ i ] << endl;
    }
}

int znajdywanieNajwiekszej( int tab[] )
{
    int kolejna = 0, i = 0, licznik = 0;
   
    for( int x = 0; x <= 9; )
    {
        for( tab[ i ], tab[ kolejna ]; tab[ i ] > tab[ kolejna ]; kolejna++ )
        {
            for( licznik; licznik == 9; )
            {
                cout << "Najwieksza to: ";
                return tab[ i ];
            }
            licznik++;
            x++;
        }
    }
}

int main()
{
    srand( time( NULL ) );
    int tablica[ 10 ];
   
    losowanieliczb( tablica );
    wypisanieOdPoczatku( tablica );
    wypisanieOdKonca( tablica );
    znajdywanieNajwiekszej( tablica );
}
P-170081
pekfos
» 2018-03-18 18:40:35
C/C++
for( int x = 0; x <= 9; )
{
    for( tab[ i ], tab[ kolejna ]; tab[ i ] > tab[ kolejna ]; kolejna++ )
    {
        for( licznik; licznik == 9; )
        {
            cout << "Najwieksza to: ";
            return tab[ i ];
        }
        licznik++;
        x++;
    }
}
Nie mam pojęcia co tu chciałeś osiągnąć, ale do znalezienia maksimum wystarczy jedna pętla, bez zbędnych udziwnień:
C/C++
for( int i = 0; i <= 9; i++ )
P-170088
Glazus
» 2018-03-18 18:42:23
Co próbujesz zrobić w funkcji
int znajdywanieNajwiekszej( int tab[] )
?

Linijka po linijce?
P-170089
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
» 2018-03-18 18:57:48
Szczerze mówią to już zgłupiałem i nie wiem teraz sam co ja tam chciałem z tego wyciągnąć ale też jak to zrobić za pomocą pojedynczej petli for. Tym bardziej, że przecież te liczby mogą się powtarzać.
P-170091
pekfos
» 2018-03-18 18:59:24
A co to zmienia, że liczby mogą się powtarzać?
P-170092
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
» 2018-03-18 19:26:36
Bo ja chciałem to zrobić na takiej zasadzie, że jedna zmienna przechowuje ilość wykonania się pętli która sprawdza czy n-ta liczba z 10 liczb w tablicy jest wieksza od kolejnej liczby z tablicy i wtedy jezeli dla ktorejs liczby petla wykona sie 9 razy bedzie to znaczylo ze dla kazdej z tych liczb w petli jest ona od niej wieksza i to by oznaczalo ze jest jednoczesnie najwieksza z nich.
P-170097
pekfos
» 2018-03-18 19:42:19
Czyli w skrócie dla każdej liczby chcesz zliczyć wszystkie liczby mniejsze od bieżącej i jeśli wychodzi N-1, to bieżąca jest maksymalną. Masz więc pętlę która przechodzi po wszystkich liczbach i drugą w środku, która również przechodzi po wszystkich. Ale po co? Jak już, powinieneś zliczać liczby, które są większe, bo jeśli liczba jest maksymalna, to nie ma w zbiorze liczby większej, więc jeśli znajdziesz liczbę większą, to testowana liczba nie może być maksimum. Za to ta znaleziona większa liczba jest lepszym kandydatem. W tym momencie nigdy nie ma sensu wracać na początek w poszukiwaniu liczb większych, bo znamy największą liczbę z już przetestowanych do tego momentu. Nie ma więc sensu robić tej wewnętrznej pętli i rozwiązanie jest zrobione z użyciem tylko jednej.
P-170098
Robinsoncruzoe
Temat założony przez niniejszego użytkownika
» 2018-03-18 20:08:15
Ten swój poprzedni kod porzucam i próbuję wymyślić inny sposób, ale nie wiem jak zacząć, czarna dziura.
P-170099
« 1 » 2
  Strona 1 z 2 Następna strona