Vytvoren Makefile pro sestaveni
[BETON.git] / knihovna.c
blob882a5a7b30f2fefc4974f130bf875dddba574bfc
1 /**************************************************************************** *
2 * nazev projektu: BETON *
3 * soubor: knihovna.c *
4 * autor: Vojtìch ©im¹a xsimsa01 *
5 * *
6 * popis: knihovna funkcí *
7 * *
8 ******************************************************************************/
9 /**
10 * @file knihovna.c
12 * @brief knihovna funkcí
13 * @author Vojtìch ©im¹a (xsimsa01)
15 #include <math.h>
16 #include <float.h>
18 /**
19 * Struktura obsahující hodnoty parametrù pøíkazové øádky.
21 typedef struct vysledek
23 double result;
24 int error;
25 } Tvysledek;
27 /**
28 * provede operaci scitani a vysledek vrati ve strukture Tvysledek.
29 * @param a prvni scitanec.
30 * @param b druhy scitanec.
31 * @return Vrací strukturu obsahujici soucet a+b.
33 Tvysledek scitani(double a, double b){
34 Tvysledek result={
35 .error=0,
36 .result=a+b,
38 return result;
41 /**
42 * provede operaci odcitani a vysledek vrati ve strukture Tvysledek.
43 * @param a mensenec.
44 * @param b mensitel.
45 * @return Vrací strukturu obsahujici rozdil a-b.
47 Tvysledek odcitani(double a, double b) {
48 Tvysledek result={
49 .error=0,
50 .result=a-b,
52 return result;
55 /**
56 * provede operaci nasobeni a vysledek vrati ve strukture Tvysledek.
57 * @param a prvni cinitel.
58 * @param b druhy cinitel.
59 * @return Vrací strukturu obsahujici soucin a*b.
61 Tvysledek nasobeni(double a, double b) {
62 Tvysledek result={
63 .error=0,
64 .result=a*b,
66 return result;
69 /**
70 * provede operaci deleni a vysledek vrati ve strukture Tvysledek.
71 * @param a delenec.
72 * @param b delitel.
73 * @return Vrací strukturu obsahujici podil a/b.
75 Tvysledek deleni(double a, double b) {
76 Tvysledek result={
77 .error=0,
78 .result=0,
80 if (b==0) {
81 result.error=1;
82 return result;
84 result.result=a/b;
85 return result;
88 /**
89 * provede operaci scitani a vysledek vrati ve strukture Tvysledek.
90 * pokud vysledek neni zobrazitelny v ciselnem rozsahu double je vysledna hodnota .error nastavena na 1.
91 * pokud exponent neni prirozene cislo je vysledna hodnota .error nastavena na 1.
92 * @param a zaklad mocniny.
93 * @param exponent exponent umocneni.
94 * @return Vrací strukturu obsahujici hodnotu a^exponent a pripadnou indikaci chyby.
96 Tvysledek umocneni(double a, double exponent) {
97 Tvysledek result={
98 .error=0,
99 .result=0,
101 if (ceil(exponent)!=exponent || exponent<0 || exponent>DBL_MAX_EXP){
102 result.error=1;
103 return result;
105 result.result=pow(a,exponent);
106 return result;
110 * vypocita faktorial a vysledek vrati ve strukture Tvysledek.
111 * pokud vysledek neni zobrazitelny v ciselnem rozsahu double je vysledna hodnota .error nastavena na 1.
112 * pokud zaklad faktorialu neni prirozene cislo je vysledna hodnota .error nastavena na 1.
113 * @param a zaklad faktorialu.
114 * @return Vrací strukturu obsahujici hodnotu a! a pripadnou indikaci chyby.
116 Tvysledek faktorial(double a){
117 int x=1;
118 Tvysledek result={
119 .error=0,
120 .result=1,
122 if (ceil(a)!=a || a<0){
123 result.error=1;
124 return result;
126 while (x<=a){
127 if (result.result>(DBL_MAX/x)) {
128 result.error=1;
129 return result;
131 result.result=result.result*x;
132 x++;
134 return result;
138 * vypocita prirozeny logaritmus a vysledek vrati ve strukture Tvysledek.
139 * pokud je numerus logaritmu zaporny je vysledna hodnota .error nastavena na 1.
140 * @param a numerus logaritmu.
141 * @return Vrací strukturu obsahujici hodnotu ln(a) a pripadnou indikaci chyby.
143 Tvysledek logaritmus(double a) {
144 Tvysledek result={
145 .error=0,
146 .result=0,
148 if (a<=0){
149 result.error=1;
150 return result;
152 result.result=log(a);
153 return result;
155 /*** konec souboru knihovna.c ***/