Ответы на тему Запись вспомогательных алгоритмов на языке Паскаль


Учебник по Информатике 9 класс Босова

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

Презентация: Перейти


2. Для чего нужна подпрограмма?

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


3. В чем основное отличие процедур и функций?

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


4. Напишите программу наименьшего общего кратного следующих четырех чисел: 36, 54, 18 и 15, используя процедуру вычисления наибольшего общего делителя двух чисел.

// НОД(a,b)*НОК(a,b)=a*b
program z4;
procedure nod(x,y: integer; var n: integer);
begin
repeat
if x>y then x:=x mod y
else y:=y mod x;
until (x=0)or(y=0);
n:=x+y;
end;
var a,b,c,d,e,n: integer;
BEGIN
readln(a,b,c,d);
nod(a,b,n);
e:=a*b div n;
nod(c,e,n);
e:=c*e div n;
nod(d,e,n);
writeln('НОК = ',d*e div n);
END.


5. Напишите программу перестановки значений переменных в порядке возрастания. Используйте процедуру swap.

program z5;
procedure swap (var x,y: integer);
var m: integer;
begin
m:=x;
x:=y;
y:=m
end;

var a, b, c: integer;
BEGIN
Writeln('Введите значения a, b, c');
Readln(a, b, c);
if a>b then swap (a, b);
if a>c then swap (a, c);
if b>c then swap (b, c);

writeln (a, ' ', b, ' ', c);
END.


6. Видоизмените программу сортировки массива выбором так, чтобы в ней использовалась процедура выбора наибольшего элемента массива.

program z6;
type tArray = array [1..10] of integer;
procedure swap (A:tArray);
var max, i: integer;
begin
max:=A[1];
for i:=2 to 10 do
if A[i]>max then max:=A[i];
write (max) end;

var A:tArray;
i: integer;

BEGIN //Случайным образом присвоим значения элементам массива и выведем его на экран
for i:=1 to 10 do A[i]:=random(50);
write ('Массив: ');
for i:=1 to 10 do write(A[i], ' ');

writeln;
write ('Наибольшее значение в массиве: ');
swap (A);
END.


7. Напишите программу вычисления выражения с факториалами.

program z7;
var res, i, n:integer;
function fac(n:integer): integer;
var p, i: integer;
begin
p:=1;
for i:=2 to n do
p:=p*i;
fac:=p;
end;

BEGIN
res:=0;
write ('Введите n ');
readln (n);
for i:=1 to n do res := res + fac(i);
writeln ('Сумма факториалов равна ', res);
END.


8. Напишите программу вычисления выражения:
s = x3 + x5 + xn, где x и n вводятся с клавиатуры вручную. Используйте подпрограмму вычисления степени.

program z8;
var n, n1, x, r, res, i: integer; //В программе у нас будут только целые числа, i - счетчик

//Процедура вычисления степени
procedure stepen (var a,b: integer; var z: integer);
var i:integer;
begin
z:=1;
for i:=1 to b do z:=z*a;
end;

BEGIN
res := 0;
write ('Введите n = ');
readln (n);
write ('Введите x = ');
readln (x);

for i:=1 to n do begin //Цикл, где вычисляется x в степени от 1 до n b полученный результат добавляется в res, который изначально равен 0
stepen (x, i, r); //Процедура
res := res + r;
end;

writeln ('Результат: ', res); //Вывод на экран полученный результат
END.


9. Напишите функцию, которая вычисляет длину отрезка по координатам его концов. С помощью этой функции напишите программу, вычисляющую периметр треугольника по координатам его вершин.

Комментарий к ответу: В функции мы используем формулу вычисления длины отрезка по ее координатам: квадратный корень из суммы (x2-x1)2 и (y2-y1)2. В программе вначале вводим координаты точек вершин треугольника, затем ищем длину каждого отрезка с помощью функции dlina. Находим периметр P, сложив три полученных результата и выводим его округлив до сотых. Программа содержит вычисление корня, поэтому мы использовали вещественный тип данных.

program z9;
var x1, x2, x3, y1, y2, y3, P, AB, BC, AC: real;

//Функция вычисления длины отрезка
function dlina (var x1,y1,x2,y2: real): real;
begin
dlina:=sqrt(sqr(x2-x1) + sqr(y2-y1));
end;

BEGIN
writeln('Приветствую, введите координаты вершин треугольника.');
write('x1 = '); read(x1);
write('y1 = '); read (y1);
write('x2 = '); read(x2);
write('y2 = '); read (y2);
write('x3 = '); read(x3);
write('y3 = '); read (y3);
Writeln ('Координаты: A[', x1, ';', y1, ']; B[', x2, ';', y2, ']; C[', x3, ';', y3, '];');
AB := dlina(x1, y1, x2, y2);
BC:= dlina(x2,y2,x3,y3);
AC:= dlina(x1,y1,x3,y3);
P:=AB+BC+AC;
Writeln ('Периметр равен ', P:0:2);
END.


10. Напишите функцию, вычисляющую площадь треугольника по целочисленным координатам его вершин. С помощью этой функции вычислите площадь четырехугольника по координатам его вершин.

Площадь треугольника через координаты:

В формуле имеется модуль, в Паскале он обозначается abs(значение).

program z9;
var x1, x2, x3, y1, y2, y3, x4, y4, S1, S2, S: real;

//Функция вычисления площади треугольника по координатам
function plosad (var x1,y1,x2,y2,x3,y3: real): real;
begin
plosad:=abs(((x1-x3)*(y2-y3) - (x2-x3)*(y1-y3))/2);
end;

BEGIN
writeln('Приветствую, введите координаты вершин четырехугольника.');
write('x1 = '); read(x1);
write('y1 = '); read (y1);
write('x2 = '); read(x2);
write('y2 = '); read (y2);
write('x3 = '); read(x3);
write('y3 = '); read (y3);
write('x4 = '); read(x3);
write('y4 = '); read (y4);
Writeln ('Координаты: A[', x1, ';', y1, ']; B[', x2, ';', y2, ']; C[', x3, ';', y3, '];');
S1 := plosad(x1, y1, x2, y2, x3, y3);
S2 := plosad(x1, y1, x3, y3, x4, y4);
S:=S1+S2;
Writeln ('Площадь равна ', S:0:2);
END.