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 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