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

Liczby losowe bez powtórzeń

Ostatnio zmodyfikowano 2015-06-30 14:19
Autor Wiadomość
tabupl
Temat założony przez niniejszego użytkownika
Liczby losowe bez powtórzeń
» 2015-06-30 01:46:43
Zadanie polegało na stworzeniu programu, który wylosuje 5 liczb z przedziału 1 do 10 bez powtórzeń.
Mój program zacina się na pętli, ponieważ po włączeniu go otwiera się pusta konsola. KIedy jednak zmienię warunek pętli tak aby funkcja check() miała zwracać wartość prawdziwą, liczby są wypisywane, jednak wszystkie są takie same, mimo srand(time(0)).
Co może być nie tak? (nie wiem gdzie mógłby być błąd, dlatego wstawiam kod całego programu)

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

bool check( int a[], int z )
{
   
    int x = 0;
    if( z <= 0 )
         return 1;
   
    do
    {
        if( a[ z ] = a[ x ] )
             return 0;
       
        x++;
    } while( z == x );
   
    return 1;
}

int losowe()
{
    return(( rand() % 10 ) + 1 );
}
int main()
{
    srand( time( 0 ) );
    int a[ 5 ];
    int z = 0;
   
    do
    {
        do
        {
            a[ z ] = losowe();
           
        } while( !check( a, z ) );
       
        z++;
    } while( z < 5 );
   
    z = 0;
    int suma = 0;
   
    do
    {
        std::cout << "Liczba " << z << " = " << a[ z ];
        suma += a[ z ];
        z++;
    } while( z < 5 );
   
    std::cout << "Suma wynosi: " << suma;
    return 0;
   
}
 
P-134176
Lora
» 2015-06-30 03:18:31
W funkcji check():
C/C++
do
{
    if( a[ z ] == a[ x ] ) // dwa znaki równa się, a nie jeden
         return 0;
   
    x++;
} while( x < z ); // dopóki x mniejsze od z

P-134177
tabupl
Temat założony przez niniejszego użytkownika
» 2015-06-30 11:05:19
NIestety to nie pomogło
P-134181
carlosmay
» 2015-06-30 12:53:57
Nie zwiększa się indeks. Z++ masz poza pętla w której przypisujesz
Wartości losowane do tablicy.
Zapis jest wciąż do jednego elementu.
P-134184
carlosmay
» 2015-06-30 14:19:26
C/C++
bool check( int a[], int z )
{
   
    int x = 0;
    if( z <= 0 )
         return true;
   
    do
    {
        if( a[ z ] == a[ x ] ) // jesli liczba istnieje return false;
             return false;
        else // jesli nie indeks w gore i sprawdz nastepny element
             ++x;
       
    } while( z < x );
   
    return true;
}

C/C++
do
{
    a[ z ] = losowe();
    if( check( a, z ) ) // jesli juz taka liczba jest nic nie rob, jesli nie ma dodaj indeks
         z++;
   
} while( z < 5 );


C/C++
std::cout << "Liczba " << z << " = " << a[ z ] << std::endl;

Pamiętaj:
== - aby porównać, = - aby przypisać
zamiast 0 i 1, zwracaj false i true, łatwiej ogarnąć kod.
P-134185
« 1 »
  Strona 1 z 1