home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 06_07 / sort.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1988-03-21  |  2.3 KB  |  67 lines

  1. (*************************************************************************)
  2. (*         Demo-Programm zur Benutzung des Include-Files SORT.INC        *)
  3. (*           (C) 1988  Karsten Gieselmann & PASCAL International         *)
  4. (*************************************************************************)
  5. PROGRAM SortTest;
  6.  
  7. {$I SORT.INC}            (* einbinden der Sortierroutine *)
  8.  
  9. TYPE SortType = RECORD        (* Typ der Sortierelemente *)
  10.                    Name :STRING[15];
  11.                    Age  :BYTE
  12.                 END;
  13.  
  14. CONST Max  = 15;
  15.      (* Das Datenfeld *)
  16.       Data :ARRAY [1..Max] OF SortType = (
  17.            (Name: 'Müller, Karl   '; Age: 45),
  18.            (Name: 'Schmidt, Maria '; Age: 19),
  19.            (Name: 'Maier, Josef   '; Age: 27),
  20.            (Name: 'Kunze, Rudolf  '; Age: 63),
  21.            (Name: 'Huber, Paul    '; Age: 69),
  22.            (Name: 'Roth, Anna     '; Age: 47),
  23.            (Name: 'Gross, Harald  '; Age: 47),
  24.            (Name: 'Klein, Karin   '; Age: 52),
  25.            (Name: 'Berger, Lia    '; Age: 33),
  26.            (Name: 'Schenk, Susanne'; Age: 27),
  27.            (Name: 'Neumann, Helmut'; Age: 38),
  28.            (Name: 'Aumann, Iris   '; Age: 22),
  29.            (Name: 'Braun, Jürgen  '; Age: 27),
  30.            (Name: 'Schwarz, Robert'; Age: 72),
  31.            (Name: 'Weiß, Marianne '; Age: 85));
  32.  
  33. VAR i :INTEGER;
  34.  
  35. (* Altersvergleich *)
  36. FUNCTION LessAge (VAR a,b :SortType) :BOOLEAN;
  37. BEGIN
  38.   (* bei gleichem Alter alphabetisch! *)
  39.   IF a.Age = b.Age THEN LessAge := a.Name < b.Name
  40.   ELSE LessAge := a.Age < b.Age
  41. END;
  42.  
  43.  
  44. (* Namensvergleich *)
  45. FUNCTION LessName (VAR a,b :SortType) :BOOLEAN;
  46. BEGIN
  47.   LessName := a.Name < b.Name
  48. END;
  49.  
  50.  
  51. BEGIN
  52.   ClrScr;
  53.   WriteLn ('Alphabetische Sortierung:'); WriteLn;
  54.   Sort (Data, Max, SizeOf(SortType), Ofs(LessName), Ascending);
  55.   WriteLn ('Name                Alter'); WriteLn;
  56.   FOR i:=1 TO Max DO WriteLn (Data[i].Name, '':6, Data[i].Age);
  57.   WriteLn; Write ('Weiter mit <Return>.....'); ReadLn; WriteLn;
  58.  
  59.   Write('Alphabetische Ausgabe aller Personen ');
  60.   WriteLn('älter als 40 Jahre:'); WriteLn;
  61.   Sort (Data, Max, SizeOf(SortType), Ofs(LessAge), Ascending);
  62.   i := 1;
  63.   WHILE Data[i].Age < 40 DO i := Succ (i);
  64.   Sort (Data[i], Max-i, SizeOf(SortType), Ofs(LessName), Ascending);
  65.   FOR i := i TO Max DO WriteLn (Data[i].Name,'':6, Data[i].Age);
  66. END.
  67.