3.pas 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const
  2. count = 20;
  3. name_len = 11;
  4. phone_len = 9;
  5. separators = [4,7];
  6. type TPhoneEntry = record
  7. Name : string[name_len];
  8. Phone : string[phone_len];
  9. end;
  10. var
  11. DB : array [1..count] of TPhoneEntry;
  12. INP : file of TPhoneEntry;
  13. k,i : integer;
  14. Procedure Exchange(var s1,s2 : TPhoneEntry);
  15. var
  16. tmp : TPhoneEntry;
  17. begin
  18. tmp := s1;
  19. s1 := s2;
  20. s2 := tmp;
  21. end;
  22. Procedure SortNum(num : integer);
  23. var
  24. i, j : integer;
  25. begin
  26. for i := 1 to count-1 do
  27. for j:=count-1 downto i do
  28. begin
  29. if DB[j+1].Phone[num] > DB[j].Phone[num] then Exchange(DB[j], DB[j+1]);
  30. end;
  31. end;
  32. begin
  33. Assign(INP,'phones.dat');
  34. {$I-}
  35. Reset(INP);
  36. If IOResult <> 0 then
  37. begin
  38. WriteLn('File ''phones.dat'' not found');
  39. Halt(255);
  40. end;
  41. {$I+}
  42. k:=1;
  43. while not eof(inp) do
  44. begin
  45. Read(INP,DB[k]);
  46. inc(k);
  47. end;
  48. Close(INP);
  49. for k := phone_len downto 1 do
  50. if not (k in Separators) then
  51. SortNum(k);
  52. for k := 1 to count do
  53. begin
  54. Write(DB[k].Name);
  55. for i:=1 to 11-Length(DB[k].Name) do Write(' ');
  56. WriteLn(DB[k].Phone);
  57. end;
  58. WriteLn('End.');
  59. end.