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

Rozdział 21: Losowanie bez powtórzeń. Zadanie domowe do sprawdzenia.

Ostatnio zmodyfikowano 2015-12-13 17:07
Autor Wiadomość
KlusekPospolity
Temat założony przez niniejszego użytkownika
Rozdział 21: Losowanie bez powtórzeń. Zadanie domowe do sprawdzenia.
» 2015-12-13 15:57:40
1. 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.

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

void podaj( int tab[], int ile )
{
    int i = 0;
    int liczby;
    cout << "Podaj trzy liczby do tablicy:\n";
    do
    {
        cin >> liczby;
        tab[ i ] = liczby;
        i++;
    } while( i < ile );
   
}

void wypisz( int tab[] ) //tylko dla sprawdzenia czy zostały wczytane poprawnie
{
    int licznik = 0;
    cout << "Wczytano liczby: ";
    do
    {
        cout << tab[ licznik ] << ",";
        licznik++;
    } while( licznik < 3 );
   
    cout << endl << endl;
}

int losuj( int max, int min )
{
    return( rand() % max ) + min;
}

bool sprawdz( int tab[], int liczba, int wylosowane )
{
    if( wylosowane <= 0 )
         return false;
   
    int licznik = 0;
    do
    {
        if( tab[ licznik ] == liczba )
             return true;
       
        licznik++;
       
    } while( licznik < wylosowane );
   
    return false;
}


int main()
{
    srand( time( 0 ) );
   
    int tablica[ 3 ];
    podaj( tablica, 3 );
    wypisz( tablica );
    int wylosowane = 0;
    int tablicaLosuj[ 2 ];
    do
    {
        int liczba = tablica[ losuj( 3, 0 ) ];
        if( sprawdz( tablicaLosuj, liczba, wylosowane ) == false )
        {
            tablicaLosuj[ wylosowane ] = liczba;
            wylosowane++;
        }
    } while( wylosowane < 2 );
   
    wylosowane = 0;
   
    cout << "Wylosowane liczby to: ";
    do
    {
        cout << tablicaLosuj[ wylosowane ] << ", ";
        wylosowane++;
    } while( wylosowane < 2 );
   
    return 0;
}
P-141896
carlosmay
» 2015-12-13 15:59:17
Czy działa prawidłowo?
P-141898
KlusekPospolity
Temat założony przez niniejszego użytkownika
» 2015-12-13 16:03:51
Działa prawidłowo, chciałbym wiedzieć czy jest jakiś prostszy sposób by to zrobić, czy ten którym to wykonałem jest w sam raz?
P-141899
carlosmay
» 2015-12-13 17:07:18
Działa prawidłowo, chciałbym wiedzieć czy jest jakiś prostszy sposób by to zrobić
 Jest.

Zadania są by przećwiczyć nabyte umiejętności.
Z czasem i zdobywaną wiedzą okaże się, że coś co ma 150 linii można przy użyciu innych narzędzi napisać w 50 linii.
Trzeba doświadczenia.

np:
C/C++
void podaj( int tab[], int ile )
{
    int i = 0;
    cout << "Podaj trzy liczby do tablicy:\n";
    do
    {
        cin >> tab[ i++ ];
    } while( i < ile );
   
}
 Zmiana pętli do..while na pętlę for jeszcze skróci zapis.

C/C++
void podaj( int tab[], int ile )
{
    cout << "Podaj trzy liczby do tablicy:\n";
    for( int i = 0; i < ile; i++ )
         cin >> tab[ i ];
   
}
P-141901
« 1 »
  Strona 1 z 1