MODULE C3P5;  (* Chapter 3  Problem 5 *)
	      (* Program SortAge changed to sort crew in descending sequence *)

   (* From the book "Modula-2  A Seafarer's Manual and Shipyard Guide" *)
   (* Page 79   adapted "M2Amiga Modula-2"   04 Mar 1988 *)

FROM InOut IMPORT WriteLn,
                  WriteString,
                  WriteCard,
                  ReadCard;
                  
VAR
  i,				(* array index *)
  HoldAge : CARDINAL;
  sorted : BOOLEAN;
  CrewAge : ARRAY [1..25] OF CARDINAL;
  
BEGIN
  WriteLn;
  WriteString ("Enter crew ages: ");
  WriteLn;
  
  FOR i := 1 TO 25 BY 1 DO
    ReadCard (CrewAge[i]);	(* get age from keyboard *)
    WriteLn;
  END;
  
  REPEAT			(* pass thru array until sorted *)
    sorted := TRUE;		(* assume sorted *)
    FOR i := 1 TO (25 - 1) BY 1 DO
      (* compare each adjacent pair of elements *)
      IF (CrewAge[i] < CrewAge[i+1]) THEN
        HoldAge := CrewAge[i];	(* out of order, exchange *)
        CrewAge[i] := CrewAge[i+1];
        CrewAge[i+1] := HoldAge;
        sorted := FALSE;
      END;   (* IF *)
    END;   (* FOR *)
  UNTIL sorted;
  
  WriteString ("Sorted crew ages: ");
  FOR i := 1 TO 25 BY 1 DO	(* display sorted ages *)
    WriteCard (CrewAge[i],5);
    WriteLn;
  END;   (* FOR *)
  
END C3P5.
