Merge branch 'master' of ssh://repo.or.cz/srv/git/BETON
[BETON.git] / knihovna.c
blob931d3644a5657b2a0629c38b72417885581e5beb
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>
17 const double MAX_FACTBASE=150; /** maximalni hodnota zakladu pro vypocet faktorialu */
19 /**
20 * Struktura obsahující hodnoty parametrù pøíkazové øádky.
22 typedef struct vysledek
24 double result;
25 int error;
26 } Tvysledek;
28 /**
29 * provede operaci scitani a vysledek vrati ve strukture Tvysledek.
30 * @param a prvni scitanec.
31 * @param b druhy scitanec.
32 * @return Vrací strukturu obsahujici soucet a+b.
34 Tvysledek scitani(double a, double b){
35 Tvysledek result={
36 .error=0,
37 .result=a+b,
39 return result;
42 /**
43 * provede operaci odcitani a vysledek vrati ve strukture Tvysledek.
44 * @param a mensenec.
45 * @param b mensitel.
46 * @return Vrací strukturu obsahujici podil a-b.
48 Tvysledek odcitani(double a, double b) {
49 Tvysledek result={
50 .error=0,
51 .result=a-b,
53 return result;
56 /**
57 * provede operaci nasobeni a vysledek vrati ve strukture Tvysledek.
58 * @param a prvni cinitel.
59 * @param b druhy cinitel.
60 * @return Vrací strukturu obsahujici soucin a*b.
62 Tvysledek nasobeni(double a, double b) {
63 Tvysledek result={
64 .error=0,
65 .result=a*b,
67 return result;
70 /**
71 * provede operaci deleni a vysledek vrati ve strukture Tvysledek.
72 * @param a delenec.
73 * @param b delitel.
74 * @return Vrací strukturu obsahujici podil a/b.
76 Tvysledek deleni(double a, double b) {
77 Tvysledek result={
78 .error=0,
79 .result=0,
81 if (b==0) {
82 result.error=1;
83 return result;
85 result.result=a/b;
86 return result;
89 /**
90 * provede operaci scitani a vysledek vrati ve strukture Tvysledek.
91 * pokud vysledek neni zobrazitelny v ciselnem rozsahu double je vysledna hodnota .error nastavena na 1.
92 * pokud exponent neni prirozene cislo je vysledna hodnota .error nastavena na 1.
93 * @param a zaklad mocniny.
94 * @param exponent exponent umocneni.
95 * @return Vrací strukturu obsahujici hodnotu a^exponent a pripadnou indikaci chyby.
97 Tvysledek umocneni(double a, double exponent) {
98 Tvysledek result={
99 .error=0,
100 .result=0,
102 if (ceil(exponent)!=exponent || exponent<0 || exponent>DBL_MAX_EXP){
103 result.error=1;
104 return result;
106 result.result=pow(a,exponent);
107 return result;
111 * vypocita faktorial a vysledek vrati ve strukture Tvysledek.
112 * pokud vysledek neni zobrazitelny v ciselnem rozsahu double je vysledna hodnota .error nastavena na 1.
113 * pokud zaklad faktorialu neni prirozene cislo je vysledna hodnota .error nastavena na 1.
114 * @param a zaklad faktorialu.
115 * @return Vrací strukturu obsahujici hodnotu a! a pripadnou indikaci chyby.
117 Tvysledek faktorial(double a){
118 Tvysledek result={
119 .error=0,
120 .result=1,
122 if (ceil(a)!=a || a<0 || a>MAX_FACTBASE){
123 result.error=1;
124 return result;}
125 while (a>1){
126 result.result=result.result*a;
127 a--;
129 return result;
133 * vypocita prirozeny logaritmus a vysledek vrati ve strukture Tvysledek.
134 * pokud je numerus logaritmu zaporny je vysledna hodnota .error nastavena na 1.
135 * @param a numerus logaritmu.
136 * @return Vrací strukturu obsahujici hodnotu ln(a) a pripadnou indikaci chyby.
138 Tvysledek logaritmus(double a) {
139 Tvysledek result={
140 .error=0,
141 .result=0,
143 if (a<=0){
144 result.error=1;
145 return result;
147 result.result=log(a);
148 return result;
150 /*** konec souboru knihovna.c ***/