Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

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 < оператор>

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