Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".
1 /*
2 * Soubor: 20110318-Fri-odkaz-na-funkce.c
3 * Datum: 18.03.2011
4 * Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 * Licence: GNU/GPL
6 * Úloha:
7 * Popis:
8 ****************************************************/
9 #define _ISOC99_SOURCE
10 #define _GNU_SOURCE
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <assert.h>
15 #include <stdbool.h>
16 #include <limits.h>
17 #include <math.h>
18
19 #include <unistd.h> /* rozlišení stdio */
20
21 /* *************** Makra ******************** */
22 #define PROMPT " > "
23 #define ARRAYC 1024
24
25 /****************************************************
26 * Funkce
27 ****************************************************/
28
29 double deg2rad(double deg)
30 {
31 return deg * M_PI / 180;
32 }
33
34 double rad2rad(double rad)
35 {
36 return rad;
37 }
38
39
40 /****************************************************
41 * Hlavní program.
42 ****************************************************/
43 int main(void)
44 {
45 char line[ARRAYC];
46
47 /* f_convert je odkaz na funkci, která přebírá double
48 * a vrací double */
49 double (*f_convert) (double);
50 double from, to, step;
51 char choice[ARRAYC];
52
53 f_convert = deg2rad;
54 /* Čte řádky až do konce souboru */
55 while (printf(PROMPT), (fgets(line, ARRAYC, stdin) != NULL)) {
56 if (sscanf(line, "%s %lg %lg %lg", choice, &from, &to, &step) == 4) {
57 printf("%g\n", sin(f_convert(from)));
58 } else if (sscanf(line, "%s %lg", choice, &from) == 2) {
59 ;
60 } else if (sscanf(line, "%s", choice) == 1) {
61 if (strcmp(choice, "r") == 0) {
62 f_convert = rad2rad;
63 } else if (strcmp(choice, "d") == 0) {
64 f_convert = deg2rad;
65 } else {
66 fprintf(stderr, "toto neni platny vstup\n");
67 }
68 }
69 }
70 return 0;
71 }