|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1920 (0x780)
Types: TextFile
Names: »LONGMULT.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
└─⟦this⟧ »LONGMULT.PAS«
PROGRAM longmult;
CONST
maxlaengde = 12;
dobbeltmax = 24;
TYPE
cifre = 0 .. 9;
lillevektor = ARRAY(.1 .. maxlaengde.) OF cifre;
storvektor = ARRAY(.1 .. dobbeltmax.) OF cifre;
str = STRING(.maxlaengde.);
VAR
s1, s2 : str;
v1, v2 : lillevektor;
v, w : storvektor;
i, j, k, l, mente, addmente, produkt, sum : INTEGER;
BEGIN
WRITE(CLRHOM);
WRITE('Tast 1. faktor (max ', maxlaengde, ' cifre): ');
BUFLEN := maxlaengde;
READLN(s1);
IF s1 = ''
THEN s1 := '0';
WRITE('Tast 2. faktor (max ', maxlaengde, ' cifre): ');
BUFLEN := maxlaengde;
READLN(s2);
IF s2 = ''
THEN s2 := '0';
WRITELN;
WRITE(s1, ' * ', s2, ' = ');
FOR i := LEN(s1) + 1 TO maxlaengde DO
s1 := '0' + s1;
FOR i := LEN(s2) + 1 TO maxlaengde DO
s2 := '0' + s2;
FOR i := 1 TO maxlaengde DO
v1(.i.) := ORD(s1(.i.)) - ORD('0');
FOR i := 1 TO maxlaengde DO
v2(.i.) := ORD(s2(.i.)) - ORD('0');
FOR k := 1 TO dobbeltmax DO
v(.k.) := 0;
FOR i := maxlaengde DOWNTO 1 DO
BEGIN
mente := 0;
FOR k := 1 TO dobbeltmax DO
w(.k.) := 0;
k := maxlaengde + 1 + i;
FOR j := maxlaengde DOWNTO 1 DO
BEGIN
k := k - 1;
produkt := v1(.i.) * v2(.j.) + mente;
w(.k.) := produkt MOD 10;
mente := produkt DIV 10;
END;
w(.k - 1.) := mente;
addmente := 0;
FOR k := dobbeltmax DOWNTO 1 DO
BEGIN
sum := v(.k.) + w(.k.) + addmente;
v(.k.) := sum MOD 10;
addmente := sum DIV 10;
END;
END;
k := 1;
WHILE (v(.k.) = 0) AND (k < dobbeltmax) DO
k := k + 1;
FOR l := k TO dobbeltmax DO
WRITE(v(.l.));
WRITELN;
END.
«eof»