Rozdział 21. Losowanie liczb całkowitych bez powtórzeń - Praca Domowa
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Rozdział 21. Losowanie liczb całkowitych bez powtórzeń - Praca Domowa

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozdział 21. Losowanie liczb całkowitych bez powtórzeń - Praca Domowa
» 2018-06-20 13:47:42
Chciałbym zapytać, czy dobrze wykonałem drugie zadanie losujące 8 liczb bez powtórzeń. Wydaje mi się, że mój kod jest trochę za długi (?), ale program działa prawidłowo.

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void wczytaj( int liczba[] )
{
    int licz = 0;
    do
    {
        cout << "Podaj liczbe: ";
        cin >> liczba[ licz ];
        licz++;
    } while( licz < 10 );
   
    return;
}

void losuj( int liczba[] )
{
    int los2, los3, los4, los5, los6, los7, los8;
    int los1 =( rand() % 10 ) + 0;
    cout << liczba[ los1 ] << endl;
    do
    {
        los2 =( rand() % 10 ) + 0;
    } while( los2 == los1 );
   
    cout << liczba[ los2 ] << endl;
    do
    {
        los3 =( rand() % 10 ) + 0;
    } while( los3 == los2 || los3 == los1 );
   
    cout << liczba[ los3 ] << endl;
    do
    {
        los4 =( rand() % 10 ) + 0;
    } while( los4 == los3 || los4 == los2 || los4 == los1 );
   
    cout << liczba[ los4 ] << endl;
    do
    {
        los5 =( rand() % 10 ) + 0;
    } while( los5 == los4 || los5 == los3 || los5 == los2 || los5 == los1 );
   
    cout << liczba[ los5 ] << endl;
    do
    {
        los6 =( rand() % 10 ) + 0;
    } while( los6 == los5 || los6 == los4 || los6 == los3 || los6 == los2 || los6 == los1 );
   
    cout << liczba[ los6 ] << endl;
    do
    {
        los7 =( rand() % 10 ) + 0;
    } while( los7 == los6 || los7 == los5 || los7 == los4 || los7 == los3 || los7 == los2 || los7 == los1 );
   
    cout << liczba[ los7 ] << endl;
    do
    {
        los8 =( rand() % 10 ) + 0;
    } while( los8 == los7 || los8 == los6 || los8 == los5 || los8 == los4 || los8 == los3 || los8 == los2 ||
    los8 == los1 );
   
    cout << liczba[ los8 ] << endl;
    return;
}

int main()
{
    srand( time( NULL ) );
    int liczby[ 10 ];
    wczytaj( liczby );
    losuj( liczby );
    return 0;
}

Czy dałoby się jakoś skrócić ten kod? Np. inny warunek pętli.
P-171640
» 2018-06-20 14:03:03
Osobna pętla do każdej zmiennej? Serio?
Znasz pętle, więc z nich korzystaj. Zamiast kopiować 8 razy ten sam kod, napisz to w pętli.

BTW: gdyby tych liczb miałoby być 1000000?

Tip: napisz funkcję, która sprawdzi czy aktualnie wylosowana liczba została już wylosowana. Przyda się dodatkowa tablica do zapamiętania wylosowanych wartości i zmienna pamiętająca aktualny rozmiar tablicy.

Tip2: wygodnie użyć std::shufle na wypełnionej tablicy i wypisać 8 pierwszych wartości.
P-171642
« 1 »
 Strona 1 z 1