#include #include #define SLOUPCE 20 double zatizeni (int Nko, double ztrat); double ztraty (int pocet, double zatizeni); double mocnina (double neco, double naco); long long int faktorial (int a); int main (int neco, char *par[]) { double y,ztraty[SLOUPCE],*mp; int N,k,j=2; //----------alokace pameti-------------------------------------------------------- mp = malloc(sizeof(float)*20); //----------varovaci zpravy a nastaveni inputu z parametru------------------------ if (par[1]==NULL || par[2]==NULL) { printf ("zadej vsechny parametry [minimalne 2] (N = pocet vedeni | z = ztraty (moznost zadat az 20) \n"); return 0; } N = atoi(par[1]); if (N<1) { printf("zadej pocet vedeni jako kladne cislo!!"); return 0; } while (par[j]!=NULL) { ztraty[j-2]=atof(par[j]); if (ztraty[j-2]<0 || ztraty[j-2]>1) { printf("prosimte zadej normalni ztraty"); return 0; } j++; } j=2; //----------tisknuti prvniho radku na kterem jsou ztraty--------------------------- printf("z->| %5.1f%% |",ztraty[j-2]*100); while(par[j+1]!=NULL) { printf(" %5.1f%% |",ztraty[j-1]*100); j++; } printf("\n"); j=2; //----------tisknuti oddelovaciho radku-------------------------------------------- printf(" N |----------"); while (par[j+1]!=NULL) { printf("-----------"); j++; } printf("|\n"); j=2; //----------tisknuti radek po radku erlangovu tabulku------------------------------ printf(" 1 |"); while(par[j]!=NULL) { printf(" %7.3f |",ztraty[j-2]); j++; } printf("\n"); for(k=2; k<=N; k++) { printf("%2d |",k); j=2; while(par[j]!=NULL) { y=zatizeni(k,ztraty[j-2]); printf(" %7.3f |",y); j++; } printf("\n"); } //----------ende-------------------------------------------------------------------- //y=zatizeni(N,ztraty[j-2]); Testovaci radek //printf(" %7.3f |",y); Testovaci radek printf ("\n\n"); return 0; } //_______________________________________________________PODPROGRAMY____________________________________________________________________________ //---------ZATIZENI------------------------ double zatizeni (int Nko, double ztrat) { double horni=0, ztraticky,dolni=0,zat=0; horni=Nko; while(1) { zat = (horni+dolni) / 2; ztraticky = ztraty(Nko, zat); if ( ztraticky>ztrat ) horni = zat; if ( ztraticky=(ztrat-0.001) && ztraticky<=(ztrat+0.001) ) break; } return zat; } //---------ZTRATY-------------------------- double ztraty (int pocet, double zatizeni) { double zt,suma=0; int i; for (i=0; i<=pocet; i++) { suma = suma + (mocnina(zatizeni,i)/faktorial(i)); } zt = (mocnina(zatizeni,pocet)/faktorial(pocet)) / suma; return zt; } //---------FAKTORIAL----------------------- long long int faktorial (int a) { long long int b=1,c; if (a==0) b=1; for (c=1; c<=a; c++) { b = b * c; } return b; } //---------MOCNINA------------------------- double mocnina (double neco, double naco) { int Nc=2; double vysl=neco; if (naco==0) return 1; if (naco==1) return naco; while (Nc<=naco) { vysl = vysl * neco; Nc++; } return vysl; }