Element tablicy jako tablica

0

Cześć mam pytanie odnośnie tego kodu:

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include <limits>
#include <windows.h>
using namespace std;

bool czyBylaWylosowana( int liczba, int tablica[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == liczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}
int losuj()
{
    return( rand() % 3 ) + 1;
}
int main()
{
   
    srand( time( NULL ) );
    int liczby[ 3 ];
    int wylosowane[ 2 ];
    int wylosowanych = 0;
    cout << "Podaj 3 liczby:" << endl;
    int i = 0;
    do
    {
        cin >> liczby[ i ];
        i++;
    } while( i < 3 );
   
    do
    {
        int liczba = losuj();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        }
    } while( wylosowanych < 2 );
   
    cout << endl << "Wylosowalem 2 liczby z twoich ktorymi sa: " << endl;
    int a = 0;
    wylosowanych = 0;
    do
    {
        cout << liczby[ wylosowane[ 0 ] ] << endl;
        a++;
        wylosowanych++;
    } while( wylosowanych < 2 );
   
    cout << "koniec" << endl;
    return 0;
}

Czy można (w ostatniej pętli while) stosować tablice jako element tablicy?
Kod nie spełnia swojego zadania jakim jest:
"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."
Jakieś sugestie co do edycji kodu ?

2

Wyrażenie

cout << liczby[ wylosowane[ 0 ] ] << endl;

zawsze będzie wypisywało tą samą liczbę. Zmień na

cout << liczby[ wylosowane[ wylosowanych ] ] << endl;

No i gwóźdź programu, funkcja losująca:

int losuj()
{
    return( rand() % 3 )+1;
}

niby niegroźna, ale do momentu kiedy zauważymy, że wylosowane przez nią liczby są indeksami tablicy trzy elementowej. Stąd też wywołanie liczba[3] jest wyjściem poza jej zakres. Pamiętaj że w C++ indeksy elementów tablic zaczynają się od zera.

int liczba[] = {1,2,3};  // tablica trzy elementowa

cout << liczba[0]; // pierwszy element tablicy -> 1
cout << liczba[1]; // drugi element tablicy -> 2
cout << liczba[2]; // trzeci element tablicy -> 3

cout << liczba[3]; // jesteśmy poza zakresem, wyświetlane będą jakieś śmieci z pamięci.
0
TomaszLiMoon napisał(a):

Wyrażenie

cout << liczby[ wylosowane[ 0 ] ] << endl;

zawsze będzie wypisywało tą samą liczbę. Zmień na

cout << liczby[ wylosowane[ wylosowanych ] ] << endl;

Dziękuję za odpowiedź, zmieniłem powyższe wyrażenie, lecz cały czas losują się te same cyfry
Zmieniłem również funkcje losuj na

(rand()%2)+1;

Lecz nadal program nie spełnia swojego zadania

2

Funkcja

(rand()%2)+1;

zwraca tylko 1 lub 2 , ale nie 0
To czego potrzebujesz to

(rand()%3);
0
TomaszLiMoon napisał(a):

Funkcja

(rand()%2)+1;

zwraca tylko 1 lub 2 , ale nie 0
To czego potrzebujesz to

(rand()%3);

Jeny, nie wpadłbym na to, a tyle siedziałem przy tym kodzie...
Dziękuję za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1