S
Separate
Neues Mitglied
Thread Starter
- Dabei seit
- 03.03.2008
- Beiträge
- 7
- Reaktionspunkte
- 0
Hallo Leute !.
Ich habe leider ein kleines Problem bei einem von mir geschriebenen Programm. Mein Programm rechnet von Dezimal in das Binäre Zahlensystem um und das ganze auch umgekehrt.
Das funktioniert alles ganz gut und jetzt hab ich versucht das programm mit einer Funktion die Arabische in Römische Zahlen darstellt zu erweitern.
Wenn ich das normal Ausführe funktioniert es nur in meinem Programm nicht.
Hier ist mein Programmcode.
Was hab ich falsch gemacht ?. danke für eure Hilfe
Ich habe leider ein kleines Problem bei einem von mir geschriebenen Programm. Mein Programm rechnet von Dezimal in das Binäre Zahlensystem um und das ganze auch umgekehrt.
Das funktioniert alles ganz gut und jetzt hab ich versucht das programm mit einer Funktion die Arabische in Römische Zahlen darstellt zu erweitern.
Wenn ich das normal Ausführe funktioniert es nur in meinem Programm nicht.
Hier ist mein Programmcode.
Code:
PROGRAM Transform;
USES Crt;
PROCEDURE rahmen;
VAR i:Integer;
BEGIN
ClrScr;
Gotoxy(1,1);
WRITE('É');
FOR i:=1 TO 78 DO
WRITE('Í');
WRITE('»');
FOR i:=2 TO 24 DO BEGIN
Gotoxy(1,i);
WRITE('º');
Gotoxy(80,i);
WRITE('º');
END;
Gotoxy(1,24);
WRITE('È');
FOR i:=1 TO 78 DO
WRITE('Í');
WRITE('¼');
END;
(***********************************************************)
FUNCTION potenzen(basis,potenz:INTEGER) :INTEGER;
VAR bas:INTEGER;
BEGIN
IF (potenz=0) THEN potenz:=1 ELSE
BEGIN
IF (potenz=1) THEN potenz:=basis ELSE
BEGIN
bas:=basis;
REPEAT
basis:=basis*bas;
Dec(potenz);
UNTIL potenz=1;
potenzen:=basis;
END;
END;
END;
FUNCTION IntToStr (zahl:INTEGER):STRING;
VAR wert:STRING;
Begin
Str (zahl,wert);
IntToStr:=wert;
END;
FUNCTION StrToInt(zeichen:STRING):INTEGER;
VAR wert,
code:INTEGER;
BEGIN
VAL (zeichen,wert,code);
strtoint:=wert;
END;
(**************************************************************)
FUNCTION umrechnen_dez_dual(number:INTEGER) :STRING;
VAR rest,
i,
j,
x:INTEGER;
rval:STRING;
zahl_dual:ARRAY[1..1000] of INTEGER;
BEGIN
Clrscr;
rval:='';
i:=1;
rahmen;
Gotoxy(4,4);
Writeln('Rechnung:');
Gotoxy(4,5);
Writeln;
REPEAT
x:= number DIV 2;
rest:= number MOD 2 ;
Gotoxy(4,45);
zahl_dual [i]:=rest;
Inc(i);
Gotoxy(4,3+i); Write(number);
Gotoxy(10,3+i); Write(' /2= ',x );
Gotoxy(25,3+i); Write('Rest: ',rest);
number:=x;
UNTIL number = 0;
FOR j:=i-1 DOWNTO 1 DO
BEGIN
rest:=zahl_dual[j];
rval:=rval +IntToStr(rest);
END;
umrechnen_dez_dual := rval;
END;
(***************************************************************)
FUNCTION umrechnen_dual_dez(number:STRING) :INTEGER;
VAR exp,
i,
rval:Integer;
z:STRING;
BEGIN
Clrscr;
exp:=0;
rval:=0;
i := length ( number );
rahmen;
Gotoxy(4,5);
Writeln;
Gotoxy(4,5);
Writeln('Rechnung:');
REPEAT
z:=Copy(number,i,1);
Gotoxy(5,Wherey); Write(rval);
rval:=rval+StrToInt(z)*Potenzen(2,exp);
Gotoxy(10,Wherey); Write(' + ',StrToInt(z));
Gotoxy(20,Wherey); Write('* 2^',exp);
Gotoxy(30,Wherey); Writeln('=',rval);
Dec(i);
Inc(exp);
UNTIL i = 0;
umrechnen_dual_dez := rval;
END;
(****************************************************************)
[COLOR="red"][/COLOR]FUNCTION transform(variable: INTEGER) : STRING;
TYPE myPair = Record
arab: INTEGER;
rom: STRING;
END;
VAR divi, test, i, j:INTEGER;
VAR result : STRING;
VAR ende : BOOLEAN;
CONST list : ARRAY[1..13] of myPair = ( (arab:1000; rom:'M'),
(arab:900; rom:'CM' ),
(arab:500; rom:'D' ),
(arab:400; rom:'CD' ),
(arab:100; rom:'C' ),
(arab:90; rom:'XC' ),
(arab:50; rom:'L' ),
(arab:40; rom:'XL' ),
(arab:10; rom:'X' ),
(arab:9; rom:'IX' ),
(arab:5; rom:'V' ),
(arab:4; rom:'IV'),
(arab:1; rom:'I') );
BEGIN
result := '';
FOR i:=1 TO 13 DO
BEGIN
divi:= variable DIV list[i].arab;
IF divi > 0 THEN
BEGIN
FOR j:=1 TO divi DO
BEGIN
result:=result+list[i].rom
END;
END;
variable:= variable MOD list[i].arab;
END;
transform:=result;
END;
[/COLOR]
(****************************************************************)
VAR dez,
choice:INTEGER;
dual:STRING;
BEGIN
REPEAT
Clrscr;
rahmen;
Gotoxy(4,4);
writeln( '[1] Dec2Bin');
Gotoxy(4,5);
writeln( '[2] Bin2Dec');
Gotoxy(4,6);
writeln( '[3] Arab2Rom');
Gotoxy(4,7);
writeln( '[0] Programm beenden');
Gotoxy(4,8);
write( 'Ihre Wahl? ');
read(choice);
CASE choice OF
1:BEGIN
Gotoxy(7,10);
Write('Bitte geben Sie die umzuwandelnde Dezimalzahl ein... ' );
Readln(dez);
Writeln;
dual:=umrechnen_dez_dual(dez);
Gotoxy(4,12);
Writeln;
Gotoxy(36,4);
Writeln( '====> Binaerzahl: ',dual);
Gotoxy(3,22);
Writeln('Bitte Taste druecken');
Readln;
END;
2:BEGIN
Gotoxy(7,10);
Write('Bitte geben Sie die umzuwandelnde Binaerzahl ein... ');
Readln;
Readln(dual);
Writeln;
dez:=umrechnen_dual_dez(dual);
Gotoxy(4,12);
Writeln;
Gotoxy(36,5);
Writeln( '====> Dezimalzahl: ',dez );
Gotoxy(3,22);
Writeln('Bitte Taste druecken');
Readln;
END;
3:BEGIN
Gotoxy(7,10);
Write('Bitte geben Sie die umzuwandelnde Arabische Zahl ein...');
Readln(test);
Writeln('Ergebnis',transform(test)); [COLOR="Red"]<---Hier sagt er mir dann er kennt die variable test nicht ![/COLOR]
Writeln('');
END;
END;
UNTIL choice = 0;
END.
Was hab ich falsch gemacht ?. danke für eure Hilfe