- •Программирование с использованием подпрограмм
- •Структура программы с использованием подпрограмм
- •Классификация параметров подпрограмм
- •Программирование с использованием процедур
- •Задания для самостоятельной работы
- •Программирование с использованием функций
- •Задания для самостоятельной работы
- •Процедурные типы
- •Примеры решения задач с использованием процедурных типов
- •Задания для самостоятельной работы
Задания для самостоятельной работы
Разработать функцию, вычисляющую сумму цифр целого числа. Для 3 вещественных чисел, заданных с точностью до 4 знака после запятой, вычислить сумму цифр целой и дробной частей, сравнить эти суммы и вывести результат сравнения.
Разработать 3 функции обработки целочисленного массива: нахождения индекса минимального элемента, индекса максимального элемента, суммы элементов в указанной части массива. В массиве элементы делятся на 3 части двумя числами: минимальным и максимальным элементами. Определить суммы элементов в каждой части массива.
Разработать функцию, находящую максимальный элемент целочисленной квадратной матрицы. Функцию применить для обработки целочисленной квадратной матрицы А(n*n). Выделяя на главной диагонали последовательно по одному элементу A(i,i), можно получить n матриц, ограниченных элементами A(1,1) и A(i,i). Сформировать одномерный массив, элементами которого являются максимальные элементы всех таких матриц.
Разработать функцию, проверяющую упорядочен ли по алфавиту массив строк. Ввести массив строк, если он не упорядочен по алфавиту, то упорядочить его.
Разработать функцию, которая подсчитывает количество вхождений заданного символа в строку. В строке произвольной длины определить наиболее часто встречающуюся цифру.
Разработать функцию, проверяющую, содержит ли одновременно одномерный массив не менее 2 четных элементов и ни одного нулевого элемента. Функцию применить для обработки целочисленной матрицы. Определить номера строк, удовлетворяющих указанным требованиям.
Разработать функцию, определяющую для заданного натурального числа m такое натуральное число n, что двоичная запись числа n получается из двоичной записи числа m изменением порядка цифр на обратный порядок их следования. (Например: 6=110, а 3=011). Функцию применить для обработки массива натуральных чисел. Сформировать новый массив, получив для каждого элемента исходного массива с помощью функции соответствующее число.
Разработать функция, которая проверяет, является ли слово палиндромом? Функцию применить для обработки строки произвольной длины. Сформировать новую строку из слов-палиндромов исходной строки. Если таких слов нет, выдать сообщение.
Разработать функцию для подсчета количества слов заданной длины в строке. Функцию применить для подсчета таких слов в текстовом файле.
Процедурные типы
В качестве формальных параметров подпрограмм возможно использование других подпрограмм (процедур и функций). Предварительно в разделе описания типов Type необходимо задание так называемого процедурного типа.
Описание процедурных типов имеет два варианта:
<имя типа>=Procedure (<список формальных параметров>);
<имя типа>=Function (<список формальных параметров>):<тип результата>;
Описание процедурного типа представляет заголовок процедуры или функции, в котором не указано имя подпрограммы. Например:
Type
Proc=Procedure(a:real; Var b:integer);
Func=Function(x:real):real;
В дальнейшем этот тип может использоваться при описании формальных параметров других подпрограмм. Слова Var, Out, Const для этих формальных параметров использовать нельзя. Например:
Procedure OBR(y:real;Var c:real: v:Func);
Все функции, заголовок которых совпадает с заданным процедурным типом по количеству, типам и порядку следования формальных параметров, являются функциями этого типа. Например:
Function Y1(x:real):real;
begin
Y1:=x*x+4;
end;
Function Y2(z:real):real;
begin
Y2:=sin(z)*cos(z);
end;
Любую из этих функций можно использовать в качестве фактического параметра при вызове процедуры OBR:
OBR(y,c,Y1);
OBR(y,c,Y2);
Стандартные подпрограммы не принадлежат к объявленным в программе процедурным типам. Например, функция sin(x) не является функцией типа func. Чтобы использовать ее в качестве фактического параметра при вызове процедуры OBR, необходимо создать функцию следующего вида:
Function Y3(z:real):real;
begin
Y3:=sin(x);
end;
Вызов функции OBR: OBR(y,c,Y3);
Процедурный тип можно использовать для описания переменных:
Var
p:Func;
a:array[1..3] of func;
Значениями переменных такого типа являются имена функций такого же типа, и можно написать следующие операторы присваивания:
p:=Y1;
a[1]:=Y1; a[2]:=Y2;
После выполнения таких операторов присваивания функция Y1 получила 2 «псевдонима» и может быть вызвана 3 способами:
Y1(x); p(x); a[1](x);
В качестве фактического параметра также можно использовать любое имя:
OBR(y,c,Y1); OBR(y,c,p); OBR(y,c,a[1]);
