- •ПРЕДИСЛОВИЕ
- •1.1. История и классификация языков программирования высокого уровня
- •1.2. Первое (знакомство с Паскалем
- •Задания
- •Лекция 2
- •2.1. Некоторые сведения о системе ТУрбо-Паскаль
- •2.2. Способы описания языка программирования
- •Лекция 3
- •3.2. Типы данных
- •4.1. Структура Паскаль-программы
- •4.2. Арифметические операции, функции, выражения Арифметический оператор присваивания
- •Форматы процедуры write
- •Задания
- •1. Что будет напечатано программой
- •если последовательно вводятся три числа: 36, -6, 2345?
- •5.2. Функции, связывающие различные типы данных
- •Задания
- •Теперь посмотрим, как это программируется наТЛаскале.
- •Здесь
- •<параметр цикла>::= <имя простой переменной порядкового типа>
- •Задания
- •7.1. Подпрограммы-процедуры
- •7.2. Подпрограммы-функции
- •7.4. Рекурсивные подпрограммы
- •8.1. Что такое рекуррентная последовательность
- •8.2. Программирование вычислений рекуррентных последовательностей
- •Задания
- •Задания
- •6. Вывод результата.
- •Теперь будем составлять подпрограммы.
- •Задания
- •12.2. Операции над множествами
- •12.3. Примеры использования множеств
- •Красивая программа! К сожалению, ею нельзя воспользоваться для
- •В этой программе использована функция определений размера файла:
- •.Fiiesize(<HMH файловой переменной>);
- •Задания
- •14.2. Работа с файлами записей
- •Задания
- •15.2. Связанные списки
- •Лекция 16
- •16.1. Организация внешних подпрограмм
- •16,2. Создание и использование модулей
- •распечаткой текста программы с подробными комментариями.
- •выполнения следующих операции над обыкновенными дробями вида -q
- •(Р — целое, Q — натуральное):
- •1) сложение;
- •2) вычитание;
- •3) умножение;
- •4) деление;
- •5) сокращение дроби;
- •7) функции, реализующие операции отношения (равно, не равно,
- •Используя этот модуль, решить задачи:
- •При разработке модуля рекомендуется такая последовательность
- •Задания
- •Приведем текст программы целиком.
- •ЗАДАНИЯ ПО ТЕМЕ “ЛИНЕЙНЫЕ АЛГОРИТМЫ”
- •ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
- •Сортировка массивов
- •ЗАДАЧИ ПО ТЕМЕ “ОБРАБОТКА СТРОК”
- •ЗАДАНИЯ ПО ТЕМЕ “МОДУЛИ”
- •ЗАДАНИЯ ПО ТЕМЕ “ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ”
- •Задачи, предлагавшиеся на школьных олимпиадах по программированию (Пермская область)
- •Учебное издание
1.2. Первое (знакомство с Паскалем
Вы уже знаете, что Паскаль разрабатывался Н. Виртом как учеб ный язык. Основной принцип, заложенный в нем, — это поддержка структурной методики программирования. Этот же принцип лежит в основе псевдокода, который мы здесь называем Алгоритмическим языком (АЯ). По сути дела расхождение между АЯ и Паскалем заклю чается в следующем: АЯ — русскоязычный, Паскаль — англоязычный; синтаксис Паскаля определен строго и однозначно в отличие от сра внительно свободного синтаксиса АЯ.
Запись программы на Паскале похожа на английский перевод алго ритма, записанного на Алгоритмическом языке. Сравните алгоритм деления простых дробей, записанный на АЯ, с соответствующей про граммой на Паскале.
алг депение дробей; цел а, Ъ, с, d, m, n; нач ввод(а, Ъ, с, d);
mа * d;
n:= b * с; вывод(m, л)
ион
Program Division; |
integer; |
||
Var a, |
b, c, |
d, n, n |
|
Begin ReadLn(a, b, c, d); |
|||
m |
:= a |
* d; |
|
n |
:= b |
* c; |
|
WriteLn(m, n)
End.
Здесь отражено следующее равенство:
а . с _ а ♦d _ т Ъ ' 3 Ь•с п '
Даже не заглядывая в учебник по Паскалю, в этой программе можно все понять. Особенно в этом помогает знание английского языка.
Заголовок программы начинается со слова Program (программа), за которым следует произвольное имя, придуманное программистом (division — деление). Раздел описания переменных начинается со слова Var (variables — переменные), за которым следует список переменных. Ттт указывается после двоеточия словом integer — целый. Начало и конец раздела операторов программы отмечаются словами begin (на чало) и end (конец). В конце программы обязательно ставится точка.
Ввод исходных данных с клавиатуры производится с помощью про цедуры ReadLn (read line — читать строку). На клавиатуре набира ются четыре числа, отделяемые друг от друга пробелами, которые отражаются строкой на экране дисплея. В конце набора чисел нажи мается клавиша ввода.
Операторы присваивания в Паскале записываются так же, как в АЯ. Знак умножения — * (звездочка).
Вывод результатов на экран дисплея производится с помощью про цедуры W riteLn (write line — писать в строку). Выведутся в строчку два целых числа га и гг, курсор на экране перейдет в начало следующей свободной строки и работа программы завершится.
Необходимо строгое соблюдение правил правописания (синтаксиса) программы. В частности, в Паскале однозначно определено назначе ние знаков пунктзгации. Точка с запятой (;) ставится в конце заголов ка программы, в конце раздела описания переменных, после каждого оператора. Перед словом end точку с запятой можно не ставить. За пятая (,) является разделителем элементов во всевозможных списках: список переменных в разделе описания, список вводимых и выводимых величин.
Строгий синтаксис в языке программирования необходим прежде всего для транслятора. Транслятор — это программа, которая испол няется формально. Если, допустим, разделителем в списке переменных должна быть занятая, то любой другой знак будет восприниматься как ошибка. Если точка с запятой является разделителем операторов, то транслятор в качестве оператора воспринимает всю часть текста про граммы от одной точки с запятой до другой. Если Вы забыли поста вить между какими-то двумя операторами, то транслятор будет принимать их за один с неизбежной ошибкой.
О сновное назначение синтаксических правил: придать однозначный смысл языковым конструкциям. Если какая-то кон струкция может трактоваться двусмысленно, значит, в ней неизбежно содержится ошибка. Но лучше не полагаться на интуицию, а выучить правила языка.
Вдальнейшем мы строго опишем синтаксические правила Паскаля,
апока для получения первоначального представления о языке обра тимся еще к нескольким примерам программирования несложных ал горитмов.
“Оттранслируем” алгоритм вычисления факториала (N1) на Паскаль.
алг ФАКТОРИАЛ; |
Program FACTORIAL; |
|||
цел |
N, |
I, F; |
Var N, I, F |
Integer; |
нач |
вводОО ; |
Begin ReadLn(N); |
||
|
F |
1; |
F :« |
1; |
I := |
1; |
|
|
|
I := 1; |
пока |
I |
<= |
N |
|
While I <= N Do |
нц F |
:= |
F |
* |
I; |
Begin F := F * I; |
I |
:= |
I |
+ |
1 |
I := I + 1 |
хц; |
|
|
|
|
End; |
вывод(F) |
|
|
WriteLn(F) |
||
кон. |
|
|
|
|
End. |
Из этого примера, во-первых, видно, как записывается на Паскале оператор цикла с предусловием (цикл-пока):
while <условие выполнения> do Стело цикла>
(while — пока, do — делать). Если тело цикла содержит последователь ность операторов, то говорят, что оно образует составной опера тор, в начале и в конце которого надо писать begin и end. Служеб ные слова begin и end часто называют операторны м и скобками, которые объединяют несколько операторов в один составной. Если же тело цикла — один оператор (не составной), то операторных скобок не требуется. Тогда транслятор считает, что тело цикла кончается на ближайшем знаке
Во-вторых, из примера видно, что в Паскале нет специальных слов для обозначения начала цикла (нц) и конца цикла (кц). На все случаи есть общеупотребимые слова begin и end.
Рассмотрим еще один пример программы: решение квадратного уравнения.
алг КОРНИ; |
d, |
xl, |
х2; |
|
|
вещ а, |
Ъ, |
|
|||
нал |
|
|
|
|
|
повторять |
|
|
|
|
|
вывод(” введите |
а, |
Ъ, |
а^О"); |
||
ввод(а, Ъ, |
с) |
|
|
|
|
до а |
; |
|
|
|
|
d := Ъ2 - 4ас; |
|
|
|
||
если |
d > 0 |
|
+ |
\fd) / |
(2а); |
то |
xl := (-Ъ |
||||
|
х2 := (-Ъ - уД) / (2а); |
||||
иначе |
вывод(х1, |
х2) |
|
||
вывод(”нет вещ. корней”) |
|||||
кв |
|
|
|
|
|
кон. |
|
|
|
|
|
Program |
ROOTS; |
Real; |
|
Var a, |
b, с, |
d, xl, x2 |
|
Begin {ввод данных с контролем} |
|||
Repeat |
|
a O O ’)J |
|
WriteLnCвведите a, b, |
|||
ReadLn(a, |
b, c) |
|
|
Until |
a <> |
0; |
|
{вычисление дискриминанта} |
|||
d : = b * b - 4 * a * c ; |
|
||
If d >= 0 |
{есть корни} |
|
|
Then Begin |
/ (2*a); |
||
xl |
:= (-b + sqrt(d)) |
x2 :*= (-b - sqrt(d)) / (2*a); WriteLn(,xl=>, xl, ,x2=\ x2) ;
End
Else WriteLn(,HeT вещ. корней1) End.
В этой программе, по сравнению с предыдущими, появилось много новых элементов. Имя вещественного типа в Паскале — real.
Цикл с постусловием (цикл-до) программируется оператором
repeat <тело цикла> until <условие окончания>
Repeat — повторять, until — до. Тело цикла может быть как одиноч ным, тая и составным оператором, однако употребления begin и end не требуется, поскольку сами слова repeat и until выполняют роль операторных скобок.
Знак “не равно” в Паскале пишется так: “< > ” , знак “больше или равно” : “> = ”
Правила записи арифметических выражений мы подробно рассмо трим немного позже. В формулах вычисления корней используется стандартная функция квадратного корня (у/х), которая в Паскале за писывается так: sqrt(x). Порядок выполнения операций в выражении определяется скобками и старшинством операций. Старшинство опе раций такое же, как и в алгебре. Операции одинакового старшинства выполняются в порядке их записи (слева направо).
Ветвление в Паскале программируется с помощью условного оператора, который имеет следующую форму:
if <условне> then Соператор 1> else Соператор 2>
Здесь if — если, then — то, else — иначе. Операторы 1 и 2 могут быть как простыми, так и составными. Составной оператор следует заключать в операторные скобки begin и end.
Так же, как и в Алгоритмическом языке, возможно использование неполной формы условного оператора:
if < условно then < оператор>
Характерной чертой данной программы является использование в тексте комментариев. Комментарий — это любая последовательность символов, заключенных в фигурные скобки: {...}. Можно употре блять также следующие ограничители комментариев: (*.. .*). Коммен тарий не определяет никаких действий программы и является лишь по яснительным текстом. Он может присутствовать в любом месте про граммы, где можно поставить пробел. Программист пишет коммента рии не для компьютера, а для себя. Комментарий придает тексту про граммы большую ясность. Хорошо откомментированные программы