Одномерные и двумерные массивы
При вводе исходного массива вначале следует ввести его размер (одно
число для одномерных массивов, два числа — количество строк и столбцов —
для двумерных массивов-матриц), а затем — все его элементы.
Если в задании явно не указывается размер одномерного массива, явля-
ющегося параметром процедуры или функции, то предполагается, что этот
размер может изменяться в пределах от 1 до 10. Для двумерных массивов-
матриц предполагается, что число их строк и столбцов может меняться от 1
98
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6
до 10. Индексы начальных элементов как одномерных, так и двумерных мас-
сивов всегда считаются равными 1.
При описании процедур, выполняющих преобразование массива, не сле-
дует использовать вспомогательный массив того же размера.
Param1◦. Описать функцию MinElem(A, N ) целого типа, находящую мини-
мальный элемент целочисленного массива A размера N. С помощью этой
функции найти минимальные элементы массивов A, B, C размера NA,
NB, NCсоответственно.
Param2. Описать функцию MaxNum(A, N ) целого типа, находящую номер
максимального элемента вещественного массива A размера N. С помощью
этой функции найти номера максимальных элементов массивов A, B, C
размера N A, N B , N C соответственно.
Param3. Описать процедуру MinmaxNum(A, N, NMin, NMax), находящую но-
мера минимального и максимального элемента вещественного массива A
размера N. Выходные параметры целого типа: NMin (номер минимально-
го элемента) и NMax (номер максимального элемента). С помощью этой
процедуры найти номера минимальных и максимальных элементов мас-
сивов A, B, C размера NA, NB, NCсоответственно.
Param4. Описать процедуру Invert(A, N ), меняющую порядок следования эле-
ментов вещественного массива A размера N на противоположный (инвер-
тирование массива). Массив A является входным и выходным парамет-
ром. С помощью этой процедуры инвертировать массивы A, B, C разме-
ра N A, N B , N C соответственно.
Param5. Описать процедуру Smooth1(A, N ), выполняющую сглаживание ве-
щественного массива A размера N следующим образом: элемент AK заме-
няется на среднее арифметическое первых K исходных элементов масси-
ва A. Массив A является входным и выходным параметром. С помощью
этой процедуры выполнить пятикратное сглаживание данного массива A
размера N, выводя результаты каждого сглаживания.
Param6. Описать процедуру Smooth2(A, N ), выполняющую сглаживание ве-
щественного массива A размера N следующим образом: элемент A1не из-
меняется, элемент AK(K = 2, . . ., N ) заменяется на полусумму исходных
элементов AK−1 и AK. Массив A является входным и выходным парамет-
ром. С помощью этой процедуры выполнить пятикратное сглаживание
данного массива A размера N, выводя результаты каждого сглаживания.
Составные типы данных в процедурах и функциях
Param7. Описать процедуру Smooth3(A, N ), выполняющую сглаживание ве-
щественного массива A размера N следующим образом: каждый элемент
массива заменяется на его среднее арифметическое с соседними элемен-
тами (при вычислении среднего арифметического используются исходные
значения соседних элементов). Массив A является входным и выходным
параметром. С помощью этой процедуры выполнить пятикратное сглажи-
вание данного массива A размера N, выводя результаты каждого сглажи-
вания.
Param8. Описать процедуру RemoveX(A, N, X ), удаляющую из целочислен-
ного массива A размера N элементы, равные целому числу X. Массив A и
число N являются входными и выходными параметрами. С помощью этой
процедуры удалить числа XA, XB, XCиз массивов A, B, C размера NA,
NB, NCсоответственно и вывести размер и содержимое полученных мас-
сивов.
Param9. Описать процедуру RemoveForInc(A, N ), удаляющую из веществен-
ного массива A размера N «лишние» элементы так, чтобы оставшиеся
элементы оказались упорядоченными по возрастанию: первый элемент
не удаляется, второй элемент удаляется, если он меньше первого, третий
— если он меньше предыдущего элемента, оставленного в массиве, и т. д.
Например, массив 5.5, 2.5, 4.6, 7.2, 5.8, 9.4 должен быть преобразован к
виду 5.5, 7.2, 9.4. Массив A и число N являются входными и выходны-
ми параметрами. С помощью этой процедуры преобразовать массивы A,
B, C размера NA, NB, NCсоответственно и вывести размер и содержимое
полученных массивов.
Param10. Описать процедуру DoubleX(A, N, X ), дублирующую в целочислен-
ном массиве A размера N элементы, равные целому числу X. Массив A
и число N являются входными и выходными параметрами. С помощью
этой процедуры продублировать числа X A, X B, X C в массивах A, B, C
размера N A, N B , N C соответственно и вывести размер и содержимое по-
лученных массивов.
Param11. Описать процедуру SortArray(A, N ), выполняющую сортировку по
возрастанию вещественного массива A размера N. Массив A является
входным и выходным параметром. С помощью этой процедуры отсорти-
ровать массивы A, B, C размера NA, NB, NCсоответственно.
Param12. Описать процедуру SortIndex(A, N, I ), формирующую для веще-
ственного массива A размера N индексный массив I — массив целых чисел
100
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6
того же размера, содержащий номера элементов массива A в том порядке,
который соответствует возрастанию элементов массива A (сам массив A
при этом не изменяется). Индексный массив I является выходным па-
раметром. С помощью этой процедуры создать индексные массивы для
массивов A, B, C размера NA, NB, NCсоответственно.
Param13. Описать процедуру Hill(A, N ), меняющую порядок элементов ве-
щественного массива A размера N на следующий: наименьший элемент
массива располагается на первом месте, наименьший из оставшихся эле-
ментов — на последнем, следующий по величине располагается на втором
месте, следующий — на предпоследнем и т. д. (в результате график зна-
чений элементов будет напоминать холм). Массив A является входным и
выходным параметром. С помощью этой процедуры преобразовать мас-
сивы A, B, C размера NA, NB, NCсоответственно.
Param14. Описать процедуру Split1(A, NA, B, NB, C, NC), формирующую
по вещественному массиву A размера NAдва вещественных массива B
и C размера N B и N C соответственно; при этом массив B содержит все
элементы массива A с нечетными порядковыми номерами (1, 3, . . .), а
массив C — все элементы массива A с четными номерами (2, 4, . . .).
Массивы B и C и числа NBи NCявляются выходными параметрами.
Применить эту процедуру к данному массиву A размера NAи вывести
размер и содержимое полученных массивов B и C.
Param15. Описать процедуру Split2(A, N A, B, N B, C, N C ), формирующую по
целочисленному массиву A размера NAдва целочисленных массива B и C
размера NBи NCсоответственно; при этом массив B содержит все четные
числа из массива A, а массив C — все нечетные числа (в том же порядке).
Массивы B и C и числа NBи NCявляются выходными параметрами.
Применить эту процедуру к данному массиву A размера NAи вывести
размер и содержимое полученных массивов B и C.
Param16. Описать процедуру ArrayToMatrRow(A, K, M, N, B), формирую-
щую по вещественному массиву A размера K матрицу B размера M Ч N
(матрица заполняется элементами массива A по строкам). «Лишние» эле-
менты массива игнорируются; если элементов массива недостаточно, то
оставшиеся элементы матрицы полагаются равными 0. Двумерный мас-
сив B является выходным параметром. С помощью этой процедуры на
основе данного массива A размера K и целых чисел M и N сформировать
матрицу B размера M Ч N.
Составные типы данных в процедурах и функциях
Param17◦ . Описать процедуру ArrayToMatrCol(A, K, M, N, B), формирую-
щую по вещественному массиву A размера K матрицу B размера M Ч N
(матрица заполняется элементами массива A по столбцам). «Лишние» эле-
менты массива игнорируются; если элементов массива недостаточно, то
оставшиеся элементы матрицы полагаются равными 0. Двумерный мас-
сив B является выходным параметром. С помощью этой процедуры на
основе данного массива A размера K и целых чисел M и N сформировать
матрицу B размера M Ч N.
Param18. Описать процедуру Chessboard(M, N, A), формирующую по целым
положительным числам M и N матрицу A размера M Ч N, которая содер-
жит числа 0 и 1, расположенные в «шахматном» порядке, причем A1,1 = 0.
Двумерный целочисленный массив A является выходным параметром. С
помощью этой процедуры по данным целым числам M и N сформировать
матрицу A размера M Ч N.
Param19. Описать функцию Norm1(A, M, N ) вещественного типа, вычисляю-
щую норму вещественной матрицы A размера M Ч N :
Norm1(A, M, N ) = max {|A1,J | + |A2,J | + . . . + |AM,J|},
где максимум берется по всем J от 1 до N. Для данной матрицы A размера
M Ч N найти Norm1(A, K, N ), K = 1, . . ., M.
Param20. Описать функцию Norm2(A, M, N ) вещественного типа, вычисляю-
щую норму вещественной матрицы A размера M Ч N :
Norm2(A, M, N ) = max {|AI,1| + |AI,2| + . . . + |AI,N|},
где максимум берется по всем I от 1 до M. Для данной матрицы A размера
M Ч N найти Norm2(A, K, N ), K = 1, . . ., M.
Param21. Описать функцию SumRow(A, M, N, K ) вещественного типа, вы-
числяющую сумму элементов вещественной матрицы A размера M Ч N,
расположенных в K-й строке (если K > M, то функция возвраща-
ет 0). Для данной матрицы A размера M Ч N и трех данных K найти
SumRow(A, M, N, K ).
Param22. Описать функцию SumCol(A, M, N, K) вещественного типа, вычис-
ляющую сумму элементов вещественной матрицы A размера M Ч N,
расположенных в K-м столбце (если K > N, то функция возвраща-
ет 0). Для данной матрицы A размера M Ч N и трех данных K найти
SumCol(A, M, N, K).
Param23. Описать процедуру SwapRow(A, M, N, K1, K2), осуществляющую
перемену местами строк вещественной матрицы A размера M Ч N с
102
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6
номерами K1и K2. Матрица A является входным и выходным параметром;
если K1или K2больше M, то матрица не изменяется. Используя эту
процедуру, поменять для данной матрицы A размера M Ч N строки с
данными номерами K1и K2.
Param24. Описать процедуру SwapCol(A, M, N, K 1, K 2), осуществляющую
перемену местами столбцов вещественной матрицы A размера M Ч N с
номерами K1и K2. Матрица A является входным и выходным парамет-
ром; если K1или K2больше N, то матрица не изменяется. Используя эту
процедуру, поменять для данной матрицы A размера M Ч N столбцы с
данными номерами K1и K2.
Param25. Описать процедуру Transp(A, M ), выполняющую транспонирование
(то есть зеркальное отражение относительно главной диагонали) квадрат-
ной вещественной матрицы A порядка M. Матрица A является входным
и выходным параметром. Используя эту процедуру, транспонировать дан-
ную матрицу A порядка M.
Param26. Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из
вещественной матрицы A размера M Ч N строки с номерами от K1до K2
включительно (предполагается, что 1 < K 1 ≤ K2 ). Если K 1 > M, то матрица
не изменяется; если K 2 > M, то удаляются строки матрицы с номерами
от K1до M. Двумерный массив A и числа M, N являются входными и
выходными параметрами. Используя процедуру RemoveRows, удалить из
данной матрицы A размера M Ч N строки с номерами от K1до K2и
вывести размер полученной матрицы и ее элементы.
Param27. Описать процедуру RemoveCols(A, M, N, K1, K2), удаляющую из
вещественной матрицы A размера M Ч N столбцы с номерами от K1
до K 2 включительно (предполагается, что 1 < K 1 ≤ K 2). Если K1 > N,
то матрица не изменяется; если K2> N, то удаляются столбцы матрицы
с номерами от K1до N. Двумерный массив A и числа M, N являются
входными и выходными параметрами. Используя процедуру RemoveCols,
удалить из данной матрицы A размера M Ч N столбцы с номерами от K1
до K2и вывести размер полученной матрицы и ее элементы.
Param28. Описать процедуру RemoveRowCol(A, M, N, K, L), удаляющую из
вещественной матрицы A размера M Ч N строку и столбец, которые
содержат элемент AK,L(предполагается, что M > 1 и N > 1; если K > M
или L > N, то матрица не изменяется). Двумерный массив A и числа M, N
являются входными и выходными параметрами. Дана матрица A размера
Составные типы данных в процедурах и функциях
M Ч N и числа K, L. Применить к матрице A процедуру RemoveRowCol
и вывести размер полученной матрицы и ее элементы.
Param29. Описать процедуру SortCols(A, M, N ), выполняющую сортиров-
ку по возрастанию столбцов целочисленной матрицы A размера M Ч N
(столбцы сравниваются лексикографически: если первые элементы столб-
цов различны, то меньшим считается столбец, содержащий меньший пер-
вый элемент; если первые элементы столбцов равны, то анализируются их
вторые элементы и т. д.). Двумерный массив A является входным и выход-
ным параметром. Используя процедуру SortCols, отсортировать столбцы
данной матрицы A размера M Ч N.
Строки
Param30◦ . Описать функцию IsIdent(S) целого типа, проверяющую, является
ли строка S допустимым идентификатором, то есть непустой строкой,
которая содержит только латинские буквы, цифры и символ подчеркива-
ния «» и не начинается с цифры. Если S является допустимым иденти-
фикатором, то функция возвращает 0. Если S является пустой строкой, то
возвращается −1, если S начинается с цифры, то возвращается −2. Если
S содержит недопустимые символы, то возвращается номер первого недо-
пустимого символа. Проверить с помощью функции IsIdent пять данных
строк.
Param31. Описать функцию FillStr(S, N ) строкового типа, возвращаю-
щую строку длины N, заполненную повторяющимися копиями строки-
шаблона S (последняя копия строки-шаблона может входить в резуль-
тирующую строку частично). Используя эту функцию, сформировать по
данному числу N и пяти данным строкам-шаблонам пять результирующих
строк длины N.
Param32. Описать процедуру UpCaseRus(S), преобразующую все строчные
русские буквы строки S в прописные (остальные символы строки S не
изменяются). Строка S является входным и выходным параметром. Ис-
пользуя процедуру UpCaseRus, преобразовать пять данных строк.
Param33. Описать процедуру LowCaseRus(S), преобразующую все пропис-
ные русские буквы строки S в строчные (остальные символы строки S
не изменяются). Строка S является входным и выходным параметром.
Используя процедуру LowCaseRus, преобразовать пять данных строк.
104
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6
Param34. Описать процедуру TrimLeftC(S, C), удаляющую в строке S началь-
ные символы, совпадающие с символом C. Строка S является входным и
выходным параметром. Дан символ C и пять строк. Используя процедуру
TrimLeftC, преобразовать данные строки.
Param35. Описать процедуру TrimRightC(S, C), удаляющую в строке S конеч-
ные символы, совпадающие с символом C. Строка S является входным и
выходным параметром. Дан символ C и пять строк. Используя процедуру
TrimRightC, преобразовать данные строки.
Param36. Описать функцию InvertStr(S, K, N ) строкового типа, возвраща-
ющую инвертированную подстроку строки S, содержащую в обратном
порядке N символов строки S, начиная с ee K -го символа. Если K превос-
ходит длину строки S, то возвращается пустая строка; если длина строки
меньше K + N, то инвертируются все символы строки, начиная с ee K-го
символа. Вывести значения функции InvertStr для данной строки S и каж-
дой из трех пар положительных целых чисел: (K1, N1), (K2, N2), (K3, N3).
Param37. Описать функцию PosSub(S0, S, K, N ) целого типа, возвращающую
номер позиции, начиная с которой в строке S содержится первое вхо-
ждение строки S0 , причем анализируются только N символов строки S,
начиная с ее K -го символа (таким образом, PosSub обеспечивает поиск
в подстроке). Если K превосходит длину строки S, то возвращается 0,
если длина строки меньше K + N, то анализируются все символы строки,
начиная с ее K -го символа. Если в требуемой подстроке строки S вхожде-
ния S0отсутствуют, то функция возвращает 0. Вывести значения функции
PosSub для данных строк S0, S и каждой из трех пар положительных це-
лых чисел: (K1, N1), (K2, N2), (K3, N3).
Param38. Описать функцию PosLast(S0 , S) целого типа, возвращающую номер
позиции, начиная с которой в строке S содержится последнее вхождение
подстроки S0. Считать, что перекрывающихся вхождений подстрок S0
строка S не содержит. Если в строке S отсутствуют подстроки S0, то
функция возвращает 0. Вывести значения этой функции для пяти данных
пар строк S0и S.
Param39. Описать функцию PosK(S0, S, K ) целого типа, возвращающую номер
позиции, начиная с которой в строке S содержится K-е вхождение под-
строки S0(K > 0). Если количество вхождений S0в строке S меньше K, то
функция возвращает 0. Считать, что перекрывающихся вхождений под-
строк S0строка S не содержит. Вывести значения этой функции для пяти
Составные типы данных в процедурах и функциях
данных троек: S0, S и K.
Param40◦ . Описать функцию WordK(S, K ) строкового типа, возвращающую
K-е слово строки S (словом считается набор символов, не содержащий
пробелов и ограниченный пробелами или началом/концом строки). Ес-
ли количество слов в строке меньше K, то функция возвращает пустую
строку. Используя эту функцию, выделить из данной строки S слова с
данными номерами K1, K2, K3.
Param41. Описать процедуру SplitStr(S, W, N ), которая формирует по данной
строке S массив W слов, входящих в S (массив W и его размер N яв-
ляются выходными параметрами). Словом считается набор символов, не
содержащий пробелов и ограниченный пробелами или началом/концом
строки; предполагается, что строка S содержит не более 10 слов. Исполь-
зуя функцию SplitStr, найти количество слов N, содержащихся в данной
строке S, и сами эти слова.
Param42. Описать функцию CompressStr(S) строкового типа, выполняющую
сжатие строки S по следующему правилу: каждая подстрока строки S,
состоящая из более чем четырех одинаковых символов C, заменяется тек-
стом вида «С{K }», где K — количество символов C (предполагается, что
строка S не содержит фигурных скобок «{» и «}»). Например, для строки
S = «bbbccccce» функция вернет строку «bbbc{5}e». С помощью функции
CompressStr сжать пять данных строк.
Param43. Описать функцию DecompressStr(S) строкового типа, восстанавли-
вающую строку, сжатую процедурой CompressStr (см. задание Param42).
Параметр S содержит сжатую строку; восстановленная строка является
возвращаемым значением функции. С помощью функции DecompressStr
восстановить пять данных сжатых строк.
Param44. Описать функцию DecToBin(N ) строкового типа, возвращающую
строковое представление целого неотрицательного числа N в двоичной
системе счисления. Результирующая строка состоит из символов «0»–«1»
и не содержит ведущих нулей (за исключением представления числа 0).
Используя эту функцию, получить двоичные представления пяти данных
чисел.
Param45. Описать функцию DecToHex(N ) строкового типа, возвращающую
строковое представление целого неотрицательного числа N в 16-ричной
системе счисления. Результирующая строка состоит из символов «0»–«9»,
«A»–«F» и не содержит ведущих нулей (за исключением представления
106
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.6
числа 0). Используя эту функцию, получить 16-ричные представления
пяти данных чисел.
Param46. Описать функцию BinToDec(S) целого типа, определяющую целое
неотрицательное число по его строковому представлению S в двоичной
системе счисления. Параметр S имеет строковый тип, состоит из символов
«0»–«1» и не содержит ведущих нулей (за исключением значения «0»).
Используя эту функцию, вывести пять чисел, для которых даны их дво-
ичные представления.
Param47. Описать функцию HexToDec(S) целого типа, определяющую целое
неотрицательное число по его строковому представлению S в 16-ричной
системе счисления. Параметр S имеет строковый тип, состоит из сим-
волов «0»–«9», «A»–«F» и не содержит ведущих нулей (за исключением
значения «0»). Используя эту функцию, вывести пять чисел, для которых
даны их 16-ричные представления.
Файлы
Param48. Описать функцию IntFileSize(S) целого типа, возвращающую ко-
личество элементов в файле целых чисел с именем S. Если файл не су-
ществует, то функция возвращает −1. С помощью этой функции найти
количество элементов в трех файлах с данными именами.
Param49◦. Описать функцию LineCount(S) целого типа, возвращающую ко-
личество строк в текстовом файле с именем S. Если файл не существует,
то функция возвращает −1. С помощью этой функции найти количество
строк в трех файлах с данными именами.
Param50. Описать процедуру InvertIntFile(S), меняющую порядок следования
элементов файла целого типа с именем S на противоположный. Если
файл не существует или содержит менее двух элементов, то процедура
не выполняет никаких действий. Обработать с помощью этой процедуры
три файла с данными именами.
Param51. Описать процедуру AddLineNumbers(S, N, K, L), добавляющую в
начало каждой строки существующего текстового файла с именем S ее
порядковый номер: первая строка получает номер N, вторая — N + 1 и т.
д. Номер отображается в K позициях, выравнивается по правому краю
и отделяется от последующего текста L пробелами (K > 0, L > 0). Если
строка файла является пустой, то она также нумеруется, но пробелы по-
сле номера не добавляются. Применить эту процедуру к данному файлу,
Составные типы данных в процедурах и функциях
используя указанные значения N, K и L.
Param52. Описать процедуру RemoveLineNumbers(S), удаляющую из нача-
ла каждой строки существующего текстового файла с именем S ее по-
рядковый номер, добавленный процедурой AddLineNumbers (см. задание
Param51), а также пробелы, отделяющие номер от последующего текста.
Если строки не содержат номеров, то процедура не выполняет никаких
действий. Применить эту процедуру к файлу с данным именем.
Param53◦ . Описать процедуру SplitIntFile(S0, K, S1, S2), копирующую пер-
вые K (≥ 0) элементов существующего файла целых чисел с именем S0
в новый файл целых чисел с именем S1, a остальные элементы — в но-
вый файл целых чисел с именем S2. Один из созданных файлов может
остаться пустым. Применить эту процедуру к файлу с данным именем S0,
используя указанные значения K, S1и S2.
Param54. Описать процедуру SplitText(S0, K, S1, S2), копирующую первые K
(≥ 0) строк существующего текстового файла с именем S0в новый тек-
стовый файл с именем S1, a остальные строки — в новый текстовый файл
с именем S2. Один из созданных файлов может остаться пустым. Приме-
нить эту процедуру к файлу с данным именем S0, используя указанные
значения K, S1и S2.
Param55. Описать процедуру StringFileToText(S), преобразующую двоичный
строковый файл с именем S в текстовый файл с тем же именем. Используя
эту процедуру, преобразовать два данных строковых файла с именами S1
и S2 в текстовые.
Param56. Описать процедуру TextToStringFile(S), преобразующую текстовый
файл с именем S в двоичный строковый файл с тем же именем. Используя
эту процедуру, преобразовать два данных текстовых файла с именами S1
и S2в строковые.
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 к пяти данным
датам.
Составные типы данных в процедурах и функциях
Param63. Используя тип TDate и функции DaysInMonth и CheckDate (см.
задания Param59−Param61), описать процедуру NextDate(D) с параметром
типа TDate, которая преобразует дату D к следующей дате (если дата D
является неправильной, то она не изменяется). Запись D является входным
и выходным параметром. Применить процедуру NextDate к пяти данным
датам.
Param64. Описать тип TPoint — запись с полями вещественного типа X и Y
(координаты точки на плоскости) — и функцию Leng(A, B) вещественного
типа, находящую длину отрезка AB на плоскости по координатам его
концов:
|AB| =
q
(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)
по формуле Герона:
SABC= √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·SP AB/|AB|,
где SP 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. С помощью этой функции найти площади трех многоуголь-
ников, если дано число их сторон и координаты их вершин.
Рекурсия