| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- Uses CRT;
- Const
- M=4;
- N=3;
- inpt = 'mtrxsort.txt';
- outpt = 'mtrxrslt.txt';
- Var
- ar : array[1..N,1..M] of integer;
- {--------========================---------}
- Function GetM(i : integer):integer;forward;
- Function GetN(i : integer):integer;forward;
- {--------========================---------}
- Function GetMaxLength:integer;
- Var i,max,min : integer;s1,s2:string;
- Begin
- max := -MaxInt;
- Min := MaxInt;
- for i := 1 to m*n do begin
- if ar[getN(i),getM(i)] > max then max := ar[getN(i),getM(i)];
- if ar[getN(i),getM(i)] < min then min := ar[getN(i),getM(i)];
- end;
- str(max,s1);
- str(min,s2);
- if length(s1) > length(s2) then
- GetMaxLength := length(s1) + 1
- else
- GetMaxLength := length(s2) + 1;
- End;
- {------------------------------------}
- Procedure ReadFile(fn : string);
- Var
- f : text;
- i : 1..M;
- j : 1..N;
- Begin
- Assign(f,fn);
- {$I-}
- Reset(f);
- If IOResult <> 0 then
- Repeat
- Write('” ©« ¥ ©¤¥, ¢¢¥¤¨â¥ ®¢®¥ ¨¬ï: ');
- Readln(fn);
- Assign(f,fn);
- Reset(f);
- Until IOResult = 0;
- {$I+}
- for j := 1 to N do
- for i := 1 to M do Read(f,ar[j,i]);
- for j := 1 to N do
- for i := 1 to M do Begin
- GotoXY(i*getMaxLength+5,j+2);
- Write(ar[j,i])
- end;
- Close(f);
- End;{ReadFile}
- {----------------------------------}
- Function GetM(i : integer):integer;
- Var tmp : integer;
- Begin
- tmp := i mod M;
- if tmp = 0 then GetM := M else GetM := tmp
- End;{GetM}
- {----------------------------------}
- Function GetN(i : integer):integer;
- Begin
- if i mod M = 0 then GetN := i div M else
- GetN := i div M + 1
- End;{GetM}
- {----------------------------------}
- Procedure SwapPlace(j :integer);
- Var tmp : integer;
- Begin
- tmp := ar[GetN(j),GetM(j)];
- ar[GetN(j),GetM(j)] := ar[GetN(j+1),GetM(j+1)];
- ar[GetN(j+1),GetM(j+1)] := tmp;
- End;
- {-------------------------------}
- Procedure SortList;
- Var
- i,j : integer;
- Begin
- For i := m*n downto 2 do
- for j := 1 to i-1 do begin
- if ar[getN(J),GetM(J)] > ar[getN(J+1),GetM(J+1)] then
- SwapPlace(j)
- end;
- End;{SortList}
- {-----------------------------------}
- Procedure WriteResult(fil :string);
- Var
- f : text;
- i : 1..M;
- j : 1..N;
- Begin
- Assign(f,fil);
- REwrite(f);
- for j := 1 to N do begin
- for i := 1 to M do begin
- Write(f,ar[j,i],' ');
- GotoXY(i*getmaxlength+5,j+7+n);
- normvideo;
- Write(ar[j,i])
- end;
- WriteLn(f);
- end;
- close(f)
- End;{WriteResult}
- {---------------------------------}
- Begin
- ClrScr;
- ReadFile(inpt);
- SortList;
- WriteResult(outpt);
- End.
|