Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум по информатике

.pdf
Скачиваний:
253
Добавлен:
18.03.2015
Размер:
8.86 Mб
Скачать

Лабораторная работа №5

ПРОЦЕДУРЫ И ФУНКЦИИ ЯЗЫКА BORLAND PASCAL

1. Цель работы

Усвоить принцип конструирования процедур и функций и их использование в программах.

2. Задачи работы

Научиться оформлять задачи в виде подпрограммы, использовать процедуры и функции на языке Pascal, составлять рекурсивные подпрограммы.

3. Теоретическая часть

3.1. Общие сведения о подпрограммах

Решение сложной задачи довольно часто сводится к решению нескольких более простых подзадач, которые удобно выделить в отдельные подпрограммы. Подпрограмма – это выделенный в самостоятельную единицу участок программы, имеющий собственное имя, позволяющее вызвать подпрограмму из основной программы. Разработка подпрограмм необходима при многократном использовании в разных местах программы группы операторов, выполняющих однотипные действия. В языке Pascal имеется две разновидности подпрограмм – процедуры и функции. Структура подпрограммы аналогична структуре программы.

3.2. Локальные и глобальные переменные, формальные параметры.

Все переменные, которые использует подпрограмма, можно разбить на две категории:

локальные переменные – объявляются и используются только внутри подпрограммы;

глобальные - объявляются в основной программе и доступны как программе, так и всем ее подпрограммам.

Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных переменных двумя способами: непосредственно обращаясь к глобальной переменной по имени или используя механизм формальных параметров.

Формальные параметры задаются в заголовке подпрограммы в виде списка, разбитого на группы, разделенные точками с запятыми. Для каждой группы переменных указывается ее тип, например

Procedure treug(x,y,z:Integer;Var ss:Real; Var pp : Integer);

По своему назначению формальные параметры могут быть

параметрами-значениями и параметрами-переменными.

Параметр-значение в подпрограмму передается, а обратно не возвращается, а параметр-переменная в подпрограмме вычисляется, и в программу передается ее новое значение. Перед параметромпеременной ставится служебное слово Var. Действие слова Var распространяется до ближайшей точки с запятой, т. е. в пределах одной группы.

Имена параметров могут быть любыми, в том числе и совпадать с именами глобальных переменных. В этом случае они хранятся в различных ячейках памяти, а глобальная переменная с таким именем становится недоступной для использования подпрограммой.

Для предотвращения нежелательных изменений глобальных переменных рекомендуется:

1)входные переменные описывать как параметры-значения;

2)избегать непосредственного использования глобальных переменных в подпрограммах;

3)для локальных переменных и формальных параметров использовать имена, отличные от имен глобальных переменных.

Тип формального параметра может быть практически любым за

исключением файлового, однако в заголовке подпрограммы нельзя вводить новый тип. Например, чтобы из процедуры передать массив, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

type tArr = array[l..100] of Real;

procedure ZapolnMas (l:integer, var A: tArr; Max);

Здесь A - параметр-переменная, l — параметр значение.

Для вызова подпрограммы следует указать ее имя и список фактических параметров, значения которых передаются формальным параметрам. Все фактические параметры при этом разделяются запятыми. Между формальными и фактическими параметрами должно быть взаимнооднозначное соответствие, т.е.

они должны совпадать по количеству, типу и порядку следования.

При обращении к подпрограмме формальные параметры заменяются соответствующими фактическими параметрами. Параметры-значения могут быть заменены не только переменными и числами, но и выражениями соответствующего типа, тогда как параметры-переменные могут быть заменены только переменными.

3.3. Подпрограмма-функция

Подпрограмма-функция вычисляет одно единственное значение, которое передается через ее имя. Блок функции может содержать все разделы, которые могут быть в процедурах.

Основные отличия функции от процедуры:

1.Заголовок функции состоит из слова function, за которым следует имя функции, далее в круглых скобках — список формальных параметров, затем через двоеточие записывается тип функции — тип возвращаемого параметра. Функция может возвращать параметры следующих типов: любого порядкового, любого вещественного, стандартного строкового типа string, любого указателя.

2.В теле функции хотя бы раз имени функции должно быть присвоено значение: <имя функции> := <результат>; .

3.Функция вызывается в каком-нибудь выражении.

3.4. Подпрограмма-процедура

Любая процедура начинается с заголовка. В отличие от основной программы заголовок в процедуре обязателен. Общий вид заголовка:

procedure <имя процедуры>(<формальные параметры> : <тип>);

За заголовком могут идти такие же разделы, что и в основной программе. В отличие от основной программы процедура завершается точкой с запятой.

В качестве результата процедура может возвращать в вызывающую программу множество простых или структурированных величин. Параметры, передающие результаты работы процедуры, должны быть обязательно параметрами–переменными.

Разрешается описывать процедуры без формальных параметров, тогда организация передачи информации из программы в процедуру и обратно проводится с помощью глобальных переменных, а

заголовок процедуры будет иметь более простой вид: procedure <имя процедуры>;

Для вызова процедуры из основной программы или другой подпрограммы следует записать имя процедуры и список

фактических параметров. Например:

Streug(a,b,c,s); Streug(a/b,c+5,7,s1); .

Вызов процедуры без формальных параметров осуществляется по имени.

4. Описание оборудования и используемых программных комплексов

При выполнении лабораторной работы необходим специализированный компьютерный класс с минимальными системными требованиями компьютеров:

Процессор – Intel Pentium III; ОЗУ – 256 Mb;

видеокарта – 32 Mb.

Требуемое программное обеспечение: Операционная система Microsoft Windows;

Borland Pascal 7.0 for DOS / Borland Pascal 7.0 for Windows.

5. Краткое руководство по эксплуатации оборудования

При использовании оборудования необходимо:

соблюдать общие правила нахождения в учебных лабораториях, работы с компьютером и использования программных средств; привести в порядок одежду; осмотреть рабочее место, убрать все мешающие работе предметы;

визуально проверить правильность подключения ПЭВМ к электросети.

6. Задание

6.1. Составить программу табулирования функции на данном отрезке с данным шагом по указанному преподавателем варианту таблицы 1.

Таблица 1

 

Варианты заданий по теме «Подпрограммы-функции»

№ варианта

Задание

№ варианта

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

x2

5x

 

8 на интервале

0, 2

с шагом 0.1.

 

 

 

 

 

 

2

y

 

3x

2

 

 

 

 

4

 

 

x

1 на интервале

0.5, 2,5

с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

x

 

 

 

x

 

 

2 на интервале

 

 

2, 2 с шагом 0.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

y

 

7x

 

4

 

 

 

 

3x

5

cos x на интервале

1.7, 1

с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

y

 

x

3

 

4x

2

 

 

 

 

x

 

2 на интервале

1, 1

с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

y

 

 

x

 

sin 3x на интервале

1.5, 1.5 с шагом 0.12.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

cos x

 

 

 

 

 

 

 

x на интервале

0, 3 с шагом 0.11.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

y

sin 2x

 

 

 

tg3x на интервале 0, 1

с шагом 0.05.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

x

2

 

 

 

 

 

 

 

x

 

3 на интервале

1, 2 с шагом 0.25.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

y

 

2x

 

 

 

sin 2x на интервале

3, 3 с шагом 0.25.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

y

5

 

cos3x на интервале

0, 2

с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

x

 

 

 

 

 

 

 

x

 

 

1

на интервале

0, 5

с шагом 0.5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

y

 

 

x

 

5

 

 

 

 

x2 на интервале

3, 3 с шагом 0.25.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

14

y

 

e

x

 

1 на интервале

2, 2 с шагом 0.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

sin x

 

 

 

на интервале 0, 2

с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

y

 

 

x

 

3

 

 

 

 

 

x

2

 

на интервале

6, 3

с шагом 0.5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

17

y

 

 

sin x

 

 

 

cos x

 

tg x

 

на интервале

1.2, 1.2 с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

18

y

 

e

x

 

 

x

 

 

2 на интервале

2, 2

с шагом 0.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

19

y

1 tgx

2

 

 

2 на интервале

1.5, 1.5 с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

sin

 

 

 

x

 

1

 

 

 

 

sin x

1

3 на интервале

1, 2 с шагом 0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.2. Составить программу решения задачи по указанному преподавателем варианту из таблицы 2.

Таблица 2

 

Варианты заданий по теме «Подпрограммы-процедуры»

№ варианта

Задание

1

2

1Составить программу перемножения двух матриц произвольной размерности, предусмотреть проверку возможности перемножения.

2Составить программу сложения двух матриц произвольной размерности, предусмотреть проверку возможности сложения.

3Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента.

4Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента.

5Дана целочисленная прямоугольная матрица. Определить количество столбцов, содержащих хотя бы один нулевой элемент.

6Дана целочисленная прямоугольная матрица. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов.

7Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов.

8Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

9Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.

10Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных ниже главной диагонали.

11Дана квадратная матрица действительных чисел. Найти сумму модулей элементов, расположенных выше главной диагонали.

12Дана прямоугольная матрица действительных чисел. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.

13Дана прямоугольная матрица действительных чисел. Найти номер первого из столбцов, содержащих хотя бы один положительный элемент.

14Найти номер первого из столбцов прямоугольной матрицы, не содержащих ни одного отрицательного элемента.

Окончание таблицы 2

1

2

15Найти номер первой из строк прямоугольной матрицы, не содержащих ни одного отрицательного элемента.

16Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.

17Дана целочисленная прямоугольная матрица. Определить номер первой из строк, содержащих хотя бы один нулевой элемент.

18Дан двумерный массив целых чисел. Составить программу, которая определяет, есть ли в каждой из строк массива хотя бы один элемент, оканчивающейся цифрой 3. В случае положительного ответа должны быть напечатаны координаты любого из таких элементов

19Найти номер первого из столбцов прямоугольной матрицы, не содержащих ни одного положительного элемента.

20Найти номер первой из строк прямоугольной матрицы, не содержащих ни одного положительного элемента.

7. Методика выполнения заданий

Для выполнения заданий необходимо:

1)изучить теоретическую часть (п.3) и нижеприведенные примеры (п. 7.1 и 7.2), воспользоваться указаниями (п. 7.3);

2)разработать алгоритмы для решения задач согласно выданному варианту, составить программы на языке Pascal, воспользовавшись приведенными примерами, протестировать и представить полученный результат преподавателю;

3)ответить на контрольные вопросы;

4)создать отчет по лабораторной работе в электронном виде.

7.1. Пример 1

Составить программу табулирования функции F x x cosx на отрезке a,b с шагом h.

Решение. Вычисление значения функции оформим в виде функции.

Program pr_3;

Var a,b,h,x : real; Function f(t : real) : real;

Begin f:=t*cos(t);

End;

Begin

Write('Введите начало и конец отрезка: '); Readln(a,b); Writeln('Введите шаг табуляции: '); Readln(h); Writeln('Аргумент Функция f(x)=x cos(x) ');

x:=a; Repeat

Writeln (x:6:3, f(x):20:3);

x:=x+h; Until x>b;

End.

7.2. Для реализации данного задания воспользоваться примером 2. Массив заполнить случайными действительными числами из интервала [-10;12).

Пример 2.

Составить программу, содержащую функцию нахождения максимального элемента двумерного массива.

Решение. В основной программе размерность массива n и m зададим именованными константами, определим тип – массив из n m элементов, массив этого типа и переменную для хранения максимального элемента:

Const n=5; m=8;

Type MyMass = array[l..n, 1..m] of Real; Var A : MyMass; Max : Real;

Функция в этом случае может иметь вид:

function Maximum (Var Nmax, Mmax : Byte; Var Mas : MyMass): Real;

var max_el : Real; i, j: Byte; begin

max_el := Mas[1, 1]; for i := 1 to Nmax do for j := 1 to Mmax do

if max_el < Mas[i, j] then max_el := Mas[i, j]; Maximum := max_el;

end;

Теперь для записи максимального элемента массива A в переменную Max можно использовать оператор:

Маx := Maximum (n, m, A);

Данная подпрограмма может работать только с массивами типа

MyMass.

7.3. Указание

При составлении программы для решения задачи оформить основную подпрограмму в виде функции, а подпрограммы ввода и вывода элементов массива – в виде отдельных процедур. Размерности

массивов следует задать именованными константами. Воспользоваться примером 3. Все необходимые данные должны передаваться подпрограммам в качестве параметров; все величины, используемые только внутри подпрограмм, должны быть описаны как локальные. Использование глобальных переменных в подпрограммах не допускается! Вывод результатов работы подпрограмм должен выполняться в главной программе. Заполнение массивов следует производить с помощью генератора случайных чисел.

Пример 3. Даны два массива из N целых элементов из интервала 20, 30 . В каждом массиве найти максимальный элемент и затем сравнить их.

Решение. В программе будем использовать процедуры заполнения случайными числами, вывода матрицы и нахождения максимального элемента.

Program SravMas; {сравнение максимальных и минимальных элементов}

Const n=15;

Type massiv=Array[1..n] оf Integer; Var m1, m2 : massiv;

max1, max2 : Integer;

Procedure RandomMas(Var x:massiv); Var i:Integer;

Begin

For i:=1 To n Do x[i] := -20+Random(50);

End;

Procedure VivodMas(Var x:massiv); Var i:Integer;

Begin

For i:=1 To n Do write(x[i]:5);

End;

Procedure MaxMas(Var x:massiv; Var MX:Integer); Var i:integer;

Begin

MX:=x[1];

For i:=2 to n do

if x[i]>MX then MX:=x[i];

End;

Begin {основная программа}

Randomize;

RandomMas(m1); Writeln('Первый массив:'); VivodMas(m1); RandomMas(m2); Writeln('Второй массив:'); VivodMas(m2);

MaxMas(m1,max1); MaxMas(m2, max2); {вызов процедуры нахождения максимального элемента}

if max1>max2 then writeln('В 1-м массиве максимальный элемент больше и =',max1)

else if max1<max2 then writeln('Во 2-м массиве максимальныйй элемент больше и=',max2) else writeln('В обоих массивах максимальные равны ',max1);

End.

Контрольные вопросы

1.Дайте определение подпрограммы.

2.Приведите пример описания процедуры.

3.Приведите пример описания функции.

4.Объясните отличие процедуры от функции.

5.Какие переменные называются локальными? Чем глобальные переменные отличаются от локальных? Можно ли локальной переменной дать имя, совпадающее с именем глобальной переменной?

6.Какую роль при работе с подпрограммой выполняют фактические параметры?

7.Сколько элементов может содержать список формальных параметров? Сколько элементов должен содержать список фактических параметров?

8.Можно ли в программе формальным параметрам давать имена, совпадающие с именами фактических параметров? Почему?

9.Могут ли фактические параметры быть выражениями? А именами других процедур, функций?

10.В чем отличие параметра-переменной и параметра-значения?

11.Может ли в качестве параметра при вызове подпрограммы, имеющей формальный параметр-значение, выступать: переменная, выражение, константа?