#include #include #define MAX 2000 double mocnina(double zaklad, double exponent); double faktorial(double cislo); double vypocet_zateze(double pocet, double ztraty); double vypocet_ztrat(double pocet, double zatez); int main(int def, char *abc[]) { double vysledek, ztraty[MAX], *pamet; int N, q, j = 2; pamet = malloc(sizeof(float) * MAX); N = atoi(abc[1]); if (N < 1) { printf("kladny pocet linek pls\n"); return 0; } for (q = 0; q < def - 2; q++) { ztraty[q] = atof(abc[q + 2]); } printf(" 1 | "); for (q = 0; q < def - 2; q++) { printf(" %.3f", ztraty[q] ); } printf("\n"); for (int k = 2; k <= N; k++) { printf("%2d |", k); for (q = 0; q < def - 2; q++) { vysledek = vypocet_zateze(k, ztraty[q]); printf(" %.2f |", vysledek); } printf("\n"); } printf ("\n\n"); return 0; } //POKUS O POCITANI double vypocet_zateze(double pocet, double ztraty) { double horni_limit = 0, ztrata, dolni_limit = 0, zatez = 0; horni_limit = pocet; while (1) { zatez = (horni_limit + dolni_limit) / 2; ztrata = vypocet_ztrat(pocet, zatez); if (ztrata > ztraty) horni_limit = zatez; if (ztrata < ztraty) dolni_limit = zatez; if (ztrata >= (ztraty - 0.001) && ztrata <= (ztraty + 0.001)) break; } return zatez; } double vypocet_ztrat(double pocet, double zatez) { double soucet_ztrat = 0, ztrata; int i; for (i = 0; i <= pocet; i++) { soucet_ztrat += (mocnina(zatez, i) / faktorial(i)); } ztrata = (mocnina(zatez, pocet) / faktorial(pocet)) / soucet_ztrat; return ztrata; } double faktorial(double cislo) { double vysledek = 1; int i; if (cislo == 0) return 1; for (i = 1; i <= cislo; i++) { vysledek = vysledek * i; } return vysledek; } double mocnina(double zaklad, double exponent) { int i; double vysledek = zaklad; if (exponent == 0) return 1; if (exponent == 1) return zaklad; for (i = 2; i <= exponent; i++) { vysledek = vysledek * zaklad; } return vysledek; }