KOD cpp: UKRYJ
#include <stdlib.h> /* lub cstdlib.h - musisz sprawdzić jak ta biblioteka nazywa się u Ciebie */
#include <time.h>
#include <time.h>
Funkcja rand() domyślnie losuje liczby z przedziału <0, RAND_MAX>, gdzie RAND_MAX to makro zdefiniowane w bibliotece stdlib.h. Rozmiar tej wartości jest zależny od biblioteki i środowiska, ale nie jest mniejszy niż 32767. By wylosować liczbę z wybranego zakresu trzeba połączyć funkcję rand z dzieleniem modulo. Nie będę wyjaśniał dlaczego tak to działa.
Niestety sama funkcja rand nie wystarczy, gdyż program zawsze będzie losował te same liczby, co jest o tyle oczywiste, że do losowania liczb funkcja musi używać jakiegoś algorytmu, a taki algorytm musi startować z jakimiś wartościami początkowymi, więc jest oczywiste, że wartości początkowe za każdym razem są takie same, więc algorytm generuje te same liczby. By to zmienić trzeba wywołać funkcję srand( unsigned int seed); gdzie argument seed jest wartością startową dla generatora rand. By ta wartość za każdym razem była inna najprościej jest skorzystać z funkcji time.
Funkcję srand wywołuje się tylko raz gdyż tylko raz wystarczy wystartować generator liczb, który działa do zakończenia programu. Generator działa dobrze jeżeli losowanie nie odbywa się częściej niż 1 wartość na sekundę.
KOD cpp: UKRYJ
#include <conio.h> // wymagana przez getch
#include <iostream> // wymagana przez cin
#include <stdlib.h> // wymagana przez rand i srand
#include <stdio.h> // wymagana przez printf
#include <time.h> // wymagana przez time
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
void fun1(void);
void fun2(void);
void fun3(void);
const int ESCAPE = 27;
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL));
char esc;
while(1)
{
int r = rand() % 3;
switch(r)
{
case 0: fun1(); break;
case 1: fun2(); break;
case 2: fun3(); break;
}
esc = getch();
if(esc == ESCAPE)
{
char result[2];
printf("Czy chcesz zakonczyc dzialanie programu? (TAK/NIE) T/N\n");
cin >> result;
if( !stricmp(result, "T" ) ) return 0;
}
}
return 0;
}
//---------------------------------------------------------------------------
void fun1(void)
{
printf("Wylosowano funkcje fun1\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------
void fun2(void)
{
printf("Wylosowano funkcje fun2\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------
void fun3(void)
{
printf("Wylosowano funkcje fun3\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------
#include <iostream> // wymagana przez cin
#include <stdlib.h> // wymagana przez rand i srand
#include <stdio.h> // wymagana przez printf
#include <time.h> // wymagana przez time
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
void fun1(void);
void fun2(void);
void fun3(void);
const int ESCAPE = 27;
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL));
char esc;
while(1)
{
int r = rand() % 3;
switch(r)
{
case 0: fun1(); break;
case 1: fun2(); break;
case 2: fun3(); break;
}
esc = getch();
if(esc == ESCAPE)
{
char result[2];
printf("Czy chcesz zakonczyc dzialanie programu? (TAK/NIE) T/N\n");
cin >> result;
if( !stricmp(result, "T" ) ) return 0;
}
}
return 0;
}
//---------------------------------------------------------------------------
void fun1(void)
{
printf("Wylosowano funkcje fun1\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------
void fun2(void)
{
printf("Wylosowano funkcje fun2\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------
void fun3(void)
{
printf("Wylosowano funkcje fun3\nNacisnij dowolny klawisz by kontynuowac\n\n");
}
//---------------------------------------------------------------------------



