Файл: Основные правила работы с функциями: примеры и ограничения использования функций в различных языках программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.04.2023

Просмотров: 188

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

К примеру, в рассмотренном примере из основной программы возможен вызов процедур А и В, но невозможен вызов ни одной из вложенных в них процедур А1, А2, В1 и т.п.

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

Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания данной подпрограммы, они являются глобальными по отношению к подпрограмме. [6, с. 153-156]

2.2. Использование функций в Turbo Pascal

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

  1. Укрупненный алгоритм сортировки двумерного массива целых чисел по возрастанию, определения минимального и максимального положительного элементов.
  2. Сначала вводится размерность двумерного массива;
  3. Затем вводятся элементы двумерного массива целых чисел, причем числа могут быть и положительными и отрицательными;
  4. После сортировки массива распечатаем отсортированный массив;
  5. Находим минимальный положительный элемент массива. Поиск минимального элемента оформим в виде процедуры-функции;
  6. Находим максимальный положительный элемент массива, поиск его оформим также в виде функции;
  7. Распечатаем минимальный и максимальный положительные элементы массива. [5]
  8. Приведем алгоритм определения минимального положительного числа двумерного массива целых чисел, оформленного в виде функции MinM, параметрами которой является размерность квадратной матрицы и сам двумерный массив. [7]
  9. В цикле по всем строкам и столбцам массива проверяется, является ли элемент массива положительным числом;
  10. Если элемент массива является положительным числом, то проверяется, присваивалось ли переменной М3 (минимальный элемент) какое-то значение элемента массива с помощью переменной – переключателя ll.

Значение ll = 1 говорит о том, что присвоение было, тогда М3 (минимальный элемент) сравнивается со всеми остальными положительными элементами массива. Если какой-то элемент массива оказывается меньше М3, то М3 присваивается это значение.


  1. Функция передает в основную программу значение минимального положительного элемента массива.
  2. Приведем теперь алгоритм определения максимального положительного числа двумерного массива целых чисел, оформленного в виде функции MахM, параметрами которой является размерность квадратной матрицы и сам двумерный массив.
  3. В цикле по всем строкам и столбцам массива проверяется, является ли элемент массива положительным числом;
  4. Если элемент массива является положительным числом, то проверяется, присваивалось ли переменной М3 (максимальный элемент) какое-то значение элемента массива с помощью переменной – переключателя ll. Значение ll = 1 говорит о том, что присвоение было, тогда М3 сравнивается со всеми остальными положительными элементами массива. Если какой-то элемент массива оказывается больше М3, то М3 присваивается это значение.
  5. Функция передает в основную программу значение максимального положительного элемента массива. [4]

Приведем сначала укрупненную блок-схему алгоритма (рис. 3).

начало

Ввод n

Ввод массива M[n.n]

Печать введ. массива

Определение минимального элемента

Определение максимального элемента

Печать min max элементов

конец

Рисунок 3 - Укрупненная блок-схема алгоритма [5]

Теперь приведем более детальную блок-схему сортировки массива (рис. 4).

начало

Ll=0;

I=1;

j=1;

M3>Mij

Ll=1

Mi,j>0

да да

да

Ll=1; M3=Mij

M3=Mij

j=j+1;

j<=k

да

i=i+1;

I<=k

да

MINM=M3

конец

Рисунок 4 – Блок-схема алгоритма нахождения минимального положительного элемента массива [4]

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

PROGRAM MAXMINV;

CONST

n=10; { максимальный размер массива }

type

Ind = 1 .. 10;

MM = array [ind] of Integer;

Matr = array [ind] of MM;

var

ii,jj,n : Ind;

M : Matr;

MN, MX: Integer; [12]

FUNCTION MINM (K:INTEGER;M:Matr):Integer;

{ Нахождение минимального положительного числа в двумерном массиве }

var I,j.M3,ll: integer;

BEGIN

Ll:=0;

for i:=1 to k do

for j:=1 to k do

if M[I,j]>0 then

begin

if ll=1 then if M3>M[I,j] then M3:=M[I,j] else

else begin ll:=1; M3:=M[I,j]; end;

end;

MINM:=M3;

END; {Процедуры-функции MINM} [11]

FUNCTION MAXM (K:INTEGER;M:Matr):Integer;

{Нахождение максимального положительного числа в двумерном массиве целых чисел }


var I,j,M3,ll: integer;

BEGIN

Ll:=0;

for i:=1 to k do

for j:=1 to k do

if M[I,j]>0 then

begin

if ll=1 then

if M3<M[I,j] then M3:=M[I,j] else

else begin ll:=1; M3:=M[I,j]; end;

end;

END; [20]

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

writeln(` введите размер двумерного массива n`);

read(n);

writeln(`введите массив по строкам`);

for ii:=1 to n do

for jj :=1 to n do

Read (M[ii,jj]);

ReadLn;

{Печать введенного массива}

writeln (`Введенный массив`);

for ii: =1 to n do

begin

for jj:=1 to n do

write (‘ ’, M[ii,jj]);

writeln;

end;

{Определение минимального и максимального положительных элементов массива}

MN: = MINM (N,M);

MX: = MAXM (N,M);

Writeln('Минимальное положительное число массива - ',MN);

Writeln('Максимальное положительное число массива - ',MX);

readln;

END. [8, 4, 7]

2.3. Использование функций в Delphi

Функции Delphi также могут выполнять всё перечисленное, но еще и возвращая результат в присвоенном ей самой значении. То есть вызов функции может быть в выражении справа от оператора присваивания. То есть, функция является более универсальным объектом. [9]

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

Параметры используют:

  • для передачи данных в подпрограмму;
  • для получения результата из подпрограммы.

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

Функция — это подпрограмма, т.е. последовательность операторов, имеющая имя. Процесс перехода к операторам функции называется вызовом функции или обращением к функции. Процесс перехода от операторов функции к операторам программы, вызвавшей функцию, - возврат из функции. В общем виде обращение к функции выглядит так:

Переменная:= Функция (Параметры);

где:

Переменная — имя переменной, которой присваивается значение, вычисляемое функцией; Функция — имя функции, значение которой присваивается переменной;

Параметры — список формальных параметров, применяемых для вычисления значения функции. В качестве параметров обычно используются переменные или константы. [24]

Обратим внимание на то, что:

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

Объявление функции в общем виде выглядит так:

function Имя (параметр1: тип1, ..., параметрК: типК): Тип;

var // здесь объявления локальных переменных

begin // здесь инструкции функции

Имя:= Выражение;

end; [24]

где:

function — зарезервированное слово языка Delphi, обозначающее, что далее следуют операторы, реализующие функцию программиста;

имя — имя функции, используемое для перехода из программы к операторам функции; параметр — переменная, значение которой используется для вычисления значения функции. Отличие параметра от обычной переменной в объявлении его не в разделе объявления переменных var, а в заголовке функции. Конкретное значение параметр получает во время работы программы при вызове функции из основной программы; тип — тип значения, возвращаемого функцией в вызывающую ее программу. Обратим внимание, что последовательность операторов, реализующих функцию, завершается оператором, присваивающим значение имени функции. [21]

Запись функции производится так:

function Имя_функции((*параметры*)): тип_результата;

begin

  //Код функции;

  Result := результат;

end;

Delphi содержит набор стандартных функций, приведенных в таблице А.1 приложения А. Таблица 2 содержит преобразования.

Таблица 2 - Преобразования [24]

Int( Выражение: real) :real

Целая часть

Trunc (Выражение: real) : longint

Целая часть

Round (Выражение: real) : longint

Округление к ближайшему целому

IntToStr (Выражение)

Преобразование числового выражения целого типа в строку

FloatToStr (Выражение)

Преобразование вещественного числа в строковую переменную

FloatToStrF ( Выражение, Формат, Точность, КоличествоЦифр)

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

StrToInt ( Строка : string)

Преобразование строки, изображающей целое или вещественное число, в число

StrToFloat ( Строка : string)

Преобразование строки, изображающей вещественное число, в число

При составлении и отладке программ использовались книга Осипова Д.Л. Программирование для Windows, OS X, iOS и Android [2] и многие другие учебники по Delphi 7.


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

Исходный модуль с именем factorial.pas, выполняемый модуль с именем Pfact.exe.

unit factorial;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

procedure vichf(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function Fact(n: integer): int64;

begin

if (n=0)or(n=1) then Fact:=1

else Fact:=n*Fact(n-1);

end; [5, 9, 21]

procedure TForm1.vichf(Sender: TObject);

var

ms: string;

m,p: integer;

begin

ms:= Trim(Edit1.Text);

m:=StrToInt(ms);

p:=Fact(m);

ms:='m!='+ IntToStr(p);

ShowMessage(ms);

Application.Terminate;

Form1.Close;

end;

end. [21, 22]

На рисунке 5 приведен скриншот результата выполнения программы Pfact.exe.

Рисунок 5 – Скриншот программы расчета n! Pfact.exe

Программа работает правильно.

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

Все программы отлажены и работают правильно.

ЗАКЛЮЧЕНИЕ

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

Преимущества использования подпрограмм очевидны. Во-первых, отсутствие дублирования кодов, что ведет к сокращению трудоемкости создания программы, большему удобству процесса отладки и внесения изменений. При использовании программой подпрограммы, изменения вносятся зачастую только в текст подпрограммы. Во-вторых, значительное повышение надежности программ. Использование подпрограмм целесообразно не только для избежания дублирования кода; удобно разделение большой задачи на несколько подзадач и оформление каждой задачи как подпрограммы. При этом значительно улучшение «читаемости» программ и, как следствие, существенное облегчение процесса отладки.