Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

9.4. Использование процедур и функций

Задание. Определить наибольший общий делитель двух целых чисел.

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

Входные данные:

A,B– целые, положительные числа.

Выходные данные:

Nod– наибольший общий делительAиB.

Метод решения: алгоритм Евклида.

Алгоритм.Выдача наибольшего общего делителя двух целых чисел.

Входные данные.

СКАЛЯР A,B– целые, положительные числа.

Выходные данные.

СКАЛЯР Nod– целое число.

Начало

A:=0

B:=0

ЦИКЛ_ПОКА(A<=0 ИЛИ B<=0)

Вывод(‘Input A,B : ’)

ввод(A,B)

КОНЕЦ_ЦИКЛА

Findnod(A,B,Nod)

Вывод(‘Nod(A,B)= ’,Nod)

Конец

Алгоритм.Процедура определения наибольшего общего делителя двух целых чисел (findnod).

Входные данные.

СКАЛЯР A,B– целые, положительные числа.

Выходные данные.

СКАЛЯР Nod– целое число.

Промежуточные данные.

СКАЛЯР R– целое число. {остаток от деления }

Начало

R:=1

ЦИКЛ_ПОКА(R<>0)

R:=A mod B

A:=B

B:=R

КОНЕЦ_ЦИКЛА

Nod:= A

Конец

Блок - схема программы

True False Рис. 9.4

Блок-схема процедуры findnod.

True

False

Рис. 9.5

Программа на языке Паскаль, использующая процедуру.

Program Exam7;

Var

A, B, Nod: integer;

procedure findnod (A, B: integer; Var X: integer);

Var R: integer;

Begin

R:=1;

While R<>0 do

Begin

R:=A mod B;

A:=B; B:=R;

End;

X:=A;

End;

Begin A:=0; B:=0;

While (A<=0) or (B<=0) do begin

Writeln('Input A,B <>0 :');

Readln(A,B);

End;

findnod(A,B,Nod);

Writeln('Nod(A,B) = ',Nod);

Readln;

End.

Результаты тестирования.

1. Исходные данные:

A=84

B=36

Результат: Nod(A,B)=12

  1. Тестовый пример 2:

A=84

B=56

Результат: Nod(A,B)=28

Результаты, выданные программой.

  1. Тестовый пример1

InputA,B<>0 :

84

36

Nod(A,B) = 12

  1. Тестовый пример 2

InputA,B<>0 :

84

56

Nod(A,B) = 28

Программа на языке Паскаль, использующая функцию.

Program Exam7;

Var

A, B, Nod: integer;

Function findnod (A, B: integer): integer;

Var R: integer;

Begin

R:=1;

While R<>0 do

Begin

R:=A mod B;

A:=B; B:=R;

End;

findnod :=A;

End;

Begin A:=0; B:=0;

While (A<=0) or (B<=0) do begin

Writeln('Input A,B <>0 :');

Readln(A,B);

End;

Nod := findnod(A,B);

Writeln('Nod(A,B) = ',Nod);

Readln;

End.

Результаты тестирования.

1. Исходные данные:

A=84

B=36

Результат: Nod(A,B)=12

  1. Тестовый пример 2:

A=84

B=56

Результат: Nod(A,B)=28

Результаты, выданные программой.

  1. Тестовый пример1

InputA,B<>0 :

84

36

Nod(A,B) = 12

  1. Тестовый пример 2

InputA,B<>0 :

84

56

Nod(A,B) = 28

Замечание.

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

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

9.5. Массивы – параметры процедур и функций

Массив является структурным типом данных, поэтому для того, чтобы передать массив в качестве параметра в подпрограмму, необходимо в разделе типов основной программы объявить требуемый тип «массив». Например,

TYPEVect=array[1..20]ofreal; { тип одномерного массива}

TMatrix=array[1..10,1..10] of real; { тип двумерного массива} .

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

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

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

Входные данные:

A,B– одномерные массивы размераn1 иn1, соответственно.

Выходные данные:

Proizv– произведение максимальных элементов массивовAиB.

Метод решения: для определения максимального элемента массива использовать функцию.

Программа будет включать внутреннюю функцию MaxEl. Алгоритм основной программыMainпредставлен на рис. 9.6, алгоритм функцииMaxElпредставлен на рис. 9.7.

Рис. 9.6