Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример выполнения заданий на Pascale.doc
Скачиваний:
17
Добавлен:
15.02.2015
Размер:
421.89 Кб
Скачать

Тема 12. Использование процедур

Задача 20

Задание:

Даны действительные числа a, b, c, d. Найти площадь пятиугольника, изображенного на рис.18. (Определить процедуру вычисления площади треугольника по трем его сторонам).

Алгоритм:

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

  1. Вводим a, b, c – величины сторон

  2. S=√(a*a+b*b+c*c) – это и есть искомая площадь

алгоритм будет выглядеть следующим образом:

    1. Вводим a, b, c, d

    2. S=f(a,1,2.5)+f(b,2,2.5)+f(c,d,2)

    3. Вывод на экран результата

где f - это функция вычисления площади

Блок-схема:

Основная программа: Функция площади:

Реализация:

program t12_num20;

var

a,b,c,d,s:real;

function sqvear(a,b,c:real):real;

begin

sqvear:=sqrt(sqr(a)+sqr(b)+sqr(c));

end;

begin

Writeln('Введите действительные (положительные) числа a,b,c,d');

Readln(a);

Readln(b);

Readln(c);

Readln(d);

s:=sqvear(1,2.5,a)+sqvear(2.5,2,b)+sqvear(d,c,2);

Writeln('Площадь пятиугольника :',s:8:4);

Readln;

end.

Протокол:

  1. В процессе диалога вводим a=1, b=2, c=3, d=4

  2. Вычисление s=sqvear(1,2.5,1)

2.1 Вызов функции sqvear(1,2.5,1) при этом формальным параметрам a,b,c передаются соответственно значения 1, 2.5, 1

2.2 Вычисление sqvear:=sqrt(sqr(1)+sqr(2.5)+sqr(1))=2.872281

  1. Вычисление s=s+sqvear(2.5,2,2)

3.1 Вызов функции sqvear(2.5,2,2) при этом формальным параметрам a,b,c передаются соответственно значения 2.5, 2, 2

    1. Вычисление sqvear:=sqrt(sqr(2.5)+sqr(2)+sqr(2))=3.774917

4) Вычисление s=s+sqvear(3,4,2)

4.1 Вызов функции sqvear(3,4,2) при этом формальным параметрам a,b,c передаются соответственно значения 3, 4, 2

4.2 Вычисление sqvear:=sqrt(sqr(3)+sqr(4)+sqr(2))=5.385164

5) Печать «Площадь пятиугольника : 12.0324»

Задача 34 (рекурсия)

Задание:

Даны натуральные числа a, c, m. Получить f(m), где

Здесь g(n) - остаток от целочисленного деления an+c на 10. Программа должна включать в себя рекурсивную процедуру вычисления f(n).

Алгоритм:

Определим рекурсивно функцию вычисления f(n) :

  1. Принимаем значения переменной n

  2. Если 0≤n≤9 , то значение функции =n , иначе f(n)= ((a*n+c) mod 10)*f(n-1-((a*n+c) mod 10))+n

Тогда основной алгоритм :

  1. Вводим натуральные a, c, m

  2. Вызываем функцию f(m) (формальному n передаем значение m)

  3. Выводим на печать результат

Блок-схема:

Основная программа Рекурсивная функция f(n)

Реализация :

program t12_num34;

var

a,c,m:integer;

function f(n:integer):integer;

begin

if n in [0..9] then f:=n

else

f:=((a*n+c) mod 10)*f(n-1-((a*n+c) mod 10))+n;

end;

begin

Writeln('Введите натуральные a,c,m');

Readln(a,c,m);

Writeln('Результат :',f(m));

Readln;

end.

Протокол :

  1. В процессе диалога вводим a=1, c=3, m=10

  2. Печать «Результат :»

  3. Вычисление F(m),

    1. Вызов функции f(10) при этом формальному параметру n передается значение 10

    2. (10 in [0..9]) =False условие не выполняется

    3. Вычисление f= ((1*10+3) mod 10)*f(10-1-((1*10+3) mod 10))+10=3*f(6)+10

      1. Рекурсивный вызов функции f(6) при этом формальному параметру n передается значение 6

      2. (6 in [0..9]) =True условие выполняется , f= f(6) =6

2.4 f(10)=3* f(6)+10=3*6+10=28

4) Печать «28»