
- •1. Подпрограммы
- •1.1. Описание подпрограмм
- •1.2. Обращение к подпрограммам
- •1.3. Виды параметров подпрограмм
- •1.3.1. Параметры-значения и параметры-переменные
- •1.3.2. Параметры процедурного типа
- •1.3.3. Параметры-константы
- •1.3.4. Нетипизированные параметры подпрограмм
- •1.3.5. Массивы и строки открытого типа
- •1.4. Рекурсивные подпрограммы
- •2. Файлы данных
- •2.1. Текстовые файлы
- •2.2. Типизированные файлы
- •2.3. Нетипизированные файлы
- •2.4. Обработка ошибок, возникающих в действиях с файлами
- •3. Указатели - ссылочные типы данных
- •4. Модули
- •5. Локальные и глобальные сети эвм
- •6. Базы данных
- •6.1. Модели организации данных
- •6.2. Нормализация данных
- •6.3. Типы связей между объектами
- •7. Основы компьютерной безопасности
- •7.1. Компьютерные вирусы
- •7.2. Защита информации в Интернете
- •Контрольные работы
- •Тема 1. Параметры-значения и параметры-переменные
- •Пример выполнения задания
- •Решение. Составляем алгоритм (изображен ниже), а затем программу.
- •Варианты задания
- •Тема 2. Процедурный тип Пример выполнения задания
- •Варианты задания
- •Тема 3. Рекурсия Пример выполнения задания
- •Варианты задания
- •Тема 4. Текстовые и типизированные файлы Пример выполнения задания
- •Варианты задания
- •Тема 5. Указатели Пример выполнения задания
- •Варианты задания
- •Тема 6. Модули Пример выполнения задания
- •Варианты задания
- •Библиографический список
- •Оглавление
- •1.1. Описание подпрограмм ……………………………………………… 1
1.3.3. Параметры-константы
Если в качестве параметра-значения подпрограммы используется структура, то работа с ней может приводить к переполнению стека. Версия 7.0 Turbo Pascal позволяет передавать такой вид параметра как параметр-константу. Параметр-константа передается в подпрограмму копией адреса, но при этом предусмотрена защита этого параметра от изменения (изменение приводит к сообщению об ошибке). Такой параметр нельзя использовать для обращения к другой подпрограмме, он может быть любого типа, кроме файлового; его описывают в заголовке со служебным словом const. Ниже приведен пример описания параметра-константы в заголовке подпрограммы:
procedure Dispers (const v1 : vector; n : byte; var v2 : vector );.
1.3.4. Нетипизированные параметры подпрограмм
Параметры-переменные и параметры-константы можно использовать без указания типа. В этом случае соответствующий фактический параметр может быть любого типа. При этом программист берет на себя ответственность за правильность обработки такого параметра. Так как параметр такого вида непосредственно обработан быть не может (в Turbo Pascal все объекты типизированы), перед использованием в подпрограмме его следует преобразовать к конкретному типу. Обычно с этой целью применяют один из двух методов: явное преобразование типа (приведение типа переменной) и совмещение в памяти адреса непипизированного параметра с адресом объекта определенного типа.
Явное преобразование типа осуществляется следующей конструкцией:
<Идентификатор типа> (<Переменная>).
Рассмотрим реализацию данного способа типизации на примере.
Пример 6. Найти максимальные элементы вектора v и матрицы mat, используя одну подпрограмму.
program Netipizir_Parametr;
uses crt;
const
v : array[1..10] of byte = (1, 2, 3, 4, 5, 11, 6, 7, 8, 9);
mat : array[1..3, 1..4] of byte = ((1, 2, 3, 4), (5, 6, 7, 8), (1, 1, 1, 1));
var
p, q : byte;
r : byte;
function Max(var x; r, c : byte) : byte;
type {Локальный тип-массив, к которому будет приводиться}
tip = array [1..100] of byte; {нетипизированный параметр x}
var
i, j : byte;
m : byte;
begin
m := tip(x)[1]; {Пусть первый элемент массива и есть максимальный}
for i := 2 to r*c do {r и c – количество строк и столбцов в массиве}
if tip(x)[i] > m then m := tip(x)[i];
Max := m
end;
begin
clrscr;
writeln('Максимальный элемент матpицы: ');
for p:= 1 to 3 do
begin
for q := 1 to 4 do
write(mat[p, q] : 3);
writeln;
end;
writeln(' это - ', Max(mat, 3, 4));
writeln('Максимальный элемент вектора:');
for p := 1 to 10 do
write(v[p] : 4);
writeln;
writeln(' ' : 40,' это ', Max(v, 1, 10));
writeln('Нажмите enter');
readln
end.
Второй способ типизации параметра без типа внутри подпрограммы предполагает описание в ней локальной переменной определенного типа и совмещение ее в памяти с нетипизированным параметром. Для совмещения адресов используют директиву absolute. Рассмотрим реализацию метода на конкретном примере.
Пример 7. С помощью одной подпрограммы вычислить сумму элементов двух векторов разной длины.
program Sovmes_Adress;
const {Задаем массивы с помощью типизированных констант}
x : array[1..5] of real = (1, 2, 3, 4, 5);
y : array[1..3] of real = ( 6, 7, 8);
function Summa(var z; n : byte) : real;
var {Задаем локальный массив большого размера}
w : array[1..Maxint div SizeOf(real)] of real absolute z;
i : byte; {Номер компоненты вектора}
s : real; {Текущая сумма}
begin s := 0;
for i :=1 to n do s := s + w[i];
Summa := s end; {Summa}
begin
writeln(‘Сумма элементов вектора x = ’, Summa(x, 5) : 2 : 0);
writeln(‘Сумма элементов вектора y = ’, Summa(y, 3) : 2 : 0);
end.