home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* INWORTEN.PAS *)
- (* (c) 1990 Volker Markl & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM ZahlinWorten;
-
- TYPE
- Geschlechter = (maskulinum, femininum, neutrum);
-
- VAR
- s : LONGINT;
-
- FUNCTION InWorten(z : LONGINT;
- geschlecht : Geschlechter) : STRING;
- CONST
- ein : ARRAY [0..9] OF STRING [6] =
- ('', 'ein', 'zwei',
- 'drei', 'vier', 'fünf',
- 'sechs', 'sieben','acht',
- 'neun');
-
- zehn : ARRAY[0..9] OF STRING[8]=
- ('', 'zehn', 'zwanzig',
- 'dreißig', 'vierzig',
- 'fünfzig', 'sechzig',
- 'siebzig', 'achtzig',
- 'neunzig');
-
- VAR
- z2, z3 : LONGINT;
- hunderter, zehner, einer : BYTE;
- ergebnis : STRING;
- pot, i : BYTE;
- BEGIN
- IF z <> 0 THEN ergebnis := ''
- ELSE ergebnis := 'Null';
- REPEAT (* Zahl in dreistellige Teilzahl zerlegen *)
- pot := 0; (* und Potenz zu 10^3 ermitteln *)
- z2 := z;
- WHILE z2 > 999 DO BEGIN
- z2 := z2 DIV 1000;
- Inc(pot);
- END;
- z3 := z2;
- i := 0;
- WHILE i < pot DO BEGIN
- Inc(i);
- z3 := z3 * 1000;
- END;
- z := z - z3;
- hunderter := z2 DIV 100;
- zehner := (z2 - hunderter * 100) DIV 10;
- einer := z2 - hunderter * 100 - zehner * 10;
- IF hunderter <> 0 THEN
- ergebnis := ergebnis + ein[hunderter] + 'hundert';
- CASE zehner OF
- 2..9 : IF einer = 0 THEN
- ergebnis := ergebnis + zehn[zehner]
- ELSE
- ergebnis := ergebnis + ein[einer] +
- 'und' + zehn[zehner];
- 1 : CASE einer OF
- 1 : ergebnis := ergebnis + 'elf';
- 2 : ergebnis := ergebnis + 'zwölf';
- 6 : ergebnis := ergebnis + 'sechzehn';
- 7 : ergebnis := ergebnis + 'siebzehn';
-
- 0, 3, 4, 5, 8, 9:
- ergebnis := ergebnis + ein[einer] +
- zehn[zehner];
- END;
- 0 : IF einer <> 0 THEN
- ergebnis := ergebnis + ein[einer];
- END;
- IF (z2 MOD 100 = 1) AND (pot <> 1) AND (pot <> 0) THEN
- ergebnis := ergebnis + 'e';
- IF (z2 MOD 100 = 1) AND (pot = 0) THEN
- CASE geschlecht OF
- maskulinum : ergebnis := ergebnis + 'en';
- femininum : ergebnis := ergebnis + 'e';
- neutrum : ergebnis := ergebnis + '';
- END;
- CASE pot OF (* Je nach 10^3 Potenz anhängen: *)
- 0 : ;
- 1 : ergebnis := ergebnis + 'tausend';
- 2 : ergebnis := ergebnis + ' Million';
- 3 : ergebnis := ergebnis + ' Milliarde';
- END;
- IF z2 <> 1 THEN BEGIN
- (* Mehrzahlbildung (Millionen, Milliarden) *)
- IF (pot MOD 2 = 1) AND (pot <> 1) THEN
- ergebnis := ergebnis + 'n '
- ELSE IF (pot MOD 2 = 0) AND (pot <> 0) THEN
- ergebnis := ergebnis + 'en '
- END ELSE IF (pot <> 0) AND (pot <> 1) THEN
- ergebnis := ergebnis + ' ';
- IF (z < 100) AND (z > 0) THEN
- ergebnis := ergebnis + 'und';
- IF (z < 100) AND (z > 0) AND (pot <> 1) THEN
- ergebnis := ergebnis + ' ';
- UNTIL z = 0;
-
- (*
- FOR i := 1 TO Length(ergebnis) DO
- IF (ergebnis[i] = ' ') AND (i < Length(ergebnis)) THEN
- ergebnis[i+1] := UpCase(ergebnis[i+1]);
- ergebnis[1] := UpCase(ergebnis[1]);
- *)
- inworten := ergebnis;
- END;
-
- BEGIN
- REPEAT
- Write('Geben Sie eine Zahl (bis 2147483647) ein,',
- ' negativ beendet: ');
- ReadLn(s);
- WriteLn(Inworten(Abs(s), femininum));
- UNTIL s < 0;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von INWORTEN.PAS *)