Приветствуем читателей нашего сайта. Сегодня мы решаем proc1-10.
Proc1-10
Proc1. Описать процедуру PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A — входной, B — выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.
program proc1; procedure PowerA3(x: real; var y: real); {Связываю y и b. Теперь все, что я сделаю с у, сделается и с b. А значение х = а} begin y := x * x * x; end; var a, b: real; begin write('Введите число: '); readln(a); PowerA3(a, b); {Вызываю процедуру} write(a, ' в третьей степени ', b); end.
Proc2. Описать процедуру PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A — входной, B, C, D — выходные параметры; все параметры являются вещественными).
program proc2; procedure PowerA234(x: real; var y2, y3, y4: real); begin y2 := x * x; y3 := x * x * x; y4 := y2 * y2; end; var a, b, c, d: real; begin write('Введите число: '); readln(a); PowerA234(a, b, c, d); {Вызываю процедуру} writeln(a, ' во второй степени ', b); writeln(a, ' в третьей степени ', c); writeln(a, ' в четвертой степени ', d); end.
Proc3. Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую среднее арифметическое AMean = (X+Y)/2 и среднее геометрическое GMean = √(X * Y) двух положительных чисел X и Y (X и Y — входные, AMean и GMean — выходные параметры вещественного типа). С помощью этой процедуры найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.
program proc3; procedure Mean(x, y: real; var a, g: real); begin a := (x + y) / 2; g := Sqrt(x * y) end; var a, b, c, d, AMean, GMean: real; begin write('A = '); readln(a); write('B = '); readln(b); write('C = '); readln(c); write('D = '); readln(d); Mean(a, b, AMean, GMean); {Вызываю процедуру} writeln('Среднее арифметическое ', a, ' и ', b, ' равно ', AMean); writeln('Среднее геометрическое ', a, ' и ', b, ' равно ', GMean:3:2); Mean(a, c, AMean, GMean); {Вызываю процедуру} writeln('Среднее арифметическое ', a, ' и ', c, ' равно ', AMean); writeln('Среднее геометрическое ', a, ' и ', c, ' равно ', GMean:3:2); Mean(a, d, AMean, GMean); {Вызываю процедуру} writeln('Среднее арифметическое ', a, ' и ', d, ' равно ', AMean); writeln('Среднее геометрическое ', a, ' и ', d, ' равно ', GMean:3:2); end.
Proc4°. Описать процедуру TrianglePS(a, P, S), вычисляющую по стороне a равностороннего треугольника его периметр P = 3·a и площадь S = a2 *√3 / 4. (a — входной, P и S — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти периметры и площади трех равносторонних треугольников с данными сторонами.
program proc4; procedure TrianglePS(x: real; var perimeter, area: real); begin perimeter := 3 * x; area := Sqr(x) * Sqrt(3) / 4 end; var a, P, S: real; begin write('Введите сторону равностороннего треугольника: '); readln(a); TrianglePS(a, P, S); writeln('Площадь равностороннего треугольника со стороной ', a, ' равна ', S:3:2); writeln('Периметр равностороннего треугольника со стороной ', a, ' равен ', P); end.
Proc5. Описать процедуру RectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных вершин (x1, y1, x2, y2 — входные, P и S — выходные параметры вещественного типа). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.
Сравните эту задачу с Begin19.
program proc5; 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; begin write('Введите координаты двух точек х1 у1 х2 у2 : '); read(x1, y1, x2, y2); RectPS(x1, y1, x2, y2, P, S); writeln('Периметр прямоугольника равен ', P); writeln('Площадь прямоугольника равна ', S:0:2) end.
Proc6. Описать процедуру DigitCountSum(K, C, S), находящую количество C цифр целого положительного числа K, а также их сумму S (K — входной, C и S — выходные параметры целого типа). С помощью этой процедуры найти количество и сумму цифр для каждого из пяти данных целых чисел.
Сравните с while18.
program proc6; procedure DigitCountSum(n: integer; var count, summ:integer); begin while n > 0 do begin summ := summ + n mod 10; n := n div 10; inc(count); end; end; var k, c, s :integer; begin write('Введите число: '); readln(k); DigitCountSum(k, c, s); writeln('Количество цифр: ', c); writeln('Сумма цифр: ', s) end.
Proc7. Описать процедуру InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры поменять порядок следования цифр на обратный для каждого из пяти данных целых чисел.
program proc7; procedure InvDigits(var inv_k: integer); var norma_k: integer; begin norma_k := inv_K; inv_k := 0; while norma_k > 0 do begin inv_k := 10 * inv_k + norma_k mod 10; norma_k := norma_k div 10; end; end; var k: integer; begin write('Введите целое положительное число: '); readln(k); InvDigits(k); writeln('Инвертированное число: ', K); end.
Proc8°. Описать процедуру AddRightDigit(D, K), добавляющую к целому положительному числу K справа цифру D (D — входной параметр целого типа, лежащий в диапазоне 0–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K справа данные цифры D1 и D2. Выводя результат каждого добавления.
program proc8; procedure AddRightDigit(digit: word; var number: integer); begin number := number * 10 + digit end; var k: integer; d1, d2: word; begin write('Введите целое положительное число: '); readln(k); write('Введите первую цифру: '); readln(d1); AddRightDigit(d1, k); writeln('Получившееся число: ', k); write('Введите вторую цифру: '); readln(d2); AddRightDigit(d2, k); writeln('Получившееся число: ', k); end.
Proc9. Описать процедуру AddLeftDigit(D, K), добавляющую к целому положительному числу K слева цифру D (D — входной параметр целого типа, лежащий в диапазоне 1–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K слева данные цифры D1 и D2, выводя результат каждого добавления.
program proc9; {Процедура, считающая 10. например. 543 - 3 цифры - 10 * 10 * 10 = 1000} procedure DigitCount_10(n: integer; var count_10: integer); begin while n > 0 do begin n := n div 10; count_10 := count_10 * 10;; end; end; {Добавляет цифру слева. Пример: 543 и 9. 9 * 1000 + 543 = 9543} procedure AddLeftDigit(digit: word; var number: integer); var count_10: integer; begin count_10 := 1; DigitCount_10(number, count_10); {Вызываем процедуру подстчета 10} number := digit * count_10 + number end; var k: integer; d1, d2: word; begin write('Введите целое положительное число: '); readln(k); write('Введите первую цифру: '); readln(d1); AddLeftDigit(d1, k); writeln('Получившееся число: ', k); write('Введите вторую цифру: '); readln(d2); AddLeftDigit(d2, k); writeln('Получившееся число: ', k); end.
Proc10°. Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). С ее помощью для данных переменных A, B, C, D последовательно поменять содержимое следующих пар: A и B, С и D, B и С и вывести новые значения A, B, C, D.
Сравните с begin22.
program proc10; procedure Swap(var x, y: real); var tmp: real; begin tmp := x; x := y; y := tmp; end; var a, b, c, d: real; begin write('A = '); readln(a); write('B = '); readln(b); write('C = '); readln(c); write('D = '); readln(d); Swap(a, b); Swap(c, d); Swap(b, c); writeln; writeln('A = ', a); writeln('B = ', b); writeln('C = ', c); writeln('D = ', d) end.
На сегодня все! Если у вас возникли проблемы с решением задач proc1-10 или с любыми другими задачами, то напишите их в комментариях.
Привет всем учащимся)).
В Вашем решении задачи proc10 не взято во внимание область видимости переменных, именно из-за этого
ответ не будет верен, хотя логика решения правильна, но реализация…увы.
По сути этот вариант решения задачи отчасти правильный:
procedure Swap(x,y:real);
var temp:real;
begin
temp := x;
x := y;
y := temp;
write(x)
end;
var a,b,c,d:real;
begin
Task(‘proc10’);
readln(a,b,c,d);
Swap(a,b);
Swap(b,d);
Swap(c,a);
Swap(d,c)
end.
С ув. ко всему живому!
PS: ничего получше из вариантов решения в голову не пришло.
Так проще, по моему:
program Proc_9;
var
k, d : integer;
procedure AddLeftDigit(dig: integer; var N: integer);
var
num:integer :=n;
begin
repeat
num:= num div 10;
dig:= dig*10;
until num=0;
n:=dig+n;
end;
begin
write(‘Введите K: ‘);
readln(k);
for var i:=1 to 2 do
begin
write(‘Введите D’, i, ‘: ‘);
readln(d);
AddLeftDigit(d, k);
writeln( k);
end;
end.