Примеры решения задач, процедуры и функции
Пример 1
Найти наименьший член последовательности a(n)=n2-7n+1, где n изменяется от 1 до m.
Решение. Для поиска минимального элемента используем функцию, находящую минимальный элемент из двух параметров.
program task2;var m: integer; {кол-во элементов посл-сти}
n: integer; {номер текущего элемента посл-сти }
k: real; {минимальный элемент посл-сти}
function min(p1, p2 :real) :real;
begin
if p1 < p2 then min:=p1
else min:=p2
end;
begin
write('Введите m - количество элементов последовательности');
readln(m);
k := 1*1-7*1+1;
for n:=2 to m do
k := min(k, n*n-7*n+1);
write('Минимальный элемент последовательности равен ', k)
end.
Пример 2
Написать набор процедур для работы с обыкновенными дробями, обеспечив их сложение, вычитание, умножение, деление.
Решение. Обыкновенную дробь будем изображать двумя целыми числами:
Ø первое число будет представлять числитель дроби,
Ø а второе - знаменатель.
В процессе вычислений требуется сокращать дроби на их наибольший общий делитель (НОД), для вычисления которого используется алгоритм Евклида. Если одно из чисел равно нулю, то НОД берем равным 1.
Разработаем также отдельные процедуры для ввода и вывода обыкновенных дробей
Var x, y, {числитель и знаменатель дроби }p, q, {числитель и знаменатель дроби }
s, t:integer; {числитель и знаменатель дроби }
{ Ввод обыкновенной дроби }
procedure wwod(var a, b:integer);
begin
writeln;
write('Введите целые: числитель и знаменатель обыкновенной дроби ');
readln(a,b);
end;
{ Вывод результата }
procedure wywod(a, b:integer);
begin
write(a,'/',b); writeln
end;
{ Вычисление НОД(x,y) }
function nod(x, y:integer):integer;
begin
if (x=0) or (y=0) then nod:=1
else
begin
while x<>y do
begin
while x>y do x:=x-y;
while y>x do y:=y-x
end;
nod:=x;
end;
end;
{ Сокращение дроби }
procedure sokr(var c, d:integer);
var r:integer;
begin
r:=nod(c, d);
c:=c div r;
d:=d div r;
end;
{ Сложение двух дробей }
procedure sum(a, b, c, d:integer; var e, f:integer);
var r:integer;
begin
e:=a*d+b*c;
f:=b*d;
sokr(e,f)
end;
{ Вычитание двух дробей }
procedure raz(a, b, c, d:integer; var e, f:integer);
var r:integer;
begin
e:=a*d-b*c;
f:=b*d;
sokr(e,f)
end;
{ Умножение двух дробей }
procedure mult(a, b, c, d:integer; var e, f:integer);
var r:integer;
begin
e:=a*c;
f:=b*d;
sokr(e,f);
end;
{ Деление двух дробей }
procedure del(a, b, c, d:integer; var e, f:integer);
var r:integer;
begin
e:=a*d;
f:=b*c;
sokr(e, f);
end;
begin
write('Введите первую дробь ');
wwod(x,y);
write('Введите вторую дробь ');
wwod(p,q);
write('Сумма равна ');
sum(x, y, p, q, s, t);
wywod(s, t);
write('Разность равна ');
raz(x, y, p, q, s, t);
wywod(s, t);
write('Произведение равно ');
mult(x, y, p, q, s, t);
wywod(s, t);
write('Частное равно ');
del(x, y, p, q, s, t);
wywod(s, t);
end.