- •Содержание
- •Лабораторная работа № 1 Программирование алгоритмов линейной и разветвляющейся структур.
- •Теоретические сведения
- •Отчет по лабораторной работе
- •Лабораторная работа № 2 Программирование алгоритмов разветвляющейся и циклической структуры
- •Теоретические сведения
- •Программирование таблично заданной функции.
- •1. Изучить:
- •Отчет по лабораторной работе
- •Лабораторная работа № 3 Обработка одномерных и многомерных массивов
- •1. Изучить:
- •Лабораторная работа № 4 Программирование с использованием подпрограмм пользователя
- •1. Изучить:
- •Теоретические сведения
- •Лабораторная работа № 5 Обработка файловых структур данных
- •1. Изучить:
- •Теоретические сведения
- •Часть2 Лабораторная работа № 6 Множественный тип данных (4 часа)
- •Учебная программа primset
- •Порядок выполнения работы.
- •Лабораторная работа № 7 Организация и использование статической библиотеки (Unit ) в Delphi. Использование списков выбора
- •Лабораторная работа №8 Графические средства в delphi
- •Теоретические сведения
- •Графика Canvas
- •Визуальный компонент класса tChart.
- •Добавление серии в график
- •Приложение 1 Справка по работе с основным набором визуальных компонентов Delphi, требуемых при выполнении лабораторных работ
- •Компонент Окно выбора файла (tOpenDialog)
- •Компонент Окно сохранения файла (tSaveDialog)
- •Список литературы
Лабораторная работа № 4 Программирование с использованием подпрограмм пользователя
Цель работы — овладение навыками алгоритмизации и программирования задач с использованием подпрограмм пользователя различных видов, овладение навыками написания подпрограмм и обращения к ним, использования параметров подпрограмм по значению и по ссылке.
Задания для самостоятельной подготовки
1. Изучить:
— правила записи подпрограмм различных видов и способов обращении к ним;
— способы передачи параметров в подпрограмму;
— правила записи программ, использующих подпрограммы различных видов;
— порядок выполнения программ, использующих подпрограммы.
2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи с использованием
А) подпрограммы-функции
Б) подпрограммы-процедуры.
4. Подготовить тестовый вариант программы и исходных данных.
Теоретические сведения
Подпрограмма – это логически завершенный компонент про-
граммы. Подпрограмма представляет собой некоторую функцию об-
работки информации, которая отображает конкретный набор аргу-
ментов в некоторый набор результатов. Определение подпрограммы
состоит из двух частей: спецификации и реализации.
Спецификация (прототип) подпрограммы включает:
тип подпрограммы: function (функция), procedure (процедура).
function – подпрограмма явно возвращает только один результи-
рующий объект данных; procedure – подпрограмма возвращает бо-
лее одного значения или действия подпрограммы сводятся только к
модификации ее аргументов вместо возвращения результата;
имя подпрограммы;
формальные параметры: аргументы (порядок следования, тип
каждого аргумента) и результаты (порядок следования, тип каждого
результата).
Реализация подпрограммы (тело подпрограммы) включает:
описание локальных данных, используемых подпрограммой;
операторы, задающие действия, которые должна выполнить
подпрограмма.
Локальные данные и операторы инкапсулированы (спрятаны), так
что ни локальные данные, ни операторы по отдельности не доступны
пользователю подпрограммы. Пользователь может только вызвать
подпрограмму. В тело подпрограмм могут входить определения дру-
гих (вложенных) подпрограмм.
Вызывающая программа – программа (подпрограмма), которая
обращается к подпрограмме (вызывает подпрограмму).
Оператор вызова – оператор вызывающей программы, с помо-
щью которого она обращается к подпрограмме. Оператор вызова
подпрограммы содержит:
имя подпрограммы;
список фактических параметров.
Фактические параметры – это элементы вызывающей программы
(константы, переменные, массивы и др.), значения которых переда-
ются в подпрограмму или возвращаются из нее. При вызове подпро-
граммы значения фактических параметров присваиваются соответст-
вующим формальным параметрам (типы фактических и формаль-
ных параметров должны совпадать!).
Вызываемая программа – подпрограмма, к которой обращает-
ся вызывающая программа. Вызываемая программа возвращает уп-
равление вызывающей программе, которая продолжает свое выпол-
нение с оператора, следующего за оператором вызова.
Обмен информацией между вызывающей и вызываемой програм-
мами может осуществляться с использованием глобальных данных
или передачей параметров.
Глобальные данные
Глобальные данные – это данные (константы, переменные, мас-
сивы и др.), объявленные в начале программы и доступные в подпро-
граммах и «главной программе» (основном блоке программы).
Глобальные данные следует использовать только для передачи
информации от одной программы (подпрограммы) к другой. Напри-
мер, одна подпрограмма формирует значения данных, а другая под-
программа использует эти значения
Способы передачи параметров
Когда вызывающая программа обращается к подпрограмме, тре-
буется связать фактические параметры вызывающей программы с
формальными параметрами подпрограммы. Чаще всего применяются
два подхода: либо фактический параметр вычисляется, и полученное
значение передается формальному параметру (передача значением);
либо формальному параметру становится доступен адрес значения
фактического параметра (передача по ссылке).
Передача значением
В этом случае формальный параметр a обрабатывается в под-
программе как локальная переменная, инициализируемая в начале
выполнения подпрограммы значением соответствующего фактиче-
ского параметра x.
В операторе вызова фактическим параметром может быть:
константа;
переменная;
выражение;
функция.
Значение фактического параметра при изменении соответст-
вующего ему формального параметра не изменяется.
Передача по ссылке
В этом случае формальный параметр (описание параметра начинается со слова var) обрабатывается в подпрограмме как переменная, адрес которой есть адрес соответствующего фактического параметра .
В операторе вызова фактическим параметром может быть только переменная.
Любое изменение формального параметра есть изменение со-
ответствующего ему фактического параметра .
Функции
Формат спецификации функции:
function <имя>(<список формальных параметров>): <тип результата>;
Для возвращения результата функция должна содержать хотя бы
один оператор присваивания следующего вида:
<имя подпрограммы> := <результат>;
где результат – это вычисленное значение в подпрограмме (констан-
та, переменная, элемент массива и другие элементы данных).
Вызов функции включается в оператор языка Pascal.
Пример вызова функции P(x):
y:= P(x); {вызов P(x) в операторе присваивания}
if P(x)>0 then {вызов P(x) в операторах if и writeln }
writeln(P(x));
В качестве примера рассмотрим описание и использование функ-
ции power, которая возводит переменную base в степень exponent –
function power( base, exponent: real): real;
begin
power:= exp( exponent ∗ ln(base));
{exp, ln – встроенные функции Pascal:
exp (x) – ex , ln (x) – натуральный логарифм x }
end;
Вызов функции power может быть, например, таким: writeln
(power(3, 5));
Процедуры
Формат спецификации процедуры:
procedure <имя>(<список формальных параметров>);
Входные параметры (аргументы) процедуры передаются значени-
ем или по адресу, а выходные параметры (результаты) – по адресу.
Вызов процедуры – это отдельный оператор, который содержит
имя процедуры и список фактических параметров. Например:
P(x); {это вызов процедуры P(x) }
В качестве примера использования процедуры рассмотрим описа-
ние и использование той же самой подпрограммы power. В этом
случае, наряду с аргументами base и exponent, которые передаются
по значению, необходимо добавить в спецификацию процедуры вы-
ходной параметр (результат), который должен быть передан по ссыл-
ке (в примере это pow).
procedure power( base, exponent: real; var pow: real);
begin
pow:= exp( exponent ∗ ln(base));
end;
Пример вызова процедуры power:
power(3, 4, j);
writeln(j);
Передача массивов в качестве параметров
В качестве примера будем использовать подпрограмму вычисле-
ния суммы значений элементов одномерного массива.
. Формальные параметры как массивы с фиксированными размерами
В данном примере для описания типов параметров используется
заранее определенный тип massiv с фиксированной размерностью.
uses crt;
const
N=3;
type
massiv = array[1..N] of integer;
function sum_1( x: massiv ): integer;
var
i : integer;
sum: integer;
begin
sum:= 0;
for i:= 1 to N do
sum:= sum+x[i];
sum_1:= sum;
end;
var {main – главная программа }
i:integer;
a:massiv;
begin
clrscr;
writeln('massiv a');
for i:=1 to N do
readln(a[i]);
writeln('summa= ', sum_1(a));
end.
Формальные параметры как массивы
со «свободными» размерами
Существует несколько возможностей передавать массивы в под-
программу, не указывая их размеры. В языке Pascal для этого можно
использовать функции low, high и sizeof. Использование функций
low, high и sizeof требует подключения модуля crt.
Функции low и high возвращают соответственно наименьшее и
наибольшее значение индекса массива.
Функция sizeof возвращает размер объекта данных в байтах.
Обратите внимание, что в данных примерах описание размеров
фактического массива a начинается с 0.
Передача подпрограммы как параметра
Если необходимо передать в качестве фактического параметра
имя подпрограммы, то соответствующий ему формальный параметр
должен иметь процедурный тип, соответствующий прототипу под-
программы.
В качестве примера рассмотрим программу, которая строит таб-
лицу сумм и произведений целых чисел. Для построения таблицы
используется процедура PrintTable, которая для вычисления значе-
ния таблицы вызывает функцию add (вычисление суммы) или функ-
цию Multiply (вычисление произведения). Имя вызываемой функции
процедура получает как параметр Operation.
В программе описание процедурного типа имеет вид
type
Func = function (x,y;integer):integer;
Спецификация подпрограммы, имя которой используется в каче-
стве параметра, должна содержать ключевое слово far («дальний вы-
зов»). Это указание необходимо компилятору для правильной гене-
рации исполняемой программы.
Рекурсивные подпрограммы
Слово рекурсия происходит от латинского слова «recursio» – воз-
вращение.
В программировании рекурсия означает, что подпрограмма обра-
щается сама к себе непосредственно или через цепочку вызовов дру-
гих подпрограмм.
Задание
Таблица 6.1
Вариант |
Условия задачи |
Примечания |
|
1 |
Вычислить наибольшие корни квадратных уравнений
|
Все корни действительные вычислять в подпрограмме
|
|
2 |
Подсчитать число точек, находящихся внутри круга радиусом г с центром в начале координат; координаты заданы массивами Х(100), Y(100)
|
Расстояние до точки от начала координат вычислять в подпрограмме |
|
3 |
Определить периметры треугольников, заданных координатами их вершин ХА (3), ХВ (3), ХС (3) YA (3), YB (3), YC (3) |
Длину стороны треугольников вычислять в подпрограмме |
|
4 |
Вычислить
|
vi вычислять в подпрограмме |
|
5 |
Вычислить суммы положительных элементов массивов X (N), Y (M), Z (K) |
|
|
6 |
Вычислить среднее арифметическое положительных элементов для массивов A (N1), B (N2), C (N3) |
|
|
7 |
Подсчитать количество отрицательных элементов матриц X (10, 15) и Y (20, 12) |
Количество отрицательных элементов матрицы вычислять в подпрограмме |
|
8 |
Вычислить суммы положительных элементов каждой строки для матриц A (5, 4) и B (3, 6)
|
Сумму положительных элементов строки матрицы вычислять в подпрограмме |
|
9 |
Вычислить
|
Наименьший элемент одномерного массива вычислять в подпрограмме |
|
10 |
Вычислить
|
Сумму и количество положительных элементов массива- в подпрограмме |
|
11 |
Вычислить
|
Вычислять в одной подпрограмме s и k |
|
12 |
Вычислить и запомнить суммы положительных элементов каждой строки матрицы А (10, 20), В (15, 10) |
Сумму положительных элементов строки -в подпрограмме
|
|
13 |
Вычислить
|
В подпрограмме-все действительные корни |
|
14 |
Найти наибольшие элементы и их порядковые номера массивов Х (N) и Y (М) |
Наибольший элемент массива и его порядковый номер вычислять в подпрограмме |
|
15 |
Переписать положительные элементы массива Х(100) и Y (80) в массив Z подряд |
Запись в массив Z осуществлять в подпрограмме |
|
16 |
Найти наименьшие элементы и номера строк и столбцов, в которых они расположены, для матриц А (10, 15) и В (15, 12) |
Наименьшие элементы и номера строк и столбцов- в подпрограмме |
|
17 |
Вывести на печать элементы целочисленных матриц N (5, 8) и М (10, 6), кратные трем |
Кратность трем определять в подпрограмме |
|
18 |
Вычислить
где xi и yi заданы массивами |
Все суммы вычислять с использованием подпрограммы |
|
19 |
Вычислить
|
xmax и ymin вычислять в подпрограмме |
|
2. Проверить правильность выполнения программы с помощью тестового варианта исходных данных.
3. Составить блок-схему алгоритма задачи с любым вариантом подпрограммы.
Контрольные вопросы
1. Указать, при каких условиях целесообразно использование подпрограмм, какие выгоды они предоставляют пользователю.
2. Указать, в чем отличие различных видов подпрограмм пользователя.
3. Указать способы обращения к подпрограммам пользователя.
4. Указать способы передачи параметров в подпрограмму.
5. Указать, как организовать подпрограмму без параметров.
6. Перечислить, как согласуются формальные и фактические параметры.
7. Указать конструкции, которые могут быть формальными и фактическими параметрами.

,