DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

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

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦534b484dc⟧ TextFile

    Length: 3200 (0xc80)
    Types: TextFile
    Names: »DIVISION.PAS«

Derivation

└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
    └─ ⟦this⟧ »DIVISION.PAS« 
└─⟦092727b26⟧ Bits:30005927 Demoprogrammer til Pascal bog (Jet-80)
    └─ ⟦this⟧ »DIVISION.PAS« 
└─⟦3702e543b⟧ Bits:30003064 Demoprogrammer A-J til Pascal bog
    └─ ⟦this⟧ »DIVISION.PAS« 
└─⟦f983c2ef3⟧ Bits:30004681 Pascal opgaver (Butler)
    └─ ⟦this⟧ »DIVISION.PAS« 

TextFile

PROGRAM division;

  VAR
    navn : STRING(.30.);
    ch : CHAR;
    divisor, divisor1, divisor2, dividend,
    dividend1, dividend2, grad, antal,
    rigtige, forsoeg, taeller, naevner : INTEGER;
    fejl : BOOLEAN;
  
  FUNCTION sfd(n, m : INTEGER) : INTEGER;
    
    VAR
      rest : INTEGER;
    
    BEGIN (* sfd *)
      WHILE m > 0 DO
        BEGIN
          rest := n MOD m;
          n := m;
          m := rest;
        END;
      sfd := n;
    END; (* sfd *)
    
  PROCEDURE forkort(VAR taeller, naevner : INTEGER);
  
    VAR
      faktor : INTEGER;
    
    BEGIN (* forkort *)
      faktor := sfd(taeller, naevner);
      taeller := taeller DIV faktor;
      naevner := naevner DIV faktor;
    END; (* forkort *)
  
  BEGIN (* division *)
    WRITE(CLRHOM);
    RANDOMIZE;
    WRITE('Hvad hedder du: '); READLN(navn);
    REPEAT
      WRITE('Hvilken sværhedsgrad ønsker du (1 - 10): ');
      READLN(grad);
    UNTIL (1 <= grad) AND (grad <= 10);
    WRITELN;
    WRITELN('Velkommen, ', navn, '. Du får nu stillet 5 divisionsopgaver');
    WRITELN;
    antal := 0;
    rigtige := 0;
    fejl := FALSE;
    REPEAT
      antal := antal + 1;
      dividend1 := RANDOM(grad + 1);
      dividend2 := RANDOM(grad + 1);
      divisor1 := RANDOM(grad) +1 ;
      divisor2 := RANDOM(grad) + 1;
      WRITELN;
      WRITELN(dividend1, '/', divisor1, 
              ' + ', dividend2, '/', divisor2, ' = ?');
      WRITELN;
      dividend := dividend1 * divisor2 + dividend2 * divisor1;
      divisor := divisor1 * divisor2;
      forkort(dividend, divisor);
      forsoeg := 0;
      REPEAT
        forsoeg := forsoeg + 1;
        WRITE('Indtast tæller: '); READLN(taeller);
        WRITE('Indtast nævner: '); READLN(naevner);
        IF (dividend = taeller) AND (divisor = naevner)
          THEN
            BEGIN
              WRITELN('Svaret er korrekt');
              rigtige := rigtige + 1;
            END
          ELSE
            BEGIN
              fejl := TRUE;
              IF forsoeg < 3
                THEN WRITELN('Svaret er ikke korrekt - Prøv igen:')
                ELSE WRITELN('Nej, det korrekte svar er ',
                             dividend, '/', divisor);
            END;
      UNTIL (forsoeg = 3) OR
            ((dividend = taeller) AND (divisor = naevner));
      WRITE('Tast <RETURN>: '); READLN(ch);
    UNTIL antal = 5;
    WRITELN;
    CASE rigtige OF
      0 : WRITELN('Ikke et eneste rigtigt svar! Jamen ', navn, ' dog!');
      1 : WRITELN('Kun 1 rigtigt svar - elendigt ', navn);
      2 : WRITELN('2 rigtige svar - det er ikke strålende ', navn);
      3 : WRITELN('3 rigtige svar - det kunne være bedre ', navn);
      4 : WRITELN('Kun et forkert svar - ikke værst ', navn);
      5 : BEGIN
            IF fejl
              THEN WRITELN('Godt ', navn, ' 5 rigtige svar - omend ',
                           'ikke alle i første forsøg')
              ELSE WRITELN('Perfekt ', navn, ' - det kunne ikke være bedre!');
          END;
    END;
  END. (*division *)
«eof»