Задачник-практикум по основам программирования. Учебное пособие по курсу «Информатика»
.pdf1, |
n = 1 |
|
||
|
|
n |
|
|
f (n) = n |
|
), если n |
> 2 |
|
∑ f ( |
i |
|||
i=2 |
|
|
|
|
Описать рекурсивную функцию для вычисления f(n) и вычислить f(k)
для k = 15, 16,…, 30.
8.5. Описать рекурсивную функцию Аккермана:
n + 1, |
если |
m = 0, |
|
|
если |
m > 0, |
n = 0, |
A(m, n) = A(m − 1, 1), |
|||
|
A(m, n − 1)), если m > 0, |
n > 0. |
|
A(m − 1, |
|||
Найти значение функции для некоторых (малых!) целых неотрицательных значений m и n.
8.6.Функция Мак-Карти для целых n описывается так: function McC(n:integer): integer;
begin
if n > 100 then McC:=n-10
else
McC:= McC (McC (n+11))
end;
Вычислить McC(100), McC(99), McC(95), McC(105), McC(0), McC(–5). Проанализировав полученные результаты, получить нерекурсивное определение функции McC(n).
8.7.Описать рекурсивную процедуру, которая выводит первые n строк числового треугольника Паскаля. Треугольником Паскаля называется числовой треугольник, в котором по краям стоят единицы, а каждое число внутри равно сумме двух стоящих над ним в ближайшей строке сверху.
Например, ниже приведен числовой треугольник Паскаля для n = 5.
|
|
1 |
|
|
|
1 |
|
1 |
|
|
1 |
2 |
1 |
|
1 |
3 |
|
3 |
1 |
1 |
4 |
6 |
4 |
1 |
Используя процедуру, выдать k различных треугольников Паскаля.
161
8.8.Используя рекурсивную процедуру, выдать построчно следующие последовательности прописных латинских букв:
AAAA············AAAA |
52 раза |
BBB············BBB |
50 раз |
CC············CC |
48 раз |
······ |
|
XXXXXX |
6 раз |
YYYY |
4 раза |
ZZ |
2 раза |
YYYY |
4 раза |
XXXXXX |
6 раз |
······ |
|
BBB············BBB |
50 раз |
AAAA············AAAA |
52 раза |
8.9.Вводится с клавиатуры последовательность символов (текст), заканчивающаяся точкой. Проверить, является ли этот текст правильной записью формулы.
Формула определяется следующим образом:
<формула> ::= <цифра> | (< формула > <знак> < формула >) <знак> ::= + | – | * <цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
8.10.Вводится с клавиатуры без ошибок логическое выражение вида:
<логическое выражение> ::= true | false | <операция> (<операнды>)
<операция> ::= not | and | or
<операнды> ::= <операнд> | <операнд>, <операнды> <операнд> ::= <логическое выражение> Используя рекурсивную функцию без параметров, вычислить значение вводимого логического выражения.
Примечание. У операций and и or может быть любое число операндов, у not – только один. Например, значения выражений равны: not(and(true,or(true,false),false)) – true, and(or(false,not(false)),true,not(true)) – false.
8.11.Вводится с клавиатуры последовательность символов (текст), за которым следует точка. Проверить, является ли этот текст правильной записью логического выражения.
Логическое выражение определяется следующим образом:
162
<логическое выражение> ::= true | false | <операция> (<операнды>)
<операция> ::= not | and | or
<операнды> ::= <операнд> | <операнд>, <операнды> <операнд> ::= <логическое выражение>
Примечание. У операций and и or может быть любое число операндов, у not – только один. Например, not(and(true,or(true,false),false)) – правильная запись,
not(and(true,or(true,false),false) – неправильная запись,
not(and(true,or(true,false)),false) – неправильная запись.
8.12.Вводится с клавиатуры последовательность символов (текст), заканчивающаяся точкой.
Проверить, удовлетворяет ли его структура следующему опре- делению:
<текст> ::= <элемент> | <элемент> <текст> <элемент> ::= a | b | (<текст>) | [<текст>] | {<текст>}
Например,
a({a(ba)bb[ab]}(aba)) – правильная запись, a({a(ba)bb[ab}](aba)) – неправильная запись, a({a(ba)bb[ab]}(aba) – неправильная запись.
8.13.Описать рекурсивную функцию, которая определяет, является ли заданное натуральное числопростым. Используя эту функциювывести все простые числа на заданном интервале [a, b].
8.14.Вводится с клавиатуры последовательность из n символов – цифр. Описать рекурсивную функцию, которая превращает последовательность символов в целое число.
Использовать функциюдлявычислениянесколькихчиселсразличным количеством значащих цифр.
8.15.Узор образуется n вложенными квадратами по правилам:
–первый квадрат задается координатами левой верхней вершины и длиной стороны, а его стороны параллельны осям координат;
–вершины каждого следующего квадрата – точки на сторонах предыдущего квадрата, делящие эти стороны в отношении k1 : k2. Описать и использовать рекурсивную и нерекурсивную процедуры для построения узора, образованного по описанным правилам.
163
8.16.Узор образуется n вложенными равносторонними треугольниками по правилам:
–первый треугольник задается координатами левой нижней вершины и длиной стороны; одна из сторон параллельна оси OX;
–вершины каждого следующего треугольника – точки на сторонах предыдущего треугольника, делящие эти стороны в отношении k1 : k2. Описать и применить рекурсивную и нерекурсивную процедуры для построения узора, образованного по описанным правилам.
8.17.Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:
1+ 3 + 5 + ... + 2n +1
Используя эти функции, вычислить значения для различных n > 3 и сравнить результаты.
8.18.Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:
2 + 4 + 6 + ... + 2n
Используя эти функции, вычислить значения для различных n > 3 и сравнить результаты.
8.19.Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби:
1
1+ |
|
1 |
|
|
2 + |
1 |
|
|
|
|
|
|
||
|
3 + ... + |
1 |
|
|
|
|
|
||
|
|
|
n |
|
Используя эти функции, вычислить значения цепной дроби при различных n > 5 и сравнить результаты.
8.20.Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби:
1
2 + |
|
1 |
|
|
4 + |
1 |
|
|
|
|
|
|
||
|
6 + ... + |
1 |
|
|
|
|
|
||
|
|
2n |
|
|
|
|
|
|
164
Используя эти функции, вычислить значения цепной дроби при различных n > 3 и сравнить результаты.
8.21.Описать функцию построения синтаксического анализатора для понятия идентификатор
|
< буква > |
|
|
|
|
< цифра > |
|
< идентификатор >:= |
|
||
< идентификатор > |
|
< буква > |
|
|
|
|
|
Использовать функцию для синтаксического анализа заданных слов.
8.22.Дано целое положительное число n. Получить изображение кривой Дракона порядка n, которая строится по следующим правилам. Каждойкривойставитсявсоответствиепоследовательность, состоящая из нулей и единиц (двоичная формула), где единица соответствует повороту кривой налево и прорисовке отрезка единичной длины, а нуль – повороту направо и прорисовке отрезка единичной длины. Кривая дракона первого порядка имеет двоичную формулу – 1. Для того чтобы получить двоичную формулу кривой дракона каждого следующего порядка, следует приписать справа к формуле кривой предыдущего порядка единицу. Полученная последовательность дает половину искомой формулы. Затем в последовательности цифр, предшествующих приписанной единице, следует заменить нулем единицу, стоящую в ее середине, после чего приписать полученную последовательность справа от уже построенной части формулы. Например, кривой дракона второго порядка соответствует двоичная формула 110, кривой дракона третьего порядка – 1101100.
8.23.Дано натуральное число n. Построить кривую Гильберта порядка n по следующим правилам [19].
Каждая кривая i-го порядка состоит из четырех вдвое меньших кривых i–1-го порядка (A, B, C, D), повернутых соответствующим образом и «стянутых» вместе тремя прямыми линиями. Процедуры, рисующие соединительные прямые, обозначаются стрелками, указывающими соответствующее направление.
Составляющие A, B, C, D строятся с помощью следующих рекуррентных соотношений:
H0 : пусто.
Hi : для i > 0 A, B, C, D строятся следующим образом:
165
A: D |
← |
A |
↓ |
A |
→ |
B |
B: C |
↑ |
B |
→ |
B |
↓ |
A |
C: B |
→ |
C |
↑ |
C |
← |
D |
D: A |
↓ |
D |
← |
D |
↑ |
C |
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Задание 1
1) Используя рекурсивную функцию, найти n-ый элемент последова-
тельности xn =3 xn–1, x0 =1. |
|
||
2) |
Используя рекурсивную функцию, найти сумму первых n элементов |
||
последовательности xn =3 xn–1, |
x0 =1. |
||
3) |
Используя рекурсивную функцию, найти максимальный из первых |
||
n элементов последовательности xn =5 xn–1 +1, x0 =0. |
|||
4) |
Используя рекурсивную функцию, выдать первые n элементов пос- |
||
ледовательности |
xn =5 xn–1 +1, |
x0 =0 , которые меньше заданного числа m. |
|
5) |
Используярекурсивнуюфункцию, выдатьпервыеn элементовпосле- |
||
довательности |
xn =5 xn–1 –20, |
x0 =2 , которые больше заданного числа m. |
|
6)Используя рекурсивную функцию, найти максимальный элемент из n элементов последовательности целых чисел, вводимых с клавиатуры.
7)Вводится с клавиатуры последовательность символов – цифр, заканчивающаяся точкой. Описать рекурсивную функцию без параметров, которая превращает последовательность символов в целое число с обратным порядком следования цифр.
Использовать функциюдлявычислениянесколькихчиселсразличным количеством значащих цифр.
8)Вводится с клавиатуры последовательность ненулевых веществен- ных чисел, за которыми следует 0. Используя рекурсивную функцию без параметров, найти сумму положительных чисел.
9)Вводится с клавиатуры последовательность ненулевых веществен- ных чисел, за которыми следует 0. Используя рекурсивную функцию без параметров, найти количество отрицательных чисел
10)Вводится с клавиатуры непустая последовательность положи- тельных вещественных чисел, за которой следует отрицательное число.
166
Используя рекурсивную функцию без параметров, найти произведение этих положительных чисел.
11) Вводится с клавиатуры непустая последовательность положи- тельных вещественных чисел, за которой следует отрицательное число. Используя функцию без параметров, найти среднее арифметическое этих положительных чисел.
Примечание. Для нахождения среднего арифметического использовать не- рекурсивную функцию, вызывающую в своем теле рекурсивную процедуру нахож- дения суммы и количества положительных вещественных чисел.
12)Вводится с клавиатуры последовательность символов (текст), за- канчивающаяся точкой. Используя рекурсивную процедуру без параметров, выдать все символы текста (без точки) в обратном порядке.
13)Вводится с клавиатуры последовательность символов (текст), за- канчивающаяся точкой. Используя рекурсивную процедуру без параметров, выдать в обратном порядке все цифры, встречающиеся в тексте.
14)Вводится с клавиатуры последовательность символов (текст), заканчивающаяся точкой. Используя рекурсивную процедуру без парамет- ров, выдать в обратном порядке все латинские буквы, встречающиеся в тексте.
15)Вводится с клавиатуры последовательность символов (текст), за- канчивающаяся точкой. Используя рекурсивную функцию без параметров, подсчитать количество цифр, встречающихся в тексте.
16)Вводится с клавиатуры последовательность символов (текст), заканчивающаяся точкой. Используя рекурсивную функцию без парамет- ров, подсчитать количество строчных латинских букв, встречающихся в тексте.
17)Описать рекурсивную функцию нахождения n-го члена арифме- тической прогрессии по первому члену прогрессии и разности прогрессии
иномеру члена прогрессии n. Применить функцию для нахождения n-го члена арифметической прогрессии m раз, задавая каждый раз первый член прогрессии, разность прогрессии и целое число n.
18)Описать рекурсивную функцию нахождения суммы первых n чле- нов арифметической прогрессии по первому члену прогрессии, разности прогрессии и номеру члена прогрессии n. Применить функцию для нахож- дения суммы n членов арифметической прогрессии m раз, задавая каждый раз первый член прогрессии, разность прогрессии и целое число n.
19)Описать рекурсивную функцию для нахождения n-го члена геомет- рической прогрессии по первому члену прогрессии, знаменателю прогрессии
167
и номеру члена прогрессии n. Применить функцию для нахождения n-го члена геометрической прогрессии m раз, задавая каждый раз первый член прогрессии, знаменатель прогрессии и целое число n.
20)Описать рекурсивную функцию нахождения суммы первых n чле- нов геометрической прогрессии по первому члену прогрессии, знаменателю прогрессии и номеру члена прогрессии n. Применить функцию для нахож- дения суммы n членов геометрической прогрессии m раз, задавая каждый раз первый член прогрессии, знаменатель прогрессии и целое число n.
21)Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:
n + n − 1+ ... + 1
Используя эти функции, вычислить значения для различных n > 3
исравнить результаты.
22)Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:
2n + 2n − 2 + ... + 2
Используя эти функции, вычислить значения для различных n > 3
исравнить результаты.
23)Описать рекурсивную и нерекурсивную функции вычисления значения по формуле:
2n + 1+ 2n − 1+ ... + 1
Используя эти функции, вычислить значения для различных n > 3
исравнить результаты.
24)Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби:
1
n + |
|
1 |
|
|
|
n − 1+ |
1 |
|
|
|
|
|
|
|
|
||
|
n − 2 + ... + |
1 |
|
|
|
|
|
|
|
||
|
|
2 + |
1 |
|
|
|
|
|
|
||
|
|
|
|
1 |
|
Используя эти функции, вычислить значения цепной дроби при раз- личных n > 5 и сравнить результаты.
168
25) Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби:
1
2n + |
|
1 |
|
|
2n − 2 + |
1 |
|
|
|
|
|
|
||
|
2n − 4 + ... + |
1 |
|
|
|
|
|
||
|
|
|
2 |
|
Используя эти функции, вычислить значения цепной дроби при раз- личных n > 3 и сравнить результаты.
ПРИЛОЖЕНИЕ А
Стандартные функции и процедуры
Стандартные подпрограммы (процедуры и функции) предполагаются предопределенными для каждой реализации языка Паскаль [21]. При реа- лизации могут быть добавлены дополнительные функции и процедуры.
Математические (арифметические) функции
Èìÿ |
Назначение |
|
|
abs |
Абсолютное значение (модуль) аргумента |
|
|
arctan |
Арктангенс аргумента |
|
|
cos |
Косинус аргумента |
|
|
exp |
Экспонента – показательная функция с основанием e ( ex ) |
ln |
Натуральный логарифм |
|
|
sin |
Синус аргумента |
|
|
sqr |
Квадрат аргумента |
|
|
sqrt |
Квадратный корень аргумента |
|
|
|
Функции для величин порядкового типа |
|
|
|
|
Èìÿ |
|
Назначение |
|
|
|
odd |
|
Проверка аргумента на нечетность |
|
|
|
pred |
|
Предыдущее значение аргумента |
|
|
|
succ |
|
Следующее значение аргумента |
|
|
|
|
Функции преобразования типов |
|
|
|
|
Èìÿ |
|
Назначение |
|
|
|
chr |
|
Получение символа по его коду |
|
|
|
ord |
|
Номер аргумента порядкового типа |
|
|
|
round |
|
Округление вещественного аргумента до ближайшего |
|
|
целого |
|
|
|
170
