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

Podprogram

.pdf
Скачиваний:
9
Добавлен:
01.04.2015
Размер:
117.64 Кб
Скачать

5.1.Написать функцию, вычисляющую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.

5.2.Даны натуральные числа n, m, действительные числа a1, a2, ..., an, b1, b2,

..., bm. В каждой из последовательностей a1, a2, ..., an и b1, b2, ..., bm все члены, следующие за наибольшим элементом, заменить на 0.5 (считать, что наибольший элемент в последовательности один).

5.3.Описать рекурсивную функцию, подсчитывающую количество кратных 5 в одномерном целочисленном массиве A из n элементов.

6.1. Дано вещественное число a. Определить функцию y =

 

и вычислить зна-

x

 

3

 

 

 

2

 

 

 

k

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 +

 

 

 

 

 

 

 

 

 

 

3 + a

 

 

 

чение выражения

 

a −

 

 

a

 

+ 1

.

 

 

 

 

 

 

7

 

 

 

 

 

 

 

 

Указание. Корни вычислять с точностью до ε = 0.0001 по следующей итерационной формуле:

y0 = 1; yn+1 = yn + (

x

 

− yn)/k, n = 0, 1, 2, ...,

yk

1

 

n

 

 

приняв за ответ приближение yn+1, для которого |yn+1 − yn| < ε.

6.2.Даны три действительные квадратные матрицы A, B, C порядка n. Преобразовать эти матрицы по следующему правилу: отрицательные элементы заменить на -1, положительные – на 1, нулевые оставить без изменения.

6.3.Даны натуральные числа n, m. Вычислить НОД(n, m) согласно формуле:

НОД(n, m) = {

n,

 

если m = 0,

НОД(m, r), где r

остаток от деления n на m, иначе.

 

 

 

7.1. Даны натуральное число n, действительные числа x, y, a0, a1, ..., an. Вычислить p(3) + p2(x) + p3(y) + p(x + y) + p(x y), где

p(x) = anxn + an 1xn 1 + ... + a0.

7.2. Даны три целые матрицы размером n × n. Напечатать ту из них, где больше

нулевых строк (если таких матриц несколько, напечатать их все).

7.3. Составить рекурсивную функцию для вычисления 3 + 3 + ... + 3. Всего

nкорней.

8.1.Вычислить периметр n-угольника, вершины которого имеют, соответственно, координаты (x1, y1), (x2, y2), ..., (xn, yn) (в порядке их обхода по часовой стрелке).

8.2.Написать программу сортировки заданного одномерного массива методом прямого выбора (минимального или максимального элемента). Ввод, вывод и сортировку массива, а также обмен значений между двумя переменными оформить в виде процедур.

8.3.Составить рекурсивную функцию для определения, является ли заданное натуральное число n простым.

9.1. Даны натуральное число n, действительные числа a1, a2, ..., an; b1, b2, ..., bn. Получить

 

n

e = f2(a1, a2, ..., an) + f(b1, a2, ..., bn), где f =

i

|ai|.

 

=1

11

10.1. Даны натуральное число n, действительные числа a1, a2, ..., an; b1, b2, ..., bn.
Получить v
uu∑n
d = f(a1, a2, ..., an) − f3(b1, b2, ..., bn), где f = t a2i .
i=1
если n = 0,
если n ≠ 0, m = 0
если n > 0, m > 0.

9.2.Описать процедуру reduce(a, b, p, q) от целых параметров (b ≠ 0), которая приводит дробь ab к несократимому виду pq , и использовать ее для приведения дроби

1 + 12 + ... + n1 к несократимому виду dc (n – заданное натуральное число).

9.3.Даны неотрицательные целые числа n, m; вычислить A(n, m) – функцию Аккермана, где

m + 1,

A(n, m) = A(n − 1, 1),

A(n − 1, A(n, m − 1)),

10.2.Описать процедуру maxmin(x, y), присваивающую параметру x большее из действительных чисел x и y, а параметру y – меньшее, и использовать ее для перераспределения действительных чисел a, b и c так, чтобы стало a ≥ b ≥ c.

10.3.Описать рекурсивную функцию, определяющую сумму цифр заданного натурального числа n.

11.1. Даны натуральное число n, действительные числа a1, a2, ..., an; b1, b2, ..., bn. Получить

 

n

 

i

q = f 1

(a1, a2, ..., an) + 6f(b1, a2, ..., bn), где f = (1)iai.

 

=1

11.2.Описать процедуру reverse(s), “переворачивающую” слово s, и использовать

еедля такого преобразования всех слов заданного предложения.

11.3.Описать рекурсивную функцию, подсчитывающую количество цифр в стро-

ке s.

12.1.Даны 30-элементные вещественные векторы x, y и z. Вычислить величину (x, x) (y, z), где (p, q) – скалярное произведение векторов p и q.

12.2.Три точки заданы своими координатами (x1, y1), (x2, y2) и (x3, y3). Вывести на экран полярные координаты этих точек, упорядоченные по возрастанию полярного радиуса.

Указание. Полярные радиус ρ и полярный угол φ вычисляются по следующим фор-

мулам:

ρ= x2 + y2, φ = arctg xy .

12.3.Описать рекурсивную логическую функцию, определяющую, является ли симметричной часть строки s, начинающаяся i-ым и оканчивающаяся j-ым элементами.

13.1. Дан треугольник, вершины которого имеют координаты (x1, y1), (x2, y2), (x3, y3). Определить, является ли треугольник прямоугольным.

12

1 + max(a + bc, 1, 15)

13.2.Написать программу сортировки заданного одномерного массива методом прямого включения (сортировка вставками). Ввод, вывод и сортировку массива, а также обмен значений между двумя переменными оформить в виде процедур.

13.3.Описать рекурсивную процедуру, печатающую символы заданной строки в обратном порядке.

14.1. Дано действительное число y. Получить

1.7t(0.25) + 2t(1 + y)

10 x2k+1

 

 

 

, где t(x) =

 

 

.

6 t(y2

 

1)

 

 

 

 

=0

(2k + 1)!

 

 

 

 

 

 

k

 

 

14.2.Даны две действительные квадратные матрицы A и B порядка n × n и два n-элементных вектора x и y. Получить вектор z = Ax + By.

14.3.Задана непустая последовательность положительных вещественных чисел, за которой следует отрицательное число. Описать рекурсивную функцию для нахождения суммы этих положительных чисел.

15.1.Даны натуральное число n, вещественные массивы a[1..n], b[1..n]. В каждом из массивов найти первое по порядку отрицательное число и перемножить. Поиск первого по порядку отрицательного числа оформить в виде функции.

15.2.Два треугольника заданы координатами своих вершин. Для каждого из треугольников найти радиусы вписанной и описанной окружностей.

15.3.Дана последовательность ненулевых целых чисел, за которой следует число

0.Составить рекурсивную процедуру, печатающую сначала все отрицательные числа этой последовательности, а затем – все положительные (в любом порядке).

16.1.Даны действительные числа a, b, c. Получить

max(a, a + b) + max(a, b + c).

16.2. Даны три действительные квадратные матрицы A, B, C порядка n. Для каждой из матриц выяснить, имеются ли в матрице ненулевые элементы, и, если имеются, указать индексы всех ненулевых элементов.

16.3. Описать рекурсивную функцию поиска минимального элемента вещественного массива A размера n.

17.1. Даны действительные числа a, b. Получить

u= min(a, b), v = min(ab, a + b), min(u + v2, 3.14).

17.2.Даны натуральное число n, целочисленные массивы a[1..n] и b[1..n]. Преобразовать каждый из массивов по следующему правилу: все нечетные элементы, сохраняя порядок, перенести в начало массива, а все четные – в конец.

17.3.Составить рекурсивную функцию для вычисления

1

1 +

 

1

 

 

 

 

 

 

 

 

 

 

3 +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

5 +

 

 

 

 

 

 

...

 

 

 

13

101 + 1031 .

18.1. Даны натуральные числа n, m, целые числа a1, a2, ..., an; b1, b2, ..., bm.

Получить

 

 

 

иначе|.

 

|

 

l = {

1 + (min(a1

, a2, ..., an))2,

 

 

 

 

min(a1

, a2, ..., an) + min(b1

, b2, ..., bm),

если min(a1

, a2, ..., an)

 

> 10,

18.2.Три прямые на плоскости заданы уравнениями akx + bky = ck (k = 1, 2, 3). Если эти прямые попарно пересекаются и образуют треугольник, то найти его площадь.

18.3.Описать рекурсивную функцию поиска максимального элемента вещественного массива A размера n.

19.1. Даны натуральные числа n, m, k, целые числа x1, x2, ..., xn, y1, y2, ..., ym, z1, z2, ..., zk. Получить

t =

{

max(x1, x2

, ..., xn) ,

 

иначе.

 

 

 

max(y1, y2

, ..., ym) + max(z1

, z2, ..., zk),

если max(x1

, x2, ..., xn)

 

0,

 

|

 

 

|

 

 

 

 

 

19.2.Дан треугольник, вершины которого имеют координаты (x1, y1), (x2, y2), (x3, y3). Описать процедуру, печатающую уравнение прямой, проходящей через две точки, и использовать ее для вывода уравнений сторон данного треугольника.

19.3.Описать рекурсивную функцию вычисления суммы нечетных элементов целочисленного массива A размера n.

20.1.Дан треугольник, вершины которого имеют координаты (x1, y1), (x2, y2), (x3, y3). Определить, является ли треугольник равнобедренным.

20.2.Написать программу сортировки заданного одномерного массива методом простого обмена (пузырька). Ввод, вывод и сортировку массива, а также обмен значений между двумя переменными оформить в виде процедур.

20.3.Описать рекурсивную функцию вычисления количества отрицательных элементов вещественного массива A размера n.

21.1.Дано натуральное число n. Среди чисел 1, 2, ..., n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел.

21.2.Даны три целые матрицы размером n ×n. Напечатать ту из них, где больше упорядоченных по возрастанию строк (если таких матриц несколько, напечатать их все).

21.3.Описать рекурсивную функцию вычисления

sin sin ... sin x

(слов sin встречается n раз).

22.1.Дано натуральное число n, целые числа a1, a2, ..., an. Получить наибольшую из длин отрезков последовательности, состоящих из простых чисел.

22.2.Дан треугольник, вершины которого имеют координаты (x1, y1), (x2, y2), (x3, y3). Описать процедуру, печатающую координаты середины отрезка, и использовать ее для вывода координат середин сторон данного треугольника.

14

22.3. На неразмеченной автомобильной стоянке можно ставить автомобили на любое свободное место в один ряд. Пусть длина автостоянки l метров, а ширина автомобиля – b. Составить рекурсивную функцию, моделирующую ежедневное случайное размещение автомобилей на стоянке и, используя ее, подсчитать количество автомобилей за год.

23.1. Даны три строки s1, s2 и s3. Получите count(s1, s2) + count(s1, s3), где count(s, str) – функция, которая в строке str определяет количество вхождений в нее строки s.

23.2.Даны три целые матрицы размером n × n. Преобразовать каждую из них по следующему правилу: все отрицательные элементы в строке, следующей за строкой, содержащей наибольший элемент, заменить их квадратами.

23.3.Запрограммируйте алгоритм двоичного поиска в рекурсивной форме.

24.1.Даны две строки s и t. Если в первой половине строки s менее 12 пробелов,

иесли в последней четверти строки t нет латинской буквы ’a’, то вычислить количество символов ’*’, входящих в среднюю треть строки s, иначе выдать сообщение “Неверные данные". Использовать функцию count(sym, str, i, j), подсчитывающую количество вхождений символа sym в часть строки str, начиная с i-ой позиции по j-ую.

24.2.Три точки заданы своими полярными координатами (ρ1, φ1), (ρ2, φ2) и (ρ3, φ3). Вывести на экран декартовы координаты этих точек, упорядоченные по возрастанию абсцисс.

Указание. Декартовы координаты вычисляются по следующим формулам: x = ρ sin φ, y = ρ cos φ.

24.3.Написать рекурсивную программу вычисления произведения элементов одномерного целочисленного массива A из n элементов.

25.1.Даны два целочисленных массива x1, x2, ..., xn и y1, y2, ..., ym. Если наибольший элемент массива x равен 10, и если в массиве y нет положительных элементов, то все элементы вектора x заменить на их квадраты. Использовать функцию поиска наибольшего элемента в массиве.

25.2.Два прямоугольника, стороны которых параллельны осям координат, заданы координатами соответственно левой верхней и правой нижней вершин (xL1, yL1), (xR1, yR1) и (xL2, yL2), (xR2, yR2). Описать процедуру, печатающую координаты центра прямоугольника, и использовать ее для вывода координат центров данных прямоугольников.

25.3.Дана последовательность ненулевых целых чисел, за которой следует число

0.Составить рекурсивную процедуру, печатающую сначала все четные числа этой последовательности, а затем – все нечетные (в любом порядке).

Дополнительные задания

1.Дано n различных натуральных чисел. Напечатать все перестановки чисел. Указание. Задача решается следующим образом:

1)в качестве первого числа берем любое из чисел 1, 2, ..., n;

2)в качестве второго числа берем любое из чисел 1, 2, ..., n, кроме того числа,

15

которое выбрано первым; 3) третьим числом выбираем одно из чисел, которое не выбрано первым или вторым и т.д.

Этот процесс продолжаем до тех пор, пока не выберем последнее, n-е число для перестановки. Чтобы получить все возможные перестановки, надо на каждом этапе выбора k-го числа последовательно перебирать все допустимые числа, однако перейти к следующему варианту можно, только если найдены полные перестановки для всех предыдущих вариантов.

Перестановки генерируются в глобальном массиве P , содержащем n элементов. Массив R (тоже из n элементов) содержит признаки включения чисел в перестановку: если R[i] = 1, то число i включено в перестановку, а если R[i] = 0, то нет. Рекурсивная процедура P ER(k) выбирает для перестановок все оставшиеся числа, начиная с k-й позиции. Вспомогательная процедура OUT выводит n элементов массива P . Вначале всем элементам массива R присваивается нулевое значение, после чего вызывается P ER(1).

Procedure PER(k:integer); Var i:integer;

Begin

for i:=1 to n do if R[i]=0 then

begin

R[i]:=1; P[k]:=i;

if k=n then OUT else PER(k+1); R[i]:=0

end End; {PER}

Присваивание R[i] := 0 после рекурсивного вызова обеспечивает обратный ход

– бэктрекинг для поиска другого решения.

Правильность алгоритма нетрудно доказать методом математической индукции.

2.Написать программу исследования алгоритмов сортировок. Для каждого типа сортировки подсчитать количество операций сравнения и присваивания: 1 – на упорядоченном массиве, 2 – на массиве, упорядоченном в обратном порядке, 3 – на массивах, заданных случайным образом (n = 10, n = 100, n = 1000). Сравнить полученные результаты с известными данными из теории:

Метод “пузырька”.

Количество сравнений: min = n − 1, max = n − 1 + n − 2 + . . . + 1 = n(n − 1)/2. Количество присваиваний: min = 0, max = 3(n−1+n−2+. . .+1) = 3n(n−1)/2. Метод выбора:

Количество сравнений: n − 1 + n − 2 + . . . + 1 = n(n − 1)/2. Количество присваиваний: min = 0, max = 3(n − 1). Метод вставки:

Количество сравнений: 1 + 2 + [log2 3] + 1 + [log2 4] + 1 + . . . + [log2(n − 1)] + 1 = n − 1 + log2(n − 1)!

Количество присваиваний: min = 0, max = 3+4+5+. . .+n+1) = (n+4)(n−1)/2.

16

Программа анализа должна содержать следующие процедуры:

Exchange (var a,b: integer) – процедура, которая меняет местами значения двух элементов массива;

Print (var A: ArType; n: IndType) – печать массива; Bubble (var A: ArType; n: IndType) – обменная сортировка; Choice (var A: ArType; n: IndType) – сортировка выбором; Insert (var A: ArType; n: IndType) – сортировка вставками.

Результаты работы программы оформить в виде таблицы, в которой должны быть отражены количества присваиваний и сравнений для каждого метода:

 

Обменная

Сортировка

Сортировка

Характер массива

сортировка

выбором

вставками

 

С

П

С

П

С

П

Теоретические данные (max)

 

 

 

 

 

 

Упорядоченный (n = 10)

 

 

 

 

 

 

Обр. упорядоченный (n = 10)

 

 

 

 

 

 

Случайный (n = 10)

 

 

 

 

 

 

Случайный (n = 100)

 

 

 

 

 

 

Случайный (n = 1000)

 

 

 

 

 

 

17

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