- •Структура программы на алгоритмическом языке Паскаль: Раздел описаний, раздел операторов, понятие «Блок».
- •Символы языка: цифры, буквы, знаки арифметических операций, знаки операций отношения, разделители, скобки, числа, имена.
- •Раздел описаний и последовательность описаний в Паскаль- программе: описание меток, констант, типов, переменных, процедур, функций. Примеры.
- •Понятие блока в Паскаль- программе. Локальные и глобальные описания имен. Области действия описаний. Примеры.
- •Понятие данных в Паскаль- программе. Типы данных: логические, символьные, вещественные, перечисленные типы, тип диапазон, процедурный тип. Их описание. Примеры.
- •Описание массивов. Примеры.
- •Ввод/вывод переменных: скалярного типа, одно- и двумерных массивов. Формат вывода результатов целого и вещественного типов. Примеры.
- •Операторы алгоритмического языка Паскаль: присваивания, перехода, условные, варианта, составной. Примеры.
Операторы алгоритмического языка Паскаль: присваивания, перехода, условные, варианта, составной. Примеры.
Оператором называют специальную совокупность служебных слов, идентификаторов и специальных знаков выполняющих определенные действия. Операторы отделяются друг от друга точкой с запятой ";".
Оператор присваивания
:= - присвоить значение.
Служит для присваивания значений переменным, например:
x:=1; a:=5. 02; b := 32*a+Sin(x); S:= 'Иван Иванович';
Оператор перехода
Оператор перехода goto вызывает передачу управления оператору, которому предшествует метка, указанная в данном операторе перехода.
Begin
…
Goto metka; {переход в конец блока}
…
Metka; {пустой оператор помечен меткой}
End.
При использовании оператора перехода должны соблюдаться следующие правила:
1. Метка, которая указывается в операторе перехода, должна находиться в том же блоке или модуле, что и сам оператор перехода. Другими словами, не допускаются переходы из процедуры или функции или внутрь нее.
2. Переход извне внутрь структурного оператора (то есть переход на более глубокий уровень вложенности) может вызвать ошибку.
Пример:
X:= -y; {предшествующий оператор}
Labe101: {помеченный меткой пустой оператор}
End.
Условный оператор и оператор выбора (варианта)
Обеспечивают выполнение или невыполнение некоторого оператора (в том числе и составного) в зависимости от справедливости проверяемого условия. Эти операторы прерывают естественную линейную последовательность операций, выполняемых по очереди в порядке записи, после чего алгоритм может пойти по одной из двух (или более) возможных ветвей в соответствии с заданным условием. Такая алгоритмическая конструкция называется ветвлением. При обходе несколько шагов алгоритма пропускаются в зависимости от справедливости проверяемого условия.
Составной оператор
Служит для записи в свое тело других операторов, последовательность которых рассматривается в данном случае как один оператор. Этим оператором начинается и заканчивается раздел выполнения основной программы, подпрограммы, функции. После последнего оператора END основной программы ставится точка.
Begin
Оператор 1;
Оператор 2;
…
Оператор N;
End.
Операторы цикла: цикл с параметром, требования к типу параметра цикла, начальному и предельному значениям параметра цикла, вложенные циклы с параметром, циклы с предусловием и постусловием, условия их выполнения. Примеры.
Цикл с параметром:
Служит для компактного задания рода вычислительных процессов. Чаще всего используется следующий вид: For V:= E1 to E2 do S, где for (для), to (увеличиваясь к) и do (выполнять, делать) – служебные слова, V – переменная порядкового типа, называемая параметром цикла, Е1 и Е2 – выражения того же типа, что и параметр цикла, S – оператор, который выполняется многократно в цикле, называемый телом цикла.
После do должен стоять один оператор, если необходимо выполнить несколько действий, то они должны быть объединены в один составной оператор путем заключения в операторные скобки.
Этот оператор предусматривает присваивание параметру цикла V последовательных значений от начального значения, равного значению выражения Е1, до конечного значения, равного значению выражения Е2, т.е. при каждом повторении выполняется оператор присваивания V:= , и выполнение оператора S при каждом значении параметра цикла V. При этом значения выражений Е1 и Е2 вычисляются один раз, при входе в оператор цикла, а значение параметра цикла V не должно изменяться в результате выполнения оператора S. Если заданное конечное значение меньше начального значения (что допустимо), то оператор S не выполняется ни разу.
Считается, что при нормальном завершении выполнения оператора цикла значение параметра цикла не определено.
С использованием этого оператора алгоритм вычисления суммы первых n членов гармонического ряда может быть задан следующим образом: Readln (n);
Y:= 0;
For i:= 1 to n do y:= y+1/i; В некоторых случаях бывает удобно, чтобы параметр цикла принимал последовательные, но не возрастающие, а убывающие значения. Для таких случаев в Паскале предусмотрен оператор цикла с параметром: For V:= E1 downto E2 do S, где downto (уменьшаясь к) – служебное слово, а все остальные слова и выражения имеют прежний смысл.
Изменение параметра цикла от большего значения к меньшему происходит при выполнении присваивания V:=pred( V). Заметим, что начальное значение может быть меньше конечного значения. В этом случае оператор S не выполнится ни разу. Значение параметра цикла по завершении выполнения такого цикла так же считается неопределенным.
Для обоих вариантов записи цикла с параметром справедливо: если начальное и конечное значения равны, то тело цикла (оператор S) выполнится один раз.
Параметр цикла может и не использоваться в теле цикла, так что основное его назначение – это управление числом повторений цикла. Например, значение y= x n, где n>=0 – целое, можно вычислить по следующему алгоритму: предварительно положить y=1, а затем n раз домножить это значение на x: Readln(n);
Readln(x);
Y:= 1;
For i:= 1 to n do y:= y*x; Параметр цикла i служит лишь для того, чтобы тело цикла (оператор y:= y* x) выполнилось нужное число раз. Пример:
Определить индекс первого отрицательного элемента в массиве.
Type Ar = array[1..100] of real;
Var i,k,n : byte;
X : Ar;
Begin
Ввод n, X
k:=0;
For i:=1 to n do
If x[i]<0 then
Begin
k:=i; i:=n+1
End;
Writeln('k=',k);
Вложенные циклы: Оператор, который выполняется в цикле, сам может быть циклом. Это относится ко всем видам циклов. В результате мы получаем вложенные циклы. Механизм работы вложенных циклов удобнее всего рассмотреть на примере вложенных циклов с параметром. Пусть нам нужно описать работу электронных часов, начиная с момента времени 0 ч, 0 мин, 0 сек. Значение минут станет равным 1 только после того, как секунды «пробегут» все последовательные значения от 0 до 59. Часы изменят свое значение на 1 только после того, как минуты «пробегут» все последовательные значения от 0 до 59. Таким образом, вывод всех значений времени от начала суток до конца суток может быть представлен следующим фрагментом программы:
For h:=0 to 2 do
For m:=0 to 5 do
For s:=0 to 3 do
Writeln(h,’:’,m,’:’,s);
Ц
иклы
с предусловием и постусловием:
Цикл
с предусловием:
Цикл
с предусловием выполняется до тех пор,
пока условие выполнения не станет
ложным, и продолжается, если условие
истинно.
While <условие выполнения>
Do <оператор>;
Требования:
Стоящий после do выполняется, если выражение логического типа равняется true. Если значение выражение логического типа это false, то оператор, стоящий после do, пропускается и выполняется оператор, стоящий за «;».
Оператор, стоящий после do, может не выполняться ни разу.
Если необходимо выполнение более 1 оператора, то создается составной оператор.
Среди операторов, выполняющихся в цикле, должен быть хотя бы 1 оператор присваивания, который изменяет значение переменной, входящей в выражение логического типа.
Пример:
Program test1;
Var z:Integer;
Begin
z:=10;
Whilez>0 Do
z:=x-3;
WriteLn(z);
End.
Цикл с постусловием:
Условие выполнения проверяется после шага цикла. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.
Repeat
<оператор>;
<оператор>;
…
<оператор>;
Until <условие завершения>;
Пример:
Program test2;
Var b:Real;
Begin
b:=100;
Repeat b:=b/2;
Until b<10;
Writeln(b:0:2);
End.
Описание процедур и функций: формальные параметры процедур и функций, виды и типы формальных параметров, свойства параметров значений и параметров переменных, описание формальных параметров массивов, параметров процедур и параметров функций, локальные и глобальные имена в процедурах, их описание и область существования. Примеры.
Встроенные (стандартные) процедуры и функции являются частью языка и могут вызываться по имени без предварительного описания. Процедуры и функции пользователя пишутся самим программистом в соответствии с синтаксисом языка в разделе описаний процедур и функций. Их вызов для последующего выполнения записывается обычно в разделе операторов. Процедура- это независимая именованная часть программы, которую после однократного описания можно многократно вызывать по имени из последующих частей программы для выполнения определенных действия. Процедура не может выступать как операнд в выражении. Для процедур и функций наличие заголовка обязательно. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра:
Procedure ИмяПроцедуры (Формальные параметры);
Пример:
Заголовок процедуры без формальных параметров
Procedure horline;
Процедура с формальными параметрами:
Procedure horline (len:integer; s:chsr); {len, s- формальные параметры}
Имя процедуры должно быть уникально, т.е. его нельзя использовать повторно для именования других процедур. Тело процедуры аналогично обычное программе.
Формальные параметры - это наименования переменных, через которые передается информация из основной программы или другой процедуры в процедуру, либо из процедуры в основную программу.
Для того, чтобы "запустить" процедуру в работу, необходимо к ней обратиться.
Вызов процедуры N производится оператором вида:
N(P1,P2,P3,...);
где: N - имя процедуры, P1,P2,P3,... - фактические параметры.
Список фактических параметров может отсутствовать. Соответствие между фактическими и формальными параметрами должно быть следующим: количество фактических параметров должно быть равно количеству формальных параметров; соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу. Соответствующие параметры не обязательно должны быть одинаково обозначены.
Параметры процедур могут быть двух видов: параметры-значения, параметры-переменные.
Виды формальных параметров
Формальный параметр подпрограммы бывает одного из следующих трех видов:
In Формальный параметр
— константа, разрешается только чтение значения соответствующего фактического параметра;
— переменная, разрешается как чтение, так и изменение значения соответствующего фактического параметра.
Out Формальный параметр
— переменная, разрешается изменение значения соответствующего фактического параметра. Допускается чтение границ и дискриминантов формального параметра и его подкомпонент; никакое другое чтение не допускается.
Тип формальных параметров может быть любым, но должен указываться только идентификатором (именем типа). Таким образом, имя типа формального параметра - массива должно быть задано предварительно в операторе Type, например: Type M= array[1..100]of real; Затем тип массива может указываться в заголовке процедуры, например: Procedure Name_P(p: M); Тип формальных параметров описывается только в заголовке процедуры. Список формальных параметров может отсутствовать, например: процедура Randomize; не имеет параметров.
Если в результате выполнения нескольких операторов получается одно значение переменной, то эти операторы можно включить в описание функции. Например, функция Sin(x); возвращает значение, которое присваивается переменной Y:=sin(x);
Свойства параметров значений
Параметры-значения используются только для передачи исходных данных из основной программы в процедуру или функцию.
Procedure horline (len:integer; s:chsr); {len, s- формальные параметры-значения}
Если формальный параметр объявлен как параметр-значение, то фактическим параметром может быть произвольное выражение. В процессе выполнения подпрограммы формальные параметры могут изменяться, но это никак не отразится на соответствующих фактических параметрах-переменных, которые сохранят те значения, которые имели до вызова подпрограммы, т.к. меняются не они, а их копия. Поэтому параметры-значения нельзя использовать для передачи результатов из подпрограммы в основную программу.
Для передачи в подпрограмму массива необходимо предварительно описать его тип
Const mmax=5; nmax=5 {}
Type massiv = array [1..mmax, 1..nmax] of real;
Procedure input_array (m,n: integer; var mas: massiv);
…
Свойства параметров- переменных
В списке формальных параметров они перечисляются после зарезервированного слова Var с указанием типа.
Procedure degree (x:real; n:byte; Var res: real); {x,n- параметры-значения, res- параметр-переменная}
Если формальный параметр определен как параметр-переменная, то при вызове процедуры ей передается сама переменная (адрес переменной в памяти) и изменение параметра-переменной приводит к изменению фактического параметра вызывающей программе.
Описание формальных параметров массивов
При описании массива указывают его имя, размерность и диапазон изменения каждого индекса, тип входящих элементов.
В общем виде массив описывается так:
<имя массива>: array [диапазон индексов массива] of <тип элементов>
Можно описать массив-константу, тип данных массив или переменную-массив, например:
const mas_const=(2.3, 4, 6.4, −2, −3.7); {постоянный массив из пяти вещественных элементов}
var
A : array[1..10] of real; {одномерный массив-переменная из десяти вещественных элементов}
B : array[0..50,0..20] of char; {двумерный массив-переменная, размером 51´21, из символьных элементов}
C : array[-3..4] of boolean; {одномерный массив-переменная из восьми элементов логического типа}
type norm_mas=array[1..10,1..10] of integer; {описание типа данных пользователя – массив 10´10 из целых чисел}
var A1, A2 : norm_mas; {двумерные переменные-массивы типа norm_mas}
Над массивами целиком определена операция присваивания, например, выражение вида
A1:=A2
означает, что всем элементам массива A1 присвоены значения элементов A2. Все остальные операции осуществляются над элементами массивов. Обратиться в программе к конкретному элементу массива можно
<имя массива> [<номер элемента>]
Обращение к элементу одномерного массива A:
A[i] − i-тый элемент массива,
A[1] − первый элемент массива.
Обращение в программе к элементу двумерного массива B:
B[i, j] − элемент, стоящий на пересечении i-ой строки и j-ого столбца,
B[1, 5] − элемент, стоящий пятым в первой строке,
B[3, j] − элемент третьей строки.
Описание параметров процедур и функций
Формат процедуры имеет вид:
procedure ИмяПроцедуры (формальные параметры);
{раздел описаний процедуры}
begin
{исполняемая часть процедуры}
end;
Формат описания функции:
function ИмяФункции (формальные параметры): тип результата;
{раздел описаний функции}
begin
{исполняемая часть функции}
end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var ИмяПраметра: ИмяТипа
и отделяются друг от друга точкой с запятой. Ключевое слово Var может отсутствовать. Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
ИмяПроцедуры (список фактических параметров);
Локальные и глобальные имена в процедурах
Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В частности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан. Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков. Основные правила работы с глобальными и локальными именами можно сформулировать так: Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен. Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти. Глобальные имена хранятся в области памяти, называемой сегментом данных программы. Они создаются на этапе компиляции и действительны на все время работы программы. В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
Пример:
Var a: integer; function sum (x, y: integer): integer; var b: integer; begin a:= x-y; {a - глобальная переменная существует во всей программе} b:= x*y; {b- локальная, она существует только в этой функции} sum:= x+y; end; begin a:= sum(2, 2); {a- глобальная} b:= 5; {b существует только в подпрограмме} end.
Инициирование процедур и функций: фактические параметры операторов процедур и указателей функций, их свойства, способы задания фактических параметров: числа, переменные, выражения, процедуры и функции, переменные процедурного типа.
Подпрограмма - автономная часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы. Использование подпрограмм позволяет реализовать один из самых современных методов программирования - структурное программирование. В языке Паскаль существует два вида подпрограмм: процедура (PROCEDURE ) и функция ( FUNCTION ). Процедуры и функции объявляются в разделе описания за разделом переменных. Параметры, записываемые в обращении к подпрограммам, называются фактическими; параметры, указанные в описании подпрограмм - формальными. Фактические параметры должны соответствовать формальным по количеству, порядку следования и типу. Параметры, объявленные в основной (главной) программе, действуют в любой подпрограмме и называются глобальными. Параметры, объявленные в подпрограмме, действуют только в этой подпрограмме и называются локальными. Процедуры В языке Паскаль существует два вида процедур: процедуры с параметрами и без параметров. Обращение к процедуре осуществляется по имени процедуры, за которым могут быть указаны фактические параметры. Все формальные параметры являются локальными для данной процедуры и глобальными для каждой процедуры в ней. При вызове процедуры устанавливается взаимно однозначное соответствие между фактическими и формальными параметрами, затем управление передается процедуре. После выполнения процедуры управление передается следующему, после вызова процедуры, оператору вызывающей программы. Пример 1. Процедура без параметров, которая печатает строку из 60 звездочек. procedure pr; var i : integer ; begin for i :=1 to 60 do write (‘ * '); writeln; end. Пример 2. Процедура c параметрами. Даны 3 различных массива целых чисел (размер каждого не превышает 15). В каждом массиве найти сумму элементов и среднеарифметическое значение. program proc; var i , n , sum: integer; sr : real; procedure work (r:integer; var s:integer; var s1:real); {процедура work} var mas : array [1..15] of integer ; { объявление массива мas} j : integer; begin s:=0; for j:=1 to r do begin {ввод элементов массива mas} write(' Vvedite element - ', j,': ') ; read (mas[j]); s:=s+mas [j]; end; s1:=s/r; end; begin { главная программа} for i:=1 to 3 do begin write ('Vvedite razmer ',i, ' masiva: '); readln(n); work (n, sum, sr); {вызов процедуры work} writeln ('Summa elementov = ',sum); writeln ('Srednearifmeticheskoe = ',sr:4:1); end; readln; end.
Результат работы программы: В программе трижды вызывается процедура work, в которой формальные переменные r, s, s1 заменяются фактическими n, sum, sr. Процедура выполняет ввод элементов массива, вычисляет сумму и среднее значение. Переменные s и s1 возвращаются в главную программу, поэтому перед их описанием ставится служебное слово var. Локальные параметры mas, j действуют только в процедуре. Глобальные - i, n, sum, sr доступны во всей программе. Функции
Набор встроенных функций достаточно широк (ABS, SQR, TRUNC и т.д.). Если в программу включается новая, нестандартная функция, то ее необходимо описать в тексте программы, после чего можно обращаться к ней из программы. Обращение к функции осуществляется в правой части оператора присваивания, с указанием имени функции и фактических параметров. Функция может иметь собственные локальные константы, типы, переменные, процедуры и функции. Описание функций в Паскале аналогично описанию процедур. Отличительные особенности функций: - результат выполнения - одно значение, которое присваивается имени функции и передается в основную программу; - имя функции может входить в выражение как операнд.
Пример 3. Написать подпрограмму-функцию степени аx, где a, х – любые числа. Воспользуемся формулой: аx = ex ln a program p2; var f, b, s, t, c, d : real; { глобальные параметры} function stp (a, x : real) : real; var y : real; { локальные параметры} begin y := exp (x * ln ( a)) ; stp:= y;{присвоение имени функции результата вычислений подпр-мы} end; { описание функции закончено } begin {начало основной программы } d:= stp (2.4, 5); {вычисление степеней разных чисел и переменных } writein (d, stp (5,3.5)); read (f, b, s, t); c := stp (f, s)+stp (b, t); writeln (c); end.
