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