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-complex.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 enter[DELKA];
  35     double x, y;
  36     while (scanf("%s", enter) != EOF) {
  37         if (sscanf(enter, "%lg,%lg", &x, &y) == 2) {
  38             push(x + y * I);
  39         } else if (sscanf(enter, "%lgL%lg", &x, &y) == 2) {
  40             push(x * cos(y) + I * x * sin(y));
  41         } else if (sscanf(enter, ",%lg", &y) == 1) {
  42             push(y * I);
  43         } else if (sscanf(enter, "%lg", &x) == 1) {
  44             push(x);
  45         } else if (strcmp(enter, "print") == 0) {
  46             tiskni();
  47         } else if (strcmp(enter, "eprint") == 0) {
  48             etiskni();
  49         }
  50 
  51     }
  52 
  53     return 0;
  54 }
  55 
  56 double complex zasobnik[ZASPOC];
  57 int pocet = 0;
  58 
  59 void push(double complex number)
  60 {
  61     if (pocet < ZASPOC) {
  62         zasobnik[pocet] = number;
  63         pocet++;
  64     }
  65 }
  66 
  67 double complex pop(void)
  68 {
  69     if (pocet > 0) {
  70         pocet--;
  71         return zasobnik[pocet];
  72     } else {
  73         return NAN;
  74     }
  75 }
  76 
  77 void tiskni(void)
  78 {
  79     printf("[ ");
  80     for (int i = 0; i < pocet; i++) {
  81         printf("(%g", creal(zasobnik[i]));
  82         if (cimag(zasobnik[i]) >= 0) {
  83             putchar('+');
  84             printf("j%g) ", cimag(zasobnik[i]));
  85         } else {
  86             putchar('-');
  87             printf("j%g) ", -cimag(zasobnik[i]));
  88         }
  89     }
  90     printf("]\n");
  91 }
  92 
  93 void etiskni(void)
  94 {
  95     printf("[ ");
  96     for (int i = 0; i < pocet; i++) {
  97         printf("(%gL%g) ", cabs(zasobnik[i]), carg(zasobnik[i]));
  98     }
  99     printf("]\n");
 100 }
`--> stáhnout

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