jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
soucet-zlomku.c
Go to the documentation of this file.
1 
25 #include <stdio.h>
26 #include <stdlib.h>
27 
28 struct zlomek_s {
29  int citatel;
30  int jmenovatel;
31 };
32 
33 typedef struct zlomek_s zlomek;
34 /* muze byt zlomek i typedef pro int[2]? */
35 
36 /* Standard C Function: Greatest Common Divisor
37 http://www.math.wustl.edu/~victor/mfmm/compaa/gcd.c
38  */
39 static int gcd ( int a, int b ) {
40  int c;
41  while ( a != 0 ) {
42  c = a;
43  a = b % a;
44  b = c;
45  }
46  return b;
47 }
48 
49 /* Recursive Standard C Function: Greatest Common Divisor */
50 static int gcdr ( int a, int b ) {
51  if ( a==0 )
52  return b;
53  return gcdr ( b%a, a );
54 }
55 
56 
57 static
58 zlomek soucet (zlomek a, zlomek b) {
59  zlomek c;
60  int delitel;//gcd
61  c.citatel = a.citatel * b.jmenovatel + b.citatel * a.jmenovatel;
62  c.jmenovatel = a.jmenovatel * b.jmenovatel;
63 //normalizace:
64  delitel = gcd(c.citatel, c.jmenovatel);
65  if (delitel != 1) {
66  c.citatel /= delitel;
67  c.jmenovatel /= delitel;
68  }
69  return c;//zlomek, strukturu vracime hodnotou
70 }
71 
72 static
73 zlomek rozdil (zlomek a, zlomek b) {
74  zlomek c;
75  int delitel;//gcd
76  c.citatel = a.citatel * b.jmenovatel - b.citatel * a.jmenovatel;
77  c.jmenovatel = a.jmenovatel * b.jmenovatel;
78 //normalizace:
79  delitel = gcd(c.citatel, c.jmenovatel);
80  if (delitel != 1) {
81  c.citatel /= delitel;
82  c.jmenovatel /= delitel;
83  }
84  return c;//zlomek, strukturu vracime hodnotou
85 }
86 
87 static
88 zlomek soucin (zlomek a, zlomek b) {
89  zlomek c;
90  int delitel;//gcd
91  c.citatel = a.citatel * b.citatel;
92  c.jmenovatel = a.jmenovatel * b.jmenovatel;
93 //normalizace: udelat jako makro, nebo procedura, lepe? (zlomekPtr *a) to se ale 'neprobiralo'
94  delitel = gcd(c.citatel, c.jmenovatel);
95  if (delitel != 1) {
96  c.citatel /= delitel;
97  c.jmenovatel /= delitel;
98  }
99  return c;//zlomek, strukturu vracime hodnotou
100 }
101 
102 static
103 zlomek podil (zlomek a, zlomek b) {
104  zlomek c;
105  int delitel;//gcd
106  c.citatel = a.citatel * b.jmenovatel;
107  c.jmenovatel = a.jmenovatel * b.citatel;
108 //normalizace:
109  delitel = gcd(c.citatel, c.jmenovatel);
110  if (delitel != 1) {
111  c.citatel /= delitel;
112  c.jmenovatel /= delitel;
113  }
114  return c;//zlomek, strukturu vracime hodnotou
115 }
116 
117 zlomek_vypis (zlomek z) { printf("%d/%d", z.citatel, z.jmenovatel); }
118 
119 int main(void) {
120  zlomek z1={1,2};
121  zlomek z2={1,3};
122  zlomek z3={};// 0/0 zlomek?
123  printf("z1="); zlomek_vypis(z1);
124  printf("\nz2="); zlomek_vypis(z2);
125 
126  z3 = soucet(z1, z2);
127  printf("\nz3=soucet(z1, z2); z3="); zlomek_vypis(z3);
128 
129  z3 = rozdil(z1, z2);
130  printf("\nz3=rozdil(z1, z2); z3="); zlomek_vypis(z3);
131  z3 = rozdil(z2, z1);
132  printf("\nz3=rozdil(z2, z1); z3="); zlomek_vypis(z3);
133 
134  z3 = soucin(z1, z2);
135  printf("\nz3=soucin(z1, z2); z3="); zlomek_vypis(z3);
136 
137  z3 = podil(z1, z2);
138  printf("\nz3= podil(z1, z2); z3="); zlomek_vypis(z3);
139  return EXIT_SUCCESS;
140 }