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

⟦465b32bba⟧ TextFile

    Length: 4352 (0x1100)
    Types: TextFile
    Names: »ORDHYP.PAS«

Derivation

└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer
    └─ ⟦this⟧ »ORDHYP.PAS« 
└─⟦09235ab48⟧ Bits:30003065 Demoprogrammer K-Z til Pascal bog
    └─ ⟦this⟧ »ORDHYP.PAS« 
└─⟦f983c2ef3⟧ Bits:30004681 Pascal opgaver (Butler)
    └─ ⟦this⟧ »ORDHYP.PAS« 

TextFile

        PROGRAM ordhyp;
        
          CONST
            maxordlaengde = 20;
            bogstaver : SET OF CHAR = (.'A' .. 'Å', 'a' .. 'å'.);
            
          TYPE
            ordtype = STRING(.maxordlaengde.);
            pointer = ^ post;
            post = RECORD
                     venstre, hoejre : pointer;
                     ord_ : ordtype;
                     ordtaeller : INTEGER;
                   END;
          
          VAR
            ordtrae : pointer;
            naesteord : ordtype;
            filnavn : STRING(.14.);
            indfil : TEXT;
          
          PROCEDURE laesord(VAR streng : ordtype);
          
            VAR
              taeller : 0 .. maxordlaengde;
              ch : CHAR;
            
            FUNCTION smaabogstaver(streng : ordtype) : ordtype;
            
              VAR
                t : 1 .. maxordlaengde;
                s : ordtype;
              
              BEGIN (* smaabogstaver *)
                s := '';
                FOR t := 1 TO LEN(streng) DO
                  IF (streng(.t.) >= 'A') AND (streng(.t.) <= 'Å')
                    THEN s := s + CHR(ORD(streng(.t.)) + 32)
                    ELSE s := s + streng(.t.);
                smaabogstaver := s;
              END; (* smaabogstaver *)
            
            BEGIN (* laesord *)
              IF NOT EOF(indfil)
                THEN
                  REPEAT
                    READ(indfil, ch);
                  UNTIL EOF(indfil) OR (ch IN bogstaver);
              streng := '';
              IF NOT EOF(indfil)
                THEN
                  BEGIN
                    taeller := 0;
                    WHILE ch IN bogstaver DO
                      BEGIN
                        IF taeller < maxordlaengde
                          THEN
                            BEGIN
                              taeller := taeller + 1;
                              streng := streng + ch;
                            END;
                        IF NOT EOF(indfil)
                          THEN READ(indfil, ch)
                          ELSE ch := ' ';
                      END;
                  END;
              streng := smaabogstaver(streng);
            END; (* laesord *)
          
          PROCEDURE gemord(VAR trae : pointer; streng : ordtype);
          
            BEGIN (* gemord *)
              IF trae = NIL
                THEN
                  BEGIN
                    NEW(trae);
                    WITH trae^ DO
                      BEGIN
                        venstre := NIL;
                        hoejre := NIL;
                        ord_ := streng;
                        ordtaeller := 1;
                      END;
                  END
                ELSE 
                  WITH trae^ DO
                    IF streng < ord_
                      THEN gemord(venstre, streng)
                    ELSE IF streng > ord_
                      THEN gemord(hoejre, streng)
                    ELSE
                      ordtaeller := ordtaeller + 1;
            END; (* gemord *)
            
          PROCEDURE skrivord(trae : pointer);
          
            BEGIN (* skrivord *)
              IF trae <> NIL
                THEN
                  WITH trae^ DO
                    BEGIN
                      skrivord(venstre);
                      WRITELN(ordtaeller : 4, '       ', ord_);
                      skrivord(hoejre);
                    END;
            END; (* skrivord *)
          
          BEGIN (* ordhyp *)
            WRITE(CLRHOM);
            ordtrae := NIL;
            WRITE('Hvilken fil skal optaelles: ');
            BUFLEN := 14;
            READLN(filnavn);
            ASSIGN(indfil, filnavn);
            RESET(indfil);
            WHILE NOT EOF(indfil) DO
              BEGIN
                laesord(naesteord);
                IF NOT EOF(indfil)
                  THEN gemord(ordtrae, naesteord);
              END;
            CLOSE(indfil);
            WRITELN;
            WRITELN('Hyppighedsfordeling af ordene i filen: ', filnavn);
            WRITELN;
            WRITELN('HYPPIGHED  ORD');
            WRITELN;
            skrivord(ordtrae);
          END. (* ordhyp *)
«eof»