Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.

1/1

Zdrojové soubory z výuky

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á".

20110318-Fri-odkaz-na-funkce.c
   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 }
`--> stáhnout

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net