Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
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á".
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 }