Решение задач. День восемнадцатый. Proc21-30


proc21-30

Приветствуем читателей нашего сайта. Сегодня мы решаем proc21-30.

Proc21-30

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

program proc21;
//program for7;

function SumRange(x, y: integer): integer;
var
  i: integer;
begin
  if x > y 
  then 
    Result := 0
  else
    for i := x to y do result := result + i; 
end;


var
  A, B, C: integer;

begin
  read(A, B, C);
  writeln( 'Сумма  - ', SumRange(A, B));
  writeln( 'Сумма  - ', SumRange(B, C));
end.

Proc22. Описать функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 — вычитание, 2 — умножение, 3 – деление, остальные значение — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3.

Используем case of.

program proc22;

function Calc(x, y: real; op: integer): real;
begin
  case op of
  1: result := x - y;
  2: result := x * y;
  3: result := x / y
  else result := x + y;
  end
end;

var
  a, b: real;
  op, i: integer;

begin
  for i := 1 to 3 do 
  begin
    write('Op = ');
    readln(op);
    write('A = ');
    readln(a);
    write('B = ');
    readln(b);
    writeln('Результат: ', Calc(a, b, op))
  end
end.

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

Сравните с if22.

program proc23;
//program if22;

function Quarter(x, y: real): integer;
begin
  if (X > 0) and (Y > 0) then Quarter := 1;
  if (X < 0) and (Y > 0) then Quarter := 2;
  if (X < 0) and (Y < 0) then Quarter := 3;      
  if (X > 0) and (Y < 0) then Quarter := 4;
end;

var
  x, y: real;
  i: integer;

begin
  for i := 1 to 3 do
  begin
    write('X = ');
    read(x);
    write('Y = ');
    read(y);
    writeln('Точка находится в ', Quarter(x, y), ' четверти.');
  end
end.

Proc24. Описать функцию Even(K) логического типа, возвращающую True, если целый параметр K является четным, и False в противном случае. С ее помощью найти количество четных чисел в наборе из 10 целых чисел.

program proc24;

function Even(a: integer): boolean;
begin
  if a mod 2 = 0 then Even := true else Even := false;
end;

var
  k, i, count: integer;

begin
  for i := 1 to 10 do 
  begin
    write('K = ');
    readln(k);
    if Even(k) then Inc(count);
  end;
  writeln('Количество четных чисел: ', count);
end.

Proc25. Описать функцию IsSquare(K) логического типа, возвращающую TRUE, если целый параметр K (> 0) является квадратом некоторого целого числа, и FALSE в противном случае. С ее помощью найти количество квадратов в наборе из 10 целых положительных чисел.

Используем функцию frac для определения лробной части.

program proc25;

function IsSquare(K: integer): boolean;
begin
  IsSquare := frac(sqrt(K)) = 0
end;

var
  a, count, i: integer;
  
begin
  for i := 1 to 10 do 
  begin
    write('A = ');
    readln(a);
    if IsSquare(a) then inc(count)
  end;
  writeln('Количество целых квадратов: ', count);
end.

Proc26. Описать функцию IsPower5(K) логического типа, возвращающую True, если целый параметр K (> 0) является степенью числа 5, и False в противном случае. С ее помощью найти количество степеней числа 5 в наборе из 10 целых положительных чисел.

program proc26;

function IsPower5(K: integer): boolean;
begin
  while K mod 5 = 0 do
  begin
   K := K div 5;
  end;
  IsPower5 := k = 1;
end;

var
  a, count, i: integer;
  
begin
  for i := 1 to 10 do 
  begin
    write('A = ');
    readln(a);
    if IsPower5(a) then inc(count)
  end;
  writeln('Количество степеней 5 : ', count);
end.

Proc27. Описать функцию IsPowerN(K, N) логического типа, возвращающую True, если целый параметр K (> 0) является степенью числа N (> 1), и False в противном случае. Дано число N (> 1) и набор из 10 целых положительных чисел. С помощью функции IsPowerN найти количество степеней числа N в данном наборе.

program proc27;

function IsPowerN(K, N: integer): boolean;
begin
  while K mod N = 0 do
  begin
    K := K div N;
  end;
  IsPowerN := (k = 1);
end;

var
  a, count, i, n: integer;

begin
  write('N = ');
  readln(n);
  for i := 1 to 10 do 
  begin
    write('A = ');
    readln(a);
    if IsPowerN(a, n) then inc(count)
  end;
  writeln('Количество степней ', N, ' : ', count);
end.

Proc28. Описать функцию IsPrime(N) логического типа, возвращающую True, если целый параметр N (> 1) является простым числом, и False в противном случае (число, большее 1, называется простым, если оно не имеет положительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе.

// Известно, что делители числа не превышают его квадратного корня.
// 2, 3, 7, 9, 11, 13... -- простое число
program proc28;

function IsPrime(N: integer): boolean;
var
  i: integer;
begin
  i := 2;
  while (n mod i <> 0) and (i * i < N) do Inc(i);
  if (i * i <= n) then IsPrime := false else IsPrime := true
end;

var
  a, count, i: integer;

begin
  for i := 1 to 10 do 
  begin
    write('A = ');
    readln(a);
    if IsPrime(a) then inc(count)
  end;
  writeln('Количество простых чисел : ', count);
end.

Proc29. Описать функцию DigitCount(K) целого типа, находящую количество цифр целого положительного числа K. Используя эту функцию, найти количество цифр для каждого из пяти данных целых положительных чисел.

// proc6
program proc29;

function DigitCount(K: integer): integer;
begin
  Result := 0;
  while k > 0 do
  begin
    k := k div 10; 
    inc(result); 
  end;
end;

var
  digit, i: integer;

begin
  for i := 1 to 5 do 
  begin
    write('Введите число: ');
    readln(digit);
    writeln('Количество цифр в числе ', digit, ' : ', DigitCount(digit))
  end
end.

Proc30. Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K (цифры в числе нумеруются справа налево). Если количество цифр в числе K меньше N, то функция возвращает -1. Для каждого из пяти данных целых положительных чисел K1, K2,…, K5 вызвать функцию DigitN с параметром N, изменяющимся от 1 до 5.

program proc30;
 
function DigitN(k, n: integer): integer;
var
  count: integer;
begin
  count := 0;
  while (count <> n) do
  begin
    Result := k mod 10;
    k := k div 10; 
    inc(count); 
  end;
  if k = 0 then result := -1
end;
 
var
  digit, i, number: integer;
 
begin
  for i := 1 to 5 do 
  begin
    write('Введите число: ');
    readln(digit);
    write('Введите номер цифры: ');
    readln(number);
    writeln(number, ' цифра в числе ', digit, ' : ', DigitN(digit, number))
  end
end.

На сегодня все! Если у вас возникли проблемы с решением задач proc21-30 или с любыми другими задачами, то напишите их в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *