- •Волгоград 2006
- •3. Двумерные массивы (матрицы) 24
- •3.1. Объявление двумерных массивов 24
- •3.2. Решение задач с использованием двумерных массивов 25
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями 39
- •1. Общие понятия
- •2. Одномерные массивы (векторы)
- •2.1. Объявление одномерных массивов
- •2.2. Типовые алгоритмы обработки одномерных массивов
- •2.2.1. Ввод одномерного массива в память компьютера
- •2.2.2. Вывод массива на экран
- •2.2.3. Подсчёт суммы, произведения, количества элементов одномерного массива, удовлетворяющих заданному условию
- •2.2.4 Поиск значений среднего арифметического и среднего геометрического элементов массива
- •2.2.5. Обработка элементов одномерного массива, имеющих чётные индексы
- •2.2.6. Формирование нового одномерного массива из элементов другого одномерного массива
- •2.2.7. Нахождение максимального (минимального) элемента одномерного массива
- •2.2.9. Сортировка элементов массива
- •3. Двумерные массивы (матрицы)
- •3.1. Объявление двумерных массивов
- •3.2. Решение задач с использованием двумерных массивов
- •3.2.1. Ввод и вывод на экран двумерного массива
- •3.2.2. Алгоритмы обработки матрицы в целом
- •3.2.3. Алгоритмы обработки отдельных строк или столбцов матрицы
- •3.2.4. Алгоритмы обработки элементов каждой строки матрицы
- •3.2.4. Алгоритмы обработки элементов каждого столбца матрицы
- •3.2.5. Обработка элементов матрицы, расположенных в четных и нечетных строках или столбцах
- •3.2.5. Обработка элементов главной диагонали
- •3.2.6. Обработка элементов побочной диагонали
- •3.2.7. Обработка элементов квадратных матриц, расположенных над и под главными и побочными диагоналями
- •3.2.8. Транспонирование матрицы
- •Иерархическая структура программы
- •Структура программы, использующей подпрограммы
- •Локальные и глобальные идентификаторы
- •Формальные и фактические параметры
- •Способы передачи параметров в подпрограммы
- •Подпрограммы-процедуры Описание процедуры
- •Вызов процедуры
- •Примеры использования подпрограмм-процедур
- •Функции Описание функции
- •Вызов функции
- •Примеры использования подпрограмм-функций
- •Пример решения задачи с использованием подпрограмм
- •Список рекомендуемой литературы
- •Обработка массивов
- •400131 Волгоград, пр. Ленина, 28.
- •400131 Волгоград, ул. Советская,35.
Подпрограммы-процедуры Описание процедуры
Описание процедуры размещается в разделе описаний вызывающего модуля и состоит из заголовка, раздела описания и раздела операторов процедуры (см. раздел «Структура программы, использующей подпрограммы»).
Так как структура раздела описаний и раздела операторов подпрограммы аналогична структуре соответствующих разделов основной программы, рассмотрим подробно только правила составления заголовка подпрограммы-процедуры.
Формат заголовка:
Procedure <имя> [(<список формальных параметров>)];
Список формальных параметров подпрограммы-процедуры можно условно разделить на:
1) параметры, значения которых передаются в процедуру и остаются неизменными после её завершения (т.е. входные данные);
2) параметры, значения которых в процедуре изменяются, либо вычисляются впервые (т.е. выходные данные).
Для каждого формального параметра указывается его тип и способ передачи. Параметры, имеющие одинаковый тип и способ передачи могут перечисляться через запятую; параметры, у которых различаются либо тип, либо способ передачи, разделяются точкой с запятой.
Замечание. В описаниях параметров подпрограммы нельзя создавать новые типы. Поэтому структурированные типы (массивы, записи, строки, файлы и т.д.) необходимо описывать в разделе type.
Примеры заголовков процедур:
Procedure Drawline; {процедура без параметров}
Procedure Kvadrant (A,B:real);
Procedure Sort(nx: integer; var x:massiv);
Procedure Amax(na: integer; const a:massiv; var max:real; var im, jm: integer);
Вызов процедуры
Вызов процедуры - это отдельный оператор, в котором указывается
<Имя процедуры> [(<список фактических параметров>)].
Фактические параметры в списке перечисляются через запятую.
Примеры вызовов процедур:
Drawline;
Kvadrant(2,3);
Kvadrant(y,z);
Kvadrant(x+y,z+2)
Sort(n,a);
amax(n,x,xmax,imax,jmax);
Примеры использования подпрограмм-процедур
Задача 1: найти среднее арифметическое двух пар чисел А и В, С и D.
Program Primer_Procedure_1;
Var
A, B, C, D, S1, S2 : real;
Procedure Sum (N, M: integer; var S:real); {заголовок процедуры}
Begin{раздел операторов процедуры}
S := (N + M) / 2
End; {конец описания процедуры}
Begin {начало основной программы}
Writeln(’Введите 4 числа’);
Readln(A,B,C,D);
Sum(A, B, S1); {вызов процедуры с фактическими параметрами A, B, S1}
Sum(C, D, S2) {вызов процедуры с фактическими параметрами C,D, S2}
Writeln (’S1=’, S1:6:2,’S2=’, S2:6:2)
End.
Задача 2: найти сумму элементов главных диагоналей матриц A(n,n) и B(m,m) (n<=10, m<=15).
Program Primer_Procedure_2;
Const
Nmax=15;{наибольшее количество строк и столбцов матриц А и В}
Type
tmatr=array[1..Nmax, 1..Nmax] of real; {матричный тип}
Var{описание глобальных переменны }
A, B: tmatr;
n, m: byte;
Sa, Sb, Sab :real;
procedure EnterMatr(var matr : tmatr; var nm : byte; ch:char);
var
i, j : byte;
begin
write(‘Введите размерность квадратной матрицы ’,ch);
readln(nm);
writeln(‘Введите элементы матрицы по строкам’);
for i:=1 to nm do
for j:=1 to nm do
begin
write(ch,’[’,i, ’,’,j, ’]=’);
read(matr[i,j]);
end;
end;
Procedure Summa(const matr : tmatr; nm : byte; var s : real); {заголовок}
Var{раздел описания локальных переменных}
i: byte;
begin
s:=0;
for i:=1 to nm do
s:= s+ matr[ i, i ];
end; {конец описания процедуры}
begin {начало основной программы}
EnterMatr(A, n, ’А’); {вызов процедуры для ввода матрицы А}
EnterMatr(В, m, ’B’); {вызов процедуры для ввода матрицы В}
Summa (A, n, Sa);{вызов процедуры вычисления суммы в матрице А}
Summa (B, m, Sb) ; {вызов процедуры для вычисления суммы в матрице B}
Sab := Sa + Sb;
Writeln (’Sab=’, Sab:6:2)
end.