
Приветствуем читателей нашего сайта. Сегодня мы решаем 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 или с любыми другими задачами, то напишите их в комментариях.