MTRXFND.PAS 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. Uses CRT;
  2. const
  3. fname = 'mtrxrslt.txt';
  4. M = 4;
  5. N = 3;
  6. Var
  7. ar : array[1..N,1..M] of integer;
  8. f1 : integer;
  9. FindM,FindN : integer;
  10. {-----------==================--------------}
  11. Function GetM(i : integer):integer;
  12. Var tmp : integer;
  13. Begin
  14. tmp := i mod M;
  15. if tmp = 0 then GetM := M else GetM := tmp
  16. End;{GetM}
  17. {----------------------------------}
  18. Function GetN(i : integer):integer;
  19. Begin
  20. if i mod M = 0 then GetN := i div M else
  21. GetN := i div M + 1
  22. End;{GetM}
  23. {----------------------------------}
  24. Function GetMaxLength:integer;
  25. Var i,max,min : integer;s1,s2:string;
  26. Begin
  27. max := -MaxInt;
  28. Min := MaxInt;
  29. for i := 1 to m*n do begin
  30. if ar[getN(i),getM(i)] > max then max := ar[getN(i),getM(i)];
  31. if ar[getN(i),getM(i)] < min then min := ar[getN(i),getM(i)];
  32. end;
  33. str(max,s1);
  34. str(min,s2);
  35. if length(s1) > length(s2) then
  36. GetMaxLength := length(s1) + 1
  37. else
  38. GetMaxLength := length(s2) + 1
  39. End;
  40. {------------------------------------}
  41. Procedure ReadFile(f : string);
  42. Var
  43. i : integer;
  44. f1 : text;
  45. Begin
  46. Assign(f1,f);
  47. {$I-}
  48. Reset(f1);
  49. If IOResult <> 0 then
  50. Repeat
  51. Write('” ©« ­¥ ­ ©¤¥­, ¢¢¥¤¨â¥ ­®¢®¥ ¨¬ï: ');
  52. Readln(f);
  53. Assign(f1,f);
  54. Reset(f1);
  55. Until IOResult = 0;
  56. {$I+}
  57. for i := 1 to m*n do Read(f1,ar[GetN(i),GetM(I)]);
  58. for i := 1 to m*n do begin
  59. GotoXY(getM(i)*getmaxlength+5,GetN(I)+2);
  60. Write(ar[GetN(i),GetM(I)]);
  61. end;
  62. WriteLn;
  63. WriteLn;
  64. End;{ReadFile}
  65. {------------------------------------}
  66. Function GetValue:integer;
  67. Var s1:string;code,va1:integer;
  68. Begin
  69. Repeat
  70. Write('‚¢¥¤¨â¥ ç¨á«® ¤«ï ¯®¨áª  ¢ ¬ âà¨æ¥ : ');
  71. ReadLn(s1);
  72. Val(s1,va1,code);
  73. Until Code = 0;
  74. GetValue := va1
  75. End;{GetValue}
  76. {------------------------------------}
  77. Procedure Find(found:integer);
  78. Var
  79. l,r,tmp,i:integer;
  80. Begin
  81. l := 1;
  82. r := m*n;
  83. while l < r do
  84. if ar[GetN((l+r) div 2),GetM((l+r) div 2)] >= found then r := (l+r) div 2
  85. else l := (l+r) div 2+1;
  86. if found = ar[GetN(r),GetM(R)] then begin
  87. FindN := GetN(r);
  88. FindM := GetM(r);
  89. end
  90. else FindM := 0
  91. End;{Find}
  92. {----------------------------------}
  93. Procedure WriteResult;
  94. Begin
  95. if FindM <> 0 then
  96. begin
  97. WriteLn('ˆáª®¬®¥ §­ ç¥­¨¥ ­ ©¤¥­® ¢');
  98. WriteLn(' áâப¥ : ',FindN);
  99. WriteLn(' á⮫¡æ¥ : ',FindM)
  100. end
  101. else
  102. WriteLn('ˆáª®¬®¥ §­ ç¥­¨¥ ­¥ ­ ©¤¥­®')
  103. End;{WriteResult}
  104. {-----------------------------------}
  105. Begin
  106. ClrScr;
  107. ReadFile(fname);
  108. f1 := GetValue;
  109. Find(f1);
  110. WriteResult;
  111. ReadKey
  112. End.