- •Волгоград 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.
Структура программы, использующей подпрограммы
Напомним общую структуру Pascal-программы:
Заголовок (необязательный раздел) |
Program <имя_программы>; |
||||||
Раздел описаний (необязательный раздел) |
Uses <имя_библиотеки>; Const <список констант>; Type <список определяемых типов>; Var <список переменных>;
. . .
. . . |
||||||
Раздел исполняемых операторов (обязательный раздел) |
BEGIN . . . [Вызовы процедур и функций] . . . END. |
Каждая подпрограмма также имеет свою структуру, которая почти буквально повторяет структуру основной программы:
Заголовок процедуры или функции (обязательный раздел) |
Procedure ; Function : ; |
||||||
Раздел описаний подпрограммы (необязательный раздел) |
Const <список констант>; Type <список определяемых типов>; Var <список переменных>;
. . .
. . . |
||||||
Раздел операторов подпрограммы (обязательный раздел) |
Begin . . . [Вызовы вложенных процедур и функций] . . . End; |
Ниже рассмотрен пример программы с вложенными подпрограммами, построенной на основе иерархической схемы, приведенной на рис.1. Локальные модули оформлены в виде процедур без параметров.
Program A; {заголовок глобального модуля}
Procedure B;
{раздел операторов процедуры В}
Begin
Writeln(’В’)
End; {B}
Procedure C;
{раздел описаний процедуры C}
Procedure C1; {вложена в процедуру C}
Begin
Writeln(’C1’)
End;
{раздел операторов процедуры C}
Begin
B;{вызов процедуры В}
C1; {вызов процедуры C1}
End; {C}
{раздел операторов основной программы А}
Begin
В;
C
End. {A}
Локальные и глобальные идентификаторы
Использование подпрограмм в языке Turbo Pascal связано с некоторыми особенностями работы с идентификаторами программы (именами констант, типов и переменных).
Имена, описанные в подпрограмме, являются локальными для этой подпрограммы. Идентификаторы, описанные в модулях более высокого уровня, являются глобальными для всех подчиненных подпрограмм.
Имена, описанные в глобальном модуле (т.е. в основной программе), являются глобальными для всех подпрограмм. Глобальные данные, описанные в основной программе, хранятся в области памяти, называемой сегментом данных (или статическим сегментом) программы. Они создаются на этапе компиляции и доступны в любой момент работы программы.
В отличие от них, локальные данные хранятся в специальной области памяти, называемой стеком. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
Основные правила работы с глобальными и локальными именами можно сформулировать так:
Локальные имена доступны (считаются известными, "видимыми") внутри того модуля, в котором они описаны, и вложенных в него модулей. Этот модуль, и все другие, вложенные в него, называют областью видимости для этих локальных имен. Например, для программы, представленной в виде структурной схемы на рис.2, глобальные имена x и y известны в основной программе Global и во всех вложенных в нее подпрограммах Loc1, Loc2 и Loc11; локальные имена, описанные внутри модуля Loc1, будут известны в самом модуле Loc1, а также в модуле Loc11, имена x2 и y2 – только в модуле Loc2.
-
Модуль Global (x и y – объявленные в модуле имена переменных)
Модуль Loc1 (x1 и y1 – объявленные в модуле имена переменных)
Модуль Loc11 (x11 и y11 – объявленные в модуле имена переменных)
Модуль Loc2 (x2 и y2 – объявленные в модуле имена переменных)
Рис. 2
Имя, описанное в локальном модуле, "закрывает" совпадающие с ним имена из модулей более высокого уровня. Это означает, что если в двух модулях, один из которых содержится внутри другого, есть данные с одинаковыми именами, то после входа во вложенный модуль работа будет происходить с локальными для данного модуля данными. Данные с теми же именами, описанные в глобальном блоке, становятся временно недоступными, и это продолжается до момента выхода из вложенного модуля.
Рекомендуется все данные, которые имеют в подпрограммах только внутреннее вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.