#include #include #include #include int nacti_cislici_v_intervalu(int min, int max) { int cislo; while ((cislo = getch() - '0') < min || cislo > max) { } return cislo; } double zadej_cislo(char *prompt) { double cislo; printf("%s", prompt); while (scanf("%lf", &cislo) != 1) { printf("Zadali jste cislo spatne.\n"); printf("Zadejte cislo znovu: "); while (getchar() != '\n') ; } while (getchar() != '\n') ; return cislo; } double obsah_trojuhlenika(double x, double y, double z) { //https://en.wikipedia.org/wiki/Heron%27s_formula double s; printf("Obsah trojuhelnika o stranach %f, %f a %f = ", x, y, z); s = (x + y + z) / 2.0; return (sqrt(s * (s - x) * (s - y) * (s - z))); } double umocnovani(double x, double y) { printf("%f umocneno na %f = ", x, y); return (pow(x, y)); } double prirozeny_logaritmus(double x) { printf("Prirozeny logaritmus cisla %f = ", x); return (log(x)); } int main(void) { int volba; double a, b, c; double (*p_fd)(); /* pointer na funkci vracejici double */ printf("Kalkulacka.\n"); a = zadej_cislo("Zadejte cislo 'a': "); b = zadej_cislo("Zadejte cislo 'b': "); c = zadej_cislo("Zadejte cislo 'c': "); printf("0 - Ukonceni programu.\n"); printf("1 - Obsah trojuhelnika.\n"); printf("2 - Umocnovani cisla na cislo.\n"); printf("3 - Prirozeny logaritmus.\n"); do { printf("Stiknutim klavesy s cislici si vyberte funkci.\n"); /* zacatek kodu, ktery se presune do funkce nacti_cislici_v_intervalu() while ((cislo = getch() - '0') < 0 || cislo > 3) { } konec kodu, ktery se presune do funkce nacti_cislici_v_intervalu() */ volba = nacti_cislici_v_intervalu(0, 3); switch (volba) { case 0: printf("Program byl ukoncen."); p_fd = NULL; break; case 1: p_fd = obsah_trojuhlenika; break; case 2: p_fd = umocnovani; break; case 3: p_fd = prirozeny_logaritmus; break; default: printf("Neplatna volba!\n"); break; } if (p_fd != NULL) { printf("%f\n", p_fd(a, b, c)); } } while (volba != 0); return 0; }