Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program PoiskSlov_MoiseenkoEgor_112b;
- //Программа работает с текстовым файлом в кодировке ASCII. Компилировал в PascalABCCompiler 1.8
- //Символ в нижний регстр(они таки есть)
- function ToLower(c: Char): Char;
- begin
- if (Ord(c) >= Ord('A')) and (Ord(c) <= Ord('Z')) then //анг.
- begin
- ToLower := Chr(Ord(c) + (Ord('a') - Ord('A')));
- end else
- if (Ord(c) >= Ord('А')) and (Ord(c) <= Ord('Я')) then //рус.
- begin
- ToLower := Chr(Ord(c) + (Ord('а') - Ord('А')));
- end else
- if c = 'Ё' then //Ё!!1
- begin
- ToLower := 'ё';
- end
- else ToLower := c;
- end;
- //Буква?
- function IsLetter(c: Char): Boolean;
- begin
- c := ToLower(c);
- if ((Ord(c) >= Ord('a')) and (Ord(c) <= Ord('z'))) or
- ((Ord(c) >= Ord('а')) and (Ord(c) <= Ord('я'))) or (c = 'ё') then
- begin
- IsLetter := true;
- end else
- begin
- IsLetter := false;
- end;
- end;
- var
- f: Text;
- c: Char; //текущий символ
- firstChar: Char; //первый символ фамилии
- isFirstChar: Boolean; //считывается первая буква в слове?
- isNext: Boolean; //слово далее на нужную букву?
- isFirstWord: Boolean; //первое слово? (нужно для расстановки ', ' между словами)
- wordCount: Integer; //количество слов
- begin
- WriteLn('Имя файла: С:\12.txt');
- while (IsLetter(firstChar) = false) or //просим ввести фамилию до тех пор, пока первый символ не будет буквой
- (ToLower(firstChar) = 'ъ') or (ToLower(firstChar) = 'ь') do
- begin
- Write('Введите вашу фамилию: ');
- ReadLn(firstChar);
- if (IsLetter(firstChar) = false) or
- (ToLower(firstChar) = 'ъ') or (ToLower(firstChar) = 'ь') then
- begin
- WriteLn('Однако, у вас странная фамилия, введите-ка еще разок.');
- end;
- end;
- Write('Поиск слов по символу: ');
- WriteLn(firstChar);
- Assign(f, 'c:\12.txt'); //Файл в кодировке ASCII
- Reset(f);
- isFirstWord := true;
- isFirstChar := true;
- isNext := false;
- wordCount := 0;
- while not Eof(f) do //пока каретка не дойдет до конца файла
- begin
- Read(f,c);
- if isFirstChar = true then //ищем слова
- begin
- if IsLetter(c) = true then //слово далее?
- isFirstChar := false;
- if ToLower(c) = ToLower(firstChar) then //далее слово на нужную букву?
- begin
- //вначале вывода запятая не нужна
- if isFirstWord = false then
- begin
- Write(', ');
- end else
- begin
- isFirstWord := false;
- end;
- Write(c);
- isNext := true;
- end;
- end else
- if (IsLetter(c) = true) or (c = '-') then
- begin
- if isNext = true then //каретка на нужном слове?
- Write(c);
- end else
- begin //на предыдущей позиции каретки, была последняя буква слова
- isFirstChar := true;
- if isNext = true then
- begin
- isNext := false;
- wordCount := wordCount + 1;
- end;
- end;
- end;
- Close(f);
- if wordCount > 0 then //слов нет - выводить точку не надо
- WriteLn('.');
- Write('Всего слов: ');
- WriteLn(wordCount);
- end.
Add Comment
Please, Sign In to add comment