Root /ArchiveAbout
()

Proc 1 - 5 задачника Абрамяна

Proc 1 - 5 задачника Абрамяна

Здравствуйте, постоянные посетители моего сайта! На этой странице решаем первые 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 не используются процедуры