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-matematic.c
   1 /*
   2  * Soubor:  20110325-Fri-matematic.c
   3  * Datum:   25.03.2011 10:08
   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 
  16 /* ***************    Makra    ******************** */
  17 #define ARREYC 1024
  18 
  19 /* ***************   Funkce    ******************** */
  20 
  21 int plus(char priklad[])
  22 {
  23     int a = rand() % 99;
  24     int b = rand() % (100 - a);
  25     sprintf(priklad, "%d + %d", a, b);
  26     return a + b;
  27 }
  28 
  29 int minus(char priklad[])
  30 {
  31     int a = rand() % 99;
  32     int b = rand() % 99;
  33     if (a < b) {
  34         int bagr = a;
  35         a = b;
  36         b = bagr;
  37     }
  38     sprintf(priklad, "%d - %d", a, b);
  39     return a - b;
  40 }
  41 
  42 int krat(char priklad[])
  43 {
  44     int a = rand() % 11;
  45     int b = rand() % 11;
  46     sprintf(priklad, "%d * %d", a, b);
  47     return a * b;
  48 }
  49 
  50 int deleno(char priklad[])
  51 {
  52     int a = (rand() % 10) + 1;
  53     int b = rand() % 11;
  54     sprintf(priklad, "%d : %d", a * b, a);
  55     return b;
  56 }
  57 
  58 /****************************************************
  59  *               Hlavní program.
  60  ****************************************************/
  61 int main(int argc, char *argv[])
  62 {
  63     srand(time(NULL));
  64 
  65     // typedef říká, že ODKAZ není identifikátor proměnné, ale 
  66     // identifikátor datového typu.
  67 
  68     // odkaz na funkci, která vrací int a přebírá řetězec.
  69     typedef int (*OPERACE) (char *);
  70     OPERACE operace;
  71 
  72     OPERACE zadani[128];
  73     int zadanic = 0;            // počet prvků v poli zadani
  74 
  75     puts("zadej matematické operace");
  76     char radek[128];
  77     fgets(radek, 128, stdin);
  78     char znak;
  79     int i = 0;
  80     while ((znak = radek[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 j=0;
 106     while (++j<30) {
 107         int vysledek;
 108         char priklad[128];
 109         operace = zadani[rand() % zadanic];
 110         vysledek = operace(priklad);
 111         printf("%s = %d\n", priklad, vysledek);
 112     }
 113 
 114     return 0;
 115 }
`--> stáhnout

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