DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC700 "Piccolo"

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RegneCentralen RC700 "Piccolo"

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦3a076463e⟧ TextFile

    Length: 1920 (0x780)
    Types: TextFile
    Names: »LONGMULT.PAS«

Derivation

└─⟦09235ab48⟧ Bits:30003065 Demoprogrammer K-Z til Pascal bog
    └─ ⟦this⟧ »LONGMULT.PAS« 

TextFile

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;
        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»