Guest User

Untitled

a guest
Dec 15th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. program PoiskSlov_MoiseenkoEgor_112b;
  2.  
  3. //Программа работает с текстовым файлом в кодировке ASCII. Компилировал в PascalABCCompiler 1.8
  4.  
  5.  
  6.  
  7. //Символ в нижний регстр(они таки есть)
  8. function ToLower(c: Char): Char;
  9. begin
  10. if (Ord(c) >= Ord('A')) and (Ord(c) <= Ord('Z')) then //анг.
  11. begin
  12. ToLower := Chr(Ord(c) + (Ord('a') - Ord('A')));
  13. end else
  14. if (Ord(c) >= Ord('А')) and (Ord(c) <= Ord('Я')) then //рус.
  15. begin
  16. ToLower := Chr(Ord(c) + (Ord('а') - Ord('А')));
  17. end else
  18. if c = 'Ё' then //Ё!!1
  19. begin
  20. ToLower := 'ё';
  21. end
  22. else ToLower := c;
  23. end;
  24.  
  25. //Буква?
  26. function IsLetter(c: Char): Boolean;
  27. begin
  28. c := ToLower(c);
  29.  
  30. if ((Ord(c) >= Ord('a')) and (Ord(c) <= Ord('z'))) or
  31. ((Ord(c) >= Ord('а')) and (Ord(c) <= Ord('я'))) or (c = 'ё') then
  32. begin
  33. IsLetter := true;
  34. end else
  35. begin
  36. IsLetter := false;
  37. end;
  38. end;
  39.  
  40. var
  41. f: Text;
  42. c: Char; //текущий символ
  43. firstChar: Char; //первый символ фамилии
  44. isFirstChar: Boolean; //считывается первая буква в слове?
  45. isNext: Boolean; //слово далее на нужную букву?
  46. isFirstWord: Boolean; //первое слово? (нужно для расстановки ', ' между словами)
  47. wordCount: Integer; //количество слов
  48. begin
  49. WriteLn('Имя файла: С:\12.txt');
  50.  
  51.  
  52. while (IsLetter(firstChar) = false) or //просим ввести фамилию до тех пор, пока первый символ не будет буквой
  53. (ToLower(firstChar) = 'ъ') or (ToLower(firstChar) = 'ь') do
  54. begin
  55. Write('Введите вашу фамилию: ');
  56. ReadLn(firstChar);
  57.  
  58. if (IsLetter(firstChar) = false) or
  59. (ToLower(firstChar) = 'ъ') or (ToLower(firstChar) = 'ь') then
  60. begin
  61. WriteLn('Однако, у вас странная фамилия, введите-ка еще разок.');
  62. end;
  63. end;
  64.  
  65.  
  66. Write('Поиск слов по символу: ');
  67. WriteLn(firstChar);
  68.  
  69. Assign(f, 'c:\12.txt'); //Файл в кодировке ASCII
  70. Reset(f);
  71.  
  72. isFirstWord := true;
  73. isFirstChar := true;
  74. isNext := false;
  75. wordCount := 0;
  76.  
  77. while not Eof(f) do //пока каретка не дойдет до конца файла
  78. begin
  79. Read(f,c);
  80.  
  81. if isFirstChar = true then //ищем слова
  82. begin
  83. if IsLetter(c) = true then //слово далее?
  84. isFirstChar := false;
  85.  
  86. if ToLower(c) = ToLower(firstChar) then //далее слово на нужную букву?
  87. begin
  88. //вначале вывода запятая не нужна
  89. if isFirstWord = false then
  90. begin
  91. Write(', ');
  92. end else
  93. begin
  94. isFirstWord := false;
  95. end;
  96.  
  97. Write(c);
  98. isNext := true;
  99. end;
  100. end else
  101. if (IsLetter(c) = true) or (c = '-') then
  102. begin
  103. if isNext = true then //каретка на нужном слове?
  104. Write(c);
  105. end else
  106. begin //на предыдущей позиции каретки, была последняя буква слова
  107. isFirstChar := true;
  108.  
  109. if isNext = true then
  110. begin
  111. isNext := false;
  112. wordCount := wordCount + 1;
  113. end;
  114. end;
  115.  
  116. end;
  117. Close(f);
  118.  
  119. if wordCount > 0 then //слов нет - выводить точку не надо
  120. WriteLn('.');
  121.  
  122. Write('Всего слов: ');
  123. WriteLn(wordCount);
  124.  
  125. end.
Add Comment
Please, Sign In to add comment