TURBO PASCAL |
Новости
|
Урок первый,в котором рассказывается все
про синтаксис Pascal: как писать самое
главное в программе - комментарии;
какова на самом деле структура
программы; какие бывают идентификаторы;
что такое и какие бывают стандартные
типы и что за нестандартные
типы может создавать программист; как
объявлять переменные и как их
обрабатывать, используя простые
операторы; и, наконец, как писать понтные
прогрммы, используя процедуры и
функции. И, естественно, с какой
программы начать.
Для более эффективного изучения язык рекомендуется прочитать обзор основных мкханизмов языков программирования высокого уровня. Синтаксис языка,или внешнее устройствоКомментарии,или то, что многие игнорируютСовершенно необходимой частью каждой программы (за исключением элементарных и плохо написанных) являются комментарии. Pascal поддерживает два способа выделения комментариев: (* Комментарий,выделенный первым
способом *) причем первый способ имеет более высокий приоритет (а значит может использоваться для "закомментаривания" участков текста, уже содержащих коментарии, выделенные вторым способом. Кстати совет: любому программисту следует приобрести привычку постоянно комментировать свои программы - для последующего изучения и обеспечения возможности передачи другим программистам. (Наиболее эффективный способ оценить ценность любого совета - не следовать ему. Только делать это надо последовательно и систематически, а не так, что иногда следуешь, а иногда - нет.) Структура программы,или главный порядокPascal задумывался автором как учебный язык структурного программирования. Как следствие этого программы, на нем написанные, имеют достаточно простую, но жесткую структуру. Она такова
{ часть объявления имени программы: }
Program NameOfProgram; { часть объявления списка подключаемых модулей: } Uses {список модулей через запятую }; { часть объявления констант: } Const {список констант и их значений через ; }; { часть объявления типов пользователя: } Type {список типов пользователя через ; }; { часть объявления переменных: } Var {список переменных и их типов через ;}; { часть основной программы } Begin {точка входа} {операторы основной программы} End. {основная точка выхода и конец программы} Части Program и Uses не являются обязательными, однако должны быть первыми и единственными в программе. Const, Type и Var частей в программе может существовать множество, их порядок не нормируется и определяется требованиями программирования. Часть основной программы всегда является последней, признаком ее завершения является ключевое слово End с точкой после него. Любая информация после завершения основной части игнорируется компилятором. Идентификаторы,или именаПо определению Н.Вирта (автора языка) программа есть данные продуманной структуры плюс алгоритмы, эти данные обрабатывающие. Каждое данное (каждый элемент данных) может (и должен) иметь определенное имя (идентификатор). То же самое относится и к каждому типу данных, и к процедурам, и к функциям. Идентификатором на Pascal'e считается любая последовательность из не более чем 126 символов, состоящая из букв латинского алфавита, цифр и символа "_", причем первым символом должна быть буква. Большие и маленькие буквы не различаются. Идентификаторы, у которых одинаковы первые 63 символа, считаются идентичными. Первое упоминание (нестандартного, то есть не входящего в список зарезервированных) идентификатора в программе должно быть определением типа, переменной, процедуры или функции. Это означает следующую простую вещь: нельзя использовать тип (переменную...) до тех пор, пока он (она) не определена. Стандартные типы данныхДля того, чтобы правильно обрабатываться компилятором языка, каждый элемент данных должен иметь некоторый определенный тип. Рассмотрим типы данных, стандартно обрабатываемые на Pascal'e. В основном групп типов девять (самих типов - море):
Следует отметить, что диапазон значений числовых типов определяется их размером и наличием знака для целочисленных типов, а для дробных - размером и спецификацией IEEE. Так к примеру диапазон переменной типа байт - от минус двух в седьмой до плюс двух в седьмой без единицы (-128..127). Логические переменные могут принимать значения False и True (ложь и истина соответственно), символьные - любое из значений ASCII набора, строки - набор символов ASCII длиной от 0 до указанной длины (максимально - 255). Типы (д) - (и) и строковые типы относятся к так называемым сложным типам (потому как одним именем объединено несколько элементов). Переменные,или реализация типовЭлементы данных (в данном случае переменные; речь о константах - позже) простых типов описываются так:
<имя_переменной> : <имя_типа>;
Переменные типа "массив элементов типа ..." объявляются следующим образом:
<имя_переменной>: Array [нижняя_граница
.. верхняя_граница] Of <имя_типа>;
при этом доступ к элементам производится через индексы: i-й элемент массива K есть K[i]. (Показано для одномерных массивов - линейной последовательности элементов, в принципе возможно описание двумерных массивов - матриц элементов, трехмерных - кубов из элементов, etc., до семимерных, для которых удобоваримого названия нет. Добавление дополнительного измерения к описанию массива производится добавлением после запятой пары "нижняя_граница .. верхняя_граница") Переменные типа "запись" объявляются следующим образом.
<идентификатор>: Record
Доступ к полям записи производится так. "Поле pole переменной f" есть f.pole. Нестандартные типыили типы, определяемые программистомРассмотрим способы определения программистом собственных типов. Для того, чтобы объявить собственный тип, программист должен в Type-части (то есть после ключевого слова Type) написать сначала имя типа, а затем, после символа "=", его определение, то есть структуру. Как правило, программисты определяют собственными типами записи, массивы, объекты или типизированные указатели:
Type
TMyArray = Array[4..18] Of Real; PMyArray = ^MyArray; TMyRecrd = Record Более подробно о каждом из них предлагается поговорить позже. ОператорыОпределив типы данных, сами данные и структуру программы, перейдем к способам реализации алгоритмов, эти данные обрабатывающих. Все действия производятся с помощью операторов. Операторы делятся на два типа: простые и составные. К простым относятся:
Case <переменная> Of For <переменная> := <начальное_значение> To <конечное_значение> Do While <логическое условие> Do Repeat <оператор>; [<оператор>;] Until <логическое условие>;
В квадратные скобки заключены необязательные части операторов. В качестве <оператора> может выступать любой простой или составной оператор. Составным оператором называется любой набор простых и составных операторов, начинающийся с Begin и оканчивающийся End. В описании простых операторов <оператор> означает оператор любого типа - простой либо составной. Однако следует помнить, что если при выполнении условия (или в теле цикла) необходимо выполнять несколько действий, применение составного оператора обязательно. Также следует отметить, что любой оператор - простой или составной - должен оканчиваться точкой с запятой, за исключением тех случаев, когда он находится перед ключевым словом Else условного оператора или непосредственно перед словом End. Выполнение простых операторовили как это работаетПустой оператор попросту не выполняется, управление сразу передается следующему оператору. Оператор присваивания выполняется стандартным образом: <переменной> в левой части присваивается значение предварительно вычисленного <выражения>. Выражением могут служить:
Также стандартным образом выполняется оператор условия. При равенстве логического выражения True, выполняется <оператор1>, в противном случае выполняется <оператор2>, если таковой наличествует. Оператор множественного выбора выполняется следующим образом. Значение <переменной> последовательно сравнивается со <значениями>, указанными в теле оператора и при равенстве выполняется соответствующий <оператор>. Если все сравнения прошли безуспешно и существует Else часть оператора, то выполняется ей принадлежащий оператор. Оператор параметрического цикла выполняется следующим образом. В первую очередь переменной (называемой параметром цикла) присваивается начальное значение. Затем производится сравнение значения параметра цикла с конечным значением. Если значение параметра больше конечного значения, цикл считается завершенным. В противном случае выполняется <оператор> (называемый телом цикла), после чего параметр цикла увеличивается на 1. Затем все повторяется начиная с этапа сравнения. У параметрического цикла есть разновидность: если вместо слова To написать DownTo, то параметр цикла будет не увеличиваться, а уменьшаться на 1, и, соответственно, условием окончания цикла будет достижение параметром цикла конечного значения. Как правило, в целях придания хорошего стиля в программировании не рекомендуют изменять значение параметра цикла внутри тела цикла. Однако, большинство языков не запрещают делать этого, правда при работе с Borland Pascal в этом случае следует очень внимательно следить за тем, чтобы по окончании выполнения какого-либо повтора тела цикла значение параметра цикла было точно равно (а не просто больше) следующему за конечным значению, в противном случае правильного результата достичь довольно сложно. Оператор цикла с предварительной проверкой условия выполняется так. До первого выполнения оператора (i.e. тела цикла) вычисляется значение логического условия. Если условие принимает значение True, то выполняется тело цикла и вновь вычисляется значение логического условия, в противном случае оператор считается выполненным (цикл завершается). Следует заметить, что изменение значения логического условия - личное дело программиста. Оператор цикла с постфиксной проверкой условия выполняется, в известном смысле, наоборот. Сначала выполняется <оператор> (тело цикла), затем вычисляется логическое условие. При равенстве его False цикл повторяется. Изменение значения логического условия также лежит на программисте. Следует напомнить, что цикл While может не выполнится ни разу, а цикл Repeat выполнится как минимум один раз. Процедуры и функции,или как структурировать программыЧасто повторяющиеся участки программы, да и просто функционально законченные фрагменты кода, рекомендуется выделять в процедуры. Объявление процедуры производится в любой части программы до ее первого использования (и, конечно, до начала основной программы) следующим образом.
Procedure <имя процедуры>
[Const часть] Begin Именем процедуры может являться любой уникальный идентификатор. Список параметров должен состоять из одной или нескольких конструкций следующего вида:
[Var] <имя формального параметра>:
<тип параметра>
разделенных точками с запятой, где именем параметра является идентификатор, с которым ассоциируется значение фактически переданного процедуре параметра (именно значение, а не переменная, передаваемая в качестве параметра), а типом параметра - стандартный или ранее определенный тип. Если перед именем параметра стоит ключевое слово Var, то изменение данного параметра в теле процедуры приведет к изменению значения переменной, переданной в качестве параметра. Вызов процедуры производится так:
<имя процедуры> [(<список фактических
параметров>)];
При этом производится выталкивание в стек передаваемых параметров и адреса возврата, выделение в стеке места под объявленные в процедуре переменные и переход к выполнению первого оператора тела процедуры. По достижении конца тела процедуры (слова End) внутренние (локальные) переменные процедуры удаляются из стека и переход к оператору, следующему за вызовом процедуры. Аналогичным образом выполняются функции. Объявление функции выглядит так:
Function <имя_функции>
[Const часть] Begin Единственным отличием функций от процедур является возможность возврата некоторого значения. Указание конкретного значения, возвращаемое функций, производится путем присваивания в теле функции идентификатору имени функции данного значения. Естественно, что таких присваиваний может быть несколько, при этом значение возвращаемое функцией будет зависеть от того, какое из таких присваиваний было произведено последним. В Turbo Pascal, начиная с версии 7.0 возможен вызов функции без использования возвращаемого ею значения - аналогично процедуре. Так как при возврате значение функции находится, за редким исключением, в регистрах процессора, накладываются ограничения на типы результатов, возвращаемых функциями. Функции могут возвращать значения простых типов и строки. Первая программа,или с чего начинают все всегда и вездеСобственно, прочитав этот текст вы имеете представление о восьмидесяти процентах синтаксических структур на Pascal'е. Осталось набрать стандартную первую программу
Program Hello; {привет, значит}
Var Стоит обратить внимание на
разницу в выполнении WriteLN и Write. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |