|
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 - download
Length: 5248 (0x1480) Types: TextFile Names: »POSTANT.PAS«
└─⟦08ea08c61⟧ Bits:30003924 PolyPascal programmer └─ ⟦this⟧ »POSTANT.PAS«
PROGRAM post_ant; TYPE str40 = STRING(.40.); link = ^ post; post = RECORD naeste : link; navn : str40; adresse : str40; END; VAR ud, top, pp : link; ch : CHAR; PROCEDURE return; VAR ch : CHAR; BEGIN (* return *) WRITE('Tast <RETURN>: '); REPEAT READ(KBD, ch); UNTIL ch = CHR(13); WRITELN; END; (* return *) FUNCTION postantal(foerste : link) : INTEGER; VAR taeller : INTEGER; BEGIN (* postantal *) IF foerste = NIL THEN postantal := 0 ELSE BEGIN taeller := 1; WHILE foerste^.naeste <> NIL DO BEGIN taeller := taeller + 1; foerste := foerste^.naeste; END; postantal := taeller; END; END; (* postantal *) PROCEDURE indsaet(VAR foerste : link; nypost : link); BEGIN (* indsaet *) IF foerste = NIL (* kæden er tom *) THEN foerste := nypost ELSE IF nypost^.navn < foerste^.navn (* før første post *) THEN BEGIN nypost^.naeste :=foerste; foerste :=nypost; WRITELN; WRITE(nypost^.navn, ' er nu indsat i kæden. '); return; END ELSE (* find rigtig plads til nypost via rekursivt kald *) indsaet(foerste^.naeste, nypost); END; (* indsaet *) PROCEDURE fjern(VAR foerste : link; glpost : link); BEGIN (* fjern *) IF foerste = NIL (* kæden tom *) THEN BEGIN WRITELN(glpost^.navn, ' findes ikke i kæden'); return; END ELSE IF foerste^.navn = glpost^.navn (* fjern post 1 *) THEN BEGIN foerste := foerste^.naeste; WRITE(glpost^.navn, ' er slettet fra kæden. '); return; END ELSE (* Søg efter navnet via rekursivt kald *) fjern(foerste^.naeste, glpost); END; (* fjern *) PROCEDURE udskriv(foerste : link); VAR pp : link; BEGIN (* udskriv *) pp := foerste; WRITELN; WRITELN('Kæden indeholder følgende personer:'); WRITELN; WHILE pp <> NIL DO BEGIN WRITELN(pp^.navn); WRITELN(pp^.adresse); WRITELN; pp := pp^.naeste; END; return; END; (* udskriv *) BEGIN (* post_ant *) top := NIL; NEW(ud); REPEAT WRITE(CLRHOM); GOTOXY(10, 4); WRITE('SORTERET KÆDE'); GOTOXY(10, 7); WRITE('I. Indsæt person i kæden.'); GOTOXY(10, 9); WRITE('F. Fjerne person fra kæden.'); GOTOXY(10, 11); WRITE('U. Udskrive kæden.'); GOTOXY(10, 13); WRITE('A. Afslutte programmet.'); GOTOXY(10, 15); WRITE ('P. Udskrive postantal.'); GOTOXY(10, 17); WRITE('Tast kommando: '); REPEAT READ(KBD, ch); UNTIL ch IN (.'I', 'i', 'F', 'f', 'U', 'u', 'P', 'p', 'A', 'a'.); WRITELN(ch); CASE ch OF 'I', 'i' : BEGIN NEW(pp); WRITELN; WRITE('Navn: '); READLN(pp^.navn); WRITE('Adresse: '); READLN(pp^.adresse); pp^.naeste := NIL; indsaet(top, pp); END; 'F', 'f' : BEGIN WRITELN; WRITE('Hvem skal fjernes: '); READLN(ud^.navn); fjern(top, ud); END; 'U', 'u' : udskriv(top); 'P', 'p' : BEGIN WRITELN; WRITE('Antal poster: ', postantal(top), ' '); return; END; END; UNTIL ch IN (.'A', 'a'.); END. (* post_ant *) «eof»