- •Тема 1. Арифметика действительных чисел. Вычисления по формулам Задача 11 в
- •Тема 2. Разветвления
- •Задача 27б
- •Тема 3. Простейшая целочисленная арифметика
- •Задача 14в
- •Тема 4. Простейшие циклы Задача 11
- •Тема 5. Простейшие графические построения Задача 15
- •Тема 6. Пошаговый ввод данных и вывод результатов
- •Тема 7. Сочетания цикла и разветвления
- •Тема 8. Обработка последовательностей символов
- •Тема 9. Вычисления с сохранением последовательности значений
- •Тема 10. Вложенные циклы
- •Тема 11. Вложенные циклы в матричных задачах
- •Тема 12. Использование процедур
- •Тема 13.Файлы
- •Тема 14. Списки
Тема 12. Использование процедур
Задача 20
Задание:
Даны действительные числа a, b, c, d. Найти площадь пятиугольника, изображенного на рис.18. (Определить процедуру вычисления площади треугольника по трем его сторонам).
Алгоритм:
С учетом того, что мы определим функцию вычисления площади треугольника как:
Вводим a, b, c – величины сторон
S=√(a*a+b*b+c*c) – это и есть искомая площадь
алгоритм будет выглядеть следующим образом:
Вводим a, b, c, d
S=f(a,1,2.5)+f(b,2,2.5)+f(c,d,2)
Вывод на экран результата
где 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.
Протокол:
В процессе диалога вводим a=1, b=2, c=3, d=4
Вычисление 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
Вычисление s=s+sqvear(2.5,2,2)
3.1 Вызов функции sqvear(2.5,2,2) при этом формальным параметрам a,b,c передаются соответственно значения 2.5, 2, 2
Вычисление 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) :
Принимаем значения переменной n
Если 0≤n≤9 , то значение функции =n , иначе f(n)= ((a*n+c) mod 10)*f(n-1-((a*n+c) mod 10))+n
Тогда основной алгоритм :
Вводим натуральные a, c, m
Вызываем функцию f(m) (формальному n передаем значение m)
Выводим на печать результат
Блок-схема:
Основная программа Рекурсивная функция 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.
Протокол :
В процессе диалога вводим a=1, c=3, m=10
Печать «Результат :»
Вычисление F(m),
Вызов функции f(10) при этом формальному параметру n передается значение 10
(10 in [0..9]) =False условие не выполняется
Вычисление f= ((1*10+3) mod 10)*f(10-1-((1*10+3) mod 10))+10=3*f(6)+10
Рекурсивный вызов функции f(6) при этом формальному параметру n передается значение 6
(6 in [0..9]) =True условие выполняется , f= f(6) =6
2.4 f(10)=3* f(6)+10=3*6+10=28
4) Печать «28»