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

Losowanie liczb całkowitych bez powtórzeń

Ostatnio zmodyfikowano 2014-05-14 19:27
Autor Wiadomość
Webmast-er
Temat założony przez niniejszego użytkownika
Losowanie liczb całkowitych bez powtórzeń
» 2014-05-14 19:12:48
Mam problem z programem do losowania liczb całkowitych bez powtórzeń, który pisze do lekcji 21 (zadanie nr. 2). Podaje 10 liczb i 8 z nich program miał wypisać bez powtórzeń, lecz ich nie wypisuje.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>

using namespace std;

int losujliczbe()
{
    int liczba;
    srand( time( NULL ) );
    liczba =( rand() % 10 ) + 1;
    return liczba;
}

bool sprawdzliczby( int tab[], int gotowe[], int got, int losowa )
{
    int i = 0;
    do
    {
        if( tab[ losowa ] == gotowe[ i ] )
        {
            i++;
            return true;
        }
       
    } while( i < got );
   
    return false;
}

int wczytajliczbe()
{
    int liczba;
    do
    {
        cin.clear();
        cin.sync();
        cin >> liczba;
       
        if( !cin.good() )
        {
            cout << "Nieprawidlowy format liczby!" << endl;
        }
       
        if( !( liczba > 0 ) &&( liczba < 100 ) )
        {
            cout << "Niestety liczba nie miesci sie w przedziale!" << endl;
        }
       
        if(( !cin.good() ) ||( !( liczba > 0 ) &&( liczba < 100 ) ) )
        {
            cout << "Podaj ponownie liczbe: ";
        }
    } while(( !cin.good() ) ||( !( liczba > 0 ) &&( liczba < 100 ) ) );
   
    return liczba;
}

int main()
{
    cout << "Losowanie bez powtorzen z podanymi zmodyfikowane" << endl;
    cout << "Podaj liczby z przedzialu od 1 do 100" << endl << endl;
   
    int gotowe[ 8 ], got = 8, tablica[ 100 ], iw = 10, liczba, i = 0;
   
    do
    {
        cout << "Podaj " << i + 1 << " liczbe: ";
        liczba = wczytajliczbe();
        tablica[ i ] = liczba;
        i++;
       
    } while( i < iw );
   
    i = 0;
    do
    {
        liczba = losujliczbe();
        if( sprawdzliczby( tablica, gotowe, got, liczba ) == false )
        {
            gotowe[ i ] = tablica[ liczba ];
            i++;
        }
       
    } while( i < got );
   
    i = 0;
    do
    {
        cout << i + 1 << ". Numerek: " << gotowe[ i ] << endl;
        i++;
       
    } while( i < got );
   
    return 0;
}
P-109958
pekfos
» 2014-05-14 19:27:07
Funkcje losujliczbe() i sprawdzliczby() są błędne, a tą drugą jeszcze wywołujesz z niepoprawnymi argumentami.
P-109967
« 1 »
  Strona 1 z 1