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

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

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

GazowanySmalec
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 107
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.

Kopiuj
 
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 :)

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

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

Kopiuj
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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.