Rozdział 21 - zadanie 1
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Rozdział 21 - zadanie 1

AutorWiadomość
Temat założony przez niniejszego użytkownika
Rozdział 21 - zadanie 1
» 2015-10-11 20:37:10
Treść zadania: "Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje."

Oto moje rozwiązanie, wygląda na to, że działa dobrze, ciekawi mnie tylko to, czy można ten program jakoś ulepszyć (zoptymalizować).

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

void wypelnij( int tablica[] ) //działa
{
    for( int i = 0; i < 3; i++ )
    {
        cout << "Podaj liczbe " << i + 1 << ": ";
        cin >> tablica[ i ];
    }
    cout << endl;
}

void odczytaj( int tablica[], int indeks ) //działa
{
    for( int i = 0; i < indeks; i++ )
    {
        cout << tablica[ i ] << " ";
    }
    cout << endl << endl;
}

int losowanie( int tablica[] )
{
    return rand() % 3;
}

bool czySiePowtorzyla( int tablica[], int liczba, int indeks )
{
    if( indeks == 0 )
         return false;
   
    for( int i = 0; i < 2; i++ )
    {
        if( tablica[ i ] == liczba )
             return true;
       
    }
   
    return false;
}

int main()
{
    srand( time( 0 ) );
    int wpisaneLiczby[ 3 ], wylosowaneLiczby[ 2 ];
    wypelnij( wpisaneLiczby );
    odczytaj( wpisaneLiczby, 3 );
    int wylosowanaLiczba, i = 0;
    do
    {
        wylosowanaLiczba = wpisaneLiczby[ losowanie( wpisaneLiczby ) ];
        if( czySiePowtorzyla( wylosowaneLiczby, wylosowanaLiczba, i ) == false )
        {
            wylosowaneLiczby[ i ] = wylosowanaLiczba;
            i++;
        }
    } while( i < 2 );
   
    odczytaj( wylosowaneLiczby, 2 );
    return 0;
}
P-138449
» 2015-10-14 15:32:07
Nie czytałem dokładnie kodu. Jeżeli masz 3 liczby, a chcesz wylosować i wypisać dwie, bardziej będzie wylosować liczbę, która nie zostanie wypisana. Natomiast losując, sprawdzając, czy wylosowana liczba się powtórzyła i powtarzając te kroki, póki nie zostanie wylosowana liczba, można teoretycznie czekać w nieskończoność.
P-138562
» 2015-10-14 17:37:28
Nie czytałem dokładnie kodu. Jeżeli masz 3 liczby, a chcesz wylosować i wypisać dwie, bardziej będzie wylosować liczbę, która nie zostanie wypisana. 
Niezgodne z treścią zadania.

C/C++
int losowanie( int tablica[] )
{
    return rand() % 3;
}
 
  Przekazujesz tablicę i jej nie używasz.
P-138567
« 1 »
 Strona 1 z 1