- •2 Организация программ линейной структуры. Примеры. Ввод-вывод различных типов данных и матриц.
- •3 Операторы передачи управления. Организация программ разветвляющейся структуры. Примеры.
- •4 Организация программ циклической структуры. Виды циклов. Примеры использования.
- •6 Классификация типов данных. Описание характеристик каждого типа данных. Описание конструкций пользовательских типов данных с помощью синтаксических диаграмм. Примеры использования.
- •7 Файловые типы данных. Работа с файлами различных типов в режиме последовательного доступа. Работа с файлами в режиме прямого доступа. Обработка ошибок.
- •8 Процедуры и функции. Сравнительная характеристика. Примеры использования.
- •9 Структура программ с использованием подпрограмм. Виды параметров. Использование массивов в качестве параметров. Параметр – открытый массив.
- •10 Параметры процедурного типа. Примеры использования.
- •11 Локальные и глобальные переменные. Процедуры без параметров. Побочные эффекты. Примеры.
- •12 Рекурсивные подпрограммы в языке Паскаль: организация, примеры использования. Взаимная рекурсия. Директива forward.
- •13 Задание начальных значений переменным. Примеры использования в программах для различных типов данных, определяемых пользователем.
- •14 Общая характеристика модуля и примеры его использования. Структура программы и структура модуля.
10 Параметры процедурного типа. Примеры использования.
Описатель типов:
Пример использования процедурного типа:
UnitUnit1;
interface
type tf=function(x:Real):Real;
Function Integral(F:tf; a,b:Real; N:Integer):Real;
implementation
Function Integral(F:tf; a,b:Real; N:Integer):Real;
var
i:Integer;
x,h:Real;
begin
Result:=0;
h:=(b-a)/N;
for I := 1 to N do
begin
Result:=Result+f(x);
x:=a+h*(i-1);
end;
end;
end.
Program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Math,
Unit1 in 'Unit1.pas';
function SinX(x:Real):Real;
begin
SinX:=sin(x);
end;
function ExCos(x:Real):Real;
begin
Result:=Exp(-x)*cos(x);
end;
var
a,b:Real;
N:Integer;
BEGIN
Write(Rus('Введите a,b,N: '));
ReadLn(a,b,N);
WriteLn(Rus('Интеграл от Sin(x) на интервале ['),0,',',Pi:0:2,']=',Integral(SinX,0,Pi,N):5:4);
WriteLn(Rus('Интеграл от e^(-x)*cos(x) на интервале ['),a:0:1,',',b:0:1,']=',Integral(ExCos,a,b,N):5:4);
ReadLn;
END.
11 Локальные и глобальные переменные. Процедуры без параметров. Побочные эффекты. Примеры.
В соответствии с правилами языка Паскаль имя любой переменной должно быть предварительно описано, прежде чем оно будет использовано в разделе операторов. Наряду с программой раздел описаний присутствует и в подпрограмме. Одно и то же имя переменной, таким образом, может встретиться в обоих разделах описаний: и в программе, и в подпрограмме.
Переменные, описанные в подпрограмме, являются локальными, их область действия ограничивается только этой подпрограммой. Локальными могут быть и переменные, описанные в основной программе, в том случае, если они вновь описаны в подпрограмме. В этом случае это уже будут совершенно разные переменные.
Переменные, описанные в основной программе, но не описанные еще раз в подпрограмме, называют глобальными. В этом случае они доступны и в подпрограмме, т.е. их область действия не ограничена только основной программой (область их действия глобальна). Использование глобальных переменных позволяет разрабатывать и использовать подпрограммы без параметров. Приведем пример организации программы с подпрограммой без параметров.
Подпрограмма определяет в целочисленной матрице количество элементов, нацело делящихся на заданной число, и формирует из этих чисел одномерный массив.
program proc2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const mm=12; nn=9;
type matr=array[1..mm,1..nn] of integer;
mas=array[1..mm*nn] of integer;
var a:matr; b:mas;
i,j,m,n,k,l:integer;
procedure celdel;
var i,j:integer;
begin
k:=0;
for i:=1 to m do
for j:=1 to n do
if a[i,j] mod l =0 then
begin
k:=k+1;
b[k]:=a[i,j];
end;
end;
begin
writeln(Rus('Введите количество строк и столбцов матрицы m,n'));
readln(m,n);
writeln(Rus('Введите матрицу по строкам'));
for i:=1 to m do
begin
for j:=1 to n do
read(a[i,j]);
readln;
end;
writeln(Rus('Введите делитель'));
readln(l);
celdel;
writeln(Rus('Исходная матрица'));
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
if k=0 then writeln(Rus('Нет элементов, нацело делящихся на '),l)
else
begin
writeln(Rus('Полученный массив'));
for i:=1 to k do
write(b[i]:4);
end;
readln;
end.
В приведенном примере обмен данными между программой и подпрограммой производится благодаря глобальным переменным a,b,m,n,k,l.
Подпрограммы без параметров практически никогда не используются, так как неявная передача данных в подпрограмму и обратно приводит к большому количеству ошибок, которые трудно выявить и локализовать.
Использование глобальных переменных может приводить к появлению побочных эффектов. Побочными эффектами называют получение неверного результата, связанного с изменением (перевычислением) значения глобальной переменной в подпрограмме.