#include #include #include // ukol13 erlangova tabulka pocet_linek {ztraty pro jednotlive sloupce} // Funkce pro vypocet sumy double erlang_b(double A, int n) { double suma = 0; double term; // Suma for (int i = 0; i <= n; i++) { term = pow(A, i) / tgamma(i + 1); // tgamma(i-1)! dela faktorial pow(neco, na neco) dela mocninu suma += term; // suma=suma+term //printf("@"); } //printf("%f", suma); return pow(A, n) / tgamma(n + 1) / suma; } int main(int a, char *p[]) { if (a < 2) { // kontroluje spravnz pocet argumentu printf("\e[31mSpatne argumenty\npocet_linek {ztraty pro jednotlive sloupce}\e[0m\n"); exit(1); } double A; // Průměrná intenzita provozu int n = atof(p[1]); // pocet linek printf(" N: %d\n---------------------------------\n", n); for (int y = 2; y <= a; y++){ //printf("%d",y); double Pn = atof(p[y]); // Pravděpodobnost obsazení double low = 0.0; double high = Pn * n; double p; while (high - low > 0.00001) // puleni intervalu { A = (low + high) / 2.0; p = erlang_b(A, n); // Vypočítá pravděpodobnost obsazení pro aktuální hodnotu A // Porovnání s požadovanou pravděpodobností if (p < Pn) low = A; else high = A; } printf("(Pn): %f (A): %lf\n", Pn, A); // Výpis } return 0; }