Skocz do zawartości

Losowanie liczb i reszta z dzielenia


Recommended Posts

Witam mam problem z kawałkiem kodu

 

  cl=3;

  srand (8); 
for (zv = 0; zv < 4; ++zv)
 printf ("%d , ", rand ());      //losuje liczby  64, 28170, 311, 31103,
  for (zv = 0; zv < cl - 1; ++zv){
     printf("\nkh%d   cl=%d   zv=%d", 2 * zv + -4 * cl,cl,zv);
     rk =  zv+rand() % (cl-zv);

   printf("\ncj%d   cl=%d   zv=%d  rk=%d", 3 * rk + 1 * zv,cl,zv,rk);

 

nie chodzi mi o to co printf wyswietla tylko czemu rk przyjmuje wartosc 2?

 

Z góry dzieki za pomoc ;)

Link to post
Share on other sites

Bo akurat takie liczby wypluwa rand seedowany ósemką.

 

Zmień seed, lub zmień pozycję w ciągu randu (np więcej pętli w pierwszym forze) i rk mogą być inne.

 

Ciąg z rand po 8:

 

64, 28170, 311, 31103, 25835, 10443, 497,...

 

Pierwsze cztery wartości zjadłeś jednym forem, więc drugi for liczy kolejno:

1. rk=0+25835%(3-0)

2. rk=1+10443%(3-1)

 

W obu przypadkach wynik to dwa.

  • Popieram 1
Link to post
Share on other sites

Tyle i tylko tyle:

void srand(unsigned int seed) {
  holdrand = (long) seed;
}

int rand() {
  return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
A jeśli funkcja ci się nie podoba, to możesz ją śledzić krok po kroku:

#include <stdio.h>
#include <stdlib.h>
 
static long int ziarno;
 
void starter(unsigned int liczba) 
{
    ziarno = (long) liczba;
}
 
int nowyrand() {
    long int a,b,c,d;
    a=ziarno * 214013L;
    b=a + 2531011L;
    ziarno=b;
    c=b >> 16;
    d=c & 0x7fff;
    return d;
}
 
int main()
{
    int i;
    starter(8);
    for(i=0;i<10;i++)
    {
        if((i)&&(!(i%5)))printf("\n");
        printf("%5.d, ",nowyrand());
    }
    return 0;
}
  • Popieram 1
Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...