Процедуры: с параметрами значениями, с параметрами переменными.
Переменные:
1) локальные (объявляются внутри блока)
· формальные(параметры заголовка процедуры);
· вспомогательные (переменные в разделе VAR процедуры, неизвестны основной программе);
2) глобальные (объявляются в разделе VAR основной программы, могут фигурировать в основной программе и теле процедуры).
Одна и та же переменная может быть локальной и глобальной, т.к. компилятор отводит отдельные ячейки памяти для каждой переменной
Процедуры с параметрами-значениями.
Под параметром понимается имя переменной, которое является входной для процедуры. При его описании не требуется служебное слово VAR. Параметры-значения при вызове процедуры принимают из основной программы свои значения. При обращении к процедуре с параметрами значениями в основной программе могут служить имена переменных и конкретные значения выражения. При обращении необходимо соблюдать соответствия списков параметров, а также их типов.
Процедуры с параметрами-переменными.
В отличие от процедур с параметрами значениями, процедуры с параметрами-переменными не имеют входных параметров. Из основной программы не передаются значения переменных в процедурах, за исключением глобальных переменных. Параметрам-переменным должно предшествовать слово VAR столько раз, сколько различных типов представлено в выходных данных.
PROCEDURE PRIMER (VAR a,b,c:integer; VAR m:CHAR; VAR i,j:real);
При обращении к процедурам с параметрами-переменными фактическими параметрами являются имена переменных, которые описаны в основной программе.
Program pr1;
Uses crt;
Var a,b,s:real;
Procedure summa (var x,y:real; var z:real); {x,y – параметры значения z - переменные}
Begin
z:=x+y;
end;
begin
clrscr;
writeln (‘Vvedite a,b’);
readln (a,b);
summa (a,b,s);
writeln (‘summa chisel’, a:3:1, ‘and’, b:3:1, ‘=’, s:3:1);
readln;
end.
11.Паскаль имеет набор стандартных функций. Однако он граничен. Но пользователь может расширить список функций, добавив свои. Список стандартных функций:
ACOS | вычисляет арккосинус |
ASIN | вычисляет арксинус |
ATAN | вычисляет арктангенс |
ATN2 | вычисляет арктангенс с учетом квадратов |
COS | вычисляет косинус угла |
COT | возвращает котангенс угла |
EXP | возвращает экспоненту |
FLOOR | выполняет округление вниз |
LOG | вычисляет натуральный логарифм |
LOG10 | вычисляет десятичный логарифм |
PI | возвращает значение "пи" |
POWER | возводит число в степень |
RADIANS | преобразует значение угла из градуса в радианы |
RAND | возвращат случайное число |
ROUND | выполняет округление с заданной точностью |
SIN | вычисляет синус угла |
SQRT | извлекает квадратный корень |
TAN | возвращает тангенс угла |
Подпрограмма-функция предназначена для вычисления какого-либо параметра.
FUNCTION имя (список параметров:тип):тип;
FUNCTION имя:тип;
Тип результата есть тип значения функции. Список параметров такой же как и у процедуры, только здесь все параметры-аргументы. Имя переменной, которая хранит значение функции совпадает с именем самой функции. Другой особенностью написания функции является наличие в нем хотя бы одного оператора присваивания, в левой части которого стоит имя определяемой функции, а в правой – выражение для вычисления результата функции. Функция вызывается только с помощью некоторого выражения. Для того, чтобы обратиться к функции необходимо использовать ее имя со списком фактических параметров в каком-либо выражении, тип которого совпадает с типом значения функции. Таким образом, функции имеет ряд отличий от процедур. Первое отличие функции в ее заголовке. Он состоит из слова function, за которым следует имя функции, далее в круглых скобках - список формальных параметров, затем через двоеточие записывается тип функции - тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного типа string. Второе отличие заключается в том, что в теле функции хотя бы раз имени функции должно быть присвоено значение.
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.
12.Функция – это подпрограмма, предназначенная для вычисления какого-либо параметра.
Рекурсия – это такой способ организации вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе. Эта возможность связана с тем, что при каждом новом обращении к подпрограмме параметры, которые она использует, заносятся в стек, причем параметры предыдущего обращения также сохраняются.
Термин рекуррентные соотношения связан с американским научным стилем и определяет математическое задание функции с помощью рекурсии. При каждом обращении к рекурсивной функции в стеке выделяется место для: адреса возврата в вызывающую функцию и вершины стека вызывающей функции (4 байта), списка фактических параметров (может быть пустым), локальных переменных рекурсивной функции (могут отсутствовать).
Наличие в задаче рекуррентного соотношения позволяет использовать рекурсию. Например, арифметическая прогрессия – последовательность чисел, в которой разность между последующими и предыдущими членами остается неизменной и называется разностью прогрессии. То есть каждый следующий член прогрессии равен предыдущему, увеличенному на разность прогрессии.
13. Массивы – объединение фиксированного числа однотипных величин. Они относятся к структуре прямого доступа, это достигается путем индексации его элементов. Массивы: одномерные и двумерные.
Двумерные массивы.
Двумерный массив представляет собой таблицу, он является матрицей. Потому для определения позиции элемента в таком массиве необходимы два индекса. Двумерные массивы описывают путем указания границ изменения индексов строк и столбцов. Объявление двумерного массива похоже на объявление одномерного, отличается лишь индексация.
VAR M:array [1..20, 1..10] of REAL; {20 строк, 10 столбцов}
M[10,5] - элемент 10 строки, 5 столбца
M[i,j] – общее обозначение
Массив принадлежит к структурным величинам.
TYPE- раздел типов, после пишется имя вводимого типа, а затем после знака «=» определяется этот тип.
TYPE massiv=array [1..20,1..10] of REAL;
VAR M:massiv;
CONST – раздел констант, используется для задания числа строк и столбцов.
CONST m=20; n=10;
VAR M:array [1..m, 1..n] of REAL;
При работе с двумерными массивами принято организовывать ввод и вывод массива с помощью соответствующих процедур. Если ввод и вывод осуществляется с помощью процедур, то должен быть определен тип массива с помощью служебного слова TYPE, т.к. в самой процедуре объявлять массив служебными словами запрещено!
Процедура ввода:
PROCEDURE VVODMAS(VAR M:massiv);
BEGIN
FOR i:=1 to m DO
FOR j:=1 to n DO
M [i,j]:=-50+RANDOM(100);
END;
Процедура вывода:
PROCEDURE VIVODMAS(VAR M:massiv);
BEGIN
FOR i:=1 to m DO
BEGIN
FOR j:=1 to n DO
WRITELN (M[i,j]:5];
WRITELN;
END;
END;
14.Массивы – объединение фиксированного числа однотипных величин. Они относятся к структуре прямого доступа, это достигается путем индексации его элементов. Массивы: одномерные и двумерные.
Одномерные массивы.
Индекс позволяет обратиться к любому элементу прямым путем -->каждый элемент массива характеризуется общим именем и персональным индексом. Массив требует объявления в разделе объявлений.
1)имя массива, общее для всех элементов;
2)тип компонента;
3)указание числа элементов и одновременно указывается чем индексируются элементы;
4)служебное слово, указывающее, что это именно массив.
VAR M:array [тип индекса] of ТИП КОМПОНЕНТЫ;
Нет никаких ограничений для типов компонент (за исключением файла). Для объединенных массивов можно использовать: целые числа, вещественные числа, CHAR, записи, строки и т.д.
Тип той величины, которой индексируют элементы массива, может быть только ординальным! (нельзя !!!REAL).
VAR M:array [1..10] of REAL;
N:array [‘A’..’z’] of INTEGER;
Раздел типов TYPE служит для формирования своих структурных типов.
TYPE mas=array [1..10] of REAL;
VAR M:mas;
Обработка массивов.
Программы работы с массивами имеют следующую структуру:
1) задание самого массива;
2) обработка массива;
3) вывод нового результирующего массива.
Любая программа начинается с заполнения массива. Элемент массива является просто переменной. Способы задания:
1) read (M[i]);
2) M[i]:=(2*3-15)/3
3) Заполнение случайными числами
· Randomize – процедура датчиков случайных чисел, сразу за BEGIN
BEGIN
RANDOMIZE;
· Random(N) – функция одного элемента типа INTEGER, порождает целые числа от 0 до N-1.
RANDOM(101)+1;
FOR i:=1 to N DO
M[i]:=-50+RANDOM(101);
Вывод элементов массива на экран:
· в столбец WRITELN(M[i]);