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

20110325-Fri-matematika.c
   1 /*
   2  * Soubor:  20110325-Fri-matematika.c
   3  * Datum:   25.03.2011 08:24
   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 <stdbool.h>
  13 #include <stdlib.h>
  14 #include <time.h>
  15 #include <string.h>
  16 
  17 /* ***************    Makra    ******************** */
  18 #define ARREYC 1024
  19 #define PRIKLC 128
  20 
  21 /* ***************   Funkce    ******************** */
  22 
  23 int plus(char priklad[])
  24 {
  25     int a = rand() % 100;
  26     int b = rand() % (100 - a);
  27     sprintf(priklad, "%2d + %2d", a, b);
  28     return a + b;
  29 }
  30 
  31 int minus(char priklad[])
  32 {
  33     int a = (rand() % 99) + 1;
  34     int b = (rand() % 99) + 1;
  35     if (a < b) {
  36         int bagr = a;
  37         a = b;
  38         b = bagr;
  39     }
  40     sprintf(priklad, "%2d - %2d", a, b);
  41     return a - b;
  42 }
  43 
  44 int krat(char priklad[])
  45 {
  46     int a = (rand() % 10) + 1;
  47     int b = (rand() % 10) + 1;
  48     sprintf(priklad, "%2d * %2d", a, b);
  49     return a * b;
  50 }
  51 
  52 int deleno(char priklad[])
  53 {
  54     int a = (rand() % 10) + 1;
  55     int b = (rand() % 10) + 1;
  56     sprintf(priklad, "%2d : %2d", a * b, a);
  57     return b;
  58 }
  59 
  60 
  61 /****************************************************
  62  *               Hlavní program.
  63  ****************************************************/
  64 int main(int argc, char *argv[])
  65 {
  66     srand(time(NULL));
  67     // ukazatel na funkci, která přebírá řetězec a vrací integer
  68 
  69     typedef int (*OPERACE) (char *);
  70     OPERACE operace;
  71 
  72     // pole ukazatelů na funkkce
  73     OPERACE zadani[128];
  74     int zadanic = 0;            // proměnná uchovává počet prvků v poli zadani
  75 
  76 
  77     if (argc == 2) {
  78         char znak;
  79         int i = 0;
  80         while ((znak = argv[1][i]) != '\0') {
  81             if (znak == '+') {
  82                 zadani[zadanic] = plus;
  83                 zadanic++;
  84             } else if (znak == '-') {
  85                 zadani[zadanic] = minus;
  86                 zadanic++;
  87             } else if (znak == '*') {
  88                 zadani[zadanic] = krat;
  89                 zadanic++;
  90             } else if (znak == ':') {
  91                 zadani[zadanic] = deleno;
  92                 zadanic++;
  93             }
  94             i++;
  95         }
  96     }
  97     if (zadanic == 0) {
  98         zadani[0] = plus;
  99         zadani[1] = minus;
 100         zadani[2] = krat;
 101         zadani[3] = deleno;
 102         zadanic = 4;
 103     }
 104 
 105     int vysl = 0;
 106     int j = 0;
 107     char priklad[PRIKLC];
 108     while (j++ < 30) {
 109         operace = zadani[rand() % zadanic];
 110         vysl = operace(priklad);
 111         printf("%s = %d\n", priklad, vysl);
 112     }
 113 
 114 
 115 
 116     return 0;
 117 }
`--> stáhnout

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