Umrechnung in andere Zahlensysteme

Transcrição

Umrechnung in andere Zahlensysteme
Ein Turbo-Pascal-Programm zur Umrechnung vom
Dezimalsystem in andere Zahlensysteme∗
Stefan Ackermann
Mathematisches Institut
der Universität Leipzig
11. November 2005
Zusammenfassung
Dezimalzahlen bzw. Dezimalbrüche lassen sich auf recht einfache Weise
in ein anderes Zahlensystem zur Basis p umrechnen. Ausgangspunkt ist die
Darstellung einer Zahl z in dem gewünschten Zahlensystem. Zweckmäßigerweise behandelt man ganzen Anteil [z] und den gebrochenen Anteil {z} auf
unterschiedliche Art.
Neben der Beschreibung der Algorithmen und der Angabe des vollständigen
Programmes werden qualitative Aussagen zur Periodizität der entstehenden
p-adischen Zahl getroffen.
0 Dieses Lehrmaterial wurde im Rahmen der studentischen Ausbildung am Mathematischen
Institut der Universität Leipzig entwickelt. Es kann in der vorliegenden Form frei kopiert und
weitergegeben werden. Eigenmächtige Änderungen sind unerwünscht. Anregungen und Änderungswünsche sind jedoch stets willkommen und werden bei Einverständnis in absehbarer Zeit
eingearbeitet.
email: [email protected]
1
Inhaltsverzeichnis
1 Umrechnung des ganzen Teils in eine p-adische Zahl
1.1 Die Darstellung von zg im p-adischen System . . . . . . . . . . . . .
1.2 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Codierung des Algorithmus . . . . . . . . . . . . . . . . . . . . . . .
3
3
3
4
2 Umrechnung des gebrochenen Anteils in eine p-adische Zahl
2.1 Die Darstellung von zb im p-adischen System . . . . . . . . . .
2.2 Periodenbeginn und -länge . . . . . . . . . . . . . . . . . . . . .
2.3 Codierung des Algorithmus . . . . . . . . . . . . . . . . . . . .
2.4 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
4
4
4
5
6
3 Anwendung des Programmes
3.1 Weitere ganzzahlige Beispiele . . . . . . . . . . . . . . . . . . . . . .
3.2 Probleme mit der Rechengenauigkeit . . . . . . . . . . . . . . . . . .
3.3 Ein nicht ganzzahliges Beispiel . . . . . . . . . . . . . . . . . . . . .
6
6
7
7
4 Umrechnung aus anderen Zahlensystemen heraus
4.1 Das kleine Einmaleins zur Basis 5 . . . . . . . . . . . . . . . . . . . .
4.2 Beispiel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Beispiel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
8
9
10
A PROGRAMM:
10
2
.
.
.
.
.
.
.
.
1
Umrechnung des ganzen Teils in eine p-adische
Zahl
Sei z ∈ R gegeben, so bezeichne man den ganzen Teil von z mit zg := [z] und den
gebrochenen Anteil von z mit zb := {z}.
1.1
Die Darstellung von zg im p-adischen System
Den ganzen Teil zg kann man nun in Anlehnung an das bekannte HORNER-Schema
folgendermaßen darstellen:
zg
= zk pk + zk−1 pk−1 + ... + z2 p2 + z1 p + z0
= (zk pk−1 + zk−1 pk−2 + ... + z2 p + z1 )p + z0
= ((zk pk−2 + zk−1 pk−3 + ... + z2 )p + z1 )p + z0
= (...(zk p + zk−1 )p + ... + z2 )p + z1 )p + z0
Die zi sind die Ziffern im p-adischen System, d. h. es gilt 0 ≤ zi < p.
Durch das iterative Ausklammern von p sieht man sofort:
• z0 ist der Rest von zg bei der Teilung durch p, also z0 = zg MOD p;
• z1 ist der Rest des bei der obigen Division erhaltenen ganzzahligen Quotienten bei der erneuten Teilung durch p, d. h. z1 = [zg /p] MOD p bzw.
z1 = (zg DIV p) MOD p usw.
Den ganzen Anteil im neuen p-adischen System erhält man daher einfach durch
fortwährendes Dividieren durch die Basis p und “Aufsammeln” der Reste in einer
Zeichenkette von rechts nach links, solange bis als Ergebnis der Division 0 auftritt.
1.2
Beispiele
Man stelle die Zahl 43 in den Zahlensystemen zur Basis 7 bzw. zur Basis 11 dar!
Es ist
43 : 7 = 6 Rest 1 43 : 11 = 3 Rest 10
6 : 7 = 0 Rest 6
3 : 11 = 0 Rest 3
43 = 61[7] 2
43 = 3A[11] 3
2 Das für die Darstellung maßgebliche Zahlensystem wird als Index in eckigen Klammern angegeben. Fehlt diese Angabe, dann ist das Dezimalsystem maßgebend.
3 Bei Zahlensystemen zu einer Basis größer als 10 werden die fehlenden Ziffern durch große
Buchstaben dargestellt, also A = 10, B = 11 usw.
3
1.3
Codierung des Algorithmus
In einem Turbo-Pascal-Programm sähe das folgendermaßen aus:
var z, zb
: real;
p, zg, rest, : integer;
ganz, bruch : string;
{ eventuell auch double oder extended }
{ eventuell auch longint }
{*** Behandlung des ganzen Anteils ***}
ganz:=’’;
Repeat
rest:=zg MOD p;
if rest>9 then rest:=rest+7;
ganz:=CHR(48+rest)+ganz;
zg:=zg DIV p;
until zg=0;
2
{Vgl. ASCII-Code-Tabelle}
Umrechnung des gebrochenen Anteils in eine padische Zahl
Es sei nochmal an die unter 1. beschriebene Zerlegung z = zg + zb erinnert.
2.1
Die Darstellung von zb im p-adischen System
Den gebrochenen Anteil zb stellt man nun folgendermaßen dar:
zb
= z−1 p−1 + z−2 p−2 + ... + z1−m p1−m + z−m p−m + ...
= (z−1 + z−2 p−1 + ... + z1−m p2−m + z−m p1−m + ...)/p
= (z−1 + (z−2 + ... + z1−m p3−m + z−m p2−m + ...)/p)/p
Im Grunde ist dies wieder das HORNER-Schema, diesmal mit der Variablen p1 .
Aus der letzten Zeile, die durch fortwährendes Ausklammern von p−1 entstanden
ist, kann man nun ablesen:
• z−1 ist der ganze Anteil des Produktes zb p, also z−1 = [zb p],
• z−2 ist der ganze Anteil des Produktes von p mit dem gebrochenen Anteil des
obigen Produktes, d.h. z−2 = [p {zb p}] usw.
Den gebrochenen Anteil im neuen p-adischen System erhält man daher einfach durch
fortwährendes Multiplizieren mit der Basis p und Abspalten der ganzen Anteile der
Zwischenprodukte, die man in einer Zeichenkette von links nach rechts aufsammelt.
Dieser Prozeß endet, wenn ein solches Produkt ganzzahlig wird. Das kann nur dann
passieren, wenn der Nenner von zb (in der Darstellung als gekürzter Bruch) nur
Primfaktoren enthält, die auch in p enthalten sind. Anderenfalls ist der p-adische
Bruch periodisch bzw. bei einer irrationalen Zahl auch unendlich.
2.2
Periodenbeginn und -länge
z sei nun ein vollständig gekürzter, echter Bruch, also z =
ggT(m, n) = 1.
4
m
n
mit m < n ∈ N und
Unabhängig von p, d. h. vom Zahlensystem, in dem m und n dargestellt sind, treten
höchstens n−1 verschiedene Reste bei der Division durch n auf, d. h. spätestens nach
n Divisionen wiederholen sich die p-adischen Ziffern. Somit ist die Periodenlänge
höchstens n.
Abhängig von p tritt dieser Fall allerdings häufig viel früher ein. Dabei können noch
einige “Vorziffern” auftreten, bevor die Periode beginnt.
Sei zb = m
n = 0, z−1 ...z−k z−(k+1) ...z−(k+l) , also k die Anzahl der Vorziffern und l
die Periodenlänge. n läßt sich noch als Produkt n = n1 n2 schreiben, wobei n1 das
Produkt aller zu p teilerfremden Primfaktoren von n ist. Mit anderen Worten ist
ggT(p, n1 ) = 1 und ggT(p, n2 ) = ggT(p, n).
Dann gilt:
• k ist die kleinste der nichtnegativen ganzen Zahlen x, für die n2 Teiler von px
ist.
• l ist die kleinste der natürlichen Zahlen y, für die n1 Teiler von py − 1 ist bzw.
für die py bei der Teilung durch n1 den Rest 1 läßt.
Ist n1 = 1, dann ist l = 0.
Um sich diesen Sachverhalt zu veranschaulichen, benutzt man den hier beschriebenen Algorithmus zur Bestimmung der p-adischen Ziffern, d. h. die fortlaufende
Multiplikation mit p und das Abspalten des ganzzahligen Anteils.
Ist z = n1mn2 , so kann man in dem nach k Multiplikationen mit p entstandenen
Bruch mit n2 kürzen, d. h. es ist
z pk =
qm
m k
p =
.
n1 n2
n1
Die bei folgenden Multiplikationen auftretenden ganzzahligen Anteile, die ja gerade
die gesuchten p-adischen Ziffern sind, hängen nun nicht mehr von n2 ab.
Nach weiteren l Multiplikationen ist
z pk pl =
qm l
qm
p ≡
mod n1 ,
n1
n1
da pl ≡ 1 mod n1 , d. h. es treten von nun an wieder die gleichen ganzzahligen Anteile auf wie bereits vor l Multiplikationen.
An dieser Stelle sieht man auch, dass im Falle n1 = 1, also wenn n nur aus Primfaktoren besteht, die auch in p enthalten sind, der Algorithmus nach k Schritten
endet.
Im Falle n2 = 1, also wenn n und p teilerfremd sind, treten keine “Vorziffern” auf.
2.3
Codierung des Algorithmus
In Turbo-Pascal könnte man dies wieder folgendermaßen programmieren:
{*** Behandlung des gebrochenen Anteils ***}
bruch:=’’;
If zb>0 then
begin
5
bruch:=’.’;
Repeat
zb:=p*zb;
rest:=TRUNC(zb);
zb:=FRAC(zb);
if rest>9 then rest:=rest+7; {Vgl. ASCII-Code-Tabelle}
bruch:=bruch+CHR(48+rest);
until (zb=0) or (length(bruch)=21);
if (length(bruch)=21) and (zb>0) then
bruch:=bruch+’...’;
end;
2.4
Beispiele
Man stelle den Dezimalbruch 0.125 in den Systemen zur Basis 7 und zur Basis 14
dar!
• Vorüberlegung
Es ist 0.125 = 18 und 8 = 23 ,
d. h. für p = 7 ist n1 = 8 und n2 = 1, somit k = 0 wegen 1|70 und l = 2 wegen
8|72 − 1 = 48, aber nicht 8|71 − 1 = 6.
Dagegen ist für p = 14 = 7 ∗ 2 n1 = 1 und n2 = 8, somit k = 3 wegen
8|143 = 2744, aber nicht 8|142 = 196 und l = 0 wegen 1|140 − 1.
• Umrechnung
0.125 ∗ 7 = 0.875 0.125 ∗ 14 = 1.75
0.875 ∗ 7 = 6.125 0.75 ∗ 14 = 10.50
0.125 ∗ 7 = 0.875
0.5 ∗ 14 = 7.0
0.875 ∗ 7 = 6.125
0.0 ∗ 14 = 0.0
0.125 = 0.06[7]
0.125 = 0.1A7[14]
• Bemerkung
Im Falle p = 14 bricht der Prozeß ab, weil der Nenner 8 nur den Primfaktor
2 enthält, der auch in 14 enthalten ist.
3
Anwendung des Programmes
Versieht man die oben angegebenen Teil-Routinen noch mit Programmtext zur
Datenein- und -ausgabe, dann erhält man das im Anhang A angegebene TurboPascal-Programm.
Die nun folgenden Beispiele wurden mit diesem Programm gerechnet.
3.1
Weitere ganzzahlige Beispiele
• Umzuwandlungen der Zahl 39 in Zahlen zur Basis 2 bis 17
6
Basis = 2 100111
1110
Basis = 3
Basis = 4
213
124
Basis = 5
Basis = 6
103
54
Basis = 7
Basis = 8
47
43
Basis = 9
Basis = 10 39
Basis = 11 36
Basis = 12 33
Basis = 13 30
Basis = 14 2B
Basis = 15 29
Basis = 16 27
Basis = 17 22
• Umzuwandlungen der Zahl 123 in Zahlen zur Basis 2 bis 17
Basis = 2 1111011
11120
Basis = 3
Basis = 4
1323
443
Basis = 5
Basis = 6
323
234
Basis = 7
Basis = 8
173
Basis = 9
146
3.2
Basis = 10 123
Basis = 11 102
Basis = 12 A3
Basis = 13 96
Basis = 14 8B
Basis = 15 83
Basis = 16 7B
Basis = 17 74
Probleme mit der Rechengenauigkeit
Der angebene Algorithmus funktioniert natürlich nur, wenn man exakt rechnen
kann. Dazu könnte man ihn z. B. in einem Computeralgebrasystem wie Maple oder
Mathematica realisieren.
Die hier vorgestellte Implementierung verwendet das Rechenwerk des Turbo-PascalCompilers. Im ganzzahligen Fall kann man exakt rechnen, solange die Zahlen nicht
den in Turbo-Pascal vorgebenen Typenbereich
(Integer: −32768...32767) bzw. (LongInt: −2147483648...2147483647)
verlassen. Bei größeren Zahlen muss man auf real-Typen ausweichen, was sofort
Rundungs- und Rechenfehler bei den Divisionen nach sich zieht.
Bei der Umrechnung des gebrochenen Anteils treten von vornherein Rechenungenauigkeiten auf. Je nachdem, ob man sich für den Typ real, double oder extended
entscheidet, muss man spätestens im Bereich von (dezimal) 10−13 , 10−16 oder 10−20
damit rechnen, dass die Ergebnisse fehlerbehaftet sind.
Um exakte Ergebnisse auch unter Turbo-Pascal zu erhalten, müsste man die Zahlen als Zeichenketten darstellen und für diese zwei der schriftlichen Multiplikation
bzw. Division nachempfundene Routinen zur Multiplikation und Division mit Rest
programmieren. Mit diesen Unterprogrammen könnte man dann auch mit beliebig
großen ganzen Zahlen rechnen. Fügte man einem solchen Programm noch einen
Euklidischen Algorithmus hinzu, dann könnte man mit den in 2.2 beschriebenen
Mitteln innerhalb des Programmes auch die Anzahl der Vorziffern und die Periodenlänge bestimmen.
Im folgenden Beispiel sind Periodenlänge und Anzahl der Vorziffern allerdings nachträglich
“mit der Hand” ausgerechnet worden.
3.3
Ein nicht ganzzahliges Beispiel
41
Ergebnisse der Umwandlung der Zahl 7.41 = 7 + 100
in einen p-adischen Bruch für
2 ≤ p ≤ 20 bei 30 ausgerechneten Nachkommastellen.
7
p
7.41
n1
n2
k
l
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
111.01101000111101011100001010001
21.10200122000021021211102001220
13.12203311300220331130022033113
12.20111111111111111111111111010
11.22432054320543205432054241141
10.26042604260426042604253555213
7.32172702436560507534?
7.36180072543618007252644816515
7.40999999999999999986122212192
7.45678A012345678A0049057889A66
7.4B05915343A0B62A64B41515BA899
7.543A018C7C1229649438C314B5570
7.5A507BA8D623507B65A0BDDA5B92B
7.623B3B3B3B3B3B3A51240991550BB
7.68F 5C28F 5C28F 5C
7.6G85A64F DD1902EC7D0CGGDF 21775
7.76F 22F F 22F F 22F E3597CHE5E8BAA1
7.7F 03BB3IF 77F 03993849C904IF H8H
7.83JJJJJJJJJJJJF 91044F 8D1619DF
25
4
100 1
25
4
4
25
25
4
100 1
25
4
100 1
1
100
100 1
25
4
100 1
25
4
4
25
25
4
100 1
25
4
100 1
1
100
2
0
1
2
2
0
1
0
2
0
1
0
2
2
1
0
2
0
2
20
20
10
1
5
4
20
10
0
10
20
20
10
2
5
20
4
10
0
Man beachte die Rechenungenauigkeit des Computers:
Bei p = 8, p = 12, p = 13 und p = 17 kann man die Periode nicht erkennen.
Bei p = 10 und p=20 müsste der Algorithmus nach jeweils zwei Schritten beendet
sein, also 7.41 bzw. 7.84 als Ergebnis liefern.
4
Umrechnung aus anderen Zahlensystemen heraus
Im Prinzip kann man diese Umrechnungen aus jedem Zahlensystem heraus vornehmen, in dem man die Multiplikation und die Division - d. h. das kleine Einmaleins
- beherrscht. Da wir - und auch alle Computerhochsprachen - noch immer die Division im Zehnersystem bevorzugen, sind uns diese Rechenregeln nicht so geläufig.
(Es soll sogar Leute geben, die für das kleine Einmaleins im Dezimalsystem den
Taschenrechner bemühen müssen.)
Auch das im Anhang angegebene Programm leistet nur Umrechnungen vom Zehnersystem in ein System mit der Basis 2 bis 36. Für mehr Ziffern reicht das Alphabet
nicht aus.
Am Beispiel des Zahlensystems zur Basis 5 soll im folgenden trotz allem demonstriert werden, wie solche Umrechnungen vorzunehmen sind.
4.1
Das kleine Einmaleins zur Basis 5
... angegeben als Multiplikationstafel. Da beim mehrstelligen Multiplizieren auch
addiert werden muss, sei auch noch eine Additionstafel angegeben:
8
∗
0
1
2
3
4
10
0 1
0 0
0 1
0 2
0 3
0 4
0 10
2
0
2
4
11
13
20
3
0
3
11
14
22
30
4
0
4
13
22
31
40
10
0
10
20
30
40
100
+
0
1
2
3
4
10
0
1 2
0
1 2
1
2 3
2
3 4
3
4 10
4 10 11
10 11 12
3
3
4
10
11
12
13
4
4
10
11
12
13
14
10
10
11
12
13
14
20
Man beachte 5 = 10[5] !
Es ist z. B. 4[5] ∗4[5] = 4∗4 = 16 = 3∗51 +1 = 31[5] und 13[5] : 2[5] = 8 : 2 = 4 = 4[5] .
4.2
Beispiel 1
Man rechne die Zahl 1234.12[5] in einen 3-adischen Bruch um!
• Umrechnung des ganzen Teils:
12[5] : 3 = 2 Rest 1
13[5] : 3 = 2 Rest 2
24[5] : 3 = 4 Rest 2
, da 2 ∗ 3 = 11[5]
, da 2 ∗ 3 = 11[5]
, da 4 ∗ 3 = 22[5]
Insgesamt ist also 1234[5] : 3 = 224[5] Rest 2.
Analog erhält man 224[5] : 3 = 41[5] Rest 1,
ebenso 41[5] : 3 = 12[5] Rest 0,
und 12[5] : 3 = 2 Rest 1,
2[5] : 3 = 0 Rest 2.
Zusammengefasst erhält man daraus 1234[5] = 21012[3] .
In der Tat ist 1234[5] = 1 ∗ 53 + 2 ∗ 52 + 3 ∗ 5 + 4 = 125 + 50 + 15 + 4 = 194 =
= 162 + 27 + 3 + 2 = 2 ∗ 34 + 1 ∗ 33 + 0 ∗ 32 + 1 ∗ 3 + 2 = 21012[3] .
• Umrechnung des gebrochenen Teils
0.122...[5] ∗ 3 = 0.422...[5]
0.422...[5] ∗ 3 = 2.322...[5]
0.322...[5] ∗ 3 = 2.022...[5]
0.022...[5] ∗ 3 = 0.122...[5]
usw. (Man beachte 2 ∗ 3 = 11[5] bei ständigem Übertrag 1.)
Es ist also 0.12[5] = 0.0220[3] . Die Periode hat die Länge 4.
• Tatsächlich ist
0.12[5]
=
1
5
+
2
25
+
2
125
+ ... =
1
5
+
2
25
1 i
i=0 5
2 5
= 15 + 25
4
P∞
| geometrische Reihe
=
3
10 .
Mit den Bezeichnungen aus Abschnitt 2.2 ist dann n1 = 10, n2 = 1, k = 0 und
l = 4 wegen 10|34 − 1.
9
4.3
Beispiel 2
Man rechne die Zahl 1234.12[5] in einen 14-adischen Bruch um! Dabei beachte man
14 = 24[5]
• Umrechnung des ganzen Teils:
123[5] : 24[5] = 2 Rest 20[5]
204[5] : 24[5] = 3 Rest 22[5]
, da 24[5] ∗ 2 = 103[5]
, da 24[5] ∗ 3 = 132[5]
Insgesamt ist also 1234[5] : 22[5] = 23[5] Rest 22[5] .
Analog erhält man 23[5] : 24[5] = 0[5] Rest 23[5] .
Unter Beachtung von 22[5] = 12 = C[14] und 23[5] = 13 = D[14] erhält man
daraus 1234[5] = DC[14] .
In der Tat ist 1234[5] = 1 ∗ 53 + 2 ∗ 52 + 3 ∗ 5 + 4 = 125 + 50 + 15 + 4 = 194 =
= 13 ∗ 14 + 12 = DC[14] .
• Umrechnung des gebrochenen Teils
0.122...[5] ∗ 24[5]
0.044...[5] ∗ 24[5]
0.344...[5] ∗ 24[5]
= 4.044...[5]
= 2.344...[5]
= 21.044...[5]
Die erste Zeile rechnet man beispielsweise so aus:
0.122...[5] ∗ 20[5]
0.122...[5] ∗ 4[5]
= 2.444...[5]
= 1.044...[5]
Die Addition der beiden Zwischenergebnisse liefert 4.044...[5] .
Mit 21[5] = 11 = B[14] ist also 0.12[5] = 0.42B [14] . Die Periode hat die Länge
2.
3
• Tatsächlich ist wegen 0.12[5] = 10
unter Verwendung der Bezeichnungen aus
Abschnitt 2.2 n1 = 5, n2 = 2, d. h. k = 1 wegen 2|14 und l = 2 wegen
5|142 − 1.
A
PROGRAMM:
Programm zur Umrechnung einer positiven Dezimalzahl in ein Zahlensystem mit
einer Basis zwischen 2 und 36. Ziffern größer als 9 werden durch die Buchstaben
A, B, C,... dargestellt.
program zsys;\\
{Umrechnung vom Dezimalsystem in andere Zahlensysteme
Stefan Ackermann, Universit"at Leipzig, November 1992}
uses crt;
var z, zb
: double;
p, zg, rest, line: integer;
10
ganz, bruch
: string;
begin
clrscr;
window(5,1,75,25);
clrscr;
WriteLn(’Programm zur Umrechnung einer positiven Dezimalzahl in ein’);
WriteLn(’Zahlensystem mit einer Basis zwischen 2 und 36’);
WriteLn;
WriteLn(’Ziffern groesser als 9 werden durch die Buchstaben A, B, C,...’);
WriteLn(’dargestellt.’);
WriteLn(’-------------------------------------------------------------’);
WriteLn;
p:=1;
While p>0 do
{*** Eingabe ***}
begin
if p=1 then
begin
window(1,8,80,25);
clrscr;
Write(’ Eingabe der umzuwandelnden Zahl: ’);
ReadLn(z);
window(2,24,80,25);
WriteLn(’ 1’+chr(26)+’Neue Zahl/0’+chr(26)+’Beenden’);
window(1,10,80,22);
clrscr;
end;
zg:=TRUNC(z);
{ganzen Teil abspalten}
zb:=FRAC(z);
{gebrochenen Teil abspalten}
Write(’ Basis= ’);
line:=whereY;
p:=-1;
While not ((p=TRUNC(p)) and (p>-1) and (p<37)) do
begin
GotoXY(10,line);
clrEOL;
ReadLn(p);
if line=13 then line:=12;
end;
if p>1 then
begin
{*** Behandlung des ganzen Anteils ***}
ganz:=’’;
Repeat
rest:=zg MOD p;
if rest>9 then rest:=rest+7;
ganz:=CHR(48+rest)+ganz;
zg:=zg DIV p;
until zg=0;
11
{Vgl. ASCII-Code-Tabelle}
{*** Behandlung des gebrochenen Anteils ***}
bruch:=’’;
If zb>0 then
begin
bruch:=’.’;
Repeat
zb:=p*zb;
rest:=TRUNC(zb);
zb:=FRAC(zb);
if rest>9 then rest:=rest+7; {Vgl. ASCII-Code-Tabelle}
bruch:=bruch+CHR(48+rest);
until (zb=0) or (length(bruch)=21);
if (length(bruch)=21) and (zb>0) then
bruch:=bruch+’...’;
end;
{*** Ausgabe der Ergebnisse ***}
GotoXY(13,line);
WriteLn(’: ’, ganz, bruch);
end;
end;
window(1,1,80,25);
clrscr;
end.
Interessenten stelle ich das Programm gern auch auf Diskette oder noch lieber per
Email1 zur Verfügung.
1 [email protected]
12