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

LEKCJA 21 ZADANIE DOMOWE

Ostatnio zmodyfikowano 2012-08-11 13:34
Autor Wiadomość
Adam3423
Temat założony przez niniejszego użytkownika
LEKCJA 21 ZADANIE DOMOWE
» 2012-08-10 19:08:25
Witam, zrobilem zadania domowe z tego rozdziału, ale postanowiłem troszke zmodyfikować program i pojawił się problem z którym sobie nie radzę.
Program ma wczytać do tablicy podaną przez użytkownika ilość liczb i wylosować bez powtórzeń podaną przez użytkownika ilość liczb. Problem jest taki, że gdy wprowadzam 10 liczb i chcę wylosować również 10 to program się zawiesza. Dziwi mnie , że tylko przy tych liczbach gdyż np 9 z 9 wylosuje, albo 20 z 20 również, a akurat przy tych 10 jest problem. Jakby ktoś miał jakiś pomysł to proszę o radę co zmienić.


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

void wczytaj( int * tablica, int ile )
{
    int i = 0;
    do
    {
        cin >> tablica[ i ];
        i++;
    } while( i < ile );
   
}

int losuj( int ile )
{
    return( rand() % ile ) + 0;
}

bool CzyByla( int iLiczba, int * tablica, int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( iLiczba == tablica[ i ] )
             return true;
        else
             ++i;
       
    } while( i < ile );
   
    return false;
   
}
void wypisz( int * tablica, int ile )
{
    int i = 0;
    do
    {
        cout << tablica[ i ] << ",";
        i++;
    } while( i < ile );
   
}


int main()
{
   
    srand( time( NULL ) );
    bool b, bb;
    int ileLiczb;
    do
    {
        cout << "Ile liczb wczytac?" << endl;
        cin.clear();
        cin.sync();
        cin >> ileLiczb;
        b = cin.good();
    } while( b == 0 );
   
    int ileLosowac;
    do
    {
        cout << "Ile liczb wylosowac?" << endl;
        cin.clear();
        cin.sync();
        cin >> ileLosowac;
        bb = cin.good();
        if( bb )
        if( ileLosowac > ileLiczb )
             cout << "Za duzo liczb, nie mozliwe wylosowanie" << endl;
       
    } while( ileLosowac > ileLiczb );
   
    int t[ 50 ];
    wczytaj( t, ileLiczb );
    int liczba;
    int ta[ 50 ];
    int i = 0;
    do
    {
        liczba = losuj( ileLiczb );
        if( CzyByla( liczba, ta, ileLiczb ) == 0 )
        {
            ta[ i ] = liczba;
            i++;
        }
    } while( i < ileLosowac );
   
    i = 0;
    do
    {
        ta[ i ] = t[ ta[ i ] ];
        i++;
    } while( i < ileLosowac );
   
    cout << "Wylosowane liczby to: ";
    wypisz( ta, ileLosowac );
    return 0;
}
P-62184
Mufas
» 2012-08-11 12:25:09
mi wszystko dziala dobrze, nawet przy 10
P-62219
Adam3423
Temat założony przez niniejszego użytkownika
» 2012-08-11 13:34:48
to dziwne, bo sprawdzałem na 2 komputerach i na obu przy podaniu dwóch dziesiątek się zawiesza.
P-62224
« 1 »
  Strona 1 z 1