Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задачник-практикум по основам программирования. Учебное пособие по курсу «Информатика»

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

1,

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]