Файл: Основные правила работы с функциями: примеры и ограничения использования функций в различных языках программирования.pdf
Добавлен: 25.04.2023
Просмотров: 188
Скачиваний: 1
СОДЕРЖАНИЕ
ГЛАВА 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
1.1. Языки программирования низкого и высокого уровня
1.2. Обзор некоторых языков программирования высокого уровня
ГЛАВА 2. РАБОТА С ФУНКЦИЯМИ В TURBO PASCAL И DELPHI
2.1. Использование функций в Turbo Pascal и Delphi
2.2. Использование функций в Turbo Pascal
К примеру, в рассмотренном примере из основной программы возможен вызов процедур А и В, но невозможен вызов ни одной из вложенных в них процедур А1, А2, В1 и т.п.
Вышеприведенное относится не только к именам подпрограмм, но и вообще к любым именам, объявленным в них. Все имена в пределах подпрограммы, в которой они объявлены, должны быть уникальны и не должны совпадать с именем самой подпрограммы. При входе в подпрограмму низшего уровня становятся доступны не только объявленные в ней имена, но и все имена верхнего уровня.
Подпрограмме доступны только те объекты верхнего уровня, которые описаны до описания данной подпрограммы, они являются глобальными по отношению к подпрограмме. [6, с. 153-156]
2.2. Использование функций в Turbo Pascal
Приведем пример, состоящий в выполнении упорядочения по возрастанию двумерного массива целых чисел, положительных и отрицательных, и поиска минимального и максимального положительного элементов.
- Укрупненный алгоритм сортировки двумерного массива целых чисел по возрастанию, определения минимального и максимального положительного элементов.
- Сначала вводится размерность двумерного массива;
- Затем вводятся элементы двумерного массива целых чисел, причем числа могут быть и положительными и отрицательными;
- После сортировки массива распечатаем отсортированный массив;
- Находим минимальный положительный элемент массива. Поиск минимального элемента оформим в виде процедуры-функции;
- Находим максимальный положительный элемент массива, поиск его оформим также в виде функции;
- Распечатаем минимальный и максимальный положительные элементы массива. [5]
- Приведем алгоритм определения минимального положительного числа двумерного массива целых чисел, оформленного в виде функции MinM, параметрами которой является размерность квадратной матрицы и сам двумерный массив. [7]
- В цикле по всем строкам и столбцам массива проверяется, является ли элемент массива положительным числом;
- Если элемент массива является положительным числом, то проверяется, присваивалось ли переменной М3 (минимальный элемент) какое-то значение элемента массива с помощью переменной – переключателя ll.
Значение ll = 1 говорит о том, что присвоение было, тогда М3 (минимальный элемент) сравнивается со всеми остальными положительными элементами массива. Если какой-то элемент массива оказывается меньше М3, то М3 присваивается это значение.
- Функция передает в основную программу значение минимального положительного элемента массива.
- Приведем теперь алгоритм определения максимального положительного числа двумерного массива целых чисел, оформленного в виде функции MахM, параметрами которой является размерность квадратной матрицы и сам двумерный массив.
- В цикле по всем строкам и столбцам массива проверяется, является ли элемент массива положительным числом;
- Если элемент массива является положительным числом, то проверяется, присваивалось ли переменной М3 (максимальный элемент) какое-то значение элемента массива с помощью переменной – переключателя ll. Значение ll = 1 говорит о том, что присвоение было, тогда М3 сравнивается со всеми остальными положительными элементами массива. Если какой-то элемент массива оказывается больше М3, то М3 присваивается это значение.
- Функция передает в основную программу значение максимального положительного элемента массива. [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
Программа работает правильно.
Вывод: Во второй практической главе рассмотрено использование функций в языках высокого уровня Паскаль и Дельфи. Поставлены задачи, реализована алгоритмизация и программирование, приведены блок-схемы и листинги программ, а также скрин-шоты результатов выполнения программ.
Все программы отлажены и работают правильно.
ЗАКЛЮЧЕНИЕ
Важной составной частью программирования в ЯВУ является использование подпрограмм - специальным образом оформленных и логически законченных блоков операторов. Процедуры и функции чрезвычайно полезны, поскольку позволяют один раз создать код, а затем многократно его использовать по мере необходимости.
Преимущества использования подпрограмм очевидны. Во-первых, отсутствие дублирования кодов, что ведет к сокращению трудоемкости создания программы, большему удобству процесса отладки и внесения изменений. При использовании программой подпрограммы, изменения вносятся зачастую только в текст подпрограммы. Во-вторых, значительное повышение надежности программ. Использование подпрограмм целесообразно не только для избежания дублирования кода; удобно разделение большой задачи на несколько подзадач и оформление каждой задачи как подпрограммы. При этом значительно улучшение «читаемости» программ и, как следствие, существенное облегчение процесса отладки.