Файл: Контроль обучения 4 Первое контрольное задание 5 Второе контрольное задание 31.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 141
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
type str=string[100];
var s1 : str;
k1 : integer;
function count(var s:str) : integer;
var i, k : integer;
begin
k:=0;
for i:=1 to length(s) do if s[i] in ['0'..'9', '+', '–', '*'] then k:=k+1;
count:=k
end;
begin
writeln('Введите строку');
readln(s1);
k1:=count(s1);
writeln('Количество цифр и знаков – ', k1:5);
end.
19. type M=set of 0..99;
Описать функцию card(A), подсчитывающую количество элементов множества A типа M (ноль используйте как прекращение ввода). (Например, card([5,8,23])=3.)
Переменные:
а) в функции card:
A – множество (формальный параметр);
p – счетчик цикла от 0 до 99 (локальная переменная);
k – количество элементов множества А (локальная переменная);
б) в основной программе:
x – введенное число (локальная переменная);
b – созданное множество (локальная переменная);
k1 – количество элементов в созданном множестве (фактический параметр).
Алгоритм решения задачи:
-
создаем функцию card, подсчитывающую количество элементов множества; -
организуем пустое множество; -
в цикле repeat … until вводим числа до тех пор, пока не ввели 0, и дописываем их во множество; -
вызываем функцию card и выводим значение счетчика k1 на экран; -
завершаем работу программы.
type M=set of 0..99;
var b : m;
k1, x : integer;
function card(A:M) : integer;
var p,k : integer;
begin
k:=0;
for p:=0 to 99 do if p in A then k:=k+1;
card:=k
end;
begin
b:=[ ];
repeat
write('Введите число >0<=99 – ');
readln(x); b:=b+[x];
until x=0;
k1:=card(b);
writeln('Количество различных элементов множества', k1);
end.
20. Программа. Дана строка из строчных латинских букв. Напечатать первые вхождения букв в текст, сохраняя их исходный взаимный порядок.
Переменные:
let – множество малых латинских букв;
c – очередной символ строки;
s – введенная строка;
i – переменная цикла.
Алгоритм решения задачи:
-
организуем пустое множество let; -
вводим строчку s; -
организуем цикл, в котором просматриваем символы строки s до тех пор, пока не встретим ‘.’, и проверяем, входит ли этот символ во множество let (т.е. символ – малая латинская буква); -
если очередной символ строки не входит во множество let, то этот символ встретился впервые; выводим его на экран и дописываем во множество; -
завершаем работу программы.
var
let : set of 'a'..'z';
s : string; c : char; i : integer;
begin
let:=[ ]; {множество букв в рассмотренной части текста}
readln(s);
i:=1;
while s[i]<>'.' do
begin if not(s[i] in let) then {1-е вхождение}
begin write(s[i]); c:=s[i]; let:=let+[c] end;
i:=i+1;
end;
writeln
end.
Варианты заданий
Вариант 1 | Задача 1. Даны целые числа a1, a2, ..., an . Все члены последовательности с четными номерами, предшествующие первому по порядку члену со значением max (a1, a2, ..., an), домножить на max (a1, a2, ..., an). Задача 2 Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы размером NxM напечатать индексы всех ее седловых точек. Указание: определите булевскую функцию f(i,j) для определения, является ли данный элемент с индексами i и j седловым. Задача 3 Для заданных трех строк S1, S2 и S3 определить, какая из них является палиндромом. Назовем строку палиндромом, если его запись читается одинаково с начала и с конца (как, например, ‘казак’, ‘алла’, ‘fffjjjfff’). Указание: определить булевскую функцию f(s) для проверки, является ли строка s палиндромом. Результатом должен быть ответ «да» или «нет». Задача 4 Спортлото: 6 из 49. Составьте программу, в которой загадываются, иначе говоря, создаются 6 разных чисел, значения которых никак не связаны друг с другом, а величина лежит в интервале от 1 до 49. Указание. Для решения задачи используйте множества. Выражение random(49)+1 дает случайное целое число в интервале от 1 до 49. |
Вариант 2 | Задача 1 Даны целые числа a1, a2, ..., an. Наименьший член последовательности a1, a2, ..., an заменить целой частью среднего арифметического всех членов, остальные члены оставить без изменения. Если в последовательности несколько членов со значением min(a1, a2, ..., an), то заменить последний по порядку. Задача 2 var k : integer; c : array[1..n, 1..m] of char; Определить k – количество различных элементов массива c (т.е. повторяющиеся элементы считать один раз). Указание: для хранения счетчиков для всех символов использовать массив типа array[char] of integer. Задача 3 Для заданных трех строк S1, S2 и S3 определить, какая из них является десятичной записью числа, кратного 3. Указание: строка может быть любой длины, поэтому переводить строку целиком в число не рекомендуется. Вспомните и используйте другой метод определения кратности числа 3. Задача 4 В возрастающем порядке напечатать все целые числа из диапазона 1..255, представимые в виде n2 + m2, где m, n>=0. Указание. Для решения задачи используйте множества. |
Вариант 3 | Задача 1 Даны две последовательности по n целых чисел в каждой. Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую последовательность (считая, что хотя бы одно число есть). Указание: определите булевскую функцию f(x,mas), которая проверяет, входит ли элемент x в массив mas. Задача 2 var k : integer; c : array[1..n, 1..m] of integer; Определить k – количество «особых» элементов массива c, считая элемент «особым», если в его строке слева от него находятся элементы, меньшие его, а справа – большие. Указание: определите булевскую функцию f(x), которая проверяет, является ли элемент x «особым». Задача 3 Для заданных трех строк S1, S2 и S3 напечатать те латинские буквы, которые входят только в одну из этих строк. Указание: например, ввели строки S1 – ‘asfgsas’, S2 – ‘qweasdyu’, S3 – ‘mnbqwef’. Ответом должно служить следующее: ‘Только в первую строку входят буквы – g’, ‘Только во вторую строку входят буквы – dyu’, ‘Только в третью строку входят буквы – mnb’. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно один раз. Указание: решение задачи простое, если вы будете использовать множества. |
Вариант 4 | Задача 1 Даны натуральное число m и действительные a1, a2, ..., an (числа a1, a2, ..., an попарно различны, m<=n). В последовательности a1, a2, ..., an поменять местами наибольший член и член с номером m. Задача 2 Дана матрица целых чисел размером MxN. Найти номера строки и столбца наибольшего элемента матрицы. Задача 3 Даны две строки S1 и S2. Создать строку, состоящую из латинских букв, не принадлежащих какой-либо строке S1 и S2. Указание: результирующая строка должна содержать те латинские буквы, которых вообще нет ни в строке S1, ни в строке S2. Задача 4 Дана строка. В алфавитном порядке напечатайте все малые латинские буквы, не входящие в эту строку. Указание: решение задачи простое, если вы будете использовать множества. |
Вариант 5 | Задача 1 Даны действительные числа a1, a2, ..., an, b1, b2, ..., bn. Вычислить (a1 + bn) * (a2 + bn–1)* ... *(an + b1). Задача 2 var A : array [1..4,1..5] of integer; b : array [1..4] of boolean; По массиву A получить массив b, присвоив его k-му элементу значение true, если элементы k-й строки массива A упорядочены по убыванию, и значение false иначе. Указание: определите булевскую функцию f(i), проверяющую, является ли i-ая строка матрицы упорядоченной по убыванию. Задача 3 Даны две строки S1 и S2. Создать строку, состоящую из символов, входящих либо в S1, либо в S2, но не в обе сразу. Задача 4 Спортлото: 5 из 36. Составьте программу, в которой загадываются, иначе говоря, создаются 5 разных чисел, значения которых никак не связаны друг с другом, а величина лежит в интервале от 1 до 36. Указание: решение задачи простое, если вы будете использовать множества. Выражение random(36)+1 дает случайное целое число в интервале от 1 до 36. |
Вариант 6 | Задача 1 Даны координаты n точек на плоскости: x1, y1, ..., xn, yn. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная). Задача 2 var A : array [1..4,1..5] of integer; b : array [1..4] of boolean; По массиву A получить массив b, присвоив его k-му элементу значение true, если k-ая строка массива A симметрична, и значение false иначе. Указание: определите булевскую функцию f(i), проверяющую, является ли i-ая строка матрицы симметричной. Задача 3 Исключить из данной строки группы символов, расположенные между скобками ( , ). Сами скобки тоже должны быть исключены. Указание: предполагается, что внутри каждой пары скобок нет других скобок. Задача 4 Напечатать все натуральные числа от 10 до 32767, в десятичной записи которых нет одинаковых цифр. Указание: решение задачи простое, если вы будете использовать множества. Необходимо для каждого числа создавать множество, состоящее из цифр числа. При этом проверять: если очередная цифра числа есть уже во множестве, то такое число не надо выводить на экран. |
Вариант 7 | Задача 1 const n = ...; var s : array [1..n] of integer; Напечатать те элементы массива s, которые являются полными квадратами (1, 4, 9, 16, 25,...). Подсказка. Число k является полным квадратом, если выполнено равенство k = (trunc( ))2. Задача 2 Определить, является ли заданная целая квадратная матрица n-го порядка магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы. Пример магического квадрата: 0 1 2 3 4 1 2 3 4 0 2 3 4 0 1 3 4 0 1 2 4 0 1 2 3 Задача 3 Проверить, правильно ли в данной строке расставлены круглые скобки (т.е. находится ли справа от каждой открывающей скобки соответствующая закрывающая скобка, а слева от каждой закрывающей – соответствующая открывающая). Ответ – «да» или «нет». Используйте следующий алгоритм: На каждом шаге цикла во время просмотра строки символов текущее значение количества открывающих скобок больше или равно текущему значению количества закрывающих скобок. После окончания цикла количество открывающих скобок равно количеству закрывающих скобок. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку более одного раза. Указание: решение задачи простое, если вы будете использовать множества. |
Вариант 8 | Задача 1 Дана последовательность из n целых чисел. Определить количество инверсий в этой последовательности (т.е. таких пар элементов, в которых большое число находится слева от меньшего: x i > x j при i < j). Задача 2 var k : integer; C : array [1..n,1..m] of integer; Определить k – количество «особых» элементов массива C, считая элемент особым, если он больше суммы остальных элементов своего столбца. Указание: определите булевскую функцию f(i,j) для проверки, является ли элемент C[i,j] особым. Задача 3 В заданном предложении найти пару слов, из которых одно является обращением другого. Указание: воспользуйтесь массивом строк для хранения слов. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все строчные латинские согласные буквы, входящие в эту строку. Указание: гласные буквы – а, e, i, o, u; остальные – согласные. Решение задачи простое, если вы будете использовать множества. |
Вариант 9 | Задача 1 Определить булевскую функцию, проверяющую на равенство два массива. Массивы считаются в данном случае равными, если они равны как множества, т.е. содержат одинаковые элементы, быть может, в другом порядке. Указание: определите булевскую функцию f(x,m), проверяющую входит ли элемент x в массив m. Задача 2 type вектор = array [1..n] of integer; (n – четно) матрица = array [1..n] of вектор; var A : матрица; x : вектор; В матрице A поменять местами 1-ю и 2-ю строки, 3-ю и 4-ю строки,..., (n–1)-ю и n-ю строки (воспользоваться x как вспомогательным массивом). Задача 3 Определить, является ли заданная строка правильной записью вещественного числа (возможно, со знаком, а также с пробелами спереди и/или сзади). Указание: вещественное число может быть представлено либо в виде числа с фиксированной десятичной точкой (–214.78), либо в виде числа с плавающей десятичной точкой (–2.1478Е+02). Задача 4 Дана строка символов. Подсчитайте количество различных латинских малых букв, входящих в данную строку. Указание: решение задачи простое, если вы будете использовать множества. |
Вариант 10 | Задача 1 Даны целые числа a1, a2, ..., an, каждое из которых отлично от нуля. Если в последовательности отрицательные и положительные члены чередуются (+, –, +, –,.... или –, +, –, +,...), то напечатать исходную последовательность. Иначе напечатать все отрицательные члены последовательности, сохранив порядок их следования. Задача 2 var A : array [1..6,1..6] of boolean; B : array [1..5,1..5] of boolean; n,k : 1..6; Получить массив B из массива A удалением n-ой строки и k-го столбца. Задача 3 Дана строка S. Каждую подстроку длиной n > 1, состоящую из одинаковых символов, заменить на подстроку из тех же символов в количестве 2*n штук. Например, дана строка ‘kjhhsdaaa’. Необходимо получить и вывести на зкран строку: ‘kjhhhhsdaaaaaa’. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все большие латинские гласные буквы, входящие в эту строку. Указание: гласные буквы – а, e, i, o, u; остальные – согласные. Решение задачи простое, если вы будете использовать множества. |
Вариант 11 | Задача 1 Даны действительные числа a1, a2, ..., an. Если в результате замены отрицательных членов последовательности a1, a2, ..., an их квадратами члены будут образовывать неубывающую последовательность, то получить сумму членов исходной последовательности; в противном случае получить их произведение. Задача 2 const n =..; var A,B,C : array [1..n,1..n] of real; Вычислить С = (A+B)2 (сумма двух матриц A и B возводится в квадрат). Указание: определите процедуру с параметрами для сложения матриц и процедуру с параметрами для возведения матрицы в квадрат. Задача 3 Для заданной строки определить длину содержащейся в ней максимальной подстроки, не имеющей латинских букв. Задача 4 Дана строка из строчных латинских букв. Напечатайте все буквы, входящие в текст не менее двух раз. Указание. Просматривая в цикле символы текста, формируйте два множества: одно содержит уже просмотренные символы, другое наполняется теми элементами, которые входят в первое множество. |
Вариант 12 | Задача 1 const n = ...; var x, y : array [1..n] of real; Дано k (1 <= k <= n–1). Преобразовать массив x по следующему правилу (воспользоваться массивом y как вспомогательным): элементы массива x циклически сдвинуть на k позиций влево. Подсказка: определить процедуру для сдвига массива на 1 позицию влево и применить ее k раз. Задача 2 var A : array [1..n,1..m] of real; x : array [1..m] of real; Заполнить массив A по следующему правилу: A[i , j] = (x[ j ])i . Подсказка: ab = . Задача 3 Дана строка S и дано натуральное n. Удалить из строки S все группы длиной n подряд стоящих одинаковых символов. Указание: если ввести строку, например, ‘kjhdahhhasaaaaa’, а значение n ввести равное 2, то необходимо получить ‘kjhdahasaaa’. Задача 4 Дана строка. Определить, каких букв больше в этом тексте: латинских строчных гласных или согласных. Указание: гласные буквы – а, e, i, o, u; остальные – согласные. Решение задачи простое, если вы будете использовать множества. |
Вариант 13 | Задача 1 По заданной квадратной матрице размером 10x10 построить вектор длиной 19, элементы которого – максимумы элементов диагоналей, параллельных главной диагонали. Задача 2 var A : array [1..n,1..n] of real; Найти сумму элементов из области матрицы А, отмеченной символом '*' (диагонали входят в выделенную область): * * * * * * * 0 * * * * * 0 0 0 * * * 0 0 0 0 0 * 0 0 0 0 0 * * * 0 0 0 * * * * * 0 * * * * * * * Задача 3 В данной строке найти самую длинную подстроку, состоящую из одинаковых символов. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза. Указание: решение задачи простое, если вы будете использовать множества. Заведите три множества X1, X2 и X3 (сначала эти множества пустые). И в цикле просмотрите все символы из введенной строки. С каждым символом – маленькой латинской буквой выполняйте следующие действия:
После окончания цикла распечатайте в алфавитном порядке все элементы из разности множеств X2–X3. Это будет ответ. (Используйте цикл for c:=’a’ to ‘z’ do если c входит в X2–X3, то печать c. ) |
Вариант 14 | Задача 1 Напечатать величины a1, a2, ..., an, где a0 – заданное целое число, ai = при i = 1, 2, ... n. [i/2] означает целую часть числа i/2. Задача 2 Даны натуральное n и (построчно) элементы квадратной вещественной матрицы А четвертого порядка. Вычислить n-ю степень этой матрицы (A1 = A; A2 = A*A; A3 = A2 * A и т.д.). Указания: 1. Определите процедуру mult(a,b,c) для умножения матриц (a*b = c). 2. Для вычисления n-ой степени матрицы поступайте так же, как при вычислении в цикле n-ой степени числа, но вместо умножения чисел используйте процедуру mult. Задача 3 Для заданных трех строк S1, S2 и S3 определить, какая из них является десятичной записью числа, кратного 3. Указание: строка может быть любой длины, поэтому переводить строку целиком в число не рекомендуется. Вспомните и используйте другой метод определения кратности числа 3. Задача 4 Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские гласные буквы, входящие в эту строку ровно 3 раза. Указание: гласные буквы – а, e, i, o, u; остальные – согласные. Решение задачи простое, если вы будете использовать множества. |
Вариант 15 | Задача 1 Даны действительные числа a1, a2, ..., an, an , ... , a2n . Получить max (a1 + a2n , a2 + a2n – 1, ... , an + an+1 ); min(a1 * an, a2 * an+1, ... , an+1 * a2n ). Задача 2 var A : array [1..n,1..n] of real; (n–нечетно) Найти сумму элементов из области матрицы А, отмеченной символом ' * ': 1 n 0 0 0 * 0 0 0 0 0 * * * 0 0 0 * * * * * 0 * * * * * * * 0 * * * * * 0 0 0 * * * 0 0 n 0 0 0 * 0 0 0 Задача 3 Дана строка S и дано натуральное n. Удалить из строки S все группы длиной n подряд стоящих одинаковых символов. Указание: если ввести строку, например, ‘kjhdahhhasaaaaa’, а значение n ввести равное 2, то необходимо получить ‘kjhdahasaaa’. Задача 4 Напечатать все натуральные числа от 10 до 32767, в десятичной записи которых нет одинаковых цифр. Указание: решение задачи простое, если вы будете использовать множества. Необходимо для каждого числа создавать множество, состоящее из цифр числа. При этом проверять: если очередная цифра числа есть уже во множестве, то такое число не надо выводить на экран. |
Третье контрольное задание
Третье контрольное (текстовое) задание состоит из четырех задач. Первая задача посвящена созданию программ, отражающих приемы работы с файлами. Необходимо в начале программы создать файл (элементы файла вводим с клавиатуры), а в конце программы сначала вывести на экран содержимое созданного файла, а затем отразить полученные результаты. Во второй задаче необходимо составить программу, реализующую алгоритм сортировки. На экран выводятся исходный и результирующий массивы. Алгоритм сортировки оформить в виде процедуры. Третья задача состоит в разработке программы, реализующей рекурсивный алгоритм. Четвертое задание посвящено созданию программ в графическом режиме.
Вам требуется составить программы на языке Паскаль.
Примеры задач с решением
ФАЙЛЫ
1. type series=file of real;
Описать функцию neg(s), подсчитывающую сумму отрицательных элементов в файле s типа series.
Переменные:
а) основная программа:
f – файл вещественных чисел (глобальная переменная);
y – очередное число для записи в файл (глобальная переменная);
n – сумма отрицательных элементов файла (глобальная переменная);
k – счетчик цифр.
б) функция neg:
s – файловая переменная (локальная, формальная переменная);
x – очередной элемент файла (локальная переменная);
sum – сумма отрицательных элементов файла (локальная переменная).
Алгоритм решения задачи:
-
свяжем файл proba.txt с файловой переменной f и откроем его для записи; -
организуем цикл, в котором вводим числа и записываем их в файл до тех пор, пока не введем 0; -
вызываем функцию neg, в которой открываем файл для чтения, считываем последовательно элементы файла и определяем сумму отрицательных элементов файла; -
выводим значение суммы на экран.
type series=file of real;
var f : series;
n,y : real;
function neg(var s : series) : real;
var sum,x : real;
begin
reset(s); sum:=0;
while not eof(s) do
begin
read(s,x);
if x<0 then sum:=sum+x
end;
neg:=sum ; close(s)
end;
begin
assign (f,'c:\tp\bin\proba.txt');
rewrite(f);
repeat
write('Введите число (0 – конец ввода)– ');
readln(y);
write(f,y);
until (y=0);
close (f);
n:=neg(f);
writeln('Сумма отрицательных элементов файла n= ',n:10:3);
close(f);
end.
2. type row=file of 0..999;
Описать логическую функцию sort(r), проверяющую, упорядочены ли по возрастанию элементы непустого файла r типа row.
type row1 = 0..999;
row = file of row1;
var r : row;
x,y : row1;
i,k : integer;
function sort(var r : row) : boolean;
var x,y : row1; ok : boolean;
begin
reset(r);
read(r,y); ok:=true;
while not eof(r) and ok do
begin x:=y; read(r,y); ok:=x
sort:=ok; close(r)
end;
begin
write('Введите количество элементов файла');
readln(k);
assign(r,'c:\tp\work\12.dat');
rewrite(r);
for i:= 1 to k do
begin
writeln('Введите ',i,'-ый элемент файла');
read(x); write(r,x);
end;
close(r);
if sort(r) then writeln('Упорядочены по возрастанию')
else writeln('Не упорядочены по возрастанию');
end.
3. type reals=file of real;
Описать функцию less(f) от непустого файла f типа reals, которая подсчитывает количество элементов файла f, меньших среднего арифметического всех элементов этого файла.
type reals = file of real;
var f1 : reals;
a : real;l,i : integer;
function less(var f : reals) : integer;
var k : integer; x,s : real;
begin {подсчет среднего арифметического:}
reset(f); k:=0; s:=0;
repeat
read(f,x);
k:=k+1;
s:=s+x
until eof(f);
s:=s/k;
{новый просмотр f и подсчет элементов
reset(f); k:=0;
repeat
read(f,x);
if x
until eof(f);
less:=k; close(f)
end;
begin
assign(f1,'c:\tp\work\23.dat');
rewrite(f1);
for i:=1 to 10 do
begin readln(a); write(f1,a); end;
l:=less(f1); close(f1);
writeln('l=', l);
end.
СОРТИРОВКА СЛИЯНИЕМ
4. const k=50; m=20; n=70; {n=k+m}
var x : array [1..k] of real;
y : array [1..m] of real;
z : array [1..n] of real;
i,p,j : integer;
Элементы каждого из массивов x и y упорядочены по неубыванию. Объединить элементы этих двух массивов в один массив z так, чтобы они снова оказались упорядоченными по неубыванию.
const k=50; m=20; n=70; {n=k+m}
var x : array [1..k] of real;
y : array [1..m] of real;
z : array [1..n] of real;
i, p, j : integer;
begin
writeln('Введите массив x');
for i:=1 to k do read(x[i]);
writeln;
writeln('Введите массив y');
for i:=1 to m do read(y[i]);
writeln;
writeln('Введенные Вами массивы');
writeln('Массив x');
for i:=1 to k do write(x[i]:7:3);
writeln;
writeln('Массив y');
for i:=1 to m do write(y[i]:7:3);
writeln;
p:=1; {индекс очередного элемента из z}
i:=1; {из х}
j:=1; {из y}
{пока есть нерассмотренные элементы и в x, и в y: }
repeat if x[i]
begin
z[p]:=x[i]; i:=i+1
end
else
begin
z[p]:=y[j]; j:=j+1
end;
p:=p+1
until (i>k)or(j>m);
{один из массивов x или y исчерпан --> перепись в z
оставшихся элементов другого массива:}
if i>k {исчерпан массив x:}
then repeat z[p]:=y[j]; j:=j+1; p:=p+1 until j>m
else repeat z[p]:=x[i]; i:=i+1; p:=p+1 until i>k;
writeln('Полученный массив: ');
for i:=1 to n do write(z[i]:7:3);
end.
РЕКУРСИЯ
5. Использовать рекурсию для нахождения цифрового корня целого числа.