PHONELST.PAS 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. Const
  2. n = 10;
  3. Type Tname = record
  4. name,surname : string[20];
  5. phone : string[8];
  6. End;
  7. Var
  8. ar1 : array [1..n] of Tname;
  9. tmp : Tname;
  10. l,r,i : 1..n;
  11. f0 : string[20];
  12. k,j : 1..n;
  13. {--------==================---------------}
  14. Procedure ReadStr(name_of_file:string);
  15. Var
  16. s1 : array [1..n] of string;
  17. f1 : text;
  18. val : 1..3;
  19. h : 1..n;
  20. l : byte;
  21. Begin
  22. assign(f1,name_of_file);
  23. reset(f1);
  24. for h := 1 to n do readln(f1,s1[h]);
  25. Close(f1);
  26. val := 1;
  27. for h := 1 to n do
  28. for l := 1 to length(s1[h]) do
  29. begin
  30. if s1[h,l] <> ' ' then
  31. case val of
  32. 1: ar1[h].name := ar1[h].name+s1[h,l];
  33. 2: ar1[h].surname := ar1[h].surname+s1[h,l];
  34. 3: ar1[h].phone := ar1[h].phone+s1[h,l];
  35. end
  36. else inc(val);
  37. if l = length(s1[h]) then val := 1;
  38. end;
  39. End;{ReadStr}
  40. {-----------------------------}
  41. Begin
  42. l := 1;
  43. r := n;
  44. ReadStr('num.txt');
  45. for k := 1 to n do
  46. for j := k+1 to n do
  47. if ar1[j].surname < ar1[k].surname then
  48. begin
  49. tmp.surname := ar1[k].surname;
  50. ar1[k].surname := ar1[j].surname;
  51. ar1[j].surname := tmp.surname;
  52. tmp.name := ar1[k].name;
  53. ar1[k].name := ar1[j].name;
  54. ar1[j].name := tmp.name;
  55. tmp.phone := ar1[k].phone;
  56. ar1[k].phone := ar1[j].phone;
  57. ar1[j].phone := tmp.phone;
  58. end;
  59. Write('Enter surname for search in base: ');
  60. Readln(f0);
  61. while l < r do
  62. if ar1[(l+r) div 2].surname >= f0 then r := (l+r) div 2
  63. else l := (l+r) div 2+1;
  64. if f0 = ar1[r].surname then WriteLn(ar1[r].name,' ',ar1[r].surname,' ',ar1[r].phone)
  65. else WriteLn('There are no records for that surname');
  66. ReadLn;
  67. End.