#include #include #include #define POCET_VYPOCTU 10 char nacti_znak_v_retezci(char *retezec) { int i; char znak; while (!strchr(retezec, znak = getchar())) { while (getchar() != '\n') ; printf("Zadejte znak"); for (i = 0; retezec[i + 1]; i++) { printf(" %c nebo", retezec[i]); } printf(" %c: ", retezec[i]); } while (getchar() != '\n') ; return znak; } 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 zadej_cislo_vyssi_nez_parametr(char *prompt, double dolni_mez) { double cislo; while ((cislo = zadej_cislo(prompt)) <= dolni_mez) { printf("Zadejte cislo vyssi nez %f: ", dolni_mez); prompt = ""; } return cislo; } void zadej_3_vzestupne_serazena_cisla(double *x, double *y, double *z) { *x = zadej_cislo("Zadejte cislo 'a': "); *y = zadej_cislo_vyssi_nez_parametr("Zadejte cislo 'b' vyssi nez 'a': ", *x); *z = zadej_cislo_vyssi_nez_parametr("Zadejte cislo 'c' vyssi nez 'b': ", *y); } double funkce_3_cisel_1(double x, double y, double z) { return (pow(y - x, z - y)); } double funkce_3_cisel_2(double x, double y, double z) { return (pow(z - y, y - x)); } double funkce_2_cisel(double x, double y) { return (log(y - x)); } int main(void) { int i; char volba; double a, b, c; double (*p_fd)(); /* pointer na funkci vracejici double */ printf("Budete vyzvani k zadani 3 cisel takovych, aby kazde cislo bylo vyssi nez to predchozi, a potom se z techto cisel neco spocita.\n"); do { zadej_3_vzestupne_serazena_cisla(&a, &b, &c); printf("Zadali jste cisla %f, %f a %f.\n", a, b, c); printf("Jsou-li cisla spravne, tak zadejte 'a', "); printf("chcete-li cisla opravit, tak zadejte 'n': "); /* zacatek kodu, ktery se presune do funkce nacti_znak_v_retezci() while (!strchr("an", volba = getchar())) { while (getchar() != '\n') ; printf("Zadejte znak"); for (i = 0; "an"[i + 1]; i++) { printf(" %c nebo", "an"[i]); } printf(" %c: ", "an"[i]); } while (getchar() != '\n') ; konec kodu, ktery se presune do funkce nacti_znak_v_retezci() */ volba = nacti_znak_v_retezci("an"); } while (volba != 'a'); for (i = 0; i < POCET_VYPOCTU; i++) { switch (i % 3) { case 0: p_fd = funkce_3_cisel_1; break; case 1: p_fd = funkce_3_cisel_2; break; case 2: p_fd = funkce_2_cisel; break; default: printf("Nebyla vybrana funkce!\n"); break; } printf("%d. %f\n", i, p_fd(a, b, c)); } return 0; }