Одномерные и двумерные массивы

 

При вводе исходного массива вначале следует ввести его размер (одно

число для одномерных массивов, два числа — количество строк и столбцов —

для двумерных массивов-матриц), а затем — все его элементы.

Если в задании явно не указывается размер одномерного массива, явля-

ющегося параметром процедуры или функции, то предполагается, что этот

размер может изменяться в пределах от 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.XB.X )2+ (A.YB.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. С помощью этой функции найти площади трех многоуголь-

ников, если дано число их сторон и координаты их вершин.

 

 

Рекурсия