Root /ArchiveAbout
()

Proc 21 - 23

Proc 21 - 23

В задании Proc21 описываем функцию вычисления суммы целых чисел от А до В; в Proc22 вычисляем результат арифметического действия с двумя числами А и В; Proc23 описывает функцию определения четверти, в которой находится точка с заданными координатами.

Proc21. Описать функцию SumRange(A, B) целого типа, находящую сумму всех целых чисел от A до B включительно (A и B — целые). Если A > B, то функция возвращает 0. С помощью этой функции найти суммы чисел от A до B и от B до C, если даны числа A, B, C.

{ Функция возвращает сумму всех целых чисел 
от X до Y включительно (X и Y — целые) }
function SumRange(X, Y: integer): integer;
var
  i, S: integer;
begin
  S := 0; //начальное значение суммы
  for i := X to Y do //для всех чисел от X до Y
    S := S + i; //сумму увеличиваем на i
  SumRange := S; //значение суммы в конце
end;

  { Основная программа }

var
  A, B, C: integer;

begin
 { Вводим числа А, В и С: }
  write(' A = ');
  readln(A);
  write(' B = ');
  readln(B);
  write(' C = ');
  readln(C);
 { Вызываем функцию и выводим результат: }
  writeln('Сумма чисел от ', A, ' до ', B, ': ', SumRange(A, B));
  writeln('Сумма чисел от ', B, ' до ', C, ': ', SumRange(B, C));
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 Proc22. Описать функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3.

{ Функция возвращает результат выполнения одной из 
арифметических операций над вещественными числами А и В }
function Calc(A, B: real; Op: byte): real;
begin
 { Проверять переданное в функцию значение Op 
 будем с помощью оператора выбора case: }
  case Op of
    1: Calc := A - B; //1 — вычитание
    2: Calc := A * B; //2 — умножение
    3: Calc := A / B  //3 — деление
    else Calc := A + B; //остальные значения — сложение
  end
end;

  { Основная программа }

var
  A, B: real;
  N1, N2, N3: byte;

begin
 { Вводим числа А и В: }
  write(' A = ');
  readln(A);
  write(' B = ');
  readln(B);
 { Вводим номер операции N1, N2, N3 и вызываем функцию: }
  write(' N1 = ');
  readln(N1);
  writeln('Результат: ', Calc(A, B, N1));
  write(' N2 = ');
  readln(N2);
  writeln('Результат: ', Calc(A, B, N2));
  write(' N3 = ');
  readln(N3);
  writeln('Результат: ', Calc(A, B, N3));
end.

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 * * *

Вариант 2 для задания Proc22:

{ Функция возвращает результат выполнения одной из 
арифметических операций над вещественными числами А и В }
function Calc(A, B: real; Op: byte): real;
begin
 { Сообщаем о названии арифм. действия и вычисляем результат: }
  case Op of
    1: begin write(' вычитание: '); Calc := A - B end;
    2: begin write(' умножение: '); Calc := A * B end;
    3: begin write(' деление: '); Calc := A / B end
    else begin write(' сложение: '); Calc := A + B end
  end
end;

  { Основная программа }

const
  Q = 3; //количество вычислений

var
  A, B: real;
  N, i: byte;

begin
  for i := 1 to Q do begin
    write('Введите А и В: ');
    readln(A, B);
    write('Номер операции: N', i, ' = ');
    readln(N);
    writeln(Calc(A, B, N)); //вызываем функцию
    writeln
  end
end.

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните задачу Proc22 с заданием Case5.

Proc23. Описать функцию Quarter(x, y) целого типа, определяющую номер координатной четверти, в которой находится точка с ненулевыми вещественными координатами (x, y). С помощью этой функции найти номера координатных четвертей для трех точек с данными ненулевыми координатами.

Определяем координатную четверть точки в Pascal

{ Функция возвращает номер координатной четверти, в которой 
находится точка с ненулевыми вещественными координатами (x, y) }
function Quarter(x, y: real): byte;
begin
  if x > 0 then
    if y > 0 then Quarter := 1 //1-я четверть
    else
    if y < 0 then Quarter := 4 //4-я четверть
    else writeln('Точка лежит на оси OX')
  else
  if x < 0 then
    if y > 0 then Quarter := 2 //2-я четверть
    else
    if y < 0 then Quarter := 3 //3-я четверть
    else writeln('Точка лежит на оси OX')
  else 
  if y <> 0 then writeln('Точка лежит на оси OY')
  else writeln('Точка лежит в начале координат')
end;

  { Основная программа }

const
  n = 3; //количество пар (x, y) для проверки

var
  x, y: real; //координаты
  i, number: byte;

begin
  for i := 1 to n do begin
    writeln('Введите координаты:');
    write(' x = ');
    readln(x);
    write(' y = ');
    readln(y);
    number := Quarter(x, y); //вызываем ф-ю и вычисляем number
    if number > 0 then writeln('Номер четверти: ', number);
    writeln;
  end
end.

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 Сравните задачу Proc23 с заданиями Точка (x, y) в координатной четверти и If21, If22