1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Обработка текстовой на языке Паскаль, Ваши критические коментарии, советы.
Поставлена учебная задача обработки текстовой информации на языке Паскаль со следующими условиями.
Удалить из заданного в программе текста все символы, не являющиеся буквами латинского алфавита, подсчитать число вхождений каждой буквы латинского алфавита в введенном тексте.
Ниже приведен текст моей программы для этой решения задачи. Так как я начинающий и это моя первая программа, то для меня важно и хотелось бы знать ваши критические замечания и советы.
Текст программы
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.