blikk info infothek forum galerie sitemap

Überschrift

anfang zurueck weiter ende nach oben
{
Name             : Hannes P. und Manuel T.
Schule            : Gewerbeoberschule "Max Valier" Bozen
Klasse            : 3Ia
Beschreibung  : Es sollen Zahlen vom Dezimalsystem, mithilfe von
                        Verbundtypen, ins roemische Zahlensystem umgewandelt werden.
Lizenz             : GNU}

PROGRAM Verbund;

USES
  Crt;

TYPE
  troem  = RECORD
    wert : INTEGER;
    rstr : STRING;
  END;

  troemtab = ARRAY [1..13] OF troem;

{Prozedur zur Initialisierung der roemischen Zeichen}

PROCEDURE Initroem(VAR rt : troemtab);

BEGIN
    rt[1].wert  := 1000;   rt[1].rstr  := 'M';
    rt[2].wert  := 900;    rt[2].rstr  := 'CM';
    rt[3].wert  := 500;    rt[3].rstr  := 'D';
    rt[4].wert  := 400;    rt[4].rstr  := 'CD';
    rt[5].wert  := 100;    rt[5].rstr  := 'C' ;
    rt[6].wert  := 90;     rt[6].rstr  := 'XC';
    rt[7].wert  := 50;     rt[7].rstr  := 'L';
    rt[8].wert  := 40;     rt[8].rstr  := 'XL';
    rt[9].wert  := 10;     rt[9].rstr  := 'X';
    rt[10].wert := 9;      rt[10].rstr := 'IX';
    rt[11].wert := 5;      rt[11].rstr := 'V';
    rt[12].wert := 4;      rt[12].rstr := 'IV';
    rt[13].wert := 1;      rt[13].rstr := 'I';
END;                                               {END OF PROCEDURE}

{Funktion um vom Dezimalsystem ins römische Zahlensystem umzuwandeln}

FUNCTION Int2roem(zahl : INTEGER; rt : troemtab) : STRING;

VAR
  i, j     : INTEGER;              {Laufvariablen}
  k        : INTEGER;
  roemstr  : STRING;
BEGIN
  roemstr := '';
  i := 1;
  WHILE (zahl > 0) AND (i <= 13) DO BEGIN
    k := zahl DIV rt[i].wert;
    IF k > 0 THEN BEGIN
      FOR j := 1 TO k DO
        roemstr := roemstr + rt[i].rstr;
      zahl := zahl - k * rt[i].wert;
    END;                                   {END of IF}
    i := i + 1;
  END;                                     {END of WHILE-Schleife}
  Int2roem := roemstr;
END;                                       {END of FUNCTION}

VAR                                {Lokale Variablen des Hauptprogramms}
  roemtab : troemtab;
  dezizahl: INTEGER;
BEGIN                               {BEGIN des Hauptprogramms}
  ClrScr;
  Initroem(roemtab);
  REPEAT
    Write('Dezimalzahl...: ');
    Readln(dezizahl);
    IF dezizahl <= 3999 THEN BEGIN
      Writeln(Int2roem(dezizahl,roemtab));
    END
    ELSE
      Writeln('Sie muessen eine Zahl kleiner als 4000 eingeben');
  UNTIL dezizahl = 0;
  Readln;
END.
nach oben