Цель работы: познакомиться с понятиями "функция" на языке программирования Паскаль, закрепить практические навыки программирования на примере реализации алгоритмов при помощи функций, научиться применять метод последовательной детализации в практическом программировании, применять функции при решении задач.
Контрольные вопросы:
1. Дайте определение подпрограммы.
2. Существует ли подпрограммы без параметров?
3. Чем отличается описание процедуры от описания функции?
4. Какое количество значений возвращает функция?
5. Какие переменные называются локальными?
6. Каким образом осуществляется обмен данными между основной программой и подпрограммой без параметров?
Задачи:
1. Написать процедуру, которая выводит на экран строку, состоящую из одинаковых символов. Длина строки и символ являются параметрами процедуры.
2. Написать функцию, которая вычисляет объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра.
3. Написать процедуру, который вычисляет объем и площадь поверхности параллелепипеда.
4. Написать функцию, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента.
5. Вычислить и запомнить количество отрицательных элементов каждого столбца для матриц А(10,10) и В(5,7).
6. Составить программу для нахождения среднего балла группы по результатам сессии. Оценки групп сведены в матрицы А(25,5). В(23,5), С(22,5), D(24,5). Определить лучшую группу.
7. Составить процедуру – оператор для нахождения коэффициентов многочлена, равного произведению двух многочленов степени n и m. При помощи этой процедуры вычислить коэффициенты многочлена .
8. Даны три строки различной длины. Напечатать ту из них, где больше гласных латинских букв.
|
9. Даны три слова переменной длины. Составить слово, содержащее символы-цифры, входящие в данные слова.
10. Даны две квадратные вещественные матрицы 5-го порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
11. Даны квадратичные матрицы А и В порядка m. Получить матрицу АВ-ВА.
12. Даны окружность радиуса r с центром в точке О с координатами и две точки А и В с координатами и , соответственно. Выяснить, является ли отрезок АВ диаметром заданной окружности.
13. Даны матрицы А(3,4) и В(4,6). Поменять местами наименьшие элементы матриц А и В.
14. Вычислить математическое ожидание М и дисперсию D случайной величины по ее экспериментальным значениям , пользуясь формулами: , .
15. Выполнить с использованием функции , где x, y, z – положительные числа<1.
16. Составить программу вычисления: .
17. Выполнить с использованием функции , где x, y– положительные числа<1.
18. Подсчитать число точек, находящихся внутри круга радиусом r с центром в точке с координатами (1,1); координаты заданы массивами x(20), Y(20). Расстояние точки от центра круга определить в подпрограмме.
19. Написать функцию present, которая возвращает процент от числа, полученного в качестве аргумента.
20. Написать функцию вычисления факториала.
Литературы:
Основная литература:
1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988. - 320 с.
2. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. - М.: Наука, 1987. - 112 с.
3. Вирт Н. Алгоритмы и структуры данных./Пер. с англ. М.: Мир, 1989. - 360 с.
|
4. Грогоно П. Программирование на языке Паскаль. - М.: Мир, 1982. - 382 с.
5. Дантеманн Дж., Мишел Дж., Тейлор Д. Программирование в среде Delphi: Пер. с англ. - Киев: НИПФ “ДиаСофтЛтд.”, 1995. - 608 с.
6. Епанешников, Фолкнер Д.Р. Delphi: Пер.с англ.- М.: БИНОМ, 1995. - 464 с.
7. Орлик С.В. Секреты Delphi на примерах: - М.: БИНОМ. - 316 с.
Дополнительная литература:
1. Перминов О.Н. Программирование на языке Паскаль. - М.: Радио и связь, 1988. - 224 с.
2. Пильшиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. - М.: Наука, 1989. - 160 с.
3. Прайс Д. Программирование на языке Паскаль: Практ. руководство. - М.: Мир, 1987. - 232 с.
4. Рубенкинг Н. Турбо Паскаль для Windows: В 2 т.; Пер. с англ. - М.: Мир, 1993. - 536 с.
5. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Книга 1. Основы Турбо Паскаля. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1992. - 304 с.
6. Фаронов В.В. Паскаль и Windows. - М.: Учеб.-инж.центр МВТУ-ФЕСТО ДИДАКТИК, 1994. - 539 с.
Методические указания:
Подпрограмма – последовательность операторов языка, предназначенных для решения некоторой подзадачи. Каждая подпрограмма имеет имя, по которому можно к ней обратиться. В Паскале имеется два вида подпрограмм – процедуры и функции. Имея один и тот же смысл и аналогичную структуру, процедуры и функции различаются назначением и способом их использования.
Процедура – последовательность действий (записанных на Паскале), названная каким-либо именем. Для того чтобы выполнить эту последовательность, нужно в соответствующем месте программы указать её имя. Так, например, для очистки экрана при работе с графикой мы указываем ClearDevice;. Кроме того, что программа становится при использовании процедур короче и понятнее, процедуры можно вызывать из разных мест программы (в противном случае пришлось бы повторять в тексте программы одинаковые последовательности действий несколько раз).
|
Те действия, которые входят в процедуру, записываются до начала основной программы в следующем виде:
program...
const...
type...
var...
procedure MyProc(<служебная информация – параметры>);
begin
{действия}
end;
begin
{основная программа}
end.
Рассмотрим пример программы для поиска максимума среди чисел a+b, b+c и a+c:
program Max3;
var a,b,c,m: integer;
procedure FindMax(n1,n2,n3:integer;var max: integer);
begin
if n1>n2 then max:=n1 else max:=n2;
if n3>max then max:=n3;
end;
begin
write('введите a: '); readln(a);
write(''введите b: '); readln(b);
write(''введите c: '); readln(c);
FindMax(a+b,b+c,a+c,m);
writeln('Ìàêñèìóì èç ñóìì = ',m);
readln;
end.
В скобках после имени процедуры (в её описании) записаны так называемые параметры. Эта запись обозначает, что внутри процедуры можно использовать целые числа, обозначенные n1, n2 и n3, а также заносить значения в переменную типа integer, которая внутри процедуры называется max (а реально во время работы программы все действия производятся над переменной m). Параметры, в которых хранятся числа (n1,n2,n3) называются параметрами-значениями; а те, которые обозначают переменные – параметрами-переменными, перед ними в описании ставится слово var. Параметры, на которые имеются ссылки внутри процедуры (n1, n2, n3, max), называются формальными, а те, которые реально используются при вызове (a+b, b+c, a+c, m) — фактическими.
Процедуры последнего вида оказываются достаточно удобными. Можно один раз написать такую процедуру, убедиться в её работоспособности и использовать в других программах. Примерами таких процедур являются процедуры для работы со строками, встроенные в Турбо-Паскаль.
Функция – подпрограмма, возвращающая значение. Функцией называется подпрограмма, предназначенная для определения функциональной зависимости и дающая при своем выполнении единственное скалярное значение.
Рассмотрим описание функции. Оно очень похоже на описание процедур, но есть два отличия:
После имени функции и списка параметров (если есть) через двоеточие записывается тип значения функции (возможны не только числовые типы, но и логические, строковые, символьные);
Среди операторов в теле функции наиболее важными являются операторы присваивания значения функции (в нашем случае это строчка Max:=m;).
В записанной выше функции используется так называемая локальная переменная m, то есть переменная, которая «видна» только нашей функции, а другие процедуры и функции, а также главная программа её «не видят». Кроме локальных переменных в Турбо-Паскале можно определять локальные константы и типы.
Описание:
function имя (список формальных параметров)
{раздел описания локальных переменных}
begin
{тело функции}
end;
В теле функции должно быть не менее одного оператора, присваивающего значение идентификатору функции. Если таких присваивании несколько, то результатом выполнения функции будет значение последнего оператора присваивания. В заголовке функции, который начинается служебным словом function, обязательно указывается имя типа возвращаемого значения.
Решение одного варианта:
Написать функцию вычисления площади треугольника через длины сторон. Здесь будет использована формула Герона: , где p – полупериметр треугольника, a, b, c – длины сторон.
function Square(a,b,c: real): real;
var p: real;
begin
p:=(a+b+c)/2;
Square:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
Решение задачи: