Смекни!
smekni.com

Методические рекомендации по выполнению расчетного задания по курсу «Информатика» для студентов специальностей 200106 «Информационно-измерительная техника и технологии» (стр. 9 из 11)

Функция

Процедура

Может использоваться в выражениях как обычная переменная, например, у:=х+ln(х) Нельзя использовать в выражениях, например, нельзя написать у:=x+write (х)

Выполнение подпрограммы начинается при обращении к ней из основной программы. Процесс обращения называется вызовом процедуры или функции.

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

5.2 Формальные и фактические параметры

Параметры (переменные), определяемые при описании процедуры или функции, называются формальными.

Параметры (переменные), задаваемые при вызове подпрограммы, называются фактическими.

Замена формальных параметров фактическими делается так: на место первого формального параметра подставляется первый фактический параметр, на место второго формального параметра - второй фактический и т.д. Поэтому количество и типы формальных и фактических параметров должны совпадать.

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

- параметры-значения;

- параметры-переменные.

Основные отличия параметров-значений и параметров-перемен-ных приведены в таблице 6.

Таблица 6 - Основные отличия параметров-значений
и параметров-переменных

Параметры-значения

Параметры-переменные

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

5.3 Локальные и глобальные параметры

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

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

5.4 Рекурсия

Язык Pascal допускает, чтобы процедуры или функции были рекурсивными.

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

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

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

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

5.5 Примеры решения задач

Пример 1. Вычислить хn , используя рекурсивную функцию.

Решение:

uses crt;

var x1,x2:word;

i,m:byte; s:longint;

function xn(x,n:byte):longint;

begin

if n=0 then xn:=1

else xn:=xn(x,n-1)*x;

end;

begin

clrscr;

write('x,n='); readln(x1,m);

writeln('xn-',xn(x1,m));

readkey;

end.

Пример 2. Написать рекурсивную функцию вычисления суммы
1 + 2 + 3 + 4 + 5 + … + N.

Решение:

uses crt;

var m:word;

funnction sum(n:word):longint;

begin

if n=1 then sum:=1 else sum:=sum(n-1)+n;

end;

begin

write('n=');

readln(m);

writeln('сумма -',sum(m));

readkey;

end.

Пример 3. Написать функцию, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.

Решение:

uses crt;

var nl,n2:longint;

kl,k2:byte;

function Quantity(x:longint):byte;

var k:byte;

begin

while x<>0 do

begin

inc(k); x:=x div 10; end;

Quantity:=k;

end;

begin

writeln ('Введите два числа’);

readln(nl,n2);

kl:=Quantity(nl); {количество цифр первого числа}

k2:=Quantity(n2);{количество цифр второго числа}

if kl=k2 then writeln('Одинаковое количество цифр') else if kl>k2 then writeln('В первом числе цифр больше') else writeln('Во втором числе цифр больше');

readkey;

end.

Пример 4. Дана точка. Определить, лежит ли она в кольце.

Решение:

uses crt;

var x,y,r1,r2,a,b:real;

procedure haltpr;

begin

writeln('Неверные данные');

write('r1<r2');

readln; halt;

end;

begin

clrscr;

write('координаты центра окр. a=');readln(a);

write('координаты центра окр. b=');readln(b);

write('x='); readln(x);

write('y='); readln(y);

write('r1=');readln(r1);

write('r2=');readln(r2);

if r1>r2 then haltpr;

if (sqr(x-a)+sqr(y-b)<sqr(r2))and(sqr(x-)+
sqr(y-b)>sqr(r1))

then write('лежит')

else write('не лежит');

readln;

end.

Пример 5. Определить, сократимая ли дробь a/b (дробь a/b несократимая, если НОД=1).

Решение:

uses crt;

var m,n,ot:longint;

procedure nod(a,b:longint; var n:longint);

begin

while a<>b do

if a>b then a:=a-b

else b:=b-a;

n:=a;

end;

begin

clrscr;

write('числитель');

readln(m);

write('знаменатель');

readln(n);

nod(m,n,ot);

if ot=1

then write('несократимая')

else write('сократимая');

readln;

end.

5.6 Задания для самостоятельного решения

1. Напишите программу, состоящую из трех процедур и основной программы. Первая процедура организует ввод двух целых чисел x и y, вторая проверяет их сумму, третья выводит результат. Используйте эти процедуры в основной программе. Опишите x и y как глобальные переменные.

2. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади поверхности и длины экватора оформите отдельными функциями.

3. Напишите программу поиска большего из четырех чисел с использованием подпрограммы поиска большего из двух чисел.

4. Даны координаты вершин многоугольника (x1, y1, x2, y2,…,
x10, y10). Напишите программу для вычисления его периметра (вычисление расстояния между вершинами оформить подпрограммой).

5. Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала.

6. Напишите программу для вычисления числа сочетаний из N по M. Число сочетаний определяется по формуле

, где N – количество элементов перебора. Используйте подпрограмму вычисления факториала.

7. Напишите программу для определения НОД трех натуральных чисел.

8. Даны действительные числа s, t. Составить программу вычисления выражения f(t, -2s, 1.17)+f(2.2, t, s-t), где

9. Даны натуральные m и n (m<n). Составить программу, сокращающую дробь m/n.

10. Напишите программу вычисления суммы квадратов простых чисел, лежащих в интервале (M, N).

11. Напишите программу подсчета числа четных цифр, используемых в записи N-значного числа M.

12. Составьте программу вычисления суммы трехзначных чисел, в десятичной записи которых нет четных цифр.

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

14. Составьте программу нахождения наименьшего натурального N-значного числа X (X>=10), равного утроенному произведению своих цифр.

15. Составьте программу подсчета числа всех натуральных чисел, меньших М, квадрат суммы цифр которых равен X.

16. Составьте программу, вычисляющую значение функции:

, где
.

Для вычисления функции f(x, n) используйте подпрограмму-функцию. Значения аргумента x введите с клавиатуры.

17. Составьте программу, вычисляющую значение функции:

, где

Для вычисления функции f(i) используйте подпрограмму-функцию. Значения аргумента n введите с клавиатуры.