Поставлена учебная задача обработки текстовой информации на языке Паскаль со следующими условиями.
Удалить из заданного в программе текста все символы, не являющиеся буквами латинского алфавита, подсчитать число вхождений каждой буквы латинского алфавита в введенном тексте.
Ниже приведен текст моей программы для этой решения задачи. Так как я начинающий и это моя первая программа, то для меня важно и хотелось бы знать ваши критические замечания и советы.
Текст программы
program Task5;
uses
crt;
var
indata:string; {Вводимая строка символов}
outdata:string; {Строка символов латинского алфавита определенных из введеных}
exit:boolean; {Условие завершения работы}
{Описание процедуры определения символов латинского алфавита}
procedure filter (X:string; var Y:string);
var
i:integer; {Параметр цикла определяемый длиной строки}
stringlength:integer; {Длина строки введенных симолов}
begin
stringlength:=length(X); {Определяем число введенных символов}
Y:=''; {Удаляем данные из переменной, т.к. переменная переменной передается в процедуру но не изменяется}
for i:=1 to stringlength do {Определяем цикл с параметром т.к. известо число шагов цикла}
if (ord(X[i])>=65)and(ord(X[i])<=90) {Если порядковое значение кода ASCII введенного символа принадлежит}
or {к множеству порядковых значений кода ASCII символов латинского алфавита}
(ord(X[i])>=97)and(ord(X[i])<=122) {(от 65 до 90 - заглавные буквы; от 97 до 122 - прописные буквы), то символ}
then Y:=Y+X[i]; {записывается в выходную переменную Y строкового типа.}
end;
{Описание процедуры подсчета числа раз введения символа латинского алфавита}
procedure counter (X:string);
var
i:integer; {Параметр цикла определяемый длиной строки}
stringlength:integer; {Длина строки введенных симолов}
number:integer; {Число раз ввода символа}
symbol:char; {Символ определяемого числа раз ввода}
A:char; {Служебная переменная используется для перезаписи элемента в конец строки}
begin
stringlength:=length(X); {Определяем общее число символов}
while stringlength>0 do {Определяем цикл числа раз подсчета ввода символов}
begin
number:=0; {Устанавливаем счетчик ввода символа в 0}
symbol:=X[1]; {Получаем значение первого символа в строке}
for i:=1 to stringlength do {Определяем цикл числа раз ввода символа}
begin
if symbol=X[1] then {Проверяем равенство символа с первым элементом строки}
begin {Условие проверки истинно для всех символов при первой проверке}
number:=number+1; {Увеличиваем счетчик числа раз ввода символа}
delete(X,1,1); {Удаляем первый символов из строки символов}
stringlength:=length(X); {Определяем число оставшихся символов в строке}
end
else {Если подсчитываемый символ не равен следующему "первому" символу строки}
begin
A:=X[1]; {Присваеваем переменной значение следующего "первого" символа строки}
delete(X,1,1); {Удаляем следующий "первый" символ из строки символов}
X:=X+A; {Записсываем значение переменной в конец строки}
end;
end;
writeln('Символ ',symbol,' введен ',number,' раз/раза');{Выводим колличество раз ввода символа и символ}
end;
end;
begin
clrscr;
writeln('Для продолжения нажмите любую кнопку. Для выхода Esc');
if ord(readkey)=27 then halt; {Условие продолжения или выхода из программы}
repeat {Определяем цикл повторного выполнения программы}
clrscr;
writeln('Введите текст');
readln(indata);
writeln(#10#13,'Общее число введенных симолов ',length(indata));
filter(indata,outdata); {Вызываем процедуру выбора символов латинского алфавита}
if length(outdata)>0 then {Определяем наличие символов латинского алфавита}
begin
writeln(#10#13,'Латинские символы введены следующее число раз:',#10#13);
counter(outdata) {Вызываем процедуру подсчета числа раз ввода символа}
end
else
writeln('В введеной строке латинских символов символов нет');
{clrscr; {Очищаем экран}
writeln(#10#13,'Для продолжения нажмите любую кнопку. Для выхода Esc');
exit:=ord(readkey)=27; {Определяем условие повторного выполнения программы или окончание работы}
until exit;
end.