Операторы языка Project Pascal

Автор: Пользователь скрыл имя, 03 Марта 2013 в 20:09, контрольная работа

Описание работы

Главную часть программы на языке Object Pascal составляет раздел операторов, в котором реализуется алгоритм решения поставленной задачи, т.е. именно в нем с предварительно описанными переменными, константами, значениями функций и т.п. выполняются определенные действия, позволяющие получить результат, ради которого создается программа.

Содержание

Введение

1. Операции и выражения

2. Операторы языка Object Pascal

3. Организация ввода-вывода

Выводы

Работа содержит 1 файл

project pascal.docx

— 170.45 Кб (Скачать)
  •  
    Break – завершает выполнение операторов цикла, в теле которых располагается;
  •  
    Continue – переход на новую итерацию цикла того оператора, в теле которого находится;
  •  
    Exit – немедленный выход из текущего блока.

^

Пустой оператор

 
Пустой оператор не содержит никаких символов и не выполняет никаких действий. Он может быть расположен в любом месте программы. Пустой оператор может быть помечен меткой. Чаще всего пустой оператор используется для организации перехода из середины программы или составного оператора в конец, например: 
 
begin 
 
goto Metka; // Переход в конец блока 
 
... 
 
Metka: // Пустой оператор помечен меткой 
 
end: 
^

2.2. Структурные операторы

 
Структурные операторы включают в себя другие операторы и управляют последовательностью их выполнения. К ним относятся: 
 
1) составной оператор; 
 
2) условные операторы: 
 
- оператор альтернативы if-then-else; 
 
- оператор выбора case-else;  
 
3) операторы цикла: 
 
- оператор цикла с предусловием while-do; 
 
- оператор цикла с постусловием repeat-until; 
 
- оператор цикла со счетчиком for-to-do (for-downto-do); 
 
4) оператор присоединения with. 
^

Составной оператор

 
Составной оператор объединяет группу операторов в единое целое, после чего они могут считаться одним оператором. Составной оператор состоит из последовательности объединяемых операторов, разделяемых точкой с запятой, которые располагаются между ключевыми словами begin и end, называемыми операторными скобками. 
 
Формат составного оператора: 
 
Begin 
 
Оператор_1; 
 
... 
 
Оператор_n 
 
end; 
 
Составной оператор используется в тех случаях, когда синтаксис языка допускает в определенной точке программы указание только одного оператора, а по алгоритму в этом месте необходимо выполнить группу операторов. Как правило, составной оператор используется совместно с условными операторами и операторами цикла. 
 
Пример составного оператора: 
 
While A<>0 do  
 
begin 
 
Writeln('Введите число'); 
 
Readln(А); 
 
Writeln('Квадрат числа',А,' = ',A*A) 
 
end; 
^

Условные операторы

 
Условные операторы обеспечивают выполнение или невыполнение некоторого оператора, группы операторов или блока в зависимости от заданных условий. 
 
В ^ Object Pascal включены два условных оператора – if (оператор условия) и case (оператор выбора или варианта), каждый из которых может быть записан в двух формах: полной и неполной. 
 
Полный формат оператора: 
 
if Условие then Оператор_1 else Оператор_2; 
 
Неполный формат: 
 
if Условие then Оператор; 
 
П ри выполнении условного оператора сначала вычисляется ^ Условие, результат которого может принимать только булевский тип, а затем, в зависимости от значения результата выполняется или Оператор_1, стоящий после ключевого слова then (если результат условия равен True), или Оператор_2, стоящий после ключевого слова else (если результат условия равен False) (рис. 2.1). 
 
В случае, когда оператор if записан в неполной форме, при значении результата условия False управление передается оператору, следующему непосредственно после оператора if, а Оператор, стоящий за ключевым словом then, пропускается. 
 
Условие может быть простым или сложным. Сложные условия образуются с помощью логических операций not, and, or, xor. 
 
Так как операторы в программе разделяются символом «;», то внутри любого структурного оператора этот разделитель встречаться не должен, иначе все, что стоит после него, будет считаться уже другим оператором. 
 
Пример условного оператора: 
 
Если переменная t обозначает тип соединения сопротивлений в электрической цепи (t=1 соответствует последовательному соединению, t=2 — параллельному), a r1 и r2 — величины сопротивлений, то приведенная ниже инструкция if осуществляет выбор формулы, по которой будет выполнен расчет: 
 
if t=l then 
 
z:=r1+r2; Здесь ошибка!!! Точки с запятой не должно быть!¬ 
 
else 
 
z:=(r1+r2)/(r1*r2);  
 
Точка с запятой, стоящая перед ключевым словом else заканчивает текст оператора if. А это приводит к синтаксической ошибке, поскольку оператора, начинающегося с ключевого слова else не существует. 
 
По синтаксису после ключевых слов then и else может стоять всего лишь один оператор. Если же в какой-либо из ветвей альтернативы (then или else) или сразу в обоих требуется выполнить несколько операторов, то следует воспользоваться составным оператором, позволяющим интерпретировать группу операторов как один оператор. 
 
Пример условного оператора, включающего составные операторы: 
 
A:=2; B:=8: C:=0; 
 
if A<B then  
 
begin 
 
C:=A+B; 
 
C:=C+12; 
 
writeln('C=',C:2) 
 
end 
 
else 
 
begin 
 
C:=B-A; 
 
C:=C*12; 
 
writeln('C=',C:2) 
 
end; 
 
Допускается вложение условных операторов друг в друга:  
 
if Условие_1 then 
 
if Условие_2 then 
 
Оператор_1 
 
else Оператор_2; 
 
При вложенности операторов соблюдается правило: каждое else соответствует тому then, которое непосредственно ему предшествует, например, 
 
if A<20 then 
 
if A>=15 then 
 
writeln('A v diapazone 15-20') 
 
else 
 
writeln('A v diapazone 10-14'); 
 
Оператор выбора case является обобщением условного оператора и позволяет сделать выбор из произвольного числа имеющихся вариантов. 
 
Формат оператора выбора в полной форме: 
 
case Селектор of 
 
Список_1: Оператор_1; 
 
Список_2: Оператор_2; 
 
... 
 
Список_N: Оператор_N 
 
else Оператор_Е 
 
end; 
 
где Селектор – выражение, значение которого определяет дальнейший ход выполнения программы (т.е. последовательность инструкций, которая будет выполнена). Значением селектора может быть только порядковый тип, общее количество элементов которого не превышает 65535. Селектор может иметь любой простой тип, кроме вещественного. Запрещено также использовать в качестве селектора строковый тип; 
 
Список_i – список констант. Список констант выбора может состоять из произвольного количества значений или диапазонов, отделяемых друг от друга запятыми. Тип констант должен совпадать с типом селектора. 
 
Выполняется оператор case следующим образом (рис. 2.2):

  •  
    Сначала вычисляется значение выражения-селектора.
  •  
    Значение выражения-селектора последовательно сравнивается с константами из списков констант.
  •  
    Если значение выражения совпадает с константой из списка, то выполняется соответствующая этому списку группа операторов. На этом выполнение инструкции саsе завершается.
  •  
    Если значение выражения-селектора не совпадает ни с одной константой из всех списков, то выполняется последовательностьоператоров, следующая за else.

 
С  
интаксис case позволяет не писать else и соответствующую последовательность операторов. В этом случае, если значение выражения не совпадает ни с одной константой из всех списков, то выполняется следующий за case оператор программы. 
 
Примеры использования операторов выбора: 
 
var Symbol: Char; 
 
... 
 
case Symbol of // Селектор интервального типа 
 
'0'..'9': writeln('Eto cifra'); 
 
'a'..'z': writeln('Eto strochnaya bukva'); 
 
'A'..'Z': writeln('Eto propisnaya bukva'); 
 
#10,#13,#26: writeln('Eto upravliauchiy simvol') 
 
else writeln('Eto drygoy simvol') 
 
end; 
var i,z: integer; 
 
... 
 
case i of // Селектор целочисленного типа 
 
1: z:=i+10; 
 
2: z:=i+100; 
 
3: z:=i+1000 
 
end; 
 
var Season: (Winter, Spring, Summer, Autumn); 
 
... 
 
case Season of // Селектор перечисляемого типа 
 
Winter: writeln('Zima'); 
 
Spring: writeln('Vesna'); 
 
Summer: writeln('Leto'); 
 
Autumn: writeln('Osen') 
 
end; 
^

Операторы повторения

 
Алгоритмы решения многих задач  являются циклическими, т.е. для достижения результата определенная последовательность действий должна быть выполнена несколько раз. Например, для того чтобы найти фамилию человека в списке, надо проверить первую фамилию списка, затем вторую, третью и т. д. до тех пор, пока не будет найдена нужная фамилия или не будет достигнут конец списка. 
 
Программа, в которой есть последовательность операций, выполняемых несколько раз, называется циклической, а сама последовательность операций именуется циклом. 
 
Для организации циклов используются операторы повторения. Если количество повторов известно заранее, используется оператор цикла со счетчиком (for), если количество повторов заранее неизвестно, то используется либо оператор цикла с предусловием (while), либо оператор цикла с постусловием (repeat). 
 
^ О ператор цикла с предусловием while используется в том случае, если некоторую последовательность операторов надо выполнить несколько раз, причем необходимое число повторений во время разработки программы неизвестно и может быть определено только во время работы программы. Типичными примерами использования цикла while являются вычисления с заданной точностью, поиск в массиве или в файле. 
 
В общем виде оператор while записывается следующим образом: 
 
while Условие do 
 
begin 
 
Тело_цикла // Многократно выполняемые инструкции 
 
end; 
 
где Условие — выражение логического типа, определяющее условие выполнения инструкций цикла. 
 
Оператор while выполняется следующим образом (рис. 2.3):

  •  
    Сначала вычисляется значение выражения Условие.
  •  
    Если значение выражения Условие равно False (условие не выполняется), то на этом выполнение оператора while завершается.
  •  
    Если значение выражения Условие равно True (условие выполняется), то выполняются расположенные между begin и end инструкции тела цикла. После этого снова проверяется выполнение условия. Если условие выполняется, то инструкции цикла выполняются еще раз. И так до тех пор, пока Условие не станет ложным (False).

 
Чтобы не произошел эффект «зацикливания», т.е. бесконечное выполнение операторов тела цикла, необходимо предусмотреть  в теле цикла определенные действия по изменению параметров, определяющих Условие. 
 
Для того, чтобы инструкции цикла while, которые находятся между begin и end, были выполнены хотя бы один раз, необходимо, чтобы перед выполнением оператора while значение выражения Условие было истинно. 
 
Пример использования оператора цикла с предусловием: 
 
Записать фрагмент программы, вычисляющей сумму . 
 
^ Const 
 
n=20; // Описание константы N 
 
Var 
 
S: Longint; 
 
i: integer; 
 
begin 
 
... 
 
S:=0; // Обнуление суммы 
 
i:=1; // Начальная установка параметра цикла 
 
while i<=n do 
 
begin 
 
S:=S+sqr(i); // Накопление суммы 
 
i:=i+1; // Изменение параметра цикла 
 
end; 
 
... 
 
end. 
 
Оператор цикла с постусловием repeat, как и оператор while, используется в программе в том случае, если необходимо выполнить повторные вычисления (организовать цикл), но число повторений во время разработки программы неизвестно. В общем виде оператор записывается следующим образом: 
 
repeat 
 
Оператор_1; 
 
Оператор_2; 
 
... 
 
Оператор_N 
 
until Условие; 
 
где Условие – выражение булевского типа, определяющее условие завершения цикла. 
 
В отличие от оператора while, оператор repeat не требует использования составного оператора, когда в его теле необходимо записать более одного оператора. 
 
Оператор repeat выполняется следующим образом (рис. 2.4):

  •  
    Сначала выполняются находящиеся между repeat и until инструкции тела цикла.
  •  
    Затем вычисляется значение выражения Условие. Если условие ложно (значение выражения Условие равно False), то инструкции тела цикла выполняются еще раз.
  •  
    Если условие истинно (значение выражения Условие равно True), то выполнение цикла прекращается.

 
Чтобы не попасть в «зацикливание», по крайней мере, один из операторов тела цикла должен влиять на значение ^ Условие. 
 
 
Пример использования оператора цикла с постусловием: 
 
Записать фрагмент программы, вычисляющей факториал числа . 
 
^ Const 
 
n=20; // Описание константы N 
 
Var 
 
P: Longint; 
 
i: integer; 
 
begin 
 
... 
 
P:=1; // Начальному значению произведения присваивается 1 
 
i:=1; // Начальная установка параметра цикла 
 
repeat 
 
Р:=P*i; // Накопление произведения 
 
i:=i+1; // Изменение параметра цикла 
 
until i>n; 
 
... 
 
end. 
 
Оператор цикла со счетчиком for подходит для программирования таких циклических фрагментов, в которых до выполнения цикла известны начальное и конечное значения счетчика повторений цикла. Он может быть представлен в двух форматах: 
 
1) Если параметр цикла наращивает свое значение: 
 
for Счетчик:=Нач_знач to Кон_знач S2 do Тело_цикла; 
 
2) Если параметр цикла уменьшает свое значение: 
 
for Счетчик:= Нач_знач downto Кон_знач do Тело_цикла; 
 
где Счетчик – параметр цикла, определяющий текущий номер повторений инструкций цикла; Нач_знач – выражение, определяющее начальное значение счетчика циклов; Кон_знач – выражение, определяющее конечное значение счетчика циклов. 
 
^ Т  
ело цикла может быть простым или составным оператором. 
 
Количество повторений инструкций цикла можно вычислить по формуле 
 
(Кон_знач — Нач_знач + 1). 
 
Для первой формы оператора for должно выполняться условие Кон_знач >= Нач_знач, а для второй - Нач_знач >= Кон_знач. 
 
Алгоритм, соответствующий инструкции for (для первой формы) представлен на рис. 2.5. Обратите внимание, что если начальное значение счетчика больше конечного значения, то последовательность операторов, определяющих тело цикла, не будет выполнена ни разу. 
 
Кроме того, после каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически. 
 
Переменную-счетчик можно использовать внутри цикла (но ни в коем случае не изменять). 
 
Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла – от начального до конечного. 
 
Параметр цикла, его начальное и конечное значения должны принадлежать к одному и тому же типу данных. При этом допустим любой простой тип, кроме вещественного. Если используются типы группы целые и интервальные, то значение параметра цикла последовательно увеличивается (при for .. to) или уменьшается (при for downto) на 1 при каждом повторе, например: 
 
for i:=10 to 14 do write(i:3); // Результат: 10 11 12 13 14 
 
for i:=14 downto 10 do write(i:3); // Результат: 14 13 12 11 10 
 
Параметром цикла может служить символьная переменная, например: 
 
for Ch:='a' to 'f' do write(Ch:2); // Результат: a b c d e f 
 
for Ch:='f' downto 'a' do write(Ch:2); // Результат: f e d c b a 
 
Параметром цикла может быть и переменная перечисляемого типа, например: 
 
var Sort: (S1,S2,S3); 
 
... 
 
for Sort:=S1 to S3 do ... 
 
Пример использования оператора цикла со счетчиком: 
 
Записать фрагмент программы, вычисляющей сумму и факториал числа . 
 
{Вычисление суммы элементов вектора} 
 
^ Const 
 
n=20; // Описание константы N 
 
Var 
 
... 
 
S,P: Longint; 
 
i: integer; 
 
begin 
 
... 
 
S:=0; // Обнуление суммы 
 
P:=1; // Начальному значению произведения присваивается 1 
 
for i:=1 to n do 
 
begin 
 
S:=S+sqr(i); // Накопление суммы 
 
P:=P*I; // Накопление произведения 
 
end; 
 
... 
 
end. 
 
Отметим отличия и особенности хорошего стиля работы с рассмотренными циклическими операторами (табл. 2.1). 
 
Таблица 2.1. Особенности операторов цикла

 
Цикл с предусловием while 
 
(пока условие истинно)

 
Цикл с постусловием repeat 
 
(до истинности условия)

 
1) До начала цикла должны быть  сделаны начальные установки  переменных, управляющих условием  цикла, для корректного входа  в цикл

 
2) В теле цикла должны присутствовать  операторы, изменяющие переменные  условия так, чтобы цикл через  некоторое число итераций завершился

 
3) Цикл работает пока условие  истинно (пока True)

 
3) Цикл работает пока условие  ложно (пока False)

 
4) Цикл завершается, когда условие  становится ложным (до False)

 
4) Цикл завершается, когда условие  становится истинным (до True)

 
5) Цикл может не выполниться  ни разу, если исходное значение  условия при входе в цикл  равно False

 
5) Цикл обязательно выполняется  как минимум один раз

 
6) Если в теле цикла требуется  более одного оператора, то  надо использовать составной  оператор

 
6) Независимо от количества операторов  в теле цикла использование  составного оператора не требуется

 
^ Цикл со счетчиком for

 
1) Начальная установка переменной  счетчика циклов до заголовка  не требуется

 
2) Изменение в теле цикла значений  переменных, стоящих в заголовке  цикла, не допускается

 
3) Количество итераций цикла  неизменно и точно определяется  значениями нижней и верхней  границ и шага цикла

 
4) Нормальный ход работы цикла  может быть нарушен оператором goto или процедурами Break и Continue

 
5) Цикл может не выполниться  ни разу, если шаг цикла будет  изменять значение счетчика от  нижней границы в направлении,  противоположном верхней границе


 
Операторы цикла могут вкладываться друг в друга, например: 
 
for i:=-10 to 10 do 
 
for j:=100 downto 10 do 
 
for k:=1 to 5 do 
 
A[i,j,k]:=i*j*k;

3. ОРГАНИЗАЦИЯ  ВВОДА-ВЫВОДА

 
Ввод данных – это передача информации от внешнего носителя в оперативную память компьютера для обработки. Вывод – обратный процесс, когда данные передаются после обработки из оперативной памяти на внешний носитель. Внешним носителем может служить клавиатура, магнитный диск, экран монитора и другие устройства. 
 
В языке ^ Object Pascal стандартными средствами общения человека и компьютера являются предопределенные файлы Input и Output, которые по умолчанию являются параметрами программы. Программа получает входные данные из файла Input и помещает результат обработки в файл Output. Стандартно файлу Input назначена клавиатура, а файлу Output – экран монитора. 
 
Для выполнения операций ввода-вывода служат четыре предопределенные процедуры: read, readln, write и writeln.  
 
Процедура чтения read обеспечивает ввод числовых данных, символов, строк и т.д. для последующей их обработки программой. Формат ее вызова следующий: 
 
read(X1, X2, ... , Xn); 
 
read(FV, X1, X2, ... , Xn); 
 
где X1, X2, ... , Xn – переменные допустимых типов данных; 
 
FV – переменная, связанная с файлом, откуда будет выполняться чтение. 
 
Конкретные вводимые значения X1, X2, ... , Xn набираются минимум через один пробел на клавиатуре и отображаются на экране. После набора данных для одного оператора read нажимается клавиша ENTER. Значения переменных должны вводиться в строгом соответствии с синтаксисом языка. Если соответствие нарушено (например, Х1 имеет тип integer, a при вводе набирается значение типа real), то возникают ошибки ввода-вывода  
 
Пример ввода данных с клавиатуры: 
 
Var 
 
I: real; 
 
J: integer; 
 
K: char; 
 
Begin 
 
read(I,J,К); 
 
Первый вариант ввода: Второй вариант ввода: 
 
235.98 100 'G' {нормальный ввод} 'G' 100 235.98 {ошибочный ввод –  
 
нарушение типов данных} 
 
Если в программе имеется несколько процедур read, данные для них вводятся потоком, т.е. после считывания значений переменных для одной процедуры read данные для следующей процедуры read набираются в той же строке, что и для предыдущей до окончания строки, затем происходит переход на следующую строку. 
 
Процедуру read можно использовать для организации пауз произвольной длины при выполнении программы. Для этого достаточно записать: 
 
read(Kbd,Ch); // Kbd - имя стандартного файла клавиатуры; 
 
// Ch - символьная переменная 
 
Программа продолжит работу только после того, как будет нажата любая клавиша на клавиатуре. Введенный символ на экране не отобразится. 
 
Процедура чтения readln аналогична процедуре read, единственное отличие заключается в том, что после считывания последнего в списке значения для одного оператора readln данные для следующего оператора readln будут считываться с начала новой строки, например, при выполнении следующей последовательности операторов: 
 
readln(A,B); 
 
Sum1:=А+В; 
 
readln(С,D); 
 
Sum2:=С+D; 
 
после набора на клавиатуре значений для А и В курсор автоматически перейдет на новую строку, где будут набираться данные для С и D: 
 
18758 34 [^ Enter] 
 
2.62E-02 1.54Е+01 [Enter] 
 
Процедура записи write производит вывод числовых данных, символов, строк и булевских значений. Формат ее вызова следующий: 
 
write(Y1, Y2, ..., Yn); 
 
write(FV, Y1, Y2, ..., Yn); 
 
где Y1, Y2, ..., Yn – выражения типа integer, real, char, boolean и т.п.; 
 
FV – имя файла, куда производится вывод (для вывода на принтер значение файловой переменной ^ FV равно Lst). 
 
Пример вывода данных: 
 
write(234); // Вывод на экран выражения, представленного значением 
 
write(A+B-Z); // Вывод на экран результата выражения 
 
write(Lst,Suma,Argumentl,Argument2); // Вывод на печать значений переменных 
 
write(Lst,'Результат вычислений = ',Rezalt); // Вывод на печать 
 
После записи каждого выражения можно задать целочисленное выражение, определяющее ширину поля вывода. 
 
Введем следующие обозначения:

Информация о работе Операторы языка Project Pascal