Wątek przeniesiony 2014-11-26 11:19 z C/C++ przez ŁF.

Funckja zwracająca wartość losową z zadanego przedziału

0

Witam, mam (zapewne) głupi problem ale nie mam pojęcia jak sobie z nim poradzić.
Naklepałem taką oto fukcję zawracającą wartość losową. Ze względu na zastosowanie wartość ta musi być różna od zera i mniejsza od podanej.

 
int losuj(int lp)
{
    int x;
    while(x > lp || x == 0)
    {
        x = rand() % 10;
    }
    return x;
}

Potem wartość ta porównywana jest kolejno ze wszystkimi elementami tablicy, i jeżeli się powtarza to jest losowana ponownie. Problem polega na tym że jeżeli wartość jest losowana ponownie, to otrzymuję ją dokładnie taką samą i program się zawiesza (np. drugi element tablicy ma wartość 1, to funkcja w kółko zwraca wartość 1 i program po tym porównaniu wpada w pętlę). Jeśli ktoś może pomóc to będę wdzięczny :)

1
  1. int x=0;
  2. int losuj(int lp) { return 1+rand()%lp; }
  3. http://4programmers.net/Forum/1058041
0

Wariacja na temat powyższej funkcji (lepszy górny zakres):

int losuj(int lp) { 
  assert(lp > 1);
  return 1+rand()%(lp - 1); 
}

Ew. można dodać zamiast assert if (i zwrócenie jakiejś domyślnej wartości w przypadku nieprawidłowego argumentu).

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