Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры программ




Var

Else

Begin

Var

Var

End

Begin

Var

Пример 2.10

End

Begin

Var

i: Integer; {Счетчик цикла преобразования}

с: Char; {Рабочая переменная преобразования}

begin {UpString}

s2:= ''; {Вначале выходная строка пуста}

{Цикл посимвольного анализа исходной строки}

for i:= 1 to Length(s1) do

{Берем из входной строки очередной символ}

с:= s1[i];

(Проверяем символ на принадлежность к одному из трек подмассивов}

if (с >= 'a') and (с <= 'z') then

с:= chr(ord('А')+ord(c)-ord('a')) {A,a – латинские!}

else if (c >= 'a') and (c <= 'n') then

с:= chr(ord('A')+ord(c)-ord('a')) {А,а – русские!}

else if (c >= 'p') and (с <= 'я') then

с:= chr(ord('P')+ord(c)-ord('p'));

s2:= s2+c

end; {UpString}

В процедуре вначале с помощью оператора

s2:= '';

подготавливается «пустая» выходная строка, т.е. строка нулевой длины. Затем используется цикл от 1 до длины входной строки s1 (эта длина получается с помощью стандартной функции Length), в ходе которого проверяется принадлежность очередного символа указанным подмассивам и осуществляется необходимая коррекция его внутреннего кода. Для доступа к отдельным символам строки используется замечательное свойство типа данных STRING, позволяющее рассматривать строку как набор (массив) символов. Первый символ этого набора имеет индекс 1, второй – 2 и т.д. Индекс указывается сразу за именем строки в квадратных скобках. Таким образом, sl[i] – это i -ый символ строки s1. Преобразованный символ добавляется в конец выходной строки.

Добавив комментарии и поместив тело процедуры вместо заглушки в первоначальный вариант программы, получим окончательно ее рабочий вариант (пример 2.10).

Program CharsConvert;

[Программа вводит произвольную текстовую строку, преобразуем все входящие в нее буквы в прописные и печатает результат преобразования}

PROCEDURE UpString(s1: String; var s2: String);

(Эта процедура преобразует буквы входной строки s1 в прописные буквы латинского или русского алфавита и помещает результат преобразования в выходную строку s2. Используется предположение о том, что последовательности латинских букв от «а» до «z» и русских букв от «а» до «п» и от «р» до «я», а также последовательности соответствующих им прописных букв образуют непрерывные массивы}

i: Integer; {Счетчик цикла преобразования}

с: Char; {Рабочая переменная преобразования}

begin {UpString}

s2:= ' '; {Вначале выходная строка пуста}

{Цикл посимвольного анализа исходной строки}

for i:= 1 to Length(s1) do

{Берем из входной строки очередной символ}

с:= s1[i];

{Проверяем символ на принадлежность к одному из трех подмассивов}

if (с >= 'a') and (с <= 'z') then

с:= chr(ord('A')+ord(c)-ord('a')) {A,a – латинские!}

else if (c >= 'a') and (c <= " п ") then

с:= chr(ord('A')+ord(c)-ord('a')) {A,a – русские!}

else if (c >= 'p') and (с <= 'я') then

с:= chr(ord('P')+ord(c)-ord('p'));

s2:= s2+c

end; {UpString}

Sinp, Sout: String; {Исходная и преобразованная строки}

begin {Начало основной (вызывающей) программы}

Write('Введите строку: ');

ReadLn(Sinp); {Вводим исходную строку}

UpString(Sinp,Sout); {Преобразуем ее к прописным буквам}

WriteLn(' Результат: ',Sout) {Печатаем результат}

end. {Конец вызывающей программы}

Рассмотрим иной способ реализации той же программы: оформим алгоритм преобразования в виде функции. Кроме того, с помощью стандартной функции UPCASE преобразуем каждый очередной символ (это преобразование осуществляется только для букв латинского алфавита) и тем самым исключим проверку принадлежности символа к строчным латинским буквам:

Function UpString(s1: String): String;

i: Integer;

с: Char;

s2: String; {Результат преобразования}

begin {UpString}

s2:= '';

for i:= 1 to Length(s1) do

{Получаем и преобразуем очередной символ}

с:= UpCase(s1[i]);

if (с >= 'a') and (с <= ' п ') then

с:= chr(ord('A')+ord(c)-ord('a'))

if (c >= 'p') and (с <= 'я') then

с:= chr(ord('P')+ord(c)-ord('p'));

s2:= s2+c

end;

UpString:= s2 {Присваиваем значение функции UpString}

end; {UpString}

Sinp: String;

begin {Начало основной программы}

Write('Введите строку: ');

ReadLn(Sinp);

WriteLn(' Результат: ',UpString(Sinp))

end. {Конец основной программы}

Программа получилась несколько проще за счет того, что функцию можно использовать в качестве параметра обращения к другой процедуре в нашем случае к WriteLn). Обратите внимание: в теле любой функциинужно осуществить присваивание ей вычисленного значения (см. оператор UpString:= s2). В левой части оператора присваивания в этом случае указывается имя функции.

 

Мы познакомились с основными возможностями языка Турбо Паскаль. Как видите, ядро языка очень компактно и отличается простотой – именно в этом состоит главная заслуга автора Паскаля Н.Вирта: язык, придуманный им, прост и естественен, он легко осваивается, на нем не трудно писать самые разнообразные программы. Конечно, рассмотрены далеко не все свойства Турбо Паскаля, ведь его главная отличительная черта – это богатство типов данных. Однако уже рассмотренного вполне достаточно для написания многих полезных программ.

Приводимые ниже программы относительно сложны, поэтому они реализуются поэтапно, по методу нисходящего программирования. Мне кажется, что тем читателям, кто не имеет большого опыта в программировании или кто захочет подробнее ознакомиться с нисходящим программированием, изучение этой главы принесет определенную пользу. Если Вам будет скучно разбираться в «кухне» программирования, но Вас заинтересуют описываемые здесь программы и Вы захотите их повторить, то в прил.5 Вы найдете полный текст соответствующей программы; однако в каждой из них используются некоторые дополнительные возможности языка Турбо Паскаль, которые не рассматривались ранее и которые обсуждаются в пропущенных Вами фрагментах книги.

При оформлении программ я стремился использовать хороший стиль написания программ, т.е. такую их форму, которая дает наиболее полное представление о структуре программы в целом и ее отдельных частей. Не существует какого-либо стандарта, определяющего хороший стиль программы. Обычно это интуитивное понятие включает способ расположения операторов и описаний по строкам (не рекомендуется размещать более одного оператора на каждой строке), а также выделение отступами тела составных и условных операторов. Последнее особенно важно в программах Турбо Паскаля: сплошь и рядом в них встречаются операторные скобки begin... end, причем часто вложенные друг в друга; использование отступа служит дополнительным средством проверки правильности их расстановки – не случайно в редакторе среды предусмотрена соответствующая опция. Принятый мною стиль оформления программ не претендует на эталон, просто мне кажется, что таким образом оформленные программы читаются лучше. Если Вы всерьез намерены программировать на Турбо Паскале, имеет смысл составить собственное представление о хорошем стиле и далее неукоснительно придерживаться его – очень скоро некоторые дополнительные издержки на подготовку программ с лихвой окупятся их «читабельностью», а это поможет Вам вспомнить все детали реализации программы, которая была написана несколько месяцев тому назад.

 




Поделиться с друзьями:


Дата добавления: 2014-11-06; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.