Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
program bruchrechnen; uses crt; var t1t,t2t,n1n,n2n,t3t,n3n,r,s,t,u,erg,xy,yx,a: integer; oper,q: char; (* ----------------------------------------------------------------------------------------- t1t, t2t, n1n, n2n sind zähler und nenner der Brueche, die eingegeben werden t3t und n3n sind zähler und nenner der Ausgabe-Brueche r, s, t und u sind zähler und nenner der brüche zum rechnen damit erg ist das ergebnis xy und yz sind zähler und nenner der Ausgabe, die gekuertzt sind in "a" wird das ergebnis des ggT von Zähler und Nenner des Ausgabe-Bruches gespeichert oper ist der operator, also die rechenart (plus, minus, ...) q ist eine hilfsvariable zum abfragen der schleife "neustarten" ------------------------------------------------------------------------------------------- *) procedure ggT(x,y:integer; var teiler: integer); var tausch,d: integer; (* d für Rest, tausch als hilfsvariable zum tauschen der werte *) begin if x<y then begin tausch := x; x := y; y := tausch end; repeat d := x mod y; x := y; y := r; until d=0; (* bis Rest 0 ist *) teiler := x; end; procedure kgv(a,b:integer; var erg:integer); begin ggT(a,b,erg); erg := a*b div erg; end; procedure kuerzen; begin ggT(t3t,n3n,a); xy := t3t div a; yx := n3n div a; end; procedure ausgabe; begin kuerzen; if yx = 1 then writeln('Aus ',t1t,'/',n1n,' ',oper,' ',t2t,'/',n2n,' ist ',xy,' berechnet worden!') else writeln('Aus ',t1t,'/',n1n,' ',oper,' ',t2t,'/',n2n,' ist ',xy,'/',yx,' berechnet worden!'); readln; end; procedure plus; var f,g:integer; begin if n1n<>n2n then begin kgv(s,u,erg); (* kgv für kleinsten gemeinsamen Nenner *) f := erg div s; (* erweitern *) g := erg div u; (* ... *) r := r*f; (* ... *) t := t*g; (* ... *) t3t := r+t; (* Zähler ist addition von 1 und 2 *) n3n := erg; (* Nenner ist kgv *) end else begin t3t := r+t; n3n := s; end; ausgabe; end; procedure minus; var f,g:integer; begin if n1n<>n2n then begin kgv(s,u,erg); (* kgv für kleinsten gemeinsamen Nenner *) f := erg div s; (* erweitern *) g := erg div u; (* ... *) r := r*f; (* ... *) t := t*g; (* ... *) t3t := r-t; (* Zähler ist differenz zwischen 1 und 2 *) n3n := erg; (* Nenner ist kgv *) end else begin t3t := r-t; n3n := s; end; ausgabe; end; procedure mal; begin t3t := r*t; n3n := s*u; ausgabe; end; procedure geteilt; begin t3t := r*u; n3n := s*t; ausgabe; end; procedure analyse; begin case oper of '+' : plus; '-' : minus; '*' : mal; '/' : geteilt; else writeln('Falsche Eingabe beim Operator!'); readln; end; end; BEGIN (* Hauptprogramm *) repeat clrscr; writeln('Wir rechnen jetzt mit Bruechen!'); write('Geben Sie den Zaehler von Bruch 1 ein! '); readln(t1t); write('Geben Sie den Nenner von Bruch 1 ein! '); readln(n1n); writeln; write('Geben Sie den Zaehler von Bruch 2 ein! '); readln(t2t); write('Geben Sie den Nenner von Bruch 2 ein! '); readln(n2n); writeln; write('Was moechten Sie tun? (+,-,* oder /) '); readln(oper); writeln; r := t1t; s := n1n; t := t2t; u := n2n; analyse; writeln('Moechten Sie neustarten? J(a) oder N(ein)?'); readln(q); until (q <> 'j') and (q <> 'J'); END. (* Hauptprogramm *) |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Santa« (5. Dezember 2004, 18:36)
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
procedure ggT(x,y:integer; var teiler: integer); var tausch,d: integer; (* d für Rest, tausch als hilfsvariable zum tauschen der werte *) begin if x<y then begin tausch := x; x := y; y := tausch end; repeat d := x mod y; x := y; --> y := r; <--- wohl ein kopier fehler? da gehört d hin weil r hat damit doch nicht zu tun, oder? until d=0; (* bis Rest 0 ist *) teiler := x; end; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Pytho« (5. Dezember 2004, 18:45)