C++ Bc. 39 cpp: Porovnání verzí
m při kopírování vypadla hlavička <iostream> |
opraven název fce pro výpočet rovnoměrného rozdělení |
||
Řádek 4: | Řádek 4: | ||
#include <cstdlib> | #include <cstdlib> | ||
inline double | inline double R01() | ||
{ | { | ||
return std::rand()/(RAND_MAX + 1.0); | return std::rand()/(RAND_MAX + 1.0); | ||
Řádek 20: | Řádek 20: | ||
do | do | ||
{ | { | ||
r = int( | r = int( R01()*N ); | ||
s = int( | s = int( R01()*N ); | ||
} | } | ||
while (sachovnice[r][s] != 0); | while (sachovnice[r][s] != 0); |
Aktuální verze z 20. 1. 2008, 14:03
#include <iostream> #include <ctime> #include <cstdlib> inline double R01() { return std::rand()/(RAND_MAX + 1.0); } bool neohrozujici_se_veze(int pocet_vezi) { const int N = 8; int sachovnice[N][N] = {{0}}; for (int i=0; i<pocet_vezi; i++) { int r, s; do { r = int( R01()*N ); s = int( R01()*N ); } while (sachovnice[r][s] != 0); sachovnice[r][s] = 1; } for (int r=0; r<N; r++) { int pocet = 0; for (int s=0; s<N; s++) { pocet += sachovnice[r][s]; if (pocet > 1) return false; } } for (int s=0; s<N; s++) { int pocet = 0; for (int r=0; r<N; r++) { pocet += sachovnice[r][s]; if (pocet > 1) return false; } } return true;; } int main() { std::srand(std::time(0)); std::cout.setf(std::ios_base::scientific, std::ios_base::floatfield); std::cout.precision(2); const long int N = 1000000; // pocet pokusu v jedne simulaci const long int veze[] = {8, 7, 6}; // pocet vezi v jednotlivych simulacich long int celkem[] = {0, 0, 0}; char* sep = " +-----------------------------------------------------------+"; std::cout << sep << "\n" << " |"; for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) { std::cout.width(10); std::cout << veze[k] << " |"; } std::cout << "\n" << sep << "\n"; for (int s=1; s<=10; s++) { for (unsigned int k=0; k<sizeof(veze)/sizeof(int); k++) { int priznive_jevy = 0; for (int i=0; i<N; i++) if (neohrozujici_se_veze(veze[k])) priznive_jevy++; celkem[k] += priznive_jevy; std::cout << " | " << double(priznive_jevy)/N << " " << double(celkem[k])/(N*s); } std::cout << " |\n"; } std::cout << sep << "\n"; }
[ Zpět ]