Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Основные структуры Паскаля
Муниципальное общеобразовательное учреждение
Андрейковская с.ш.
Информатика
серия «Языки программирования»
Паскаль
Часть 2: Основные структуры языка
Методическое пособие
для профильных и непрофильных классов общеобразовательной и очно-заочной школы
с. Андрейково
2010
ВККИ 000.001.002
Мандриков В.Г.
М2 Паскаль. Основные структуры языка. Методическое пособие. Андрейково: кабинет Информатики, 2010.
Методическое пособие предназначено для учащихся профильных и общеобразовательных классов и учащихся очнозаочной школы, существующей при МОУ Андрейковская средняя школа, в рамках изучения предмета информатики, а также для преподавателей школы, изучающих различные приложения компьютерных технологий.
Данное методическое пособие содержит основные сведения, необходимые для начала программирования на языке программирования Паскаль.
© МОУ Андрейковская с.ш., 2010
© Мандриков В.Г., 2010
Информатизация различных сфер общества требует гибкости систем управления. Достигается это разработкой гибких и направленно настраиваемых программных средств моделирования или управления процессами. Т.е. возникла необходимость создания специальных программных продуктов, предназначенных для разработки новых продуктов, их изменения и доработки. Эти программные продукты называются языками программирования, и фактически с их помощью можно создать любой другой продукт, который будет применяться в требуемой области знаний или производственном процессе. Причем языкам программирования безразлично, для какой сферы создается программа, они всего лишь позволяют реализовать алгоритм, плохой или хороший, и запустить его для выполнения на компьютере в виде программы. А уж разработчик решает сам, какой алгоритм и из какой прикладной области возьмется он реализовывать.
Одним из простых языков программирования, появившимся как учебный, является язык Паскаль (Pascal). Паскаль получил широкое распространение благодаря наглядности программ и легкости изучения. Он послужил основой для разработки других языков программирования (например, Ада, Модула−2).
[1]
[2]
[3] [3.1] Раздел Program [3.2] Раздел Uses [3.3] Раздел Label [3.4] Раздел Const [3.5] Раздел Type [3.6] Раздел Var [3.7] Подпрограммы
[4] [4.1] Вывод данных [4.2] Ввод данных [4.3] Оператор присвоения [4.4] Арифметические выражения [4.5] Составной оператор
[5] [5.1] Оператор условия [5.2] Оператор выбора
[6] [6.1] Цикл с предусловием [6.2] Цикл с постусловием [6.3] Цикл с параметром
[7] [7.1] Процедуры [7.2] Функции
[8]
[9] |
[1]
[2]
[3] [3.1] Раздел Program [3.2] Раздел Uses [3.3] Раздел Label [3.4] Раздел Const [3.5] Раздел Type [3.6] Раздел Var [3.7] Подпрограммы
[4] [4.1] Вывод данных [4.2] Ввод данных [4.3] Оператор присвоения [4.4] Арифметические выражения [4.5] Составной оператор
[5] [5.1] Оператор условия [5.2] Оператор выбора
[6] [6.1] Цикл с предусловием [6.2] Цикл с постусловием [6.3] Цикл с параметром
[7] [7.1] Процедуры [7.2] Функции
[8]
[9] |
В программе, написанной на Турбо Паскале, могут быть следующие разделы:
Program ИмяПрограммы; {Заголовок программы}
Uses ИмяМодуль1, …; {Подключение модулей}
Label ИмяМетки1, …; {Раздел объявления меток}
Const
ИмяКонстанты=Значение; {Раздел объявления констант}
Type
ИмяТипа=Значение; {Раздел объявления новых типов}
Var
ИмяПеременной:Тип; {Раздел объявления переменных}
{=== Начало описания подпрограмм ===}
Procedure ...; {Описание своих процедур}
Function ...; {Описание своих функций}
{=== Конец описания подпрограмм ===}
Begin {Начало основной программы}
...;
{Операторы, инструкции основной программы}
...;
End. {Конец основной программы}
Заголовок программы является хотя и необязательным, но желательным элементом и состоит из зарезервированного слова program и идентификатора имени программы, за котором следует точка с запятой. За ним идут разделы описаний, в которых должны быть описаны все идентификаторы (константы, переменные, типы, процедуры, функции, метки), которые будут использованы в программе.
После разделов описаний идет раздел операторов, который начинается со служебного слова Begin и заканчивается служебным словом End. В этом разделе задаются действия над объектами программы, объявленными в разделе описаний. Операторы в этом разделе отделяются друг от друга точкой с запятой. После последнего слова End ставится точка.
В начале программы может находиться заголовок, состоящий из зарезервированного слова program, имени программы и параметров, с помощью которых программа взаимодействует со своими внешним окружением:
program Имя(input, output);
Раздел uses позволяет подключать стандартные и пользовательские библиотечные модули.
Перед любым оператором можно поставить метку, что позволяет выполнить прямой переход на это оператор с помощью оператора goto из любого места программы. Раздел описания меток начинается с зарезервированного слова label.
Хранение констант не требует памяти и компилятор помещает их значения прямо в текст исполняемой программы. Каждая константа принадлежит к определенному типу данных, однако при определении константы его обычно не указывают. Тип констант может автоматически опознаться по форме их записи.
Раздел описания констант начинается с зарезервированного слова const:
const g=9.8;
В Паскале существует так называемые типизированные константы, т.е. при иъ описании указывается тип:
const g:real=9.8;
Для хранения таких констант память выделяется по ходу выполнения программы (инициализированные переменные).
В Паскале существует механизм создания новых типов данных. Каждое новое определение типа задает множество значений и связывает с этим множеством имя типа.
Все переменные, используемые в программе, должны быть перечислены в разделе описания переменных. Описание должно предшествовать использованию переменной.
Часто программы разбивают на более мелкие части для удобства. Они называются подпрограммами.
Подпрограммой называется программная единица (часть программы, имеющая имя, по которому она может быть вызвана из других частей программы).
Подпрограммы бывают двух видов: процедуры и функции, которые в свою очередь делятся на стандартные и определенные пользователем.
Вывод данных передача данных после обработки из оперативной памяти на устройство вывода (экран монитора, принтер, файл).
Операторы вывода данных на экран Write(список данных для вывода);
или
WriteLn(список данных для вывода);
Процедура вывода WriteLn аналогична Write. Отличие заключается в том, что после вывода курсор автоматически переходит в начало новой строки. Данные инструкции предназначены для вывода констант различных типов, значений переменных или выражений. Число параметров произвольно.
Пустой оператор WriteLn; переводит курсор на начало следующей строки.
При выводе данных можно задавать формат вывода. Для этого после имени переменной ставится знак двоеточие ":", например: Writeln(a:5:2); - при выводе значения переменной вещественного типа отводится 5 позиций (включая отрицательный знак и точку), из них 2 позиции отводится для вывода цифр в дробной части. При выводе значения переменной целого типа задается количество позиций для числа (включая отрицательный знак), например: Writeln(i:8);
При недостатке количества позиций для вывода число или текст выводятся полностью, а формат игнорируется, кроме формата вывода дробной части числа. Если формат вывода не задавать, то значения целых и строковых переменных выводятся полностью, а вещественных - в экспоненциальной форме с количеством цифр, соответствующих типу переменной.
Ввод данных передача исходных данных программы в оперативную память компьютера для обработки.
Основные способы ввода ввод с клавиатуры или чтение данных из файла.
Описание переменных служит для выделения памяти. Выделенные ячейки памяти остаются незаполненными до тех пор, пока в них не было записано конкретное значение. Ввод данных один из способов задания значений переменных.
Инструкция ввода с клавиатуры можно записать в следующей форме:
Операторы ввода данных с клавиатуры
Read(список переменных);
или
ReadLn(список переменных);
Инструкция ReadLn при вводе с клавиатуры предпочтительнее Read, т.к. полностью освобождает буфер клавиатуры рабочую область памяти, в которой хранятся (временно) введенные с клавиатуры символы.
Пустой оператор ReadLn используется для организации паузы выполнение программы продолжится, как правило, только после нажатия на клавиатуре клавиши <Enter>.
В одной инструкции Read или ReadLn можно записать несколько переменных, разделенных занятыми. При выполнении программы значения, вводимые с клавиатуры, можно разделять клавишами <> (пробел), <Tab>, <Enter>.
Другим способом назначения переменным значений является операция присвоения.
Оператор присвоения задает значения переменных в ходе выполнения программы.
Обозначается операция присвоения знаком «:=».
Результат, полученный при вычислении выражения, должен быть совместим по типу с переменной, которой он присваивается.
Выражение определяет порядок совершения действии над элементами данных и состоит из:
Операции определяют действия, которые надо выполнить над операндами. Любые операции можно поделить на унарные, которые относятся к одному операнду, и бинарные, которые относятся к двум операндам.
Таблица . Таблица знаков операций
Операция |
Обоз-начение |
Тип |
|
операндов |
результата |
||
Бинарные |
|||
Сложение |
+ |
real |
real |
integer |
integer |
||
Вычитание |
- |
real |
real |
integer |
integer |
||
Умножение |
* |
real |
real |
integer |
integer |
||
Деление |
/ |
real |
real |
integer |
real |
||
Целочисленное деление |
div |
integer |
integer |
Остаток от деления |
mod |
integer |
integer |
Арифметическое И |
and |
integer |
integer |
Арифметическое ИЛИ |
or |
integer |
integer |
Арифметическое побитовое сложение по модулю 2 |
xor |
integer |
integer |
Побитовый сдвиг влево |
shl |
integer |
integer |
Побитовый сдвиг вправо |
shr |
integer |
integer |
Унарные |
|||
Сохранение знака |
+ |
real |
real |
integer |
integer |
||
Отрицание знака |
- |
real |
real |
integer |
integer |
||
Арифметическое отрицание |
not |
integer |
integer |
Операции div вычисление результата от целочисленного деления и mod вычисления остатка от целочисленного деления предназначены для работы с целыми числами и в итоге дают также целые значения. Примеры:
19 div 4=4;
12 div 4=3;
-21 div 4=-5;
-7 div (-4)=1;
19 mod 4=3;
12 mod 4=0;
-21 mod 4=-1;
-7 mod (-4)=-3.
В Паскале есть две процедуры, которые также меняют значения целого числа: inc и dec. Первая увеличивает число на указанное значение, вторая наоборот уменьшает. Пример:
Inc(X)
Inc(X,N)
Dec(X)
Dec(X,N)
X:=X+1
X:=X+N
X:=X-1
X:=X-N
Операции побитового сдвига выполняются быстрее, чем соответствующие операции деления и умножения на степень двойки. Сдвиг влево (k shl n) восстанавливает в качестве результата значение, полученное путем сдвига на n позиций влево двоичной формы числа k:
2 shl 7 = 256 = 2*27
Сдвиг вправо (k shr n) наоборот:
240 shr 3 = 30 = 240 div 23
Арифметическое отрицание (not) вызывает побитовую инверсию числа получение обратного значения.
Таблица . Логические операции
Операция |
Название |
< |
меньше |
> |
больше |
<= |
меньше или равно |
>= |
больше или равно |
= |
равно |
<> |
не равно |
not |
отрицание |
or |
Или |
and |
И |
xor |
исключающее ИЛИ |
Последовательность выполнения любой операции в составе арифметического выражения зависит от ее приоритета ().
Выражение, заключенное в скобки, перед выполнением вычисляется как отдельный операнд. При наличии вложенных скобок вычисление выполняется, начиная с самых внутренних.
Рисунок . Последовательность операций
Операции с равным приоритетом выполняется слева направо.
Если в выражении встречается функция, то данная функция заменяется конкретным значением результатом вычисления функции и расчет содержащего ее выражения продолжается далее.
Таблица . Стандартные арифметические функции
Стандартная функция |
Выполняемое действие |
Тип |
|
аргумента |
результата |
||
abs(x) |
|x| |
real |
real |
integer |
integer |
||
sqr(x) |
x2 |
real |
real |
integer |
integer |
||
sqrt(x) |
x½ |
real |
real |
integer |
real |
||
exp(x) |
ex |
real |
real |
integer |
real |
||
ln(x) |
ln(x) |
real |
real |
integer |
real |
||
arctan(x) |
arctg(x) |
real |
real |
integer |
real |
||
cos(x) |
cos(x) |
real |
real |
integer |
real |
||
sin(x) |
sin(x) |
real |
real |
integer |
real |
||
pi |
π |
|
real |
frac(x) |
Дробная часть числа |
real |
real |
int(x) |
Целая часть числа |
real |
real |
random(x) |
Расчет случайного числа y: 0<=y<x |
|
integer |
trunc(x) |
Отброс дробной части |
real |
integer |
round(x) |
Округление до целого |
real |
integer |
Для тригонометрических функций sin и cos аргумент задается в радианах.
Последовательность операторов может быть объединена в группу, рассматриваемую как один оператор или блок. Это выполняется с помощью слов языка Begin и End.
Begin
<Оператор1>;
…
<ОператорN>;
End;
Составной оператор называют еще операторными скобками, т.к. с помощью него выделяется блок, относящийся к определенной смысловой структуре в языке Паскаль оператору.
Алгоритмические действия над исходными данными и рабочими объектами языка, необходимые для решения поставленной задачи описываются при помощи операторов Турбо Паскаля. Операторы разделяются точкой с запятой, их последовательность и составляет тело программы. Наиболее простой случай представляют собой линейные алгоритмы. При выполнении линейных участков алгоритма операторы выполняются последовательно друг за другом в том порядке, в котором они перечислены в программе. При этом могут использоваться операторы присваивания, операции ввода и вывода.
В программе может применяться пустой оператор, не выполняющий никакого действия. Он представляет собой точку с запятой.
Составным оператором считается последовательность произвольных операторов, заключенная в операторные скобки. Допускается произвольная глубина вложенности составных операторов. Составной оператор применяется там, где по синтаксическим правилам языка может стоять только один оператор, а нам надо выполнить несколько действий. В этом случае набор необходимых команд должен быть оформлен как составной оператор. По сути, все тело программы представляет собой один составной оператор.
В Турбо Паскале имеется возможность нелинейного хода программы, т.е. выполнения операторов не в том порядке, в котором они записаны. Такую возможность нам предоставляют разветвляющиеся алгоритмы. Они могут быть реализованы одним из трех способов: с использованием операторов перехода, условного оператора или оператора выбора.
Условный оператор позволяет изменить порядок выполнения команд в зависимости от некоторого логического условия, т.е. он осуществляет ветвление вычислительного процесса. Условный оператор имеет вид:
If <условие> Then
<оператор1>
[Else <оператор2>];
Выполнение условного оператора начинается с вычисления значения логического выражения, записанного в условии. Если условие истинно, то выполняется <оператор 1>, в противном случае − <оператор 2>.
Оператор IF может быть полным (присутствуют обе ветви) или неполным (Else-ветви нет, при ложном условии ничего не делается). По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной. Точка с запятой перед Else считается ошибкой.
Если у вас не два возможных варианта выполнения программы, а больше, то может использоваться оператор выбора Case. Структура этого оператора в Турбо Паскале:
Case <ключ_выбора> Of
C1 : <оператор1>;
...
CN : <операторN>;
[Else <оператор0>;]
End;
Здесь <ключ_выбора> это выражение порядкового типа, в зависимости от значения которого принимается решение; C1,...,CN - значения, с которыми сравнивается значение <ключа>; <оператор1>,..., <операторN> оператор (возможно составные), из которых выполняется тот, с константой которого происходит первое совпадение значения <ключа>, <оператор0> выполнится, если значение ключа не совпадает ни с одной из констант C1,...,CN.
Ветвь Else не обязательна, и в отличие от оператора If, перед ней можно ставить точку с запятой. Если для нескольких значений <ключа> действия совпадают, то эти константы можно перечислить через запятую перед двоеточием или даже задать диапазон значений (нижняя граница .. верхняя граница).
Цикл представляет собой последовательность операторов, которая может выполняется неоднократно.
While Условие выполнения цикла do
Begin
{тело цикла}
end;
Данная структура выполняется следующим образом: сначала проверяется Условие выполнения цикла. Условием может быть любое логическое выражение (с операциями сравнения или логическими операциями). Если результатом проверки условия является значение Истина True, то выполняются операторы, входящие в тело цикла. Данный процесс продолжается до тех пор, пока в результате проверки условия не будет получено значение False. Если в цикле надо выполнить только один оператор, операторные скобки можно упустить.
Обязательно учитывайте, что параметры, проверяемые в условии, должны внутри цикла меняться, иначе произойдет зацикливание программы во время исполнения циклической структуры (если условие истинно, конечно). Это относится и к следующей структуре цикла с постусловием. Только для него зацикливание произойдет при ложном условии.
repeat
{тело цикла}
until условие выхода из цикла;
Цикл с постусловием всегда выполняется хотя бы раз, т.к. условие проверяется в конце цикла. Также нужно учесть, что цикл с предусловием выполняется до тех, пока условие верно. Цикл с постусловием, когда условие верно, наоборот завершается.
Обратите внимание, что операторные скобки для структуры цикл с постусловием не применяются.
For <параметр>:=НЗ То КЗ Do
<тело цикла>;
For <параметр>:=НЗ DownTo КЗ Do
<тело цикла>;
где НЗ − начальное значение параметра, КЗ − конечное значение параметра.
Оператор цикла с параметром применяют тогда, когда заранее известно число повторений одной и той же последовательности операторов.
Начальное и конечное значения параметра цикла могут быть представлены константами, переменными или арифметическими выражениями.
В структуре НЗ≤КЗ; а в структуре наоборот НЗ≥КЗ. Т.е. в первом случае перебор идет по возрастанию значений порядковой переменной <параметр>, а во втором по убыванию.
Рассмотрим, как выполняется оператор цикла с увеличивающимся параметром (структура ). Сначала вычисляются значения выражений НЗ и КЗ. Если НЗ≤КЗ (или НЗ≥КЗ для второго случая), то <параметр> последовательно принимает значения, равные НЗ, НЗ+1,..., КЗ-1, КЗ и для каждого из этих значений выполняется <тело цикла>. Если НЗ>КЗ, то <тело цикла> не выполняется ни разу.
Для второй структуры (с DownTo) после вычисления начального и конечного выражений проверяется условие НЗ≥КЗ. А затем идет перебор параметра НЗ, НЗ-1,..., КЗ+1, КЗ (т.е. с шагом -1) с выполнением операторов из тела цикла. Если НЗ<КЗ, то <тело цикла> не выполняется ни разу. Если внутри цикла исполняется один оператор, то операторные скобки можно отбросить.
Нередко в программах встречаются повторяющиеся или похожие фрагменты. Имеется возможность оформлять такие фрагменты специальным образом выделять их в подпрограммы. Само название подпрограмма говорит о том, что это часть программы, которая оформляется как самостоятельная программная единица. Использование подпрограмм не только улучшает структуру и внешний вид программы, но и уменьшает вероятность ошибок и облегчает отладку. Подпрограмме дается уникальное имя идентификатор, по которому к ней можно обращаться (вызывать подпрограмму). Параметры, которые указываются при описании процедур и функций, называются формальными.
В Паскале имеются два вида подпрограмм − процедуры и функции. Их структура очень похожа на структуру основной программы. Все процедуры и функции делятся на две группы: стандартные (встроенные) и определенные пользователем.
Стандартные входят в стандартные библиотеки и могут вызываться по имени без предварительного описания. Процедуры и функции пользователя пишутся самим программистом в разделе описания процедур и функций.
Процедура независимая часть программы (подпрограмма), которую после однократного описания можно многократно вызывать по имени из любой последующей части программы.
Procedure ИмяПроцедуры (Формальные Параметры);
{описательная часть процедуры}
begin
{операторы инструкции процедуры}
end;
Вызов оформляется как отдельный оператор:
ИмяПроцедуры(ФормальныеПараметры);
Для принудительного завершения выполнения процедуры в ее теле можно записывать оператор exit.
Если результатом подпрограммы является только одно значение, то имеет смысл оформить такую подпрограмму в виде функции.
Функция передает в программу результат своей работы единственное значение, носителем которого является имя самой функции. Имя функции может входить в выражение как операнд.
function ИмяФункции(Формальные Параметры): ТипРезультата;
{описательная часть функции}
begin
{операторы инструкции функции};
ИмяФункции:=Результат;
{операторы инструкции функции};
end;
Массив представляет собой упорядоченную структуру однотипных данных, хранящую их последовательно. Доступ к элементу массива осуществляется через его индекс.
В качестве типа для элементов массива можно использовать любые типы Турбо Паскаля кроме файловых.
Массив можно представить в виде таблицы, где каждая величина находится в собственной ячейке. Положение ячейки в таблице однозначно определяется набором координат (индексов). Самой простой является линейная таблица, в которой для указания на элемент данных достаточно знания только одного индекса.
Массивы описываются следующим образом:
ИмяТипа = Array[ДиапазоныИндексов] Of ТипЭлементаМассива;
Причем существует два способа задания массива. В первом случае, задается тип массива, а затем объявляется переменного типа массив:
Type mymas=Array[1..30] Of Integer;
Var A:mymas;
Можно массив сразу объявлять в разделе определения переменных:
Var A:Array[1..30] Of Integer;
унарный минус, not, @
нарные операции
*, /, div, mod, and, shl, shr
Операции типа умножение
+, , or, xor
Операции типа сложение
=, <>, <, >, <=, >=, in
Операции отношения