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

Sprawdzanie, czy dana liczba była już wylosowana

Ostatnio zmodyfikowano 2015-12-20 16:22
Autor Wiadomość
Masonerium
Temat założony przez niniejszego użytkownika
Sprawdzanie, czy dana liczba była już wylosowana
» 2015-12-18 23:20:15
Cześć. Jestem początkujący, napisałem program, który ma losować 28 liczb bez powtórzeń. Napisałem takie coś z tym, że... nie działa. Jak to poprawić, żebym jakoś ogarnął? ;) (tak, ma być 28)



C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int tab[ 27 ];
    int a;
    for( int i = 0; i <= 27; i++ )
    {
        a = rand() % 28 + 1;
        for( int j = 0; j <= 27; j++ )
        {
            while( a == tab[ j ] )
            {
                a = rand() % 28 + 1;
            }
        }
        tab[ i ] = a;
        cout << a << " to jest " << i << endl;
    }
    return 0;
}
P-142136
carlosmay
» 2015-12-19 00:20:25
(tak, ma być 28)
 więc czemu
int tab[ 27 ];
 ???
Wylosowaną liczbę porównujesz do liczb w tablicy (nie trzeba sprawdzać całej za każdym razem, tylko tyle elementów ile aktualnie jest w użyciu)
i jeśli znajdziesz duplikat, np. w połowie tablicy (należy wylosować nową wartość oraz rozpocząć przeszukanie od początku, a nie od miejsca gdzie program znalazł duplikat,
ponieważ nowo wylosowana liczba może znajdować się we wcześniejszej części tablicy i nie zostanie wykryta jako duplikat.

P-142138
Masonerium
Temat założony przez niniejszego użytkownika
» 2015-12-19 11:35:36
Masz racje, dzięki. Tylko nie mogę sobie poradzić z tym, jak za każdym razem jak wykryje duplikat przeszukiwać tablicę od początku.
P-142142
carlosmay
» 2015-12-19 12:41:57
Zeruj licznik pętli.
A najlepiej napisać funkcję sprawdzająca duplikaty, zwracająca true lub false jako info czy jest duplikat czy nie.
P-142145
Masonerium
Temat założony przez niniejszego użytkownika
» 2015-12-19 16:26:45
Dzięki, wszystko działa!:)
P-142151
Gibas11
» 2015-12-20 11:43:07
Do zmiennych 'i', 'j' i 'a' pasuje raczej typ unsigned char (zakres 0 - 255), w mikrokontrolerach takie rzeczy mogą robić różnicę w wydajności, więc jestem wyczulony. :\
P-142179
carlosmay
» 2015-12-20 12:17:13
pasuje raczej typ unsigned char (zakres 0 - 255),
 @Masonerium nie używa zminennych typu char tylko int
P-142180
Gibas11
» 2015-12-20 15:17:16
Jakoś dałem radę zauważyć. :\ Ale lepiej niż
int
 sprawdzi się
unsigned char
. Chyba, że będzie chciał losować większe liczby z większego zakresu, ale zakładam, że to jakiś program na zaliczenie itp. i nie jest przewidziana rozbudowa.
P-142182
« 1 » 2
  Strona 1 z 2 Następna strona