Передача результата из подпрограммы в вызывающую программу 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Передача результата из подпрограммы в вызывающую программу



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

Пример.

Function Tan(x:Real);

Begin

Tan:=sin(x)/cos(x);

End;

.....

begin{main}

.....

a:=tan(0.1234);

b:=tan(y);

c:=tan(a/b);

......

End.

Процедура может возвращать несколько значений. Для этого в процедуре используются параметры-переменные.

Пример:

Procedure Tan(x:Real; var y:Real);

Begin

Y:=sin(x)/cos(x);

End;

......

begin{main}

.....

Tan(0.1234,a);

Tan(y, b);

Tan(a/b, c);

....

End.

 

Локальные и глобальные переменные

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

Пример.

Program P;

Var A, B:Integer;{глобальные}

Procedure P1;

Var B, C:Real;{локальные}

Begin

......

End;{P1}

.....

End.{P}

Одноименные локальные и глобальные переменные – это разные переменные. Любое обращение к таким переменным в теле подпрограммы трактуется как обращение к локальным переменным, т. е. одноименные глобальные переменные будут недоступны.

Параметры-массивы и параметры-строки

Типом любого параметра в списке формальных параметров может только стандартный или заранее определенный тип. Поэтому при передаче массива следует сначала описать его тип. Пример:

Type mas=array[1..100]of integer;

Procedure P(a:mas);

.......

Так как строка является своеобразным массивом, передача строк в подпрограммы осуществляется аналогично.

Постановка задачи

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

Варианты

1. В двумерном массиве записаны слова, представляющие собой последовательность цифр, завершающихся 0. Необходимо распечатать слова через запятую, заключив печатную строку в скобки. Длина печатной строки 60 символов. Извлечение слова оформить в виде подпрограммы.

Например:

исходные данные - 123023402303450

результат - (123,234,23,345)(23445,234567,1)(23445567767,45)

2. Написать подпрограмму для обмена строк двумерного массива с ее помощью отсортировать массив по элементам третьего столбца.

3. Написать подпрограмму для суммирования матриц. С ее помощью сложить исходную матрицу и транспонированную (т. е. полученную поворотом исходной на 90 °).

4. Написать подпрограмму для удаления строки из двумерного массива. Оставшиеся строки должны быть расположены плотно, недостающие элементы заменяются 0. С помощью разработанных подпрограмм исключить из массива строки с номерами от А до В.

5. Определить является ли матрица ортонормированной, т. е. такой, что скалярное произведение каждой пары различных строк равно 0, а скалярное произведение строки самой на себя равно 1.

6. Элемент матрицы является седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот: наибольшим в своей строке и наименьшим в своем столбце).Для заданной матрицы определить все седловые точки.

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

8. Написать подпрограмму транспонирования квадратной матрицы (т.е. поворота исходной матрицы на 90 °). С ее помощью определить является ли заданная матрица симметрической. (Матрица называется симметрической, если транспонированная матрица равна исходной).

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

10. Написать подпрограмму, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива.

11. Написать подпрограмму, проверяющую, по возрастанию или убыванию упорядочена указанная строка двумерного массива. Упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию.

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

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

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

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

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

17. Задан двумерный массив N x M. Найти в нем подмассив 3 х 3, сумма элементов которого максимальна. N и M могут быть не кратны трем.

18. Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый верхний элемент которых лежит на побочной диагонали. В каждом таком подмассиве находится максимальный элемент. Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива. Проверить получилась ли на побочной диагонали убывающая последовательность элементов.

19. Задана строка из N2 цифр. Установить, можно ли, разбив строку на подстроки длиной N, записать их в строки двумерного массива N x N по одной цифре в одном элементе так, чтобы они в первом столбце расположились в порядке возрастания.

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

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

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

23. Задан одномерный массив состоящий из N целых чисел. Сформировать на его основе двумерный массив N x N так, чтобы сумма элементов в первом столбце была равна первому элементу одномерного массива, сумма элементов во втором столбце была равна второму элементу одномерного массива и т. д. Нули не использовать.

24. Определить сколько элементов двумерного массива больше любого элемента на главной диагонали.

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

Содержание отчета

1) Постановка задачи (общая и конкретного варианта).

2) Алгоритм основной программы в виде блок-схемы

3) Описание и назначение глобальных переменных.

4) Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

5) Текст программы.

6) Результаты тестов.

6. Пример выполнения работы и оформления отчета

Лабораторная работа №4
«Использование процедур и функций»

1. Постановка задачи: Используя процедуры или функции, сформировать двумерный массив (матрицу), распечатать его, решить указанную в варианте задачу и вывести результаты в удобном для пользователя виде.

Вариант №26. Написать подпрограмму, которая находит максимальный элемент в матрице размерностью МхМ. С помощью этой подпрограммы найти минимальный из таких элементов в N матрицах.

2. Алгоритм основной программы в виде блок-схемы

 
 

 


3. Описание и назначение глобальных переменных

I:integer - счетчик цикла для перебора матриц;

K:integer - минимальный элемент массива из максимальных элементов матриц;

size: integer; - размер матриц;

n: integer; - количество матриц

r: mas_matr; - массив из матриц 10х10.

a: mas_max; - массив целых чисел для хранения максимальных значений матриц;

4. Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

1) procedure Form(var R: mas_matr; nom: integer); - формирование матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, датчиком случайных чисел формируется элемент R[nom,i,j].

2) procedure Print(R: mas_Matr; nom: integer); - печать матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, печатается элемент R[nom,i,j].

3) function Max(r:matr):integer; - вспомогательная функция для поиска максимального элемента в матрице R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, элемент R[i,j] сравнивается с максимальным.

4) procedure Maxim(r:Mas_matr;var a:mas_max); - формирует массив максимальных элементов А, r- массив матриц, в которых ищутся максимальные элементы.

С помощью цикла с параметром для каждой матрицы из массива матриц r вызывается функция Max.

5) function minim(a:mas_max):integer; - ищет минимальный элемент в массиве А.

С помощью цикла с параметром перебирается массив а и каждый элемент сравнивается с минимальным.

5. Текст программы

uses crt;

type

matr= array [1..10,1..10] of integer;

mas_max =array[1..10]of integer;

mas_matr =array[1..10]of Matr;

var i, k, size: integer;

n: integer;

r: mas_matr;

a: mas_max;

procedure Form(var R: mas_matr; nom: integer);

var i, j: integer;

begin

for i:=1 to size do

for j:=1 to size do

r[nom,i,j]:=random(100);

end;

procedure Print(R:mas_Matr;nom:integer);

var i,j:integer;

begin

for i:=1 to size do begin

for j:=1 to size do

write(r[nom, i, j]:4);

writeln;

end;

writeln;

end;

function Max(r:matr):integer;

var v,i,j:integer;

begin

v:=r[1,1];

for i:=1 to size do

for j:=1 to size do

if v<r[i,j]then

v:=r[i,j];

max:=v;

end;

procedure Maxim(r:Mas_matr;var a:mas_max);

var t:integer;

begin

for t:=1 to n do

a[t]:=max(r[t]);

end;

function minim(a:mas_max):integer;

var t,min:integer;

begin

min:=a[1];minim:=1;

for t:=1 to n do

if min>a[t] then begin min:=a[t];

minim:=t;

end;

end;

begin{main}

clrscr;

writeln('Введите количество матриц');

readln(n);

writeln('Введите размер матрицы');

readln(size);

for i:=1 to n do begin

form(R,i);

print(R,i);

end;

maxim(r,a);

k:=minim(a);

print(r,k);

end.

6. Тесты

N Size Исходные матрицы Результат
    0 3 86 20 27 67 31 16 37   42 8 47 7 84 5 29 91 36 0 3 86 20 27 67 31 16 37
    0 3 86 20   27 67 31 16   37 42 8 47 37 42 8 47

Лабораторная работа № 5
«Работа с типизированными и текстовыми файлами»

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

Изучение типизированных и текстовых файлов и способов работы с ними.



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 541; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.89.127.249 (0.044 с.)