Здравствуйте, постоянные посетители моего сайта! На этой странице решаем первые 5 задач на процедуры из задачника Абрамяна.
Proc1. Описать процедуру PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A — входной, B — выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.
program proc1;
{ процедура вычисляет третью степень числа А }
procedure PowerA3(A: real; var B: real);
begin
B := sqr(A) * A { <== вычисляем третью степень числа А }
{ Обратите внимание, что величина В описана как переменная
(на это указывает var в описании). Это означает, что результат
её вычисления мы можем вывести в основной программе. }
end;
var
A, B: real; { <-- описываем переменные А и В основной программы }
i: byte;
begin
for i := 1 to 5 do begin
readln(A); { <-- вводим число А }
{ Вызываем процедуру для вычисления степени со входным
параметром А. Процедура вычисляет третий степень А и
результат помещает в переменную В: }
PowerA3(A, B);
writeln(A, '^3 = ', B); { <-- выводим результат вычисления B }
end;
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Proc2. Описать процедуру PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A — входной, B, C, D — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти вторую, третью и четвертую степень пяти данных чисел.
program proc2;
{ Процедура вычисляет вторую, третью и четвертую степень числа А }
procedure PowerA3(A: real; var B, C, D: real);
begin
B := sqr(A); { <== вторая степень числа А }
C := B * A; { <== третья степень числа А }
D := C * A { <== четвертая степень числа А }
{ После вычисления B, C и D мы сможем их вывести в основной
программе, поскольку они описаны как переменные (в описании
перед величинами B, C и D) стоит var }
end;
var
A, B, C, D: real; { <-- описание переменных }
i: byte; { <-- количество чисел для вычисления степеней }
begin
{ Будем в цикле вводить 5 чисел подряд и после каждого
ввода вызывать процедуру вычисления степеней: }
for i := 1 to 5 do
begin
write('Введите число: ');
readln(A); { <-- вводим число А }
{ Вызываем процедуру для вычисления степеней со
входным параметром А. Процедура вычисляет второй,
третий и четвертый степени числа А и результат
помещает соответственно в переменные В, C, и D: }
PowerA3(A, B, C, D);
{ После выхода из процедуры выводим результат вычисления: }
writeln(' вторая степень: ', B);
writeln(' третья степень: ', C);
writeln(' четвертая степень: ', D);
writeln
end;
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Proc3. Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую среднее арифметическое AMean = (X+Y)/2 и среднее геометрическое GMean = (X·Y)1/2 двух положительных чисел X и Y (X и Y — входные, AMean и GMean — выходные параметры вещественного типа). С помощью этой процедуры найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.
program Proc3;
{ Процедура вычисляет среднее арифметическое и
среднее геометрическое положительных чисел X и Y }
procedure Mean(X, Y: real; var AMean, GMean: real);
begin
AMean := (X + Y) / 2; { <== среднее арифметическое X и Y }
GMean := sqrt(X * Y) { <== среднее геометрическое X и Y }
end;
var { описание переменных программы }
A, B, C, D, AMean, GMean: real;
begin
writeln('Введите положительные числа A, B, C, D:');
{ Вводим только положттельные числа. Если вводится НЕ
положительное число, то запрос на ввод повторяется. }
repeat
write('A = ');
readln(A)
until A > 0; { <-- Выходим, если A > 0 }
repeat
write('B = ');
readln(B)
until B > 0; { <-- Выходим, если B > 0 }
repeat
write('C = ');
readln(C)
until C > 0; { <-- Выходим, если C > 0 }
repeat
write('D = ');
readln(D)
until D > 0; { <-- Выходим, если D > 0 }
writeln;
{ Вызываем процедуру со входными параметрами A и B: }
Mean(A, B, AMean, GMean);
writeln(' среднее арифметическое ', A, ' и ', B, ': ', AMean);
writeln(' среднее геометрическое ', A, ' и ', B, ': ', GMean);
writeln;
{ Вызываем процедуру со входными параметрами A и C: }
Mean(A, C, AMean, GMean);
writeln(' среднее арифметическое ', A, ' и ', C, ': ', AMean);
writeln(' среднее геометрическое ', A, ' и ', C, ': ', GMean);
writeln;
{ Вызываем процедуру со входными параметрами A и D: }
Mean(A, D, AMean, GMean);
writeln(' среднее арифметическое ', A, ' и ', D, ': ', AMean);
writeln(' среднее геометрическое ', A, ' и ', D, ': ', GMean);
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Сравните данный пример с задачами Begin8 и Begin9 на странице Среднее арифметическое и среднее геомертическое, где описываются такие же задачи, но только без процедур.
Proc4. Описать процедуру TrianglePS(a, P, S), вычисляющую по стороне a равностороннего треугольника его периметр P = 3·a и площадь S = a2·(3)1/2/4 (a — входной, P и S — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти периметры и площади трех равносторонних треугольников с данными сторонами.
program Proc4;
{ Процедура вычисляет периметр P и площадь
S равностороннего треугольника со стороной a }
procedure TrianglePS(a: real; var P, S: real);
begin
P := 3 * a; { <== периметр равносторонего треугольника }
S := sqr(a) * sqrt(3) / 4 { <== площадь равностороннего треугольника }
end;
var { Описание переменных основной программы }
a, P, S: real; { <-- a - сторона, P - периметр, S - площадь }
count: byte; { <-- количество треугольников }
begin
{ Для вычисления периметра и площади трех треугольников,
будем в цикле 3 раза вводить сторону и вызывать процедуру. }
for count := 1 to 3 do
begin
write('a = ');
readln(a); { <-- вводим сторону равностороннего треугольника }
{ Вызываем процедуру вычисления периметра и площади
равностороннего треугольника со стороной а. На выходе
получим P и S, которые сможем вывести как результат: }
TrianglePS(a, P, S);
writeln(' периметр: ', P); { <-- выводим периметр }
writeln(' площадь: ', S:0:2); { <-- выводим площадь }
writeln
end;
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Proc5. Описать процедуру RectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных вершин (x1, y1, x2, y2 — входные, P и S — выходные параметры вещественного типа). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.
program Proc5;
{ Процедура вычисляет P и S прямоуг. со сторонами, парал. осям
коорд., по коорд. (x1, y1), (x2, y2) его противопол. вершин }
procedure RectPS(x1, y1, x2, y2: real; var P, S: real);
var
a, b: real; { <-- дополнительные переменные процедуры }
begin
a := abs(x2 - x1); { <== одна сторона прямоугольника }
b := abs(y2 - y1); { <== другая сторона прямоугольника }
P := 2 * (a + b); { <== периметр }
S := a * b { <== площадь }
end;
var { Описание переменных основной программы: }
x1, y1, x2, y2, P, S: real;
count: byte;
begin
for count := 1 to 3 do
begin
write('Координаты первой вершины: ');
readln(x1, y1); { <-- вводим координаты }
write('Координаты второй вершины: ');
readln(x2, y2); { <-- вводим координаты }
{ Вызываем процедуру для вычисления периметра и площади со
входными параметрами x1, y1, x2, y2. На выходе получим P и S: }
RectPS(x1, y1, x2, y2, P, S);
writeln(' периметр: ', P); { <-- выводим периметр }
writeln(' площадь: ', S:0:2); { <-- выводим площадь }
writeln
end;
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Abs(x: real): real;
: Возвращает модуль числа x.**function** Abs(x: real): real;
: Возвращает модуль числа x.**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните задачу Proc5 с задачей Begin19 на странице Координаты на плоскости. Это одна и та же задача, но только в разделе Begin не используются процедуры