
Приветствуем читателей нашего сайта. Сегодня мы решаем proc11-20.
Proc11-20
Процедуры с числовыми параметрами
Proc11. Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих значений (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). Используя четыре вызова этой процедуры, найти минимальное и максимальное из данных чисел A, B, C, D.
Используем процедуру Swap() из Proc10.
program proc11;
procedure Swap(var x, y: real);
var
tmp: real;
begin
tmp := x;
x := y;
y := tmp;
end;
procedure MinMax(var x, y: real);
begin
if x > y then Swap(x, y)
end;
var
a, b, c, d: real;
begin
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
write('D = ');
readln(d);
MinMax(a, b);
MinMax(c, d);
MinMax(a, c);
MinMax(b, d);
writeln;
writeln('Минимальное значение: ', a);
writeln('Максимальное значение: ', d)
end.
Proc12. Описать процедуру SortInc3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по возрастанию (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по возрастанию два данных набора из трех чисел: (A1, B1, C1) и (A2, B2, C2).
program proc12;
uses
crt;
procedure Swap(var x, y: real);
var
tmp: real;
begin
tmp := x;
x := y;
y := tmp;
end;
procedure MinMax(var x, y: real);
begin
if x > y then Swap(x, y)
end;
procedure SortInc3(var x, y, z: real);
begin
Minmax(y, z);
MinMax(x, y);
MinMax(y, z);
end;
var
a, b, c: real;
i: integer;
begin
for i := 1 to 2 do
begin
ClrScr; //очищаем экран
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
SortInc3(a, b, c);
writeln;
writeln('A = ', a);
writeln('B = ', b);
writeln('C = ', c);
ReadKey; //ждем нажатия
end;
end.
Proc13. Описать процедуру SortDec3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по убыванию (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по убыванию два данных набора из трех чисел:
(A1, B1, C1) и (A2, B2, C2).
Оставим все так же, как в предыдущей задаче, поменяв процедуру MinMax на MaxMin.
program proc13;
uses
crt;
procedure Swap(var x, y: real);
var
tmp: real;
begin
tmp := x;
x := y;
y := tmp;
end;
procedure MaxMin(var x, y: real);
begin
//Теперь наибольшее значение записывается в х, а не в у
if x < y then Swap(x, y)
end;
procedure SortDec3(var x, y, z: real);
begin
MaxMin(y, z);
Maxmin(x, y);
MaxMin(y, z);
end;
var
a, b, c: real;
i: integer;
begin
for i := 1 to 6 do
begin
ClrScr;
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
SortDec3(a, b, c);
writeln;
writeln('A = ', a);
writeln('B = ', b);
writeln('C = ', c);
ReadKey;
end;
end.Proc14. Описать процедуру ShiftRight3(A, B, C), выполняющую правый циклический сдвиг: значение A переходит в B, значение B — в C, значение C — в A (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить правый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C1) и (A2, B2, C2).
program proc14;
uses
crt;
procedure ShiftRight3(var x, y, z: real);
var
tmp: real;
begin
tmp := z;
z := y;
y := x;
x := tmp
end;
var
a, b, c: real;
i: integer;
begin
for i := 1 to 2 do
begin
ClrScr;
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
ShiftRight3(a, b, c);
writeln;
writeln('A = ', a);
writeln('B = ', b);
writeln('C = ', c);
ReadKey;
end;
end.Proc15. Описать процедуру ShiftLeft3(A, B, C), выполняющую левый циклический сдвиг: значение A переходит в C, значение C — в B, значение B — в A (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить левый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C1) и (A2, B2, C2).
program proc15;
uses
crt;
procedure ShiftLeft3(var x, y, z: real);
var
tmp: real;
begin
tmp := x;
x := y;
y := z;
z := tmp
end;
var
a, b, c: real;
i: integer;
begin
for i := 1 to 2 do
begin
ClrScr;
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
ShiftLeft3(a, b, c);
writeln;
writeln('A = ', a);
writeln('B = ', b);
writeln('C = ', c);
ReadKey;
end;
end.Функции с числовыми параметрами
Proc16. Описать функцию Sign1(X) целого типа, возвращающую для вещественного числа X следующие значения:
-1, если X < 0;
0, если X = 0;
1, если X > 0.
С помощью этой функции найти значение выражения Sign1(A) + Sign1(B) для данных вещественных чисел A и B.
program proc16_func1;
function Sign1(x: real): integer;
begin
if x > 0 then Sign1 := 1;
if x < 0 then Sign1 := -1;
if x = 0 then Sign1 := 0
end;
var
a, b: real;
summ: integer;
begin
write('A = ');
readln(a);
write('B = ');
readln(b);
summ := Sign1(a) + Sign1(b);
writeln(summ)
end.Proc17. Описать функцию RootCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A·x2 + B·x + C = 0 (A, B, C — вещественные параметры, A <> 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискременанта:
D= B2 — 4 * A * C.
program proc17_func2;
uses
crt;
function RootsCount(a, b, c: real): integer;
var
d: real;
begin
d := Sqr(b) - 4 * a * c;
if d < 0
then
RootsCount := 0
else
if d = 0
then
RootsCount := 1
else
RootsCount := 2;
end;
var
a, b, c: real;
i: integer;
begin
for i := 1 to 3 do
begin
ClrScr;
write('A = ');
readln(a);
write('B = ');
readln(b);
write('C = ');
readln(c);
write('Количество корней уравнения: ', RootsCount(a, b, c));
ReadKey;
end;
end.Proc18. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S = pi·R2. В качестве значения pi использовать 3,14.
program proc18_func3;
uses
crt;
function CircleS(radius: real): real;
const
pi = 3.14;
begin
CircleS := Pi * Sqr(radius);
end;
var
r: real;
i: integer;
begin
for i := 1 to 3 do
begin
ClrScr;
write('R = ');
readln(r);
write('Площадь окружности: ', CircleS(r):0:2);
ReadKey;
end;
end.Proc19. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = pi·R2. В качестве значения pi использовать 3,14.
Сравните с begin13
program proc19_func4;
uses
crt;
function RingS(r1, r2: real): real;
const
pi = 3.14;
begin
RingS := pi * sqr(R1) - pi * sqr(R2);
end;
var
r1, r2: real;
i: integer;
begin
for i := 1 to 3 do
begin
ClrScr;
write('R1 = ');
readln(r1);
write('R2 = ');
readln(r2);
write('Площадь кольца: ', RingS(r1, r2):0:2);
ReadKey;
end;
end.Proc20°. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высота. Для нахождения боковой стороны b треугольника использовать теорему Пифагора:
B2 = (a/2)2+h2.
program proc20_func5;
uses
crt;
function TriangleP(a, h: real): real;
var
b: real;
begin
b := Sqrt(Sqr(a / 2) + Sqr(h));
TriangleP := 2 * b + a;
end;
var
a, h: real;
i: integer;
begin
for i := 1 to 3 do
begin
ClrScr;
write('a = ');
readln(a);
write('h = ');
readln(h);
write('Периметр равнобедренного треугольника равен: ', TriangleP(a, h):0:2);
ReadKey;
end;
end.
На сегодня все! Если у вас возникли проблемы с решением задач proc11-20 или с любыми другими задачами, то напишите их в комментариях.
Что означает Readkey? и почему в изпользовали цикл с параметром а потом снова уничтожили их
в proc 20