Losowanie dwóch liczb z trzech, podanych przez użytkownika

0

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. Napisałem taki oto kod ale po uruchomieniu pokazuje się, że przekroczono limit czasu. Jakaś podpowiedź gdzie zrobiłem błąd?

 
 #include <iostream>
 #include <cstdlib>
 #include <ctime>
 using namespace std;
void wczytywanie(int tab [], int rozmiar)
{
    int i;
    for(i=0;i<rozmiar;i++){
        cin >> tab[i];}
}
int losowanie()
{
    return rand()%3;
}
int sprawdzenie(int tab[],int liczba, int ile)
{
    if(ile<=0)
        return false;
    int i=0;
    do
    {
        if(tab[i]==liczba)
            return true;
        i++;
    }while(i<ile);
    return false;

}
int main ()
{
    srand(time(0));
    int tab[3];
    int liczba=losowanie(),wylosowanych=0;
    do
    {
        if(!sprawdzenie(tab,liczba,wylosowanych)==false)
        {
            tab[wylosowanych]=liczba;
            wylosowanych++;
        }
    }while(wylosowanych<3);
    wylosowanych=0;
     do
    {
        cout << tab[ wylosowanych ] <<endl;
        wylosowanych++;
    } while( wylosowanych < 3 );

    return 0;
}


0

Coś pomieszałeś chyba, a program nie może wyjść z pierwszej pętli do ... while. Przeanalizuj krok po kroku, co się dzieje w Twoim programie. Zmienna wylosowanych jest równa 0, na to zwróć uwagę.

0

zalozenia masz zle

nie wczytujesz od uzytkownika liczb
i troche przekombinowales z tym co masz

Jezeli chcesz poprawic swoj kod. Debugger do reki i jedziesz ;) (na pierwrzy rzut oka funkcja sprawdzenie jest zle)

wylosowanie liczb bez powtorzen mozesz zrobic bardzo prosto.

http://www.cplusplus.com/reference/algorithm/shuffle/
na tablicy i wyswietl pierwsze dwa elementy

0
if(!sprawdzenie(tab,liczba,wylosowanych)==false)

Podwójne zaprzeczenie, iście polski kod. W dodatku przez to błędny.

int liczba=losowanie()

Przecież Ty sprawdzasz, czy w tablicy jest jakaś liczba z przedziału [0,2], a nie któraś z podanych przez użytkownika liczb. Pomijając już fakt, że nie wywołujesz wczytanie tak jak @pasasap napisał.

0

widze ze juz jest nowa odpowiedz wiec wrzuce kod o ktorym mowilem powyzej

#include <iostream>     
#include <algorithm>    
#include <random>       
#include <chrono>   
#include <iterator>
 
int main () {
 
  int array[] = {1,2,3,4,5};
 
  unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
  shuffle (std::begin(array), std::end(array), std::default_random_engine(seed));
 
  std::cout << array[0] << array[1];
 
  return 0;
}

http://ideone.com/9cKL7V

wyswietlanie mozesz zrobic na bazie petli for (tyle ile potrzebujesz mozesz sobie wyswietlic

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