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

20110408-Fri-compl.c
   1 /*
   2  * Soubor:  20110408-Fri-complex.c
   3  * Datum:   08.04.2011 08:22
   4  * Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
   5  * Licence: GNU/GPL 
   6  * Úloha: 
   7  * Popis:   
   8  */
   9 
  10 #define _ISOC99_SOURCE
  11 #define _GNU_SOURCE
  12 #include <stdio.h>
  13 #include <stdbool.h>
  14 #include <math.h>
  15 #include <complex.h>
  16 #include <string.h>
  17 
  18 /* ***************    Makra    ******************** */
  19 #define ZASPOC 32
  20 #define DELKA 32
  21 
  22 /* ***************   Funkce    ******************** */
  23 
  24 void push(double complex number);
  25 double complex pop(void);
  26 void tiskni(void);
  27 void etiskni(void);
  28 
  29 /****************************************************
  30  *               Hlavní program.
  31  ****************************************************/
  32 int main(void)
  33 {
  34     char vstup[DELKA];
  35     double x, y;
  36     double complex cx,cy;
  37     while (scanf("%s", vstup) != EOF) {
  38         if (sscanf(vstup, "%lg,%lg", &x, &y) == 2) {
  39             push(x + y * I);
  40         } else if (sscanf(vstup, "%lgL%lg", &x, &y) == 2) {
  41             push( x*cos(y) + x*sin(y)*I );
  42         } else if (sscanf(vstup, ",%lg", &y) == 1) {
  43             push( y*I );
  44         } else if (sscanf(vstup, "%lg", &x) == 1) {
  45             push( x );
  46         } else if (strcmp(vstup, "+") == 0) {
  47             cx = pop();
  48             cy = pop();
  49             push(cx + cy);
  50             tiskni();
  51         } else if (strcmp(vstup, "print") == 0) {
  52             tiskni();
  53         } else if (strcmp(vstup, "eprint") == 0) {
  54             etiskni();
  55         }
  56     }
  57     return 0;
  58 }
  59 
  60 double complex zasobnik[ZASPOC];
  61 int pocet = 0;
  62 
  63 void push(double complex number)
  64 {
  65     if (pocet < ZASPOC) {
  66         zasobnik[pocet] = number;
  67         pocet++;
  68     }
  69 }
  70 double complex pop(void)
  71 {
  72     if (pocet > 0) {
  73         pocet--;
  74         return zasobnik[pocet];
  75     } else {
  76         return NAN;
  77     }
  78 }
  79 void tiskni(void)
  80 {
  81     printf("[ ");
  82     for (int i = 0; i < pocet; i++) {
  83         printf("(%g", creal(zasobnik[i]));
  84         if (cimag(zasobnik[i]) >= 0) {
  85             putchar('+');
  86             printf("j%g) ", cimag(zasobnik[i]));
  87         } else {
  88             putchar('-');
  89             printf("j%g) ", -cimag(zasobnik[i]));
  90         }
  91     }
  92     printf("]\n");
  93 }
  94 void etiskni(void)
  95 {
  96     printf("[ ");
  97     for (int i = 0; i < pocet; i++) {
  98         printf("(%gL%g) ", cabs(zasobnik[i]), carg(zasobnik[i]));
  99     }
 100     printf("]\n");
 101 }
 102 
 103 
 104 
 105 
`--> stáhnout

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