М.Э. Абрамян - Programming Taskbook (1157415), страница 23
Текст из файла (страница 23)
Один из созданных файлов можетостаться пустым. Применить эту процедуру к файлу с данным именем S 0 ,используя указанные значения K, S 1 и S 2 .Param54. Описать процедуру SplitText(S 0 , K, S 1 , S 2 ), копирующую первые K(≥ 0) строк существующего текстового файла с именем S 0 в новый текстовый файл с именем S 1 , a остальные строки — в новый текстовый файлс именем S 2 . Один из созданных файлов может остаться пустым. Применить эту процедуру к файлу с данным именем S 0 , используя указанныезначения K, S 1 и S 2 .Param55. Описать процедуру StringFileToText(S), преобразующую двоичныйстроковый файл с именем S в текстовый файл с тем же именем.
Используяэту процедуру, преобразовать два данных строковых файла с именами S 1и S 2 в текстовые.Param56. Описать процедуру TextToStringFile(S), преобразующую текстовыйфайл с именем S в двоичный строковый файл с тем же именем. Используяэту процедуру, преобразовать два данных текстовых файла с именами S 1и S 2 в строковые.Param57. Описать процедуру EncodeText(S, K), которая шифрует текстовыйфайл с именем S, выполняя циклическую замену каждой русской буквына букву того же регистра, расположенную в алфавите на K-й позициипосле шифруемой буквы (0 < K < 10). Например, при K = 3 «А» перейдетв «Г», «я» — в «в».
Букву «ё» в алфавите не учитывать, считая, что забуквой «е» сразу идет «ж». Символы, не являющиеся русскими буквами,при шифровании не изменять. Используя эту процедуру и зная кодовоесмещение K, зашифровать файл с указанным именем.Param58. Описать процедуру DecodeText(S, K), которая дешифрует текстовый108М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6файл с именем S, зашифрованный с использованием кодового смещения K(способ шифрования описан в задании Param57).
Используя эту процедуруи зная кодовое смещение K, расшифровать файл с указанным именем.ЗаписиПри вводе и выводе каждой даты в заданиях Param59−Param63 вначалеуказывается день, затем номер месяца, затем год. При вводе каждой точки взаданиях Param64−Param70 вначале указывается ее абсцисса (x-координата),затем ее ордината (y-координата).Param59◦ . Описать тип TDate — запись с полями целого типа Day (день),Month (месяц) и Year (год) — и функцию LeapYear(D) логического типас параметром типа TDate, которая возвращает TRUE, если год в дате Dявляется високосным, и FALSE в противном случае.
Вывести значениефункции LeapYear для пяти данных дат (предполагается, что все датыявляются правильными). Високосным считается год, делящийся на 4, заисключением тех годов, которые делятся на 100 и не делятся на 400.Param60◦ . Используя тип TDate и функцию LeapYear (см. задание Param59),описать функцию DaysInMonth(D) целого типа с параметром типа TDate,которая возвращает количество дней для месяца, указанного в дате D.Вывести значение функции DaysInMonth для пяти данных дат (предполагается, что все даты являются правильными).Param61◦ .
Используя тип TDate и функцию DaysInMonth (см. задания Param59и Param60), описать функцию CheckDate(D) целого типа с параметром типа TDate, которая проверяет правильность даты, указанной в параметре D.Если дата D является правильной, то функция возвращает 0; если в датеуказан неверный номер месяца, то функция возвращает 1; если в дате указан неверный день для допустимого месяца, то возвращается 2. Вывестизначение функции CheckDate для пяти данных дат.Param62. Используя тип TDate и функции DaysInMonth и CheckDate (см.задания Param59−Param61), описать процедуру PrevDate(D) с параметромтипа TDate, которая преобразует дату D к предыдущей дате (если дата Dявляется неправильной, то она не изменяется). Запись D является входными выходным параметром. Применить процедуру PrevDate к пяти даннымдатам.Составные типы данных в процедурах и функциях109Param63.
Используя тип TDate и функции DaysInMonth и CheckDate (см.задания Param59−Param61), описать процедуру NextDate(D) с параметромтипа TDate, которая преобразует дату D к следующей дате (если дата Dявляется неправильной, то она не изменяется). Запись D является входными выходным параметром. Применить процедуру NextDate к пяти даннымдатам.Param64. Описать тип TPoint — запись с полями вещественного типа X и Y(координаты точки на плоскости) — и функцию Leng(A, B) вещественноготипа, находящую длину отрезка AB на плоскости по координатам егоконцов:q|AB| = (A.X − B.X )2 + (A.Y − B.Y )2(A и B — параметры типа TPoint).
С помощью этой функции найти длиныотрезков AB, AC, AD, если даны координаты точек A, B, C, D.Param65. Используя тип TPoint и функцию Leng (см. задание Param64), описать тип TTriangle — запись с полями A, B, C типа TPoint (вершинытреугольника) — и функцию Perim(T) вещественного типа, находящуюпериметр треугольника T (T — параметр типа TTriangle). С помощьюэтой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.Param66.
Используя типы TPoint, TTriangle и функции Leng и Perim (см.задания Param64 и Param65), описать функцию Area(T) вещественноготипа, находящую площадь треугольника T (T — параметр типа TTriangle)по формуле Герона:√S ABC = p·(p − |AB|)·(p − |AC|)·(p − |BC|),где p — полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.Param67.
Используя типы TPoint, TTriangle и функции Leng и Area (см. задания Param64–Param66), описать функцию Dist(P, A, B) вещественноготипа (P, A, B — параметры типа TPoint), находящую расстояние D(P, AB)от точки P до прямой AB по формулеD(P, AB) = 2·S P AB /|AB|,где S P AB — площадь треугольника PAB. С помощью этой функции найтирасстояния от точки P до прямых AB, AC, BC, если даны координатыточек P, A, B, C.Param68. Используя типы TPoint, TTriangle и функцию Dist (см. заданияParam64, Param65, Param67), описать процедуру Heights(T, h1 , h2 , h3 ),110М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6находящую высоты h1 , h2 , h3 треугольника T (T — входной параметр типаTTriangle, h1 , h2 , h3 — выходные вещественные параметры), проведенные соответственно из вершин T.A, T.B, T.C. С помощью этой процедурынайти высоты треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.Param69.
Используя тип TPoint и функцию Leng (см. задание Param64), описать функцию PerimN(P, N) вещественного типа, находящую периметрN-угольника, вершины которого (в порядке их обхода) передаются в массиве P размера N (> 2) с элементами типа TPoint. С помощью этой функции найти периметры трех многоугольников, если дано число их сторони координаты их вершин.Param70.
Используя типы TPoint, TTriangle и функцию Area (см. заданияParam64–Param66), описать функцию AreaN(P, N) вещественного типа,находящую площадь выпуклого N-угольника, вершины которого (в порядке их обхода) передаются в массиве P размера N (> 2) с элементамитипа TPoint. С помощью этой функции найти площади трех многоугольников, если дано число их сторон и координаты их вершин.РекурсияПростейшие рекурсивные алгоритмыЗадания этого раздела можно легко решить и без использования рекурсии.
Данное обстоятельство связано с тем, что в заданиях рассматриваютсяпростейшие примеры рекурсии, легко сводимые к итерационным алгоритмам.Более того, в некоторых случаях непосредственные вычисления по рекурсивным формулам оказываются весьма неэффективными (см., например, заданияRecur4 и Recur6). Однако именно на подобных примерах проще всего получитьпервоначальные навыки разработки рекурсивных алгоритмов.Recur1◦ .
Описать рекурсивную функцию Fact(N) вещественного типа, вычисляющую значение факториалаN! = 1·2·. . .·N(N > 0 — параметр целого типа). С помощью этой функции вычислитьфакториалы пяти данных чисел.Recur2. Описать рекурсивную функцию Fact2(N) вещественного типа, вычисляющую значение двойного факториалаРекурсия111N!! = N·(N−2)·(N−4)·. . .(N > 0 — параметр целого типа; последний сомножитель в произведенииравен 2, если N — четное число, и 1, если N — нечетное). С помощьюэтой функции вычислить двойные факториалы пяти данных чисел.Recur3. Описать рекурсивную функцию PowerN(X, N) вещественного типа,находящую значение N-й степени числа X по формулам:X 0 = 1,X N = (X N/2 )2 при четных N > 0,X N = X ·X N −1 при нечетных N > 0,X N = 1/X −N при N < 0(X 6= 0 — вещественное число, N — целое; в формуле для четных N должна использоваться операция целочисленного деления).
С помощью этойфункции найти значения X N для данного X при пяти данных значениях N.Recur4◦ . Описать рекурсивную функцию Fib1(N) целого типа, вычисляющуюN-й элемент последовательности чисел Фибоначчи (N — целое число):F 1 = F 2 = 1,F K = F K−2 + F K−1 , K = 3, 4, . . . .С помощью этой функции найти пять чисел Фибоначчи с данными номерами, и вывести эти числа вместе с количеством рекурсивных вызововфункции Fib1, потребовавшихся для их нахождения.Recur5◦ . Описать рекурсивную функцию Fib2(N) целого типа, вычисляющуюN-й элемент последовательности чисел Фибоначчи (N — целое число):F 1 = F 2 = 1,F K = F K−2 + F K−1 , K = 3, 4, .
. . .Считать, что номер N не превосходит 20. Для уменьшения количества рекурсивных вызовов по сравнению с функцией Fib1 (см. задание Recur4)создать вспомогательный массив для хранения уже вычисленных чиселФибоначчи и обращаться к нему при выполнении функции Fib2. С помощью функции Fib2 найти пять чисел Фибоначчи с данными номерами.Recur6. Описать рекурсивную функцию Combin1(N, K) целого типа, находящую C(N, K) — число сочетаний из N элементов по K — с помощьюрекуррентного соотношения:C(N, 0) = C(N, N) = 1,C(N, K) = C(N − 1, K) + C(N − 1, K − 1) при 0 < K < N.Параметры функции — целые числа; N > 0, 0 ≤ K ≤ N.
Дано число Nи пять различных значений K. Вывести числа C(N, K) вместе с количеством рекурсивных вызовов функции Combin1, потребовавшихся для ихнахождения.112М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6Recur7. Описать рекурсивную функцию Combin2(N, K) целого типа, находящую C(N, K) — число сочетаний из N элементов по K — с помощьюрекуррентного соотношения:C(N, 0) = C(N, N) = 1,C(N, K) = C(N − 1, K) + C(N − 1, K − 1) при 0 < K < N.Параметры функции — целые числа; N > 0, 0 ≤ K ≤ N. Считать, чтопараметр N не превосходит 20.
Для уменьшения количества рекурсивныхвызовов по сравнению с функцией Combin1 (см. задание Recur6) описатьвспомогательный двумерный массив для хранения уже вычисленных чисел C(N, K) и обращаться к нему при выполнении функции Combin2. Спомощью функции Combin2 найти числа C(N, K) для данного значения Nи пяти различных значений K.Recur8.