Раздел 2. Программирование на языке Pascal



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Раздел 2. Программирование на языке Pascal



 

Тема 2.1 Основные элементы языка Pascal.

 

Структура программы на Паскале. По определению стандартно­го Паскаля программа состоит из заголовка программы и тела программы (блока), за которым следует точка — признак конца программы. В свою очередь, блок содержит разделы описаний и раздел операторов.

Program <имя программы>;

Label <раздел меток>;

Const <раздел констант>;

Туре <раздел типов>;

Var <раздел переменных>;

Procedure (Function) <раздел подпрограмме

Begin

<раздел операторов>

End.

Раздел операторов имеется в любой программе и является ос­новным. Предшествующие разделы носят характер описаний и не все обязательно присутствуют в каждой программе.

В Турбо Паскале, в отличие от стандарта, возможно следующее:

• отсутствие заголовка программы;

• разделы Const, Type, Var, Label могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколь­ко угодно раз.

Примеры программ. Уже было сказано, что Паскаль разрабаты­вался Н.Виртом как учебный язык. Основной принцип, зало­женный в нем, — это поддержка структурной методики программирования. Этот же принцип лежит в основе псевдокода, который мы здесь называем Алгоритмическим языком (АЯ). По сути дела, расхождение между АЯ и Паскалем заключается в следу­ющем: АЯ — русскоязычный, Паскаль — англоязычный; синтак­сис Паскаля определен строго и однозначно в отличие от сравни­тельно свободного синтаксиса АЯ.

Запись программы на Паскале похожа на английский перевод алгоритма, записанного на Алгоритмическом языке. Сравните ал­горитм деления простых дробей, записанный на АЯ, с соответ­ствующей программой на Паскале.

алг деление дробей;   Program Division;

цел a,b,c,d,m,n;          Var a,b,c,d,m,n: Integer;

нач ввод(a,b,с,d);     Begin ReadLn(a,b,с, d) ;

m:=a*d;                                                m:=a*d;

n:=b*c;                                                n:=b*c;

вывод(m,n)                                         WriteLn(m,n)

Кон .                                          End .

Здесь использовано следующее равенство:

 

 

Даже не заглядывая в учебник по Паскалю, в данной програм­ме можно все понять. Для этого достаточно знать английский язык.

Заголовок программы начинается со слова Program (програм­ма), за которым следует произвольное имя, придуманное про­граммистом ( division — деление). Раздел описания переменных на­чинается со слова Var ( variables — переменные), за которым сле­дует список переменных. Тип указывается после двоеточия словом integer — целый. Начало и конец раздела операторов програм­мы отмечаются словами Begin (начало) и End (конец). В конце программы обязательно ставится точка.

Ввод исходных данных с клавиатуры производится с помощью процедуры ReadLn ( read line — читать строку). На клавиатуре на­бирают четыре числа, отделяемые друг от друга пробелами, кото­рые отражаются строкой на экране дисплея. После набора чисел нажимают на клавишу ввода.

Операторы присваивания в Паскале записываются так же, как в АЯ. Знак умножения — * (звездочка).

Вывод результатов на экран дисплея производится с помощью процедуры WriteLn ( write line — писать в строку). В рассмотрен­ном примере два целых числа тип выведутся в строчку, курсор на экране перейдет в начало следующей свободной строки и ра­бота программы завершится.

Необходимо строгое соблюдение правил правописания (син­таксиса) программы. В частности, в Паскале однозначно опреде­лено назначение знаков пунктуации. Точка с запятой (;) ставится в конце заголовка программы, в конце раздела описания пере­менных, после каждого оператора. Перед словом End точку с за­пятой можно не ставить. Запятая (,) является разделителем эле­ментов во всевозможных списках: списке переменных в разделе описания, списке вводимых и выводимых величин.

Строгий синтаксис в языке программирования необходим преж­де всего для транслятора. Транслятор — это программа, которая испол­няется формально. Если, допустим, разделителем в списке перемен-

ных должна быть запятая, то любой другой знак будет восприни­маться как ошибка. Если точка с запятой является разделителем операторов, то транслятор в качестве оператора воспринимает всю часть текста программы от одной точки с запятой до другой. Если вы забыли поставить этот знак между какими-то двумя операто­рами, то транслятор будет принимать их за один, что неизбежно приведет к ошибке.

Основное назначение синтаксических правил — придать однознач­ ный смысл языковым конструкциям. Если какая-то конструкция мо­жет трактоваться двусмысленно, значит, в ней обязательно со­держится ошибка. Лучше не полагаться на интуицию, а выучить правила языка.

В дальнейшем мы строго опишем синтаксические правила Пас­каля, а пока для получения первоначального представления о языке обратимся еще к нескольким примерам программирования не­сложных алгоритмов.

«Оттранслируем» алгоритм вычисления факториала натураль­ного числа ( N \) на Паскале.

Из этого примера, во-первых, видно, как записывается на Пас­кале оператор цикла с предусловием (цикл-пока):

While <условие выпог.нения> Do <тело цикла>

(while — пока, Do — делать). Если тело цикла содержит последо­вательность операторов, то говорят, что оно образует составной оператор, в начале и в конце которого надо писать Begin и End. Служебные слова Begin и End часто называют операторными скоб­ ками, которые объединяют несколько операторов в один состав­ной. Если же тело цикла — один оператор (не составной), то опе­раторных скобок не требуется. Тогда транслятор считает, что тело цикла заканчивается на ближайшем знаке «;».

Во-вторых, из примера видно, что в Паскале нет специальных слов для обозначения начала цикла (нц) и конца цикла (кц). На все случаи есть универсальные слова Begin и End.

Рассмотрим еще один примерного уравнения.

В этой программе по сравнению с предыдущими появилось много новых элементов. Имя вещественного типа в Паскале —r e a l .

Цикл с постусловием (цикл-до) программируется оператором Repeat <тело цикла> Until <условие окончания>

(здесь Repeat — повторять, Until — до). Тело цикла может быть как одиночным, так и составным оператором, однако употребле­ния Begin и End не требуется, поскольку сами слова Repeat и Until выполняют роль операторных скобок.

Знак не равно в Паскале пишется так: <>, знак больше или рав­но: >=.

Правила записи арифметических выражений мы подробно рас­смотрим немного позже. В формулах вычисления корней исполь­зуется стандартная функция квадратного корня (Vx), которая в Паскале записывается так: sqrt (x). Порядок выполнения опера­ций в выражении определяется скобками и старшинством опера­ций. Старшинство операций такое же, как и в алгебре. Операции одинакового старшинства выполняются в порядке их записи (сле­ва направо).

Ветвление в Паскале программируется с помощью условного оператора, который имеет следующую форму:

If <условие> Then <оператор 1> Else <оператор 2>

(здесь If — если, Then — то, Else — иначе). Операторы 1 и 2 могут быть как простыми, так и составными. Составной оператор следует заключать в операторные скобки Begin и End.

Так же, как и в Алгоритмическом языке, возможно использо­вание неполной формы условного оператора:

if <условие> then <оператор>

Характерной чертой данной программы является использова­ние в тексте комментариев. Комментарий — это любая последо­вательность символов, заключенных в фигурные скобки {...}. Мож­но употреблять также следующие ограничители комментариев (*...*). Комментарий не определяет никаких действий программы и является лишь пояснительным текстом. Он может присутство­вать в любом месте программы, где можно поставить пробел. Про­граммист пишет комментарии не для компьютера, а для себя. Комментарий придает тексту программы большую ясность. Хо­рошо откомментированные программы называют самодокумен­тированными. Во многих подобных программах объем коммента­риев превышает объем вычислительных операторов.

Удачное использование комментариев признак хорошего стиля программирования.

Чтобы выполнить программу на ЭВМ, ее нужно ввести в память, оттранслировать и исполнить. Для того чтобы проделать всю эту ра­боту, на компьютере должны быть специальные средства програм­много обеспечения. На ПК они составляют систему Турбо Паскаль.

Алфавит. Алфавит языка состоит из множества символов, вклю­чающих в себя буквы, цифры и специальные символы.

Латинские буквы: от А до Z (прописные) и от а до z (строчные).

Цифры: О, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Шестнадцатеричные цифры: О, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F.

Специальные символы: + — */ = <>[]. ,():;{}А@$#.

Следующие комбинации специальных символов являются еди­ными символами (их нельзя разделять пробелами):

:= знак присваивания;             <= меньше или равно;

>= больше или равно;         (* *)    ограничители комментариев

<> не равно;                                  (используются наряду с { });

(..) эквивалент [ ].

Пробелы — символ пробела (ASCII-32) и все управляющие сим­волы кода ASCII (от 0 до 31).

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

 

absolute end inline procedure type
and external interface program unit
array file interrupt record until
begin for label repeat uses
case forward mod set var
const function nil shl while
div goto not shr with
do if of string xor
downto implementation or then  
else in packed to  

Последние версии языка содержат еще ряд служебных слов, относящихся к работе с объектами и встроенным ассемблером.

Идентификаторы. Идентификатором называется символическое имя определенного программного объекта. Такими объектами являются имена констант, переменных, типов данных, процедур и функций, программ. С помощью синтаксической диаграммы иден­тификатор можно определить, как показано на рис. 3.

 

Расшифровать это можно так: идентификатор — это любая пос­ледовательность букв и цифр, начинающаяся с буквы. В Турбо Пас­кале к буквам приравнивается также знак подчеркивания. Строч­ные и прописные буквы в идентификаторах и служебных словах не различаются. Например: max, мах, Мах и тАх — одно и то же имя.

Длина идентификатора может быть произвольной, но знача­щими являются только первые 63 символа.

Комментарии. Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:

{любой текст, не содержащий символ «}» }

(* любой текст, не содержащий символы «*)»*)

Буквы русского алфавита употребляются только в коммента­риях, в литерных и текстовых константах.

Строка, начинающаяся с символов {$ или (*$, является дирек­тивой компилятора. За этими символами следует мнемоника ко­манды компилятора.

 

 

Тема 2.2 Переменные и константы. Типы данных.

Концепция типов данных является одной из центральных в лю­бом языке программирования. С типом величины связаны три ее свой­ ства: форма внутреннего представления, множество принимаемых зна­чений и множество допустимых операций. Турбо Паскаль характеризу­ется большим разнообразием типов данных, отраженном на рис. 4.

В стандартном Паскале отсутствует строковый тип. Кроме того, в Турбо Паскале целые и вещественные — это группы типов. В стар­ших версиях Турбо Паскаля существует процедурный тип и тип объект.

Каждый тип имеет свой идентификатор.

В табл. 2  представлена информация о простых типах данных, определенных в Турбо Паскале. Для вещественных типов в скоб­ках указано количество сохраняемых значащих цифр мантиссы в десятичном представлении числа.

Идентификатор Длина, байт Диапазон (множество) значений

Целые типы

Integer 2 -32768 ...32767
Byte 1 0...255
Word 2 0... 65535
Shortint 1 -128... 127
Longint 4 -2147483648 ...2147483647

Вещественные типы

Real 6 2,9-10~39... 1,7-1038    (11 - 12)
Single 4 1,5-10~45...3,4-1038     (7-8)
Double 8 5-10"324... 1,7-Ю308      (15-16)
Extended 10 3,4-10-4932... 1,Ы04932 (19-20)

Логический тип

Boolean 1 true, false

Символьный тип

Char 1 все символы кода ASCII

табл. 2

 

В стандарте Паскаля из вещественных типов определен только тип Real; из целых типов — Integer.

Типы Single, Double, Extended употребляются в Паскаль-программах только в том случае, если ПК снабжен сопроцессо­ром «плавающей арифметики» (для процессоров IBM PC, начи­ная с Intel-80486 и старше, это условие всегда выполняется).

Тип данных называется порядковым, если он состоит из счет­ного количества значений, которые можно пронумеровать. Отсю­да следует, что на этом множестве значений существуют понятия «следующий» и «предыдущий».

Описание переменных. Для всех переменных величин, исполь­зуемых в программе, должны быть указаны их типы. Это делается в разделе переменных программы. Структура раздела переменных показана на рис. 5.

 

Пример раздела переменных программы:

Var m,n,k: Integer; х,у,z: Real; Symbol: Char;

Константы. Тип константы определяется по контексту, т.е. по форме ее записи в программе.

Целые десятичные константы записываются в обычной форме целого числа со знаком или без знака, например 25, -24712, 376.

Целые шестнадцатеричные константы записываются с префик­сом $. Они должны находиться в диапазоне от $00000000 до SFFFFFFFF.

Вещественные константы с фиксированной точкой записывают­ся в обычной форме десятичного числа с дробной частью. Разде­литель целой и дробной части — точка, например: 56.346, 0.000055, -345678.0.

Вещественные константы с плавающей точкой имеют форму:

<мантисса>Е<порядок>

Здесь мантисса — целое или вещественное число с фиксиро­ванной точкой, порядок — целое число со знаком или без, на­пример 7Е-2 (7-e-2), 12.25Е6 (12,25-106), 1Е-25 (10"25).

Символьная константа — любой символ алфавита, заключен­ный в апострофы, например, 'W, '!', '9'.

Логическая константа — одно из двух слов: true, false.

Строковая константа — строка символов, заключенная в апострофы, например Turbo Pascal', 'Ответ:', '35-45-79'. Максимальная длина — 255 символов.

Константе может быть поставлено в соответствие определенное имя. Назначение имени константе производится в разделе констант программы. Структура раздела констант показана на рис. 6.

В дополнение к сказанному заметим, что в Турбо Паскале допустимо употребление типизированных констант. Типизированная константа аналогична переменной, которой задается начальное значение. Причем происходит это на этапе компиляции. Описание типизированной константы приведено на рис. 7.

В Турбо Паскале имеется ряд имен, зарезервированных за оп­ределенными значениями констант. Ими можно пользоваться без предварительного определения в программе (табл. 3).

Таблица 3

 

Идентификатор Тип Значение
True boolean истина
False boolean ложь
Maxlnt integer 32767

Типы пользователя. Один из принципиальных моментов состо­ит в том, что пользователю разрешается определять свои типы данных. Типы пользователя всегда базируются на стандартных ти­пах данных Паскаля.

Для описания типов пользователя в Паскале существует раздел типов, структура которого представлена на рис. 8.

Перечисляемый тип (рис. 9) задается непосредственно перечислением всех значений, которые может принимать переменная данного типа.

Определенное имя типа затем используется для описания пе­ременных. Например:

Type Gaz=(C,0,N, F) ;

Metal=(Fe,Co,Na,Cu, Zn) ; Var Gl,G2,G3:Gaz;

Metl,Met2:Metall; Day:(Sun,Mon,Tue,Wed,Thu,Fri,Sat)

Здесь Gaz и Metal — имена перечисляемых типов, которые ставятся в соответствие переменным Gl, G2, G3 и Metl, Met2. Переменной Day назначается перечисляемый тип, которому не присвоено имя.

Значения, входящие в перечисляемый тип, являются констан­тами. Действия над ними подчиняются правилам, применимым к константам. Каждое значение в перечисляемом типе занимает в памяти 2 байта. Поэтому число элементов не должно превышать 65535.

Перечисляемый тип — упорядоченное множество. Его элемен­ты пронумерованы начиная от 0 в порядке следования в описа­нии.

В программе, в которой присутствует данное выше описание, возможен такой фрагмент:

if Day=Sun then WriteLn('Ура!Сегодня выходной!');

Интервальный тип (рис. 10) задается как упорядоченное огра­ниченное подмножество некоторого порядкового типа.

Рис. 10

Порядковый номер первой константы не должен превышать номера второй константы в соответствующем базовом типе.

При исполнении программы автоматически контролируется принадлежность значений переменной интервального типа уста­новленному диапазону. При выходе из диапазона исполнение про­граммы прерывается.

Пример:

Type Numbers=l..31;

Alf='A'..'Z'; Var Data:Numbers;;

Bukva:Alf;

 



Последнее изменение этой страницы: 2021-04-05; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.23.193 (0.049 с.)