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: 20110211-Fri-dprc.c
3 * Datum: 11.02.2011 08:10
4 * Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 * Licence: GNU/GPL
6 * Úloha: Jak psát a používat funkce
7 ****************************************************/
8
9 #define _GNU_SOURCE
10
11 #include <stdio.h>
12 #include <math.h>
13 #include <stdbool.h>
14
15 /* *************** Makra ******************** */
16 //#define ARREYC 1024
17
18 /* ************* Funkční prototypy **************** */
19 double f_mezni(double r, double c);
20 void vymena(double *x, double *y);
21 bool dprc(double r, double c, double f, double *modul, double *faze);
22
23 /****************************************************
24 * Hlavní program.
25 ****************************************************/
26 int main(void)
27 {
28 double vysledek;
29
30 double odpor = 1000;
31 vysledek = f_mezni(odpor, 33e-9);
32 printf("%g\n", vysledek);
33
34 double kapacita = 33e-9;
35 printf("%g %g\n", odpor, kapacita);
36 vymena(&odpor, &kapacita);
37 printf("%g %g\n", odpor, kapacita);
38
39
40 double aPrenos;
41 double fPrenos;
42 if (dprc(1000, 33e-9, 4822.8, &aPrenos, &fPrenos)) {
43 printf("%g %g\n", aPrenos ,fPrenos );
44 } else {
45 fprintf(stderr,"spatne hodnoty R,C,f\n");
46 return 1;
47 }
48
49 return 0;
50 }
51
52 /* *************** Funkce ******************** */
53
54 /* výpočet mezního kmitočtu */
55 double f_mezni(double r, double c)
56 {
57 /* double f0;
58 f0 = 1/(2*PI*r*c);
59 return f0;*/
60 return 1 / (2 * M_PI * r * c);
61 }
62
63 /* vymění x a y */
64 void vymena(double *x, double *y)
65 {
66 double kybl = *x;
67 *x = *y;
68 *y = kybl;
69 }
70
71
72 /**
73 * Výpočet přenosu dolní propusti RC
74 *
75 * | -jXc | Xc
76 * Au = ------------- = ------------------
77 * | R - jXc | sqrt( R² + Xc² )
78 * Xc
79 * φ = arg( -jXc ) - arg( R - jXc ) = -90° + arctg( ----- )
80 * R
81 * */
82 bool dprc(double r, double c, double f, double *modul, double *faze)
83 {
84 if (r <= 0 || c <= 0 || f <= 0) {
85 return false; // vyskočí z funkce
86 }
87
88 double Xc = 1 / (2 * M_PI * f * c);
89 *modul = Xc / (sqrt(r * r + Xc * Xc));
90 *faze = -90 + 180 * (atan(Xc / r)) / M_PI;
91
92 return true;
93 }