Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч.пособие 1 курс, 2012.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.89 Mб
Скачать

Практическое занятие № 17

Модульное программирование

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

Задание

Дома подготовить отчетный лист. Записать в отчетный лист формулировку задания (вариант задания соответствует порядковому номеру студента в журнале, выбрать из каждого уровня задач свой вариант). Изучить методические рекомендации к проведению практического занятия (Учебное пособие под ред. Чекановой Н. Н.). Изучить формат операторов описания процедуры, функции, познакомиться с особенностями модульного программирования. Рассмотреть и выполнить на компьютере примеры методического материала по данной теме. Продумать алгоритм решения индивидуального задания: составить блок – схему и написать программу на языке Турбо Паскаль. Ответить на контрольные вопросы.

Работа в лаборатории

  1. Показать преподавателю заготовки выполненных дома заданий.

  2. Набрать программу в оболочке текстового редактора Турбо Паскаля, выполнить трансляцию и отладку программы.

  3. Запустить программу на выполнение, получить результат.

  4. Оформить отчет и сделать выводы по работе.

Пояснения к работе

Важнейшим принципом программирования является принцип модульности программ. В модульной программе отдельные её части, предназначенные для решения каких – то частных задач, организованы в подпрограммы.

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

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

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

  • стандартные процедуры и функции языка Паскаль;

  • процедуры и функции, определенные пользователем.

Рассмотрим особенности организации этих информационных элементов (объектов).

Процедуры описываются в специальном разделе описательной части программы – разделе описания процедур и функций, вслед за разделом переменных (Var). Любая процедура состоит, аналогично программе, из заголовка процедуры и ее содержательной части, включающей блоки описаний и блок действий (заключаемый в операторные скобки Begin-End).

Запись заголовка процедуры:

Procedure <имя> (<список параметров>);

<список параметров> - перечень формальных параметров с указанием их типов. Допускается описание процедуры, не содержащей формальных параметров:

Procedure <имя>;

Пример 1

Procedure a17 (a: real; b, c: real; var x1, x2: real; var k: integer);

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

Пример 2

{Процедура f вычисляет значения факториала числа r}

{и возвращает результат в переменной r1.}

{для хранения значений факториалов (r1) использован тип longint.}

{тип longint – целочисленная переменная в диапазоне -2147483648..2147483647, размер в байтах - 4}

Procedure f (r: integer; var r1: longint);

Var

i: integer;

begin

{если значение r отрицательно, то r1=0, и процедура завершается.}

if r < 0 then

begin

r1:=0;

exit;

end;

{ниже реализован алгоритм вычисления r! = 1 2 3 n}

r1:=1;

for i:=2 to r do

r1:=r1*i;

end.

Формальные параметры нельзя описывать в разделе описаний процедуры. Для обращения к процедуре необходимо использовать оператор вызова процедуры. Он имеет следующий вид:

<имя процедуры> (<список _ фактических _ параметров>)

например:

f (n, fn);

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

Количество, типы и порядок следования формальных и фактических параметров должны совпадать.

При использовании процедур в программе следует соблюдать следующие правила:

  • параметры, через которые в процедуру передаются исходные данные, должны быть описаны как параметры – значения;

  • параметры, в которые записываются результаты работы процедуры, описываются как параметры – переменные;

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

  • Количество, типы и порядок следования формальных и фактических параметров должны совпадать.

Пример 3: оформить в виде процедуры алгоритм вычисления степени у = х n с натуральным показателем п.

Procedure Step1 (n: Integer; x: Real; Var y: Real);

Var

i: Integer;

begin

y:=1;

For i: = 1 to n do

у:= у * x;

end;

В данном случае n и х - исходные данные для процедуры, описанные в основной программе. Y принимает в процедуре новое значение, поэтому в формальных параметрах оно описано в блоке var.

Пример 4: Оформить тот же самый алгоритм в виде процедуры без параметра.

Program Are;

Var

n: Integer; x, у: Real;

procedure Step2;

Var

i: Integer;

begin

y:=1;

for i := 1 to n do

у :=y* x;

end;

begin

Step2;

end.

В этом случае процедура Step2 не содержит списка формальных параметров и работает с локальной переменной i и переменными п, х, у, которые описываются в основной программе. Переменные п, х, у называются глобальными (имеют одно и то же значение в основной программе и в подпрограмме) по отношению к процедуре Step2. Значения глобальных переменных доступны и могут быть использованы в любой точке основной программы (в частности, внутри данной процедуры).

Функция - это программный модуль, результат выполнения которого есть единственное скалярное значение, присваиваемое имени этой функции. Следовательно, функция является частным случаем процедуры. Вместе с тем, между ними есть и принципиальные отличия: результатом функции является единственное значение; данный результат в основную программу передается через имя этой функции.

Описание функции:

Function <имя> (<список параметров>) : <тип функции>;

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

Пример 5: оформить тот же пример с функцией.

Program Ars;

procedure Step3(n: Integer, x: Real; Var i: Integer; y: Real);

begin y:=1;

For i:= 1 to n do

y:=y*x;.

Step3:= y;

end;

begin

Step3 (n: Integer; x: Real): Real;

end.

Пример 6.

Найти площадь четырёхугольника, используя вспомогательный алгоритм Герон для нахождения площади треугольника (рис. 1).

Для того чтобы вычислить площадь четырёхугольника, заметим, что она складывается из площадей двух треугольников s1 и s2.Площадь каждого треугольника можно найти по формуле Герона, согласно которой:

, где a, b, c – длины сторон, а

p = (a + b + c) / 2 – полупериметр треугольника.

Рис. 1. Четырёхугольник

Программа вычисления площади четырёхугольника.

program pl4;

var

a, b, c, d, e, p1, p2, s1, s2, s4: real;

procedure geron (x, y, z: real; var p, s: real);

begin

p:=(x + y + z)/2;

s:=sqrt (p*(p-x)*(p-y)*(p-z));

end;

begin

writeln (‘a=’); readln (a);

writeln (‘b=’); readln (b);

writeln (‘c=’); readln (c);

writeln (‘d=’); readln (d);

writeln (‘e=’); readln (e);

geron (a, d, e, p1, s1);

writeln (‘p1=’, p1:4:2, ’’ , ’s1=’, s1:5:2);

geron (b, c, e, p2, s2);

writeln (‘p2=’, p2:4:2, ’’ , ’s2=’, s2:5:2);

s4:=s1+s2;

writeln (’s4=’, s4:5:2);

end.

Пример 7

Написать программу решения группы квадратных уравнений

pi x2 + qix + ri = 0, где p, q, rмассивы вещественных чисел, состоящие из k элементов. Решение одного уравнения оформить в виде процедуры.

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

Заголовок процедуры имеет вид:

Procedure korni (a, b, c: real; var x1, x2: real; var pr: Boolean);

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

В начальном блоке подпрограммы вместо слова «начало» следует писать имя подпрограммы с указанием списка параметров. Значение параметра pr определяется знаком дискриминанта.

Переменная k указывает на количество уравнений.

Программа

Program urav;

{здесь начинается раздел описаний программы urav}

var

p,q,r: array [1..5] of real;

x, y: real;

I, k: integer;

L: Boolean;

procedure korni (a, b, c: real; var x1, x2: real; var pr: Boolean);

{в разделе описаний присутствует процедура korni решения квадратного уравнения}

{a, b, c – входные параметры – значения}

{x1, x2 – выходные параметры – переменные}

{переменная pr возвращает значение true, если есть действительные корни. Значение false возвращается, если корней нет и дискриминант отрицательный}

var

d: real;

begin

d : = b*b - 4*a*c;

if d > = 0 then

begin

pr : = true;

x1: = (- b + sqrt (d))/2/a;

x2:= (- b – sqrt (d))/2/a;

end

else

pr : = false

end;

{начало основной программы}

begin

writeln (‘введите количество уравнений’);

read (k);

{в цикле введем коэффициенты уравнений, вызовем процедуру и, если есть корни, выведем их на печать}

for i:=1 to k do

begin

writeln (‘ введите коэффициенты’, I ,’ – го уравнения’);

read (p[i], q[i], r[i]);

korni (p[i], q[i], r[i], x, y, l);

{ проверка, существуют ли корни (l = true)}

if l then

Writeln (‘корни’ , I ,’ - го’,’ уравнения’, ’ ’ , x : 8 : 5, ’ ’ , y: 8 : 5 )

Else

Writeln (‘в ’ , I ,’ - ом уравнении корней нет’);

end;

end.

Блок – схема решения основной задачи

Содержание отчета

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

Контрольные вопросы

  1. Каково назначение процедур и функций и различие в их записи?

  2. Как описывается процедура в языке Паскаль?

  3. Как описывается функция в языке Паскаль?

  4. Какие параметры называют формальными? Фактическими?

  5. Какие параметры используются в качестве входных данных?

  6. Какие параметры используются в качестве выходных данных?

  7. Какие правила следует соблюдать при использовании процедур?

  8. Какие переменные называются глобальными?

  9. Что такое параметры – значения?

  10. Что такое параметры – переменные?

Литература

      1. Алексеев Е. Р., Чеснакова О. В. Турбо паскаль 7. 0. ─ С. 141 – 173

      2. Немнюгин С. А., Перколаб Л. В. Изучаем Turbo Pascal. ─ С. 134 - 157

      3. Потопахин В. П. Turbo Pascal. Освой на примерах. ─ С. 56 – 69

      4. Культин Н. Б. Turbo Pascal в задачах и примерах. ─ С. 55 – 56, 216

      5. Чеканова Н. Н. Информатика и ИКТ: Учебное пособие. ─ С. 103 – 112.

Варианты индивидуальных заданий

Вариант 1.

Исходные данные: x=0,3(0,01)0,5

Вариант 2.

Исходные данные: х=0(0,1)1,8

Вариант 3.

Исходные данные: х= - 0,7(0,1)1,6

Вариант 4.

Исходные данные: x= - 0,4(0,2)2

Вариант 5.

Исходные данные: х= - 1,7(0,1)0,5

Вариант 6.

Исходные данные: x=6,5(0,1)7,5

Вариант 7.

Исходные данные: х = 1(0,1)2

Вариант 8.

Исходные данные: х = 0(0,2)2

Вариант 9.

Исходные данные: х = 1(1)6

Вариант 10.

Исходные данные: х = 10(5)50

Вариант 11.

Исходные данные: a = 0,5(0,01)0,65

Вариант 12.

Исходные данные: х = 0(0,1)2,3

Вариант 13.

Исходные данные: х = - 0,4(0,1)1,5

Вариант 14.

Исходные данные: х = - 0,3(0,2)2,5

Вариант 15.

Исходные данные: x = 0,6(0,1)1,7