В Object Pascal имеется стандартная функция upcase, которая преобразует букву строки stinp в прописную.Наша процедура (назовем ее upString) будет преобразовывать сразу все символы строки, причем сделаем ее пригодной не только для латинских букв, но и для букв русского алфавита. В Delphi имеется стандартная функция AnsiUpperCase, реализующая те же действия..
Разработку программы проведем в два этапа. Сначала сконструируем основную (вызывающую) часть программы. Ее действия очень просты: она должна получить входную строку из компонента edinput, преобразовать ее с помощью процедуры upString в выходную строку и поместить результат в iboutput.Text. Эти действия нетрудно запрограммировать в обработчике bbRunciick:
procedure TfmExample.bbRunClick(Sender: TObject);
procedure UpString(stinp:String; var stOut:String);
{ Эта процедура преобразует все буквы строки stinp в прописные и помещает результат в выходную строку stOut }
begin
stOut := stinp;
end; // UpString
SI, S2:String;
SI := edinput.Text; // Получаем исходную строку
UpString(SI,S2); // Преобразуем ее
IbOutput.Caption := S2; // Выводим результат
edinput.Text := '' ;
edinput.SetFocus ;
end;
В этой программе используется замещение процедуры UpString так называемой “заглушкой”, т. е. процедурой, в которой на самом деле не осуществляется нужных нам действий, а выходная строка просто копирует входную. (Однако эта программа синтаксически абсолютно правильна, и при желании ее можно запустить на счет.) Заглушка понадобилась нам по двум причинам. Во-первых, приведенная программа очень проста, в ней отсутствует детальная реализация процедуры, и это позволяет наглядно проиллюстрировать механизм ее описания. Во-вторых, на ее примере мы знакомимся с универсальным методом конструирования сложных программ, получившим название нисходящее программирование.
Рассмотрим иной способ реализации той же программы - оформим алгоритм преобразования в виде функции:
if Result[k] >= 'a'then // Строчная буква кириллицы?
Result[k] := // Да: преобразуем ее
Chr(ord('A') + ord(Result[k]) - ord('a'));
if Result[k]='e'then
Result[k] := 'Ё'; // Преобразуем ё в Ё
end; // UpString
{ В следующем операторе исходная строка edinput.Text преобразуется и помещается в выходную строку IbOutput.Caption: }
IbOutput.Caption := UpString(edinput.Text);
edinput.Text := '';
edinput.SetFocus ;
При описании функции необходимо за списком используемых для ее вызова параметров указать тип возвращаемого ею результата. Именно поэтому за закрывающей круглой скобкой в заголовке функции стоит двоеточие и тип string. В теле любой функции определена стандартная переменная Result, которая трактуется как результат, возвращаемый функцией.
С помощью оператора
Result := stInp;
мы сначала присвоили результату входную строку, а затем в цикле осуществили перебор символов и их коррекцию. Единственный оператор
IbOutput.Caption := UpString(edInput.Text);
заменил сразу три первых оператора в предыдущей реализации программы.