program metric_to_imperial; (* This program takes any given weight (in grams) and converts it into the relevent number of tons, stones, pounds and ounces *) const GRAM_TO_OUNCE = 0.035; type IMPERIAL = (ton, stone, pound, ounce); var Ounces, Number: ARRAY[ton..ounce] of INTEGER; Metric_Weight: REAL; Imperial_Weight: INTEGER; Unit: IMPERIAL; procedure Initialise_Array; begin Ounces[ton]:=2000; Ounces[stone]:=16*14; Ounces[pound]:=16; Ounces[ounce]:=1; end; procedure List_Units; begin WriteLn ('tons: ',Number[ton]); WriteLn ('stones: ',Number[stone]); WriteLn ('pounds: ',Number[pound]); WriteLn ('ounces: ',Number[ounce]); end; begin (* main *) Initialise_Array; ClrScr; Write ('Enter weight (in grams): '); ReadLn (Metric_Weight); Imperial_Weight:=Round(Metric_Weight*GRAM_TO_OUNCE); for Unit:=ton to ounce do begin Number[Unit]:=Imperial_Weight DIV Ounces[Unit]; Imperial_Weight:=Imperial_Weight MOD Ounces[Unit]; end; List_Units; end. (* main *)