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-fce.c
3 * Datum: 18.03.2011 10:03
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 <string.h>
13 #include <stdbool.h>
14 #include <math.h>
15
16 /* *************** Makra ******************** */
17 #define ARREYC 1024
18
19 /* *************** Funkce ******************** */
20
21 double deg2rad(double deg)
22 {
23 return deg*M_PI/180;
24 }
25
26 double rad2rad(double rad)
27 {
28 return rad;
29 }
30
31 double cotg(double rad)
32 {
33 return 1/tan(rad);
34 }
35
36 /****************************************************
37 * Hlavní program.
38 ****************************************************/
39 int main(int argc, char *argv[])
40 {
41
42 /* f_convert je odkaz na funkci, která přebírá double a vrací double */
43 double (*f_convert)(double);
44 double (*f_gonio)(double);
45 char line[ARREYC];
46 double number, from, to, step;
47 char choice[ARREYC];
48
49 f_convert = deg2rad;
50
51 while ( printf(" >>> "), fgets(line, ARREYC, stdin) != NULL ) {
52 if ( sscanf(line, "%s %lg %lg %lg", choice, &from, &to, &step) == 4 ) {
53 ;
54 } else if ( sscanf(line, "%s %lg", choice, &number) == 2 ) {
55 if ( choice[0] == 's' )
56 f_gonio = sin;
57 else if ( choice[0] == 'c')
58 f_gonio = cos;
59 else if ( choice[0] == 't')
60 f_gonio = tan;
61 else if ( choice[0] == 'o')
62 f_gonio = cotg;
63 printf("%7.3F\n",f_gonio( f_convert(number) ));
64 } else if ( sscanf(line, "%s", choice ) == 1 ) {
65 if ( choice[0] == 'd') {
66 f_convert = deg2rad;
67 } else if ( strcmp(choice, "r") == 0 ) {
68 f_convert = rad2rad;
69 } else {
70 fprintf(stderr,"neplatný vstup\n");
71 }
72 }
73 }
74
75
76 return 0;
77 }