home *** CD-ROM | disk | FTP | other *** search
- (*************************************************************************)
- (* Demo-Programm zur Benutzung des Include-Files SORT.INC *)
- (* (C) 1988 Karsten Gieselmann & PASCAL International *)
- (*************************************************************************)
- PROGRAM SortTest;
-
- {$I SORT.INC} (* einbinden der Sortierroutine *)
-
- TYPE SortType = RECORD (* Typ der Sortierelemente *)
- Name :STRING[15];
- Age :BYTE
- END;
-
- CONST Max = 15;
- (* Das Datenfeld *)
- Data :ARRAY [1..Max] OF SortType = (
- (Name: 'Müller, Karl '; Age: 45),
- (Name: 'Schmidt, Maria '; Age: 19),
- (Name: 'Maier, Josef '; Age: 27),
- (Name: 'Kunze, Rudolf '; Age: 63),
- (Name: 'Huber, Paul '; Age: 69),
- (Name: 'Roth, Anna '; Age: 47),
- (Name: 'Gross, Harald '; Age: 47),
- (Name: 'Klein, Karin '; Age: 52),
- (Name: 'Berger, Lia '; Age: 33),
- (Name: 'Schenk, Susanne'; Age: 27),
- (Name: 'Neumann, Helmut'; Age: 38),
- (Name: 'Aumann, Iris '; Age: 22),
- (Name: 'Braun, Jürgen '; Age: 27),
- (Name: 'Schwarz, Robert'; Age: 72),
- (Name: 'Weiß, Marianne '; Age: 85));
-
- VAR i :INTEGER;
-
- (* Altersvergleich *)
- FUNCTION LessAge (VAR a,b :SortType) :BOOLEAN;
- BEGIN
- (* bei gleichem Alter alphabetisch! *)
- IF a.Age = b.Age THEN LessAge := a.Name < b.Name
- ELSE LessAge := a.Age < b.Age
- END;
-
-
- (* Namensvergleich *)
- FUNCTION LessName (VAR a,b :SortType) :BOOLEAN;
- BEGIN
- LessName := a.Name < b.Name
- END;
-
-
- BEGIN
- ClrScr;
- WriteLn ('Alphabetische Sortierung:'); WriteLn;
- Sort (Data, Max, SizeOf(SortType), Ofs(LessName), Ascending);
- WriteLn ('Name Alter'); WriteLn;
- FOR i:=1 TO Max DO WriteLn (Data[i].Name, '':6, Data[i].Age);
- WriteLn; Write ('Weiter mit <Return>.....'); ReadLn; WriteLn;
-
- Write('Alphabetische Ausgabe aller Personen ');
- WriteLn('älter als 40 Jahre:'); WriteLn;
- Sort (Data, Max, SizeOf(SortType), Ofs(LessAge), Ascending);
- i := 1;
- WHILE Data[i].Age < 40 DO i := Succ (i);
- Sort (Data[i], Max-i, SizeOf(SortType), Ofs(LessName), Ascending);
- FOR i := i TO Max DO WriteLn (Data[i].Name,'':6, Data[i].Age);
- END.
-