5.BAK 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const
  2. name_len = 11;
  3. phone_len = 9;
  4. separators = [4,7];
  5. type
  6. PPhoneEntry = ^TPhoneEntry;
  7. TPhoneEntry = record
  8. Name : string[name_len];
  9. Phone : string[phone_len];
  10. Next : PPhoneEntry;
  11. end;
  12. {----------------------------------------}
  13. Procedure AddEntry(var CPEntry : PPhoneEntry;aName,aPhone : string);
  14. var
  15. NE : PPhoneEntry;
  16. num : string;
  17. i : integer;
  18. begin
  19. New(NE);
  20. with NE^ do
  21. begin
  22. Name := aName;
  23. Phone := aPhone;
  24. Next := CPEntry;
  25. end;
  26. CPEntry := NE;
  27. end;{AddEntry}
  28. {----------------------------------------}
  29. Procedure SortNum(var L:PPhoneEntry);
  30. var
  31. c,t,m : PPhoneEntry;
  32. begin
  33. if L^.Next = nil then exit;
  34. C:=L^.next;
  35. M:=L;
  36. while (C^.Next <> nil) do
  37. begin
  38. if C^.Next^.Phone > M^.Next^.Phone then M:=C;
  39. C:=C^.Next;
  40. end;
  41. if M^.Next^.Phone > L^.Phone then
  42. begin
  43. T:=M^.Next;
  44. M^.Next:=T^.Next;
  45. T^.Next:=L;
  46. L:=T;
  47. end;
  48. M:=L;
  49. while M^.Next^.Next <> nil do
  50. begin
  51. c:=M^.Next;
  52. while C^.Next <> nil do
  53. begin
  54. if C^.Next^.Phone > M^.Next^.Phone then
  55. begin
  56. T:=C^.NEXT;
  57. C^.NEXT:=T^.NEXT;
  58. T^.NEXT:=M^.NEXT;
  59. M^.NEXT:=T;
  60. end
  61. else
  62. C:=C^.Next;
  63. end;
  64. M:=M^.Next;
  65. end;
  66. end;{SortNum}
  67. {----------------------------------------}
  68. var
  69. DB,c : PPhoneEntry;
  70. INP : text;
  71. Name : string[Name_Len];
  72. Phone : string[Phone_Len];
  73. i : integer;
  74. begin
  75. Assign(INP,'phones.txt');
  76. Assign(Output,'out5.txt');
  77. Rewrite(Output);
  78. {$I-}
  79. Reset(INP);
  80. If IOResult <> 0 then
  81. begin
  82. WriteLn('File ''phones.txt'' not found');
  83. Halt(255);
  84. end;
  85. {$I+}
  86. DB:=nil;
  87. While not EOF(INP) do
  88. begin
  89. Read(INP,Name);
  90. ReadLn(INP,Phone);
  91. AddEntry(DB,Name,Phone);
  92. WriteLn(Name,Phone);
  93. end;
  94. Close(INP);
  95. WriteLn('Result:');
  96. SortNum(DB);
  97. c:=DB;
  98. while C<>nil do
  99. begin
  100. WriteLn(C^.Name,C^.Phone);
  101. C:=C^.Next;
  102. end;
  103. WriteLn('End.');
  104. while DB<>nil do
  105. begin
  106. C:=DB^.Next;
  107. Dispose(DB);
  108. DB:=C;
  109. end;
  110. end.