Задачи на экзамен по паскалю

Begin1. Дана сторона квадрата a. Найти его периметр P = 4•a.

Begin2. Дана сторона квадрата a. Найти его площадь S = a2 .

Begin3. Даны стороны прямоугольника a и b. Найти его площадь S = a•b и периметр P = 2•(a + b).

Begin4. Дан диаметр окружности d. Найти ее длину L = π•d. В качестве значения π использовать 3.14.

Begin5. Дана длина ребра куба a. Найти объем куба V = a3 и площадь его поверхности S = 6•a2 .

Begin6. Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его объем V = a•b•c и площадь поверхности S = 2•(a•b + b•c + a•c).

Begin7. Найти длину окружности L и площадь круга S заданного радиуса R: L = 2•π•R, S = π•R2 . В качестве значения π использовать 3.14.

Begin8. Даны два числа a и b. Найти их среднее арифметическое: (a + b)/2.

Begin9. Даны два неотрицательных числа a и b. Найти их среднее геометри√ ческое, то есть квадратный корень из их произведения: a•b.

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

Begin11. Даны два ненулевых числа. Найти сумму, разность, произведение и частное их модулей.

Begin12. Даны катеты прямоугольного треугольника a и b. Найти его гипотенузу c и периметр P: √ c = a2 + b2, P = a + b + c.

Begin13 . Даны два круга с общим центром и радиусами R1 и R2 (R1 R2). Найти площади этих кругов S 1 и S 2, а также площадь S 3 кольца, внешний радиус которого равен R1, а внутренний радиус равен R2 : S 1 = π•(R1)2, S 2 = π•(R2)2, S3 = S1 − S2. В качестве значения π использовать 3.14.

Begin14. Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью, учитывая, что L = 2•π•R, S = π•R2 . В качестве значения π использовать 3.14. 12

Begin15. Дана площадь S круга. Найти его диаметр D и длину L окружности, ограничивающей этот круг, учитывая, что L = 2•π•R, S = π•R2 . В качестве значения π использовать 3.14.

Begin16. Найти расстояние между двумя точками с заданными координатами x1 и x2 на числовой оси: |x2 − x1 |.

Begin17. Даны три точки A, B, C на числовой оси. Найти длины отрезков AC и BC и их сумму.

Begin18. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин отрезков AC и BC.

Begin19. Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям координат. Найти периметр и площадь данного прямоугольника.

Begin20. Найти расстояние между двумя точками с заданными координатами (x1, y1) и (x2, y2) на плоскости. Расстояние вычисляется по формуле (x2 − x1)2 + (y2 − y1)2 .

Begin21. Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь, используя формулу для расстояния между двумя точками на плоскости (см. задание Begin20). Для нахождения площади треугольника со сторонами a, b, c использовать формулу Герона: √ S = p•(p − a)•(p − b)•(p − c), где p = (a + b + c)/2 – полупериметр.

Begin22. Поменять местами содержимое переменных A и B и вывести новые значения A и B.

Begin23. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в B, B – в C, C – в A, и вывести новые значения переменных A, B, C.

Begin24. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в C, C – в B, B – в A, и вывести новые значения переменных A, B, C.

Begin25. Найти значение функции y = 3×6 − 6×2 − 7 при данном значении x.

Begin26. Найти значение функции y = 4(x−3)6 − 7(x−3)3 + 2 при данном значении x.

Begin27. Дано число A. Вычислить A8, используя вспомогательную переменную и три операции умножения. Для этого последовательно находить A2, A4, A8 . Вывести все найденные степени числа A.

Begin28. Дано число A. Вычислить A15, используя две вспомогательные переВвод и вывод данных, оператор присваивания 13 менные и пять операций умножения. Для этого последовательно находить A2, A3, A5, A10, A15 . Вывести все найденные степени числа A.

Begin29. Дано значение угла α в градусах (0

Begin30. Дано значение угла α в радианах (0

Begin31. Дано значение температуры T в градусах Фаренгейта. Определить значение этой же температуры в градусах Цельсия. Температура по Цельсию T C и температура по Фаренгейту T F связаны следующим соотношением: T C = (T F − 32)•5/9.

Begin32 . Дано значение температуры T в градусах Цельсия. Определить значение этой же температуры в градусах Фаренгейта. Температура по Цельсию T C и температура по Фаренгейту T F связаны следующим соотношением: T C = (T F − 32)•5/9.

Begin33 . Известно, что X кг конфет стоит A рублей. Определить, сколько стоит 1 кг и Y кг этих же конфет.

Begin34. Известно, что X кг шоколадных конфет стоит A рублей, а Y кг ирисок стоит B рублей. Определить, сколько стоит 1 кг шоколадных конфет, 1 кг ирисок, а также во сколько раз шоколадные конфеты дороже ирисок.

Begin35. Скорость лодки в стоячей воде V км/ч, скорость течения реки U км/ч (U

Begin36. Скорость первого автомобиля V 1 км/ч, второго – V 2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили удаляются друг от друга. Данное расстояние равно сумме начального расстояния и общего пути, проделанного автомобилями; общий путь = время • суммарная скорость.

Begin37. Скорость первого автомобиля V 1 км/ч, второго – V 2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили первоначально движутся навстречу друг другу. Данное 14 расстояние равно модулю разности начального расстояния и общего пути, проделанного автомобилями; общий путь = время • суммарная скорость.

Begin38. Решить линейное уравнение A•x + B = 0, заданное своими коэффициентами A и B (коэффициент A не равен 0).

Begin39. Найти корни квадратного уравнения A•x2 + B•x + C = 0, заданного своими коэффициентами A, B, C (коэффициент A не равен 0), если известно, что дискриминант уравнения положителен. Вывести вначале меньший, а затем больший из найденных корней. Корни квадратного уравнения находятся по формуле √ x1, 2 = (−B ± D)/(2•A), где D – дискриминант, равный B2 − 4•A•C.

Begin40. Найти решение системы линейных уравнений вида A1 •x + B1 •y = C 1, A2 •x + B2 •y = C 2, заданной своими коэффициентами A1, B1, C 1, A2, B2, C 2, если известно, что данная система имеет единственное решение. Воспользоваться формулами x = (C 1 •B2 − C 2 •B1)/D, y = (A1 •C 2 − A2 •C 1)/D, где D = A1 •B2 − A2 •B1 . Целые числа Все входные и выходные данные в заданиях этой группы являются целыми числами. Все числа, для которых указано количество цифр (двузначное число, трехзначное число и т. д.), считаются положительными.

Integer1. Дано расстояние L в сантиметрах. Используя операцию деления нацело, найти количество полных метров в нем (1 метр = 100 см).

Integer2. Дана масса M в килограммах. Используя операцию деления нацело, найти количество полных тонн в ней (1 тонна = 1000 кг).

Integer3. Дан размер файла в байтах. Используя операцию деления нацело, найти количество полных килобайтов, которые занимает данный файл (1 килобайт = 1024 байта).

Integer4. Даны целые положительные числа A и B (A B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Используя операцию деления нацело, найти количество отрезков B, размещенных на отрезке A. Целые числа 15

Integer5. Даны целые положительные числа A и B (A B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Используя операцию взятия остатка от деления нацело, найти длину незанятой части отрезка A.

Integer6. Дано двузначное число. Вывести вначале его левую цифру (десятки), а затем – его правую цифру (единицы). Для нахождения десятков использовать операцию деления нацело, для нахождения единиц – операцию взятия остатка от деления.

Integer7. Дано двузначное число. Найти сумму и произведение его цифр.

Integer8. Дано двузначное число. Вывести число, полученное при перестановке цифр исходного числа.

Integer9. Дано трехзначное число. Используя одну операцию деления нацело, вывести первую цифру данного числа (сотни).

Integer10. Дано трехзначное число. Вывести вначале его последнюю цифру (единицы), а затем – его среднюю цифру (десятки).

Integer11. Дано трехзначное число. Найти сумму и произведение его цифр.

Integer12. Дано трехзначное число. Вывести число, полученное при прочтении исходного числа справа налево.

Integer13. Дано трехзначное число. В нем зачеркнули первую слева цифру и приписали ее справа. Вывести полученное число.

Integer14. Дано трехзначное число. В нем зачеркнули первую справа цифру и приписали ее слева. Вывести полученное число.

Integer15. Дано трехзначное число. Вывести число, полученное при перестановке цифр сотен и десятков исходного числа (например, 123 перейдет в 213).

Integer16. Дано трехзначное число. Вывести число, полученное при перестановке цифр десятков и единиц исходного числа (например, 123 перейдет в 132).

Integer17. Дано целое число, большее 999. Используя одну операцию деления нацело и одну операцию взятия остатка от деления, найти цифру, соответствующую разряду сотен в записи этого числа.

Integer18. Дано целое число, большее 999. Используя одну операцию деления нацело и одну операцию взятия остатка от деления, найти цифру, соответствующую разряду тысяч в записи этого числа.

Integer19. С начала суток прошло N секунд (N – целое). Найти количество полных минут, прошедших с начала суток. 16

Integer20. С начала суток прошло N секунд (N – целое). Найти количество полных часов, прошедших с начала суток.

Integer21. С начала суток прошло N секунд (N – целое). Найти количество секунд, прошедших с начала последней минуты.

Integer22. С начала суток прошло N секунд (N – целое). Найти количество секунд, прошедших с начала последнего часа.

Integer23. С начала суток прошло N секунд (N – целое). Найти количество полных минут, прошедших с начала последнего часа.

Integer24. Дни недели пронумерованы следующим образом: 0 – воскресенье, 1 – понедельник, 2 – вторник, . . ., 6 – суббота. Дано целое число K, лежащее в диапазоне 1–365. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было понедельником.

Integer25. Дни недели пронумерованы следующим образом: 0 – воскресенье, 1 – понедельник, 2 – вторник, . . ., 6 – суббота. Дано целое число K, лежащее в диапазоне 1–365. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было четвергом.

Integer26. Дни недели пронумерованы следующим образом: 1 – понедельник, 2 – вторник, . . ., 6 – суббота, 7 – воскресенье. Дано целое число K, лежащее в диапазоне 1–365. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было вторником.

Integer27. Дни недели пронумерованы следующим образом: 1 – понедельник, 2 – вторник, . . ., 6 – суббота, 7 – воскресенье. Дано целое число K, лежащее в диапазоне 1–365. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было субботой.

Integer28. Дни недели пронумерованы следующим образом: 1 – понедельник, 2 – вторник, . . ., 6 – суббота, 7 – воскресенье. Дано целое число K, лежащее в диапазоне 1–365, и целое число N, лежащее в диапазоне 1–7. Определить номер дня недели для K-го дня года, если известно, что в этом году 1 января было днем недели с номером N.

Integer29. Даны целые положительные числа A, B, C. На прямоугольнике размера A × B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника.

Integer30. Дан номер некоторого года (целое положительное число). Определить соответствующий ему номер столетия, учитывая, что, к примеру, началом 20 столетия был 1901 год. Логические выражения 17 Логические выражения Во всех заданиях данной группы требуется вывести логическое значение TRUE, если приведенное высказывание для предложенных исходных данных является истинным, и значение FALSE в противном случае. Все числа, для которых указано количество цифр (двузначное число, трехзначное число и т. д.), считаются целыми положительными.

Boolean1. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».

Boolean2. Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».

Boolean3. Дано целое число A. Проверить истинность высказывания: «Число A является четным».

Boolean4. Даны два целых числа: A, B. Проверить истинность высказывания: «Справедливы неравенства A 2 и B ≤ 3».

Boolean5. Даны два целых числа: A, B. Проверить истинность высказывания: «Справедливы неравенства A ≥ 0 или B

Boolean6. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Справедливо двойное неравенство A

Boolean7. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число B находится между числами A и C».

Boolean8. Даны два целых числа: A, B. Проверить истинность высказывания: «Каждое из чисел A и B нечетное».

Boolean9. Даны два целых числа: A, B. Проверить истинность высказывания: «Хотя бы одно из чисел A и B нечетное».

Boolean10. Даны два целых числа: A, B. Проверить истинность высказывания: «Ровно одно из чисел A и B нечетное».

Boolean11. Даны два целых числа: A, B. Проверить истинность высказывания: «Числа A и B имеют одинаковую четность».

Boolean12. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Каждое из чисел A, B, C положительное».

Boolean13. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Хотя бы одно из чисел A, B, C положительное».

Boolean14. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Ровно одно из чисел A, B, C положительное». 18

Boolean15. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Ровно два из чисел A, B, C являются положительными».

Boolean16. Дано целое положительное число. Проверить истинность высказывания: «Данное число является четным двузначным».

Boolean17. Дано целое положительное число. Проверить истинность высказывания: «Данное число является нечетным трехзначным».

Boolean18. Проверить истинность высказывания: «Среди трех данных целых чисел есть хотя бы одна пара совпадающих».

Boolean19. Проверить истинность высказывания: «Среди трех данных целых чисел есть хотя бы одна пара взаимно противоположных».

Boolean20. Дано трехзначное число. Проверить истинность высказывания: «Все цифры данного числа различны».

Boolean21. Дано трехзначное число. Проверить истинность высказывания: «Цифры данного числа образуют возрастающую последовательность».

Boolean22. Дано трехзначное число. Проверить истинность высказывания: «Цифры данного числа образуют возрастающую или убывающую последовательность».

Boolean23. Дано четырехзначное число. Проверить истинность высказывания: «Данное число читается одинаково слева направо и справа налево».

Boolean24. Даны числа A, B, C (число A не равно 0). Рассмотрев дискриминант D = B2 − 4•A•C, проверить истинность высказывания: «Квадратное уравнение A•x2 + B•x + C = 0 имеет вещественные корни».

Boolean25. Даны числа x, y. Проверить истинность высказывания: «Точка с координатами (x, y) лежит во второй координатной четверти».

Boolean26. Даны числа x, y. Проверить истинность высказывания: «Точка с координатами (x, y) лежит в четвертой координатной четверти».

Boolean27. Даны числа x, y. Проверить истинность высказывания: «Точка с координатами (x, y) лежит во второй или третьей координатной четверти».

Boolean28. Даны числа x, y. Проверить истинность высказывания: «Точка с координатами (x, y) лежит в первой или третьей координатной четверти».

Boolean29. Даны числа x, y, x1, y1, x2, y2 . Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая верхняя вершина которого имеет координаты (x1, y1), правая нижняя – (x2, y2), а стороны параллельны координатным осям».

Boolean30. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Проверить истинность высказывания: «Треугольник со стороЛогические выражения 19 нами a, b, c является равносторонним».

Boolean31. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Проверить истинность высказывания: «Треугольник со сторонами a, b, c является равнобедренным».

Boolean32. Даны целые числа a, b, c, являющиеся сторонами некоторого треугольника. Проверить истинность высказывания: «Треугольник со сторонами a, b, c является прямоугольным».

Boolean33. Даны целые числа a, b, c. Проверить истинность высказывания: «Существует треугольник со сторонами a, b, c».

Boolean34. Даны координаты поля шахматной доски x, y (целые числа, лежащие в диапазоне 1–8). Учитывая, что левое нижнее поле доски (1, 1) является черным, проверить истинность высказывания: «Данное поле является белым».

Boolean35. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Данные поля имеют одинаковый цвет».

Boolean36. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Ладья за один ход может перейти с одного поля на другое».

Boolean37. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Король за один ход может перейти с одного поля на другое».

Boolean38. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Слон за один ход может перейти с одного поля на другое».

Boolean39. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Ферзь за один ход может перейти с одного поля на другое».

Boolean40. Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность высказывания: «Конь за один ход может перейти с одного поля на другое». 20 Условный оператор

If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.

If2. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае вычесть из него 2. Вывести полученное число.

If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.

If4 . Даны три целых числа. Найти количество положительных чисел в исходном наборе.

If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.

If6. Даны два числа. Вывести большее из них.

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

If8. Даны два числа. Вывести вначале большее, а затем меньшее из них.

If9. Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B – большее. Вывести новые значения переменных A и B.

If10. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

If11. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.

If12. Даны три числа. Найти наименьшее из них.

If13. Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).

If14. Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.

If15. Даны три числа. Найти сумму двух наибольших из них.

If16. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые 21 Условный оператор значения переменных A, B, C.

If17. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию или убыванию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.

If18. Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных.

If19. Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Определить порядковый номер числа, отличного от остальных.

If20. На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести эту точку и ее расстояние от точки A.

If21. Даны целочисленные координаты точки на плоскости. Если точка совпадает с началом координат, то вывести 0. Если точка не совпадает с началом координат, но лежит на оси OX или OY, то вывести соответственно 1 или 2. Если точка не лежит на координатных осях, то вывести 3.

If22 . Даны координаты точки, не лежащей на координатных осях OX и OY. Определить номер координатной четверти, в которой находится данная точка.

If23. Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвертой вершины.

If24. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения: f (x) = 2•sin(x), если x 0, 6 − x, если x ≤ 0.

If25. Для данного целого x найти значение следующей функции f, принимающей значения целого типа: f (x) = 2•x, если x 2, −3•x, в противном случае.

If26 . Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения: 22 −x, если x ≤ 0, f (x) = x2, если 0

If27. Для данного вещественного x найти значение следующей функции f, принимающей значения целого типа: 0, если x

If28. Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный – 366 дней. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 – являются).

If29. Дано целое число. Вывести его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число» и т. д.

If30. Дано целое число, лежащее в диапазоне 1–999. Вывести его строкуописание вида «четное двузначное число», «нечетное трехзначное число» и т. д. Оператор выбора

Case1. Дано целое число в диапазоне 1–7. Вывести строку – название дня недели, соответствующее данному числу (1 – «понедельник», 2 – «вторник» и т. д.).

Case2. Дано целое число K. Вывести строку-описание оценки, соответствующей числу K (1 – «плохо», 2 – «неудовлетворительно», 3 – «удовлетворительно», 4 – «хорошо», 5 – «отлично»). Если K не лежит в диапазоне 1–5, то вывести строку «ошибка».

Case3. Дан номер месяца – целое число в диапазоне 1–12 (1 – январь, 2 – февраль и т. д.). Вывести название соответствующего времени года («зима», «весна», «лето», «осень»).

Case4. Дан номер месяца – целое число в диапазоне 1–12 (1 – январь, 2 – февраль и т. д.). Определить количество дней в этом месяце для невисокосного года. Оператор выбора 23

Case5. Арифметические действия над числами пронумерованы следующим образом: 1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление. Дан номер действия N (целое число в диапазоне 1–4) и вещественные числа A и B (B не равно 0). Выполнить над числами указанное действие и вывести результат.

Case6. Единицы длины пронумерованы следующим образом: 1 – дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр. Дан номер единицы длины (целое число в диапазоне 1–5) и длина отрезка в этих единицах (вещественное число). Найти длину отрезка в метрах.

Case7. Единицы массы пронумерованы следующим образом: 1 – килограмм, 2 – миллиграмм, 3 – грамм, 4 – тонна, 5 – центнер. Дан номер единицы массы (целое число в диапазоне 1–5) и масса тела в этих единицах (вещественное число). Найти массу тела в килограммах.

Case8. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, предшествующей указанной.

Case9. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату невисокосного года. Вывести значения D и M для даты, следующей за указанной.

Case10. Робот может перемещаться в четырех направлениях («С» – север, «З» – запад, «Ю» – юг, «В» – восток) и принимать три цифровые команды: 0 – продолжать движение, 1 – поворот налево, −1 – поворот направо. Дан символ C – исходное направление робота и целое число N – посланная ему команда. Вывести направление робота после выполнения полученной команды.

Case11. Локатор ориентирован на одну из сторон света («С» – север, «З» – запад, «Ю» – юг, «В» – восток) и может принимать три цифровые команды поворота: 1 – поворот налево, −1 – поворот направо, 2 – поворот на 180. Дан символ C – исходная ориентация локатора и целые числа N 1 и N 2 – две посланные команды. Вывести ориентацию локатора после выполнения этих команд.

Case12. Элементы окружности пронумерованы следующим образом: 1 – радиус R, 2 – диаметр D = 2•R, 3 – длина L = 2•π•R, 4 – площадь круга S = π•R2 . Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения π использовать 3.14. 24

Case13. Элементы равнобедренного прямоугольного треугольника пронуме√ рованы следующим образом: 1 – катет a, 2 – гипотенуза c = a• 2, 3 – высота h, опущенная на гипотенузу (h = c/2), 4 – площадь S = c•h/2. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

Case14. Элементы равностороннего треугольника пронумерованы следующим образом: 1 – сторона a, 2 – радиус R1 вписанной окружности √ (R1 = a• 3/6), √ – радиус R2 описанной окружности (R2 = 2•R1), 4 – 3 2 площадь S = a • 3/4. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

Case15. Мастям игральных карт присвоены порядковые номера: 1 – пики, 2 – трефы, 3 – бубны, 4 – червы. Достоинству карт, старших десятки, присвоены номера: 11 – валет, 12 – дама, 13 – король, 14 – туз. Даны два целых числа: N – достоинство (6 ≤ N ≤ 14) и M – масть карты (1 ≤ M ≤ 4). Вывести название соответствующей карты вида «шестерка бубен», «дама червей», «туз треф» и т. п.

Case16. Дано целое число в диапазоне 20–69, определяющее возраст (в годах). Вывести строку-описание указанного возраста, обеспечив правильное согласование числа со словом «год», например: 20 – «двадцать лет», 32 – «тридцать два года», 41 – «сорок один год».

Case17. Дано целое число в диапазоне 10–40, определяющее количество учебных заданий по некоторой теме. Вывести строку-описание указанного количества заданий, обеспечив правильное согласование числа со словами «учебное задание», например: 18 – «восемнадцать учебных заданий», 23 – «двадцать три учебных задания», 31 – «тридцать одно учебное задание».

Case18. Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 – «двести пятьдесят шесть», 814 – «восемьсот четырнадцать».

Case19. В восточном календаре принят 60-летний цикл, состоящий из 12летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года определить его название, если 1984 год – начало цикла: «год зеленой крысы». Цикл с параметром 25

Case20. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату. Вывести знак Зодиака, соответствующий этой дате: «Водолей» (20.1–18.2), «Рыбы» (19.2–20.3), «Овен» (21.3–19.4), «Телец» (20.4– 20.5), «Близнецы» (21.5–21.6), «Рак» (22.6–22.7), «Лев» (23.7–22.8), «Дева» (23.8–22.9), «Весы» (23.9–22.10), «Скорпион» (23.10–22.11), «Стрелец» (23.11–21.12), «Козерог» (22.12–19.1). Цикл с параметром

For1. Даны целые числа K и N (N 0). Вывести N раз число K.

For2. Даны два целых числа A и B (A

For3. Даны два целых числа A и B (A

For4. Дано вещественное число – цена 1 кг конфет. Вывести стоимость 1, 2, . . ., 10 кг конфет.

For5. Дано вещественное число – цена 1 кг конфет. Вывести стоимость 0.1, 0.2, . . ., 1 кг конфет.

For6. Дано вещественное число – цена 1 кг конфет. Вывести стоимость 1.2, 1.4, . . ., 2 кг конфет.

For7. Даны два целых числа A и B (A

For8. Даны два целых числа A и B (A

For9. Даны два целых числа A и B (A

For10. Дано целое число N ( 0). Найти сумму 1 + 1/2 + 1/3 + . . . + 1/N (вещественное число).

For11. Дано целое число N ( 0). Найти сумму N 2 + (N + 1)2 + (N + 2)2 + . . . + (2•N)2 (целое число).

For12. Дано целое число N ( 0). Найти произведение 1.1 • 1.2 • 1.3 • . . . 26 (N сомножителей).

For13. Дано целое число N ( 0). Найти значение выражения 1.1 − 1.2 + 1.3 − . . . (N слагаемых, знаки чередуются). Условный оператор не использовать.

For14. Дано целое число N ( 0). Найти квадрат данного числа, используя для его вычисления следующую формулу: N 2 = 1 + 3 + 5 + . . . + (2•N − 1). После добавления к сумме каждого слагаемого выводить текущее значение суммы (в результате будут выведены квадраты всех целых чисел от 1 до N).

For15. Дано вещественное число A и целое число N ( 0). Найти A в степени N: AN = A•A• . . . •A (числа A перемножаются N раз).

For16. Дано вещественное число A и целое число N ( 0). Используя один цикл, вывести все целые степени числа A от 1 до N.

For17. Дано вещественное число A и целое число N ( 0). Используя один цикл, найти сумму 1 + A + A2 + A3 + . . . + AN .

For18. Дано вещественное число A и целое число N ( 0). Используя один цикл, найти значение выражения 1 − A + A2 − A3 + . . . + (−1)N •AN . Условный оператор не использовать.

For19. Дано целое число N ( 0). Найти произведение N! = 1•2•. . .•N (N–факториал). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число.

For20. Дано целое число N ( 0). Используя один цикл, найти сумму 1! + 2! + 3! + . . . + N! (выражение N! – N–факториал – обозначает произведение всех целых чисел от 1 до N: N! = 1•2•. . .•N). Чтобы избежать целочисленного переполнения, проводить вычисления с помощью вещественных переменных и вывести результат как вещественное число.

For21. Дано целое число N ( 0). Используя один цикл, найти сумму 1 + 1/(1!) + 1/(2!) + 1/(3!) + . . . + 1/(N!) Цикл с параметром 27 (выражение N! – N–факториал – обозначает произведение всех целых чисел от 1 до N: N! = 1•2•. . .•N). Полученное число является приближенным значением константы e = exp(1).

For22. Дано вещественное число X и целое число N ( 0). Найти значение выражения 1 + X + X 2 /(2!) + . . . + X N /(N!) (N! = 1•2•. . .•N). Полученное число является приближенным значением функции exp в точке X.

For23. Дано вещественное число X и целое число N ( 0). Найти значение выражения X − X 3 /(3!) + X 5 /(5!) − . . . + (−1)N •X 2•N +1 /((2•N+1)!) (N! = 1•2•. . .•N). Полученное число является приближенным значением функции sin в точке X.

For24. Дано вещественное число X и целое число N ( 0). Найти значение выражения 1 − X 2 /(2!) + X 4 /(4!) − . . . + (−1)N •X 2•N /((2•N)!) (N! = 1•2•. . .•N). Полученное число является приближенным значением функции cos в точке X.

For25. Дано вещественное число X (|X | 0). Найти значение выражения X − X 2 /2 + X 3 /3 − . . . + (−1)N −1 •X N /N. Полученное число является приближенным значением функции ln в точке 1 + X.

For26. Дано вещественное число X (|X | 0). Найти значение выражения X − X 3 /3 + X 5 /5 − . . . + (−1)N •X 2•N +1 /(2•N+1). Полученное число является приближенным значением функции arctg в точке X.

For27. Дано вещественное число X (|X | 0). Найти значение выражения X + 1•X 3 /(2•3) + 1•3•X 5 /(2•4•5) + . . . + + 1•3•. . .•(2•N−1)•X 2•N +1 /(2•4•. . .•(2•N)•(2•N+1)). Полученное число является приближенным значением функции arcsin в точке X.

For28. Дано вещественное число X (|X | 0). Найти значение выражения 28 1 + X /2 − 1•X 2 /(2•4) + 1•3•X 3 /(2•4•6) − . . . + + (−1)N −1 •1•3•. . .•(2•N−3)•X N /(2•4•. . .•(2•N)). √ Полученное число является приближенным значением функции 1+X .

For29. Дано целое число N ( 1) и две вещественные точки на числовой оси: A, B (A

For30. Дано целое число N ( 1) и две вещественные точки на числовой оси: A, B (A

For31. Дано целое число N ( 0). Последовательность вещественных чисел AK определяется следующим образом: A0 = 2, AK = 2 + 1/AK−1, K = 1, 2, . . . . Вывести элементы A1, A2, . . ., AN .

For32. Дано целое число N ( 0). Последовательность вещественных чисел AK определяется следующим образом: A0 = 1, AK = (AK−1 + 1)/K, K = 1, 2, . . . . Вывести элементы A1, A2, . . ., AN .

For33. Дано целое число N ( 1). Последовательность чисел Фибоначчи F K (целого типа) определяется следующим образом: F 1 = 1, F 2 = 1, F K = F K−2 + F K−1, K = 3, 4, . . . . Вывести элементы F 1, F 2, …, F N .

For34. Дано целое число N ( 1). Последовательность вещественных чисел AK определяется следующим образом: A1 = 1, A2 = 2, AK = (AK−2 + 2•AK−1)/3, K = 3, 4, . . . . Вывести элементы A1, A2, . . ., AN .

For35. Дано целое число N ( 2). Последовательность целых чисел AK определяется следующим образом: A1 = 1, A2 = 2, A3 = 3, AK = AK−1 + AK−2 − 2•AK−3, K = 4, 5, . . . . Вывести элементы A1, A2, . . ., AN . Цикл с условием 29 Вложенные циклы

For36. Даны целые положительные числа N и K. Найти сумму 1K + 2K + . . . + N K . Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.

For37. Дано целое число N ( 0). Найти сумму 11 + 22 + . . . + N N . Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.

For38. Дано целое число N ( 0). Найти сумму 1N + 2N −1 + . . . + N 1 . Чтобы избежать целочисленного переполнения, вычислять слагаемые этой суммы с помощью вещественной переменной и выводить результат как вещественное число.

For39. Даны целые положительные числа A и B (A

For40. Даны целые числа A и B (A

While1. Даны положительные числа A и B (A B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.

While2. Даны положительные числа A и B (A B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

While3. Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также 30 остаток от этого деления.

While4. Дано целое число N ( 0). Если оно является степенью числа 3, то вывести TRUE, если не является – вывести FALSE.

While5. Дано целое число N ( 0), являющееся некоторой степенью числа 2: N = 2K . Найти целое число K – показатель этой степени.

While6. Дано целое число N ( 0). Найти двойной факториал N: N!! = N•(N−2)•(N−4)•. . . (последний сомножитель равен 2, если N – четное, и 1, если N – нечетное). Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и вывести его как вещественное число.

While7. Дано целое число N ( 0). Найти наименьшее целое положительное число K, квадрат которого превосходит N: K 2 N. Функцию извлечения квадратного корня не использовать.

While8. Дано целое число N ( 0). Найти наибольшее целое число K, квадрат которого не превосходит N: K 2 ≤ N. Функцию извлечения квадратного корня не использовать.

While9. Дано целое число N ( 1). Найти наименьшее целое число K, при котором выполняется неравенство 3K N.

While10. Дано целое число N ( 1). Найти наибольшее целое число K, при котором выполняется неравенство 3K

While11. Дано целое число N ( 1). Вывести наименьшее из целых чисел K, для которых сумма 1 + 2 + . . . + K будет больше или равна N, и саму эту сумму.

While12. Дано целое число N ( 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 2 + . . . + K будет меньше или равна N, и саму эту сумму.

While13. Дано число A ( 1). Вывести наименьшее из целых чисел K, для которых сумма 1 + 1/2 + . . . + 1/K будет больше A, и саму эту сумму.

While14. Дано число A ( 1). Вывести наибольшее из целых чисел K, для которых сумма 1 + 1/2 + . . . + 1/K будет меньше A, и саму эту сумму.

While15. Начальный вклад в банке равен 1000 руб. Через каждый месяц размер вклада увеличивается на P процентов от имеющейся суммы (P – вещественное число, 0

While16. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P – вещественное, 0

While17. Дано целое число N ( 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).

While18. Дано целое число N ( 0). Используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр.

While19. Дано целое число N ( 0). Используя операции деления нацело и взятия остатка от деления, найти число, полученное при прочтении числа N справа налево.

While20. Дано целое число N ( 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет – вывести FALSE.

While21. Дано целое число N ( 0). С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры. Если имеются, то вывести TRUE, если нет – вывести FALSE.

While22. Дано целое число N ( 1). Если оно является простым, то есть не имеет положительных делителей, кроме 1 и самого себя, то вывести TRUE, иначе вывести FALSE.

While23. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A, где «mod» обозначает операцию взятия остатка от деления.

While24. Дано целое число N ( 1). Последовательность чисел Фибоначчи F K определяется следующим образом: F 1 = 1, F 2 = 1, F K = F K−2 + F K−1, K = 3, 4, . . . . Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет – вывести FALSE.

While25. Дано целое число N ( 1). Найти первое число Фибоначчи, большее N (определение чисел Фибоначчи дано в задании While24). 32

While26. Дано целое число N ( 1), являющееся числом Фибоначчи: N = F K (определение чисел Фибоначчи дано в задании While24). Найти целые числа F K−1 и F K+1 – предыдущее и последующее числа Фибоначчи.

While27. Дано целое число N ( 1), являющееся числом Фибоначчи: N = F K (определение чисел Фибоначчи дано в задании While24). Найти целое число K – порядковый номер числа Фибоначчи N.

While28. Дано вещественное число ε ( 0). Последовательность вещественных чисел AK определяется следующим образом: A1 = 2, AK = 2 + 1/AK−1, K = 2, 3, . . . . Найти первый из номеров K, для которых выполняется условие |AK − AK−1 |

While29. Дано вещественное число ε ( 0). Последовательность вещественных чисел AK определяется следующим образом: A1 = 1, A2 = 2, AK = (AK−2 + 2•AK−1)/3, K = 3, 4, . . . . Найти первый из номеров K, для которых выполняется условие |AK − AK−1 |

While30. Даны положительные числа A, B, C. На прямоугольнике размера A × B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать. Последовательности Во всех заданиях данной группы предполагается, что исходный набор содержит ненулевое число элементов (в частности, число N всегда больше нуля). В заданиях на обработку нескольких наборов чисел (Series29–Series40) количество наборов K также всегда является ненулевым.

Series1. Даны десять вещественных чисел. Найти их сумму.

Series2. Даны десять вещественных чисел. Найти их произведение.

Series3. Даны десять вещественных чисел. Найти их среднее арифметическое.

Series4. Дано целое число N и набор из N вещественных чисел. Вывести сумму и произведение чисел из данного набора.

Series5. Дано целое число N и набор из N положительных вещественных чисел. Вывести в том же порядке целые части всех чисел из данного набора (как вещественные числа с нулевой дробной частью), а также сумму всех целых частей. Последовательности 33

Series6. Дано целое число N и набор из N положительных вещественных чисел. Вывести в том же порядке дробные части всех чисел из данного набора (как вещественные числа с нулевой целой частью), а также произведение всех дробных частей.

Series7. Дано целое число N и набор из N вещественных чисел. Вывести в том же порядке округленные значения всех чисел из данного набора (как целые числа), а также сумму всех округленных значений.

Series8. Дано целое число N и набор из N целых чисел. Вывести в том же порядке все четные числа из данного набора и количество K таких чисел.

Series9. Дано целое число N и набор из N целых чисел. Вывести в том же порядке номера всех нечетных чисел из данного набора и количество K таких чисел.

Series10. Дано целое число N и набор из N целых чисел. Если в наборе имеются положительные числа, то вывести TRUE; в противном случае вывести FALSE.

Series11. Даны целые числа K, N и набор из N целых чисел. Если в наборе имеются числа, меньшие K, то вывести TRUE; в противном случае вывести FALSE.

Series12. Дан набор ненулевых целых чисел; признак его завершения – число 0. Вывести количество чисел в наборе.

Series13. Дан набор ненулевых целых чисел; признак его завершения – число 0. Вывести сумму всех положительных четных чисел из данного набора. Если требуемые числа в наборе отсутствуют, то вывести 0.

Series14. Дано целое число K и набор ненулевых целых чисел; признак его завершения – число 0. Вывести количество чисел в наборе, меньших K.

Series15. Дано целое число K и набор ненулевых целых чисел; признак его завершения – число 0. Вывести номер первого числа в наборе, большего K. Если таких чисел нет, то вывести 0.

Series16. Дано целое число K и набор ненулевых целых чисел; признак его завершения – число 0. Вывести номер последнего числа в наборе, большего K. Если таких чисел нет, то вывести 0.

Series17. Дано вещественное число B, целое число N и набор из N вещественных чисел, упорядоченных по возрастанию. Вывести элементы набора вместе с числом B, сохраняя упорядоченность выводимых чисел.

Series18. Дано целое число N и набор из N целых чисел, упорядоченный по возрастанию. Данный набор может содержать одинаковые элементы. 34 Вывести в том же порядке все различные элементы данного набора.

Series19. Дано целое число N ( 1) и набор из N целых чисел. Вывести те элементы в наборе, которые меньше своего левого соседа, и количество K таких элементов.

Series20. Дано целое число N ( 1) и набор из N целых чисел. Вывести те элементы в наборе, которые меньше своего правого соседа, и количество K таких элементов.

Series21. Дано целое число N ( 1) и набор из N вещественных чисел. Проверить, образует ли данный набор возрастающую последовательность. Если образует, то вывести TRUE, если нет – вывести FALSE.

Series22. Дано целое число N ( 1) и набор из N вещественных чисел. Если данный набор образует убывающую последовательность, то вывести 0; в противном случае вывести номер первого числа, нарушающего закономерность.

Series23. Дано целое число N ( 2) и набор из N вещественных чисел. Набор называется пилообразным, если каждый его внутренний элемент либо больше, либо меньше обоих своих соседей (то есть является «зубцом»). Если данный набор является пилообразным, то вывести 0; в противном случае вывести номер первого элемента, не являющегося зубцом.

Series24. Дано целое число N и набор из N целых чисел, содержащий по крайней мере два нуля. Вывести сумму чисел из данного набора, расположенных между последними двумя нулями (если последние нули идут подряд, то вывести 0).

Series25. Дано целое число N и набор из N целых чисел, содержащий по крайней мере два нуля. Вывести сумму чисел из данного набора, расположенных между первым и последним нулем (если первый и последний нули идут подряд, то вывести 0). Вложенные циклы

Series26. Даны целые числа K, N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести K-e степени чисел из данного набора: (A1)K, (A2)K, . . ., (AN)K .

Series27. Дано целое число N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести следующие числа: A1, (A2)2, . . ., (AN −1)N −1, (AN)N . Последовательности 35

Series28. Дано целое число N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести следующие числа: (A1)N, (A2)N −1, . . ., (AN −1)2, AN.

Series29. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Вывести общую сумму всех элементов, входящих в данные наборы.

Series30. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести сумму его элементов.

Series31. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести 0.

Series32. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его первого элемента, равного 2, или число 0, если в данном наборе нет двоек.

Series33. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его последнего элемента, равного 2, или число 0, если в данном наборе нет двоек.

Series34. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора выполнить следующее действие: если в наборе содержится число 2, то вывести сумму его элементов; если в наборе нет двоек, то вывести 0.

Series35. Дано целое число K, а также K наборов ненулевых целых чисел. Признаком завершения каждого набора является число 0. Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.

Series36. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают.

Series37. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают или убывают.

Series38. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завер36 шения является число 0. Для каждого набора выполнить следующее действие: если элементы набора возрастают, то вывести 1; если элементы набора убывают, то вывести −1; если элементы набора не возрастают и не убывают, то вывести 0.

Series39. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Найти количество пилообразных наборов (определение пилообразного набора дано в задании Series23).

Series40. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если набор является пилообразным (см. задание Series23), то вывести количество его элементов; в противном случае вывести номер первого элемента, который не является зубцом. Процедуры и функции Процедуры с числовыми параметрами

Proc1. Описать процедуру PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A – входной, B – выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.

Proc2. Описать процедуру PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A – входной, B, C, D – выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти вторую, третью и четвертую степень пяти данных чисел.

Proc3. Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую среднее арифметическое AMean = (X +Y)/2 и среднее геометрическое √ GMean = X •Y двух положительных чисел X и Y (X и Y – входные, AMean и GMean – выходные параметры вещественного типа). С помощью этой процедуры найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.

Proc4. Описать процедуру TrianglePS(a, P, S), вычисляющую по стороне a √ равностороннего треугольника его периметр P = 3•a и площадь S = a2 • 3/4 Процедуры и функции 37 (a – входной, P и S – выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти периметры и площади трех равносторонних треугольников с данными сторонами.

Proc5. Описать процедуру RectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных вершин (x1, y1, x2, y2 – входные, P и S – выходные параметры вещественного типа). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.

Proc6. Описать процедуру DigitCountSum(K, C, S), находящую количество C цифр целого положительного числа K, а также их сумму S (K – входной, C и S – выходные параметры целого типа). С помощью этой процедуры найти количество и сумму цифр для каждого из пяти данных целых чисел.

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

Proc8. Описать процедуру AddRightDigit(D, K), добавляющую к целому положительному числу K справа цифру D (D – входной параметр целого типа, лежащий в диапазоне 0–9, K – параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K справа данные цифры D1 и D2, выводя результат каждого добавления.

Proc9. Описать процедуру AddLeftDigit(D, K), добавляющую к целому положительному числу K слева цифру D (D – входной параметр целого типа, лежащий в диапазоне 1–9, K – параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K слева данные цифры D1 и D2, выводя результат каждого добавления.

Proc10. Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y (X и Y – вещественные параметры, являющиеся одновременно входными и выходными). С ее помощью для данных переменных A, B, C, D последовательно поменять содержимое следующих пар: A и B, C и D, B и C и вывести новые значения A, B, C, D.

Proc11. Описать процедуру Minmax(X, Y), записывающую в переменную X 38 минимальное из значений X и Y, а в переменную Y – максимальное из этих значений (X и Y – вещественные параметры, являющиеся одновременно входными и выходными). Используя четыре вызова этой процедуры, найти минимальное и максимальное из данных чисел A, B, C, D.

Proc12. Описать процедуру SortInc3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по возрастанию (A, B, C – вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по возрастанию два данных набора из трех чисел: (A1, B1, C 1) и (A2, B2, C 2).

Proc13. Описать процедуру SortDec3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по убыванию (A, B, C – вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по убыванию два данных набора из трех чисел: (A1, B1, C 1) и (A2, B2, C 2).

Proc14. Описать процедуру ShiftRight3(A, B, C), выполняющую правый циклический сдвиг: значение A переходит в B, значение B – в C, значение C – в A (A, B, C – вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить правый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C 1) и (A2, B2, C 2).

Proc15. Описать процедуру ShiftLeft3(A, B, C), выполняющую левый циклический сдвиг: значение A переходит в C, значение C – в B, значение B – в A (A, B, C – вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить левый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C 1) и (A2, B2, C 2). Функции с числовыми параметрами

Proc16. Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения: −1, если X 0. С помощью этой функции найти значение выражения Sign(A) + Sign(B) для данных вещественных чисел A и B. Процедуры и функции 39

Proc17. Описать функцию RootsCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A•x2 + B•x + C = 0 (A, B, C – вещественные параметры, A = 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта: D = B2 − 4•A•C.

Proc18. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R – вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга радиуса R вычисляется по формуле S = π•R2 . В качестве значения π использовать 3.14.

Proc19. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 – вещественные, R1 R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π•R2 . В качестве значения π использовать 3.14.

Proc20. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h – вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора: b2 = (a/2)2 + h2 .

Proc21. Описать функцию SumRange(A, B) целого типа, находящую сумму всех целых чисел от A до B включительно (A и B – целые). Если A B, то функция возвращает 0. С помощью этой функции найти суммы чисел от A до B и от B до C, если даны числа A, B, C.

Proc22. Описать функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 – вычитание, 2 – умножение, 3 – деление, остальные значения – сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N 1, N 2, N 3 .

Proc23. Описать функцию Quarter(x, y) целого типа, определяющую номер координатной четверти, в которой находится точка с ненулевыми веще40 ственными координатами (x, y). С помощью этой функции найти номера координатных четвертей для трех точек с данными ненулевыми координатами.

Proc24. Описать функцию Even(K) логического типа, возвращающую TRUE, если целый параметр K является четным, и FALSE в противном случае. С ее помощью найти количество четных чисел в наборе из 10 целых чисел.

Proc25. Описать функцию IsSquare(K) логического типа, возвращающую TRUE, если целый параметр K ( 0) является квадратом некоторого целого числа, и FALSE в противном случае. С ее помощью найти количество квадратов в наборе из 10 целых положительных чисел.

Proc26. Описать функцию IsPower5(K) логического типа, возвращающую TRUE, если целый параметр K ( 0) является степенью числа 5, и FALSE в противном случае. С ее помощью найти количество степеней числа 5 в наборе из 10 целых положительных чисел.

Proc27. Описать функцию IsPowerN(K, N) логического типа, возвращающую TRUE, если целый параметр K ( 0) является степенью числа N ( 1), и FALSE в противном случае. Дано число N ( 1) и набор из 10 целых положительных чисел. С помощью функции IsPowerN найти количество степеней числа N в данном наборе.

Proc28. Описать функцию IsPrime(N) логического типа, возвращающую TRUE, если целый параметр N ( 1) является простым числом, и FALSE в противном случае (число, большее 1, называется простым, если оно не имеет положительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе.

Proc29. Описать функцию DigitCount(K) целого типа, находящую количество цифр целого положительного числа K. Используя эту функцию, найти количество цифр для каждого из пяти данных целых положительных чисел.

Proc30. Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K (цифры в числе нумеруются справа налево). Если количество цифр в числе K меньше N, то функция возвращает −1. Для каждого из пяти данных целых положительных чисел K 1, K 2, . . ., K 5 вызвать функцию DigitN с параметром N, изменяющимся от 1 до 5.

Proc31. Описать функцию IsPalindrom(K), возвращающую TRUE, если целый параметр K ( 0) является палиндромом (то есть его запись читается оди41 Процедуры и функции наково слева направо и справа налево), и FALSE в противном случае. С ее помощью найти количество палиндромов в наборе из 10 целых положительных чисел. При описании функции можно использовать функции DigitCount и DigitN из заданий Proc29 и Proc30.

Proc32. Описать функцию DegToRad(D) вещественного типа, находящую величину угла в радианах, если дана его величина D в градусах (D – вещественное число, 0

Proc33. Описать функцию RadToDeg(R) вещественного типа, находящую величину угла в градусах, если дана его величина R в радианах (R – вещественное число, 0

Proc34. Описать функцию Fact(N) вещественного типа, вычисляющую значение факториала N! = 1•2•. . .•N (N 0 – параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти факториалы пяти данных целых чисел.

Proc35. Описать функцию Fact2(N) вещественного типа, вычисляющую двойной факториал: N!! = 1•3•5•. . .•N, если N – нечетное; N!! = 2•4•6•. . .•N, если N – четное (N 0 – параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти двойные факториалы пяти данных целых чисел.

Proc36. Описать функцию Fib(N) целого типа, вычисляющую N-й элемент последовательности чисел Фибоначчи F K, которая описывается следующими формулами: F 1 = 1, F 2 = 1, F K = F K−2 + F K−1, K = 3, 4, . . . . Используя функцию Fib, найти пять чисел Фибоначчи с данными номерами N 1, N 2, . . ., N 5 . 42 Дополнительные задания на процедуры и функции

Proc37. Описать функцию Power1(A, B) вещественного типа, находящую величину AB по формуле AB = exp(B•ln(A)) (параметры A и B – вещественные). В случае нулевого или отрицательного параметра A функция возвращает 0. С помощью этой функции найти степени AP, BP, C P, если даны числа P, A, B, C.

Proc38. Описать функцию Power2(A, N) вещественного типа, находящую величину AN (A – вещественный, N – целый параметр) по следующим формулам: A0 = 1; AN = A•A•. . .•A (N сомножителей), если N 0; AN = 1/(A•A•. . .•A) (|N| сомножителей), если N

Proc39. Используя функции Power1 и Power2 (задания Proc37 и Proc38), описать функцию Power3(A, B) вещественного типа с вещественными параметрами, находящую AB следующим образом: если B имеет нулевую дробную часть, то вызывается функция Power2(A, Round(B)); в противном случае вызывается функция Power1(A, B). С помощью этой функции найти AP, BP, C P, если даны числа P, A, B, C.

Proc40. Описать функцию Exp1(x, ε) вещественного типа (параметры x, ε – вещественные, ε 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x2 /(2!) + x3 /(3!) + . . . + xn /(n!) + . . . (n! = 1•2•. . .•n). В сумме учитывать все слагаемые, большие ε. С помощью Exp1 найти приближенное значение экспоненты для данного x при шести данных ε.

Proc41. Описать функцию Sin1(x, ε) вещественного типа (параметры x, ε – вещественные, ε 0), находящую приближенное значение функции sin(x): sin(x) = x − x3 /(3!) + x5 /(5!) − . . . + (−1)n •x2•n+1 /((2•n+1)!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Sin1 найти приближенное значение синуса для данного x при шести данных ε.

Proc42. Описать функцию Cos1(x, ε) вещественного типа (параметры x, ε – вещественные, ε 0), находящую приближенное значение функции cos(x): cos(x) = 1 − x2 /(2!) + x4 /(4!) − . . . + (−1)n •x2•n /((2•n)!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Процедуры и функции 43 Cos1 найти приближенное значение косинуса для данного x при шести данных ε.

Proc43. Описать функцию Ln1(x, ε) вещественного типа (параметры x, ε – вещественные, |x| 0), находящую приближенное значение функции ln(1 + x): ln(1 + x) = x − x2 /2 + x3 /3 − . . . + (−1)n •xn+1 /(n+1) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Ln1 найти приближенное значение ln(1 + x) для данного x при шести данных ε.

Proc44. Описать функцию Arctg1(x, ε) вещественного типа (параметры x, ε – вещественные, |x| 0), находящую приближенное значение функции arctg(x): arctg(x) = x − x3 /3 + x5 /5 − . . . + (−1)n •x2•n+1 /(2•n+1) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Arctg1 найти приближенное значение arctg(x) для данного x при шести данных ε.

Proc45. Описать функцию Power4(x, a, ε) вещественного типа (параметры x, a, ε – вещественные, |x| 0), находящую приближенное значение функции (1 + x)a : (1 + x)a = 1 + a•x + a•(a−1)•x2 /(2!) + . . . + a•(a−1)•. . .•(a−n+1)•xn /(n!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Power4 найти приближенное значение (1 + x)a для данных x и a при шести данных ε.

Proc46. Описать функцию NOD2(A, B) целого типа, находящую наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A. С помощью этой функции найти наибольшие общие делители пар (A, B), (A, C), (A, D), если даны числа A, B, C, D.

Proc47. Используя функцию NOD2 из задания Proc46, описать процедуру Frac1(a, b, p, q), преобразующую дробь a/b к несократимому виду p/q (все параметры процедуры – целого типа, a и b – входные, p и q – выходные). Знак результирующей дроби p/q приписывается числителю (т. е. q 0). С помощью Frac1 найти несократимые дроби, равные a/b + c/d, a/b + e/f, a/b + g/h (числа a, b, c, d, e, f, g, h даны).

Proc48. Учитывая, что наименьшее общее кратное двух целых положитель44 ных чисел A и B равно A•(B/НОД(A, B)), где НОД(A, B) – наибольший общий делитель A и B, и используя функцию NOD2 из задания Proc46, описать функцию NOK2(A, B) целого типа, находящую наименьшее общее кратное чисел A и B. С помощью NOK2 найти наименьшие общие кратные пар (A, B), (A, C), (A, D), если даны числа A, B, C, D.

Proc49. Учитывая соотношение НОД(A, B, C) = НОД(НОД(A, B), C) и используя функцию NOD2 из задания Proc46, описать функцию NOD3(A, B, C) целого типа, находящую наибольший общий делитель трех целых положительных чисел A, B, C. С помощью этой функции найти наибольшие общие делители троек (A, B, C), (A, C, D) и (B, C, D), если даны числа A, B, C, D.

Proc50. Описать процедуру TimeToHMS(T, H, M, S), определяющую по времени T (в секундах) содержащееся в нем количество часов H, минут M и секунд S (T – входной, H, M и S – выходные параметры целого типа). Используя эту процедуру, найти количество часов, минут и секунд для пяти данных отрезков времени T 1, T 2, . . ., T 5 .

Proc51. Описать процедуру IncTime(H, M, S, T), которая увеличивает на T секунд время, заданное в часах H, минутах M и секундах S (H, M и S – входные и выходные параметры, T – входной параметр; все параметры – целые положительные). Дано время (в часах H, минутах M, секундах S) и целое число T. Используя процедуру IncTime, увеличить данное время на T секунд и вывести новые значения H, M, S.

Proc52. Описать функцию IsLeapYear(Y) логического типа, которая возвращает TRUE, если год Y (целое положительное число) является високосным, и FALSE в противном случае. Вывести значение функции IsLeapYear для пяти данных значений параметра Y. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400.

Proc53. Используя функцию IsLeapYear из задания Proc52, описать функцию MonthDays(M, Y) целого типа, которая возвращает количество дней для M-го месяца года Y (1 ≤ M ≤ 12, Y 0 – целые числа). Вывести значение функции MonthDays для данного года Y и месяцев M 1, M 2, M 3 .

Proc54. Используя функцию MonthDays из задания Proc53, описать процедуру PrevDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет предыдущую дату (параметры целого типа D, M, Y являются одновременно входными и Процедуры и функции 45 выходными). Применить процедуру PrevDate к трем исходным датам и вывести полученные значения предыдущих дат.

Proc55. Используя функцию MonthDays из задания Proc53, описать процедуру NextDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет следующую дату (параметры целого типа D, M, Y являются одновременно входными и выходными). Применить процедуру NextDate к трем исходным датам и вывести полученные значения следующих дат.

Proc56. Описать функцию Leng(xA, yA, xB, yB) вещественного типа, находящую длину отрезка AB на плоскости по координатам его концов: |AB| = (xA − xB)2 + (yA − yB)2 (xA, yA, xB, yB – вещественные параметры). С помощью этой функции найти длины отрезков AB, AC, AD, если даны координаты точек A, B, C, D.

Proc57. Используя функцию Leng из задания Proc56, описать функцию Perim(xA, yA, xB, yB, xC, yC) вещественного типа, находящую периметр треугольника ABC по координатам его вершин (xA, yA, xB, yB, xC, yC – вещественные параметры). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Proc58. Используя функции Leng и Perim из заданий Proc56 и Proc57, описать функцию Area(xA, yA, xB, yB, xC, yC) вещественного типа, находящую площадь треугольника ABC по формуле √ S ABC = p•(p−|AB|)•(p−|AC|)•(p−|BC|), где p – полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Proc59. Используя функции Leng и Area из заданий Proc56 и Proc58, описать функцию Dist(xP, yP, xA, yA, xB, yB) вещественного типа, находящую расстояние 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.

Proc60. Используя функцию Dist из задания Proc59, описать процедуру Heights(xA, yA, xB, yB, xC, yC, hA, hB, hC), находящую высоты hA, hB, hC треугольника ABC (выходные параметры), проведенные соответственно из вершин A, B, C (их координаты являются входными параметрами). С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD, 46 если даны координаты точек A, B, C, D. Минимумы и максимумы Для решения заданий из данной группы следует использовать «однопроходные» алгоритмы, позволяющие получить требуемый результат после однократного просмотра набора исходных данных. Однопроходные алгоритмы обладают важным преимуществом: для них не требуется хранить в памяти одновременно весь набор данных, поэтому при программной реализации этих алгоритмов можно не использовать массивы.

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

Minmax1. Дано целое число N и набор из N чисел. Найти минимальный и максимальный из элементов данного набора и вывести их в указанном порядке.

Minmax2. Дано целое число N и набор из N прямоугольников, заданных своими сторонами – парами чисел (a, b). Найти минимальную площадь прямоугольника из данного набора.

Minmax3. Дано целое число N и набор из N прямоугольников, заданных своими сторонами – парами чисел (a, b). Найти максимальный периметр прямоугольника из данного набора.

Minmax4. Дано целое число N и набор из N чисел. Найти номер минимального элемента из данного набора.

Minmax5. Дано целое число N и набор из N пар чисел (m, v) – данные о массе m и объеме v деталей, изготовленных из различных материалов. Вывести номер детали, изготовленной из материала максимальной плотности, а также величину этой максимальной плотности. Плотность P вычисляется по формуле P = m/v.

Minmax6 . Дано целое число N и набор из N целых чисел. Найти номера первого минимального и последнего максимального элемента из данного набора и вывести их в указанном порядке.

Minmax7. Дано целое число N и набор из N целых чисел. Найти номера первого максимального и последнего минимального элемента из данного набора и вывести их в указанном порядке. Минимумы и максимумы 47

Minmax8. Дано целое число N и набор из N целых чисел. Найти номера первого и последнего минимального элемента из данного набора и вывести их в указанном порядке.

Minmax9. Дано целое число N и набор из N целых чисел. Найти номера первого и последнего максимального элемента из данного набора и вывести их в указанном порядке.

Minmax10. Дано целое число N и набор из N целых чисел. Найти номер первого экстремального (то есть минимального или максимального) элемента из данного набора.

Minmax11. Дано целое число N и набор из N целых чисел. Найти номер последнего экстремального (то есть минимального или максимального) элемента из данного набора.

Minmax12. Дано целое число N и набор из N чисел. Найти минимальное положительное число из данного набора. Если положительные числа в наборе отсутствуют, то вывести 0.

Minmax13. Дано целое число N и набор из N целых чисел. Найти номер первого максимального нечетного числа из данного набора. Если нечетные числа в наборе отсутствуют, то вывести 0.

Minmax14. Дано число B ( 0) и набор из десяти чисел. Вывести минимальный из тех элементов набора, которые больше B, а также его номер. Если чисел, больших B, в наборе нет, то дважды вывести 0

Minmax15. Даны числа B, C (0

Minmax16. Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных перед первым минимальным элементом.

Minmax17. Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных после последнего максимального элемента.

Minmax18. Дано целое число N и набор из N целых чисел. Найти количество элементов, содержащихся между первым и последним максимальным элементом. Если в наборе имеется единственный максимальный элемент, то вывести 0.

Minmax19. Дано целое число N и набор из N целых чисел. Найти количество минимальных элементов из данного набора.

Minmax20. Дано целое число N и набор из N целых чисел. Найти общее коли48 чество экстремальных (то есть минимальных и максимальных) элементов из данного набора.

Minmax21. Дано целое число N ( 2) и набор из N чисел – значений некоторой величины, полученных в N опытах. Найти среднее значение этой величины. При вычислении среднего значения не учитывать минимальное и максимальное из имеющихся в наборе значений.

Minmax22. Дано целое число N ( 2) и набор из N чисел. Найти два наименьших элемента из данного набора и вывести эти элементы в порядке возрастания их значений.

Minmax23. Дано целое число N ( 3) и набор из N чисел. Найти три наибольших элемента из данного набора и вывести эти элементы в порядке убывания их значений.

Minmax24. Дано целое число N ( 1) и набор из N чисел. Найти максимальную сумму двух соседних чисел из данного набора.

Minmax25. Дано целое число N ( 1) и набор из N чисел. Найти номера двух соседних чисел из данного набора, произведение которых является минимальным, и вывести вначале меньший, а затем больший номер.

Minmax26. Дано целое число N и набор из N целых чисел. Найти максимальное количество четных чисел в наборе, идущих подряд. Если четные числа в наборе отсутствуют, то вывести 0.

Minmax27. Дано целое число N и набор из N целых чисел, содержащий только нули и единицы. Найти номер элемента, с которого начинается самая длинная последовательность одинаковых чисел, и количество элементов в этой последовательности. Если таких последовательностей несколько, то вывести номер первой из них.

Minmax28. Дано целое число N и набор из N целых чисел, содержащий только нули и единицы. Найти номер элемента, с которого начинается самая длинная последовательность единиц, и количество элементов в этой последовательности. Если таких последовательностей несколько, то вывести номер последней из них. Если единицы в исходном наборе отсутствуют, то дважды вывести 0.

Minmax29. Дано целое число N и набор из N целых чисел. Найти максимальное количество подряд идущих минимальных элементов из данного набора.

Minmax30. Дано целое число N и набор из N целых чисел. Найти минимальное количество подряд идущих максимальных элементов из данного набора.

Одномерные массивы 49 Одномерные массивы Условие вида «дан массив размера N» означает, что вначале дается фактический размер массива (целое число N), а затем приводятся все его элементы. Если в задании явно не указывается, какие значения может принимать размер исходного массива, то предполагается, что размер может изменяться в пределах от 2 до 10. Индекс начального элемента массива считается равным 1. Если в задании, связанном с созданием (преобразованием) массива, не описан результирующий набор данных, то предполагается, что этим набором является созданный (преобразованный) массив, и необходимо вывести все его элементы в порядке возрастания их индексов. Формирование массива и вывод его элементов В заданиях на формирование массива предполагается, что размер результирующего массива не превосходит 10.

Array1. Дано целое число N ( 0). Сформировать и вывести целочисленный массив размера N, содержащий N первых положительных нечетных чисел: 1, 3, 5, . . . .

Array2. Дано целое число N ( 0). Сформировать и вывести целочисленный массив размера N, содержащий степени двойки от первой до N-й: 2, 4, 8, 16, . . . .

Array3. Дано целое число N ( 1), а также первый член A и разность D арифметической прогрессии. Сформировать и вывести массив размера N, содержащий N первых членов данной прогрессии: A, A + D, A + 2•D, A + 3•D, . . . .

Array4 . Дано целое число N ( 1), а также первый член A и знаменатель D геометрической прогрессии. Сформировать и вывести массив размера N, содержащий N первых членов данной прогрессии: A, A•D, A•D2, A•D3, . . . .

Array5. Дано целое число N ( 2). Сформировать и вывести целочисленный массив размера N, содержащий N первых элементов последовательности чисел Фибоначчи F K : F 1 = 1, F 2 = 1, F K = F K−2 + F K−1, K = 3, 4, . . . .

Array6. Даны целые числа N ( 2), A и B. Сформировать и вывести целочисленный массив размера N, первый элемент которого равен A, второй 50 равен B, а каждый последующий элемент равен сумме всех предыдущих.

Array7. Дан массив размера N. Вывести его элементы в обратном порядке.

Array8. Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве нечетные числа в порядке возрастания их индексов, а также их количество K.

Array9. Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве четные числа в порядке убывания их индексов, а также их количество K.

Array10. Дан целочисленный массив размера N. Вывести вначале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а затем – все нечетные числа в порядке убывания их индексов.

Array11. Дан массив A размера N и целое число K (1 ≤ K ≤ N). Вывести элементы массива с порядковыми номерами, кратными K: AK, A2•K, A3•K, . . . . Условный оператор не использовать.

Array12. Дан массив A размера N (N – четное число). Вывести его элементы с четными номерами в порядке возрастания номеров: A2, A4, A6, . . ., AN . Условный оператор не использовать.

Array13. Дан массив A размера N (N – нечетное число). Вывести его элементы с нечетными номерами в порядке убывания номеров: AN, AN −2, AN −4, . . ., A1 . Условный оператор не использовать.

Array14. Дан массив A размера N. Вывести вначале его элементы с четными номерами (в порядке возрастания номеров), а затем – элементы с нечетными номерами (также в порядке возрастания номеров): A2, A4, A6, . . ., A1, A3, A5, . . . . Условный оператор не использовать.

Array15. Дан массив A размера N. Вывести вначале его элементы с нечетными номерами в порядке возрастания номеров, а затем – элементы с четными номерами в порядке убывания номеров: A1, A3, A5, . . ., A6, A4, A2 . Условный оператор не использовать.

Array16. Дан массив A размера N. Вывести его элементы в следующем порядке: A1, AN, A2, AN −1, A3, AN −2, . . . .

Array17. Дан массив A размера N. Вывести его элементы в следующем порядке: A1, A2, AN, AN −1, A3, A4, AN −2, AN −3, . . . . Одномерные массивы 51 Анализ элементов массива Для выполнения некоторых заданий из данного пункта не требуется одновременно хранить в памяти все исходные данные, поэтому использовать при их выполнении массивы, строго говоря, не нужно. Однако применение массивов позволяет сделать алгоритмы решения этих заданий более простыми и наглядными. Задания из данного пункта можно дополнить заданиями из групп Series и

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

Array18. Дан массив A ненулевых целых чисел размера 10. Вывести значение первого из тех его элементов AK, которые удовлетворяют неравенству AK

Array19. Дан целочисленный массив A размера 10. Вывести порядковый номер последнего из тех его элементов AK, которые удовлетворяют двойному неравенству A1

Array20. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти сумму элементов массива с номерами от K до L включительно.

Array21. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти среднее арифметическое элементов массива с номерами от K до L включительно.

Array22. Дан массив размера N и целые числа K и L (1

Array23. Дан массив размера N и целые числа K и L (1

Array24. Дан целочисленный массив размера N, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию (см. задание Array3). Если образуют, то вывести разность прогрессии, если нет – вывести 0.

Array25. Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию (см. задание Array4). Если образуют, то вывести знаменатель прогрессии, если нет – вывести 0.

Array26. Дан целочисленный массив размера N. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести 0, если нет, 52 то вывести порядковый номер первого элемента, нарушающего закономерность.

Array27. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.

Array28. Дан массив A размера N. Найти минимальный элемент из его элементов с четными номерами: A2, A4, A6, . . . .

Array29. Дан массив A размера N. Найти максимальный элемент из его элементов с нечетными номерами: A1, A3, A5, . . . .

Array30. Дан массив размера N. Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов. Найденные номера выводить в порядке их возрастания.

Array31. Дан массив размера N. Найти номера тех элементов массива, которые больше своего левого соседа, и количество таких элементов. Найденные номера выводить в порядке их убывания.

Array32. Дан массив размера N. Найти номер его первого локального минимума (локальный минимум – это элемент, который меньше любого из своих соседей).

Array33. Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум – это элемент, который больше любого из своих соседей).

Array34. Дан массив размера N. Найти максимальный из его локальных минимумов (определение локального минимума дано в задании Array32).

Array35. Дан массив размера N. Найти минимальный из его локальных максимумов (определение локального максимума дано в задании Array33).

Array36. Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным минимумом, ни локальным максимумом (определения локального минимума и локального максимума даны в заданиях

Array32 и Array33). Если таких элементов в массиве нет, то вывести 0 (как вещественное число).

Array37. Дан массив размера N. Найти количество участков, на которых его элементы возрастают.

Array38. Дан массив размера N. Найти количество участков, на которых его элементы убывают.

Array39. Дан массив размера N. Найти количество его промежутков моноОдномерные массивы 53 тонности (то есть участков, на которых его элементы возрастают или убывают).

Array40. Дано число R и массив A размера N. Найти элемент массива, который наиболее близок к числу R (то есть такой элемент AK, для которого величина |AK − R| является минимальной).

Array41. Дан массив размера N. Найти два соседних элемента, сумма которых максимальна, и вывести эти элементы в порядке возрастания их индексов.

Array42. Дано число R и массив размера N. Найти два соседних элемента массива, сумма которых наиболее близка к числу R, и вывести эти элементы в порядке возрастания их индексов (определение наиболее близких чисел дано в задании Array40).

Array43. Дан целочисленный массив размера N, все элементы которого упорядочены (по возрастанию или по убыванию). Найти количество различных элементов в данном массиве.

Array44. Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номера в порядке возрастания.

Array45. Дан массив размера N. Найти номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания.

Array46. Дано число R и массив размера N. Найти два различных элемента массива, сумма которых наиболее близка к числу R, и вывести эти элементы в порядке возрастания их индексов (определение наиболее близких чисел дано в задании Array40).

Array47. Дан целочисленный массив размера N. Найти количество различных элементов в данном массиве.

Array48. Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов.

Array49. Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0; в противном случае вывести номер первого недопустимого элемента.

Array50. Дан целочисленный массив A размера N, являющийся перестановкой (определение перестановки дано в задании Array49). Найти количество инверсий в данной перестановке, то есть таких пар элементов AI и AJ, в которых большее число находится слева от меньшего: AI AJ при I

Array51. Даны массивы A и B одинакового размера N. Поменять местами их содержимое и вывести вначале элементы преобразованного массива A, а затем – элементы преобразованного массива B.

Array52. Дан массив A размера N. Сформировать новый массив B того же размера, элементы которого определяются следующим образом: BK = 2•AK, если AK

Array53. Даны два массива A и B одинакового размера N. Сформировать новый массив C того же размера, каждый элемент которого равен максимальному из элементов массивов A и B с тем же индексом.

Array54. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B все четные числа из исходного массива (в том же порядке) и вывести размер полученного массива B и его содержимое.

Array55. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами (1, 3, . . .) и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.

Array56. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с порядковыми номерами, кратными трем (3, 6, . . .), и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.

Array57. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера вначале все элементы исходного массива с четными номерами, а затем – с нечетными: A2, A4, A6, . . ., A1, A3, A5, . . . . Условный оператор не использовать.

Array58. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от 1 до K.

Array59. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от 1 до K.

Array60. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов Одномерные массивы 55 массива A с номерами от K до N.

Array61. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от K до N.

Array62. Дан массив A размера N. Сформировать два новых массива B и C: в массив B записать все положительные элементы массива A, в массив C – все отрицательные (сохраняя исходный порядок следования элементов). Вывести вначале размер и содержимое массива B, а затем – размер и содержимое массива C.

Array63. Даны два массива A и B размера 5, элементы которых упорядочены по возрастанию. Объединить эти массивы так, чтобы результирующий массив C (размера 10) остался упорядоченным по возрастанию.

Array64. Даны три целочисленных массива A, B и C размера N A, N B, N C соответственно, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера N A + N B + N C) остался упорядоченным по убыванию. Преобразование массива При выполнении заданий из данного пункта не следует использовать вспомогательные массивы. Изменение элементов массива

Array65. Дан массив A размера N и целое число K (1 ≤ K ≤ N). Преобразовать массив, увеличив каждый его элемент на исходное значение элемента AK .

Array66. Дан целочисленный массив размера N. Увеличить все четные числа, содержащиеся в массиве, на исходное значение первого четного числа. Если четные числа в массиве отсутствуют, то оставить массив без изменений.

Array67. Дан целочисленный массив размера N. Увеличить все нечетные числа, содержащиеся в массиве, на исходное значение последнего нечетного числа. Если нечетные числа в массиве отсутствуют, то оставить массив без изменений.

Array68. Дан массив размера N. Поменять местами его минимальный и максимальный элементы. 56

Array69. Дан массив размера N (N – четное число). Поменять местами его первый элемент со вторым, третий – с четвертым и т. д.

Array70. Дан массив размера N (N – четное число). Поменять местами первую и вторую половины массива.

Array71. Дан массив размера N. Поменять порядок его элементов на обратный.

Array72. Дан массив A размера N и целые числа K и L (1 ≤ K

Array73. Дан массив A размера N и целые числа K и L (1 ≤ K

Array74. Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным элементами (не включая минимальный и максимальный элементы).

Array75. Дан массив размера N. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами, включая минимальный и максимальный элементы.

Array76. Дан массив размера N. Обнулить все его локальные максимумы (то есть числа, большие своих соседей).

Array77. Дан массив размера N. Возвести в квадрат все его локальные минимумы (то есть числа, меньшие своих соседей).

Array78. Дан массив размера N. Заменить каждый элемент массива на среднее арифметическое этого элемента и его соседей.

Array79. Дан массив размера N. Осуществить сдвиг элементов массива вправо на одну позицию (при этом A1 перейдет в A2, A2 – в A3, . . ., AN −1 – в AN, a исходное значение последнего элемента будет потеряно). Первый элемент полученного массива положить равным 0.

Array80. Дан массив размера N. Осуществить сдвиг элементов массива влево на одну позицию (при этом AN перейдет в AN −1, AN −1 – в AN −2, . . ., A2 – в A1, a исходное значение первого элемента будет потеряно). Последний элемент полученного массива положить равным 0.

Array81. Дан массив размера N и целое число K (1 ≤ K

Array82. Дан массив размера N и целое число K (1 ≤ K

Array83. Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию (при этом A1 перейдет в A2, A2 – в A3, . . ., AN – в A1).

Array84. Дан массив размера N. Осуществить циклический сдвиг элементов массива влево на одну позицию (при этом AN перейдет в AN −1, AN −1 – в AN −2, . . ., A1 – в AN).

Array85. Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K

Array86. Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K

Array87. Дан массив размера N, все элементы которого, кроме первого, упорядочены по возрастанию. Сделать массив упорядоченным, переместив первый элемент на новую позицию.

Array88. Дан массив размера N, все элементы которого, кроме последнего, упорядочены по возрастанию. Сделать массив упорядоченным, переместив последний элемент на новую позицию.

Array89. Дан массив размера N, все элементы которого, кроме одного, упорядочены по убыванию. Сделать массив упорядоченным, переместив элемент, нарушающий упорядоченность, на новую позицию. Удаление и вставка элементов

Array90. Дан массив размера N и целое число K (1 ≤ K ≤ N). Удалить из массива элемент с порядковым номером K.

Array91. Дан массив размера N и целые числа K и L (1 ≤ K

Array92. Дан целочисленный массив размера N. Удалить из массива все нечетные числа и вывести размер полученного массива и его содержимое.

Array93. Дан целочисленный массив размера N ( 2). Удалить из массива все элементы с четными номерами (2, 4, . . .). Условный оператор не использовать.

Array94. Дан целочисленный массив размера N ( 2). Удалить из массива все элементы с нечетными номерами (1, 3, . . .). Условный оператор не использовать.

Array95. Дан целочисленный массив размера N. Удалить из массива все соседние одинаковые элементы, оставив их первые вхождения.

Array96. Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения.

Array97. Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их последние вхождения.

Array98. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся менее трех раз, и вывести размер полученного массива и его содержимое.

Array99. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимое.

Array100. Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся ровно два раза, и вывести размер полученного массива и его содержимое.

Array101. Дан массив размера N и целое число K (1 ≤ K ≤ N). Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением.

Array102. Дан массив размера N и целое число K (1 ≤ K ≤ N). После элемента массива с порядковым номером K вставить новый элемент с нулевым значением.

Array103. Дан массив размера N. Вставить элемент с нулевым значением перед минимальным и после максимального элемента массива.

Array104. Дан массив размера N и два целых числа K и M (1 ≤ K ≤ N, 1 ≤ M ≤ 10). Перед элементом массива с номером K вставить M новых элементов с нулевыми значениями.

Array105. Дан массив размера N и два целых числа K и M (1 ≤ K ≤ N, 1 ≤ M ≤ 10). После элемента массива с номером K вставить M новых Одномерные массивы 59 элементов с нулевыми значениями.

Array106. Дан массив размера N. Продублировать в нем элементы с четными номерами (2, 4, . . .). Условный оператор не использовать.

Array107. Дан массив размера N. Утроить в нем вхождения всех элементов с нечетными номерами (1, 3, . . .). Условный оператор не использовать.

Array108. Дан массив размера N. Перед каждым положительным элементом массива вставить элемент с нулевым значением.

Array109. Дан массив размера N. После каждого отрицательного элемента массива вставить элемент с нулевым значением.

Array110. Дан целочисленный массив размера N. Продублировать в нем все четные числа.

Array111. Дан целочисленный массив размера N. Утроить в нем вхождения всех нечетных чисел. Сортировка массива

Array112. Дан массив A размера N (≤ 6). Упорядочить его по возрастанию методом сортировки простым обменом («пузырьковой» сортировкой): просматривать массив, сравнивая его соседние элементы (A1 и A2, A2 и A3 и т. д.) и меняя их местами, если левый элемент пары больше правого; повторить описанные действия N − 1 раз. Для контроля за выполняемыми действиями выводить содержимое массива после каждого просмотра. Учесть, что при каждом просмотре количество анализируемых пар можно уменьшить на 1.

Array113. Дан массив A размера N (≤ 6). Упорядочить его по возрастанию методом сортировки простым выбором: найти максимальный элемент массива и поменять его местами с последним (N-м) элементом; выполнить описанные действия N − 1 раз, каждый раз уменьшая на 1 количество анализируемых элементов и выводя содержимое массива.

Array114. Дан массив A размера N (≤ 6). Упорядочить его по возрастанию методом сортировки простыми вставками: сравнить элементы A1 и A2 и, при необходимости меняя их местами, добиться того, чтобы они оказались упорядоченными по возрастанию; затем обратиться к элементу A3 и переместить его в левую (уже упорядоченную) часть массива, сохранив ее упорядоченность; повторить этот процесс для остальных элементов, выводя содержимое массива после обработки каждого элемента (от 2го до N-го). При выполнении описанных действий удобно использовать 60 прием «барьера», записывая очередной элемент перед его обработкой в дополнительный элемент массива A0 .

Array115. Дан массив A размера N. Не изменяя данный массив, вывести номера его элементов в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. Использовать метод «пузырьковой» сортировки (см. задание Array112), модифицировав его следующим образом: создать вспомогательный целочисленный массив номеров I, заполнив его числами от 1 до N; просматривать массив A, сравнивая пары элементов массива A с номерами I 1 и I 2, I 2 и I 3, . . . и меняя местами соответствующие элементы массива I, если левый элемент пары больше правого. Повторив описанную процедуру просмотра N − 1 раз, получим в массиве I требуемую последовательность номеров. Серии целых чисел

Array116. Дан целочисленный массив A размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих элементов (длина серии может быть равна 1). Сформировать два новых целочисленных массива B и C одинакового размера, записав в массив B длины всех серий исходного массива, а в массив C – значения элементов, образующих эти серии.

Array117. Дан целочисленный массив размера N. Вставить перед каждой его серией элемент с нулевым значением (определение серии дано в задании

Array116).

Array118. Дан целочисленный массив размера N. Вставить после каждой его серии элемент с нулевым значением (определение серии дано в задании

Array116).

Array119. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент (определение серии дано в задании Array116).

Array120. Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую его серию на один элемент (определение серии дано в задании

Array116.

Array121. Дано целое число K ( 0) и целочисленный массив размера N. Преобразовать массив, удвоив длину его серии с номером K (определение серии дано в задании Array116). Если серий в массиве меньше K, то Одномерные массивы 61 вывести массив без изменений.

Array122. Дано целое число K ( 1) и целочисленный массив размера N. Удалить из массива серию с номером K (определение серии дано в задании Array116). Если серий в массиве меньше K, то вывести массив без изменений.

Array123. Дано целое число K ( 1) и целочисленный массив размера N. Поменять местами первую серию массива и его серию с номером K (определение серии дано в задании Array116). Если серий в массиве меньше K, то вывести массив без изменений.

Array124. Дано целое число K ( 0) и целочисленный массив размера N. Поменять местами последнюю серию массива и его серию с номером K (определение серии дано в задании Array116). Если серий в массиве меньше K, то вывести массив без изменений.

Array125. Дано целое число L ( 1) и целочисленный массив размера N. Заменить каждую серию массива, длина которой меньше L, на один элемент с нулевым значением (определение серии дано в задании Array116).

Array126. Дано целое число L ( 0) и целочисленный массив размера N. Заменить каждую серию массива, длина которой равна L, на один элемент с нулевым значением (определение серии дано в задании Array116).

Array127. Дано целое число L ( 0) и целочисленный массив размера N. Заменить каждую серию массива, длина которой больше L, на один элемент с нулевым значением (определение серии дано в задании Array116).

Array128. Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент (определение серии дано в задании Array116).

Array129. Дан целочисленный массив размера N. Преобразовать массив, увеличив его последнюю серию наибольшей длины на один элемент (определение серии дано в задании Array116).

Array130. Дан целочисленный массив размера N. Преобразовать массив, увеличив все его серии наибольшей длины на один элемент (определение серии дано в задании Array116). Множества точек на плоскости Для хранения данных о каждом наборе точек следует использовать по два массива: первый массив для хранения абсцисс, второй – для хранения ординат. Можно также использовать массив записей с двумя полями (см. задание 62

Param64).

Array131. Дано множество A из N точек на плоскости и точка B (точки заданы своими координатами x, y). Найти точку из множества A, наиболее близкую к точке B. Расстояние R между точками с координатами (x1, y1) и (x2, y2) вычисляется по формуле: R = (x2 − x1)2 + (y2 − y1)2 .

Array132. Дано множество A из N точек (точки заданы своими координатами x, y). Среди всех точек этого множества, лежащих во второй четверти, найти точку, наиболее удаленную от начала координат. Если таких точек нет, то вывести точку с нулевыми координатами.

Array133. Дано множество A из N точек (точки заданы своими координатами x, y). Среди всех точек этого множества, лежащих в первой или третьей четверти, найти точку, наиболее близкую к началу координат. Если таких точек нет, то вывести точку с нулевыми координатами.

Array134. Дано множество A из N точек (точки заданы своими координатами x, y). Найти пару точек этого множества с максимальным расстоянием между ними и само это расстояние (точки выводятся в том же порядке, в котором они перечислены при задании множества A).

Array135. Даны множества A и B, состоящие соответственно из N 1 и N 2 точек (точки заданы своими координатами x, y). Найти минимальное расстояние между точками этих множеств и сами точки, расположенные на этом расстоянии (вначале выводится точка из множества A, затем точка из множества B).

Array136. Дано множество A из N точек (N 2, точки заданы своими координатами x, y). Найти такую точку из данного множества, сумма расстояний от которой до остальных его точек минимальна, и саму эту сумму.

Array137. Дано множество A из N точек (N 2, точки заданы своими координатами x, y). Найти наибольший периметр треугольника, вершины которого принадлежат различным точкам множества A, и сами эти точки (точки выводятся в том же порядке, в котором они перечислены при задании множества A).

Array138. Дано множество A из N точек (N 2, точки заданы своими координатами x, y). Найти наименьший периметр треугольника, вершины которого принадлежат различным точкам множества A, и сами эти точки (точки выводятся в том же порядке, в котором они перечислены при задании множества A). Двумерные массивы (матрицы) 63

Array139. Дано множество A из N точек с целочисленными координатами x, y. Порядок на координатной плоскости определим следующим образом: (x1, y1)

Array140. Дано множество A из N точек с целочисленными координатами x, y. Порядок на координатной плоскости определим следующим образом: (x1, y1)

Двумерные массивы (матрицы) Условие вида «дана матрица размера M × N» означает, что вначале дается фактический размер двумерного массива-матрицы (количество строк M и количество столбцов N), а затем приводятся элементы этого массива (количество элементов равно M•N). Если в задании явно не указывается, какие значения могут принимать размеры исходной матрицы, то предполагается, что и число строк, и число столбцов может изменяться в пределах от 2 до 10. Начальные значения как первого, так и второго индекса двумерного массива-матрицы всегда считаются равными 1. Ввод и вывод элементов матрицы осуществляются по строкам. Квадратной матрицей порядка M называется двумерный массив-матрица размера M × M. Если в задании, связанном с созданием или преобразованием матрицы, не описан результирующий набор данных, то предполагается, что этим набором является созданная (преобразованная) матрица, и необходимо вывести все ее элементы. Формирование матрицы и вывод ее элементов В заданиях на формирование матрицы предполагается, что размер результирующей матрицы не превосходит 10 × 10. 64

Matrix1. Даны целые положительные числа M и N. Сформировать целочисленную матрицу размера M × N, у которой все элементы I-й строки имеют значение 10•I (I = 1, . . ., M).

Matrix2. Даны целые положительные числа M и N. Сформировать целочисленную матрицу размера M × N, у которой все элементы J -го столбца имеют значение 5•J (J = 1, . . ., N).

Matrix3. Даны целые положительные числа M, N и набор из M чисел. Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора (в том же порядке).

Matrix4. Даны целые положительные числа M, N и набор из N чисел. Сформировать матрицу размера M × N, у которой в каждой строке содержатся все числа из исходного набора (в том же порядке).

Matrix5. Даны целые положительные числа M, N, число D и набор из M чисел. Сформировать матрицу размера M × N, у которой первый столбец совпадает с исходным набором чисел, а элементы каждого следующего столбца равны сумме соответствующего элемента предыдущего столбца и числа D (в результате каждая строка матрицы будет содержать элементы арифметической прогрессии).

Matrix6. Даны целые положительные числа M, N, число D и набор из N чисел. Сформировать матрицу размера M × N, у которой первая строка совпадает с исходным набором чисел, а элементы каждой следующей строки равны соответствующему элементу предыдущей строки, умноженному на D (в результате каждый столбец матрицы будет содержать элементы геометрической прогрессии).

Matrix7. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Вывести элементы K-й строки данной матрицы.

Matrix8. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Вывести элементы K-го столбца данной матрицы.

Matrix9. Дана матрица размера M × N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, . . .). Вывод элементов производить по строкам, условный оператор не использовать.

Matrix10. Дана матрица размера M × N. Вывести ее элементы, расположенные в столбцах с нечетными номерами (1, 3, . . .). Вывод элементов производить по столбцам, условный оператор не использовать.

Matrix11. Дана матрица размера M × N. Вывести ее элементы в следующем порядке: первая строка слева направо, вторая строка справа налево, третья Двумерные массивы (матрицы) 65 строка слева направо, четвертая строка справа налево и т. д.

Matrix12. Дана матрица размера M × N. Вывести ее элементы в следующем порядке: первый столбец сверху вниз, второй столбец снизу вверх, третий столбец сверху вниз, четвертый столбец снизу вверх и т. д.

Matrix13. Дана квадратная матрица A порядка M. Начиная с элемента A1,1, вывести ее элементы следующим образом («уголками»): все элементы первой строки; элементы последнего столбца, кроме первого (уже выведенного) элемента; оставшиеся элементы второй строки; оставшиеся элементы предпоследнего столбца и т. д.; последним выводится элемент AM,1 .

Matrix14. Дана квадратная матрица A порядка M. Начиная с элемента A1,1, вывести ее элементы следующим образом («уголками»): все элементы первого столбца; элементы последней строки, кроме первого (уже выведенного) элемента; оставшиеся элементы второго столбца; оставшиеся элементы предпоследней строки и т. д.; последним выводится элемент A1,M .

Matrix15. Дана квадратная матрица A порядка M (M – нечетное число). Начиная с элемента A1,1 и перемещаясь по часовой стрелке, вывести все ее элементы по спирали: первая строка, последний столбец, последняя строка в обратном порядке, первый столбец в обратном порядке, оставшиеся элементы второй строки и т. д.; последним выводится центральный элемент матрицы.

Matrix16. Дана квадратная матрица A порядка M (M – нечетное число). Начиная с элемента A1,1 и перемещаясь против часовой стрелки, вывести все ее элементы по спирали: первый столбец, последняя строка, последний столбец в обратном порядке, первая строка в обратном порядке, оставшиеся элементы второго столбца и т. д.; последним выводится центральный элемент матрицы. Анализ элементов матрицы

Matrix17. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Найти сумму и произведение элементов K-й строки данной матрицы.

Matrix18. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Найти сумму и произведение элементов K-го столбца данной матрицы.

Matrix19. Дана матрица размера M × N. Для каждой строки матрицы найти сумму ее элементов.

Matrix20. Дана матрица размера M × N. Для каждого столбца матрицы найти произведение его элементов. 66

Matrix21. Дана матрица размера M × N. Для каждой строки матрицы с нечетным номером (1, 3, . . .) найти среднее арифметическое ее элементов. Условный оператор не использовать.

Matrix22. Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, . . .) найти сумму его элементов. Условный оператор не использовать.

Matrix23. Дана матрица размера M × N. В каждой строке матрицы найти минимальный элемент.

Matrix24. Дана матрица размера M × N. В каждом столбце матрицы найти максимальный элемент.

Matrix25. Дана матрица размера M × N. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.

Matrix26. Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.

Matrix27. Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк.

Matrix28. Дана матрица размера M × N. Найти минимальный среди максимальных элементов ее столбцов.

Matrix29. Дана матрица размера M × N. В каждой ее строке найти количество элементов, меньших среднего арифметического всех элементов этой строки.

Matrix30. Дана матрица размера M × N. В каждом ее столбце найти количество элементов, больших среднего арифметического всех элементов этого столбца.

Matrix31. Дана матрица размера M × N. Найти номера строки и столбца для элемента матрицы, наиболее близкого к среднему значению всех ее элементов.

Matrix32. Дана целочисленная матрица размера M × N. Найти номер первой из ее строк, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких строк нет, то вывести 0.

Matrix33. Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Двумерные массивы (матрицы) 67 Если таких столбцов нет, то вывести 0.

Matrix34. Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих только четные числа. Если таких строк нет, то вывести 0.

Matrix35. Дана целочисленная матрица размера M × N. Найти номер первого из ее столбцов, содержащих только нечетные числа. Если таких столбцов нет, то вывести 0.

Matrix36. Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.

Matrix37. Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные столбцы матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих столбцах. Найти количество столбцов, похожих на последний столбец данной матрицы.

Matrix38. Дана целочисленная матрица размера M × N. Найти количество ее строк, все элементы которых различны.

Matrix39. Дана целочисленная матрица размера M × N. Найти количество ее столбцов, все элементы которых различны.

Matrix40. Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих максимальное количество одинаковых элементов.

Matrix41. Дана целочисленная матрица размера M × N. Найти номер первого из ее столбцов, содержащих максимальное количество одинаковых элементов.

Matrix42. Дана матрица размера M × N. Найти количество ее строк, элементы которых упорядочены по возрастанию.

Matrix43. Дана матрица размера M × N. Найти количество ее столбцов, элементы которых упорядочены по убыванию.

Matrix44. Дана матрица размера M × N. Найти минимальный среди элементов тех строк, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные строки в матрице отсутствуют, то вывести 0.

Matrix45. Дана матрица размера M × N. Найти максимальный среди элементов тех столбцов, которые упорядочены либо по возрастанию, либо 68 по убыванию. Если упорядоченные столбцы в матрице отсутствуют, то вывести 0.

Matrix46. Дана целочисленная матрица размера M × N. Найти элемент, являющийся максимальным в своей строке и минимальным в своем столбце. Если такой элемент отсутствует, то вывести 0. Преобразование матрицы При выполнении заданий из данного пункта (за исключением Matrix74 и Matrix75) не следует использовать вспомогательные двумерные массивыматрицы.

Matrix47. Дана матрица размера M × N и целые числа K 1 и K 2 (1 ≤ K 1

Matrix48. Дана матрица размера M × N и целые числа K 1 и K 2 (1 ≤ K 1

Matrix49. Дана матрица размера M × N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.

Matrix50. Дана матрица размера M × N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждом столбце.

Matrix51. Дана матрица размера M × N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.

Matrix52. Дана матрица размера M × N. Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы.

Matrix53. Дана матрица размера M × N. Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix54. Дана матрица размера M × N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix55. Дана матрица размера M × N (M – четное число). Поменять местами верхнюю и нижнюю половины матрицы.

Matrix56. Дана матрица размера M × N (N – четное число). Поменять местами левую и правую половины матрицы. Двумерные массивы (матрицы) 69

Matrix57. Дана матрица размера M × N (M и N – четные числа). Поменять местами левую верхнюю и правую нижнюю четверти матрицы.

Matrix58. Дана матрица размера M × N (M и N – четные числа). Поменять местами левую нижнюю и правую верхнюю четверти матрицы.

Matrix59. Дана матрица размера M × N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и M, 2 и M − 1 и т. д.).

Matrix60. Дана матрица размера M × N. Зеркально отразить ее элементы относительно вертикальной оси симметрии матрицы (при этом поменяются местами столбцы с номерами 1 и N, 2 и N − 1 и т. д.).

Matrix61. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Удалить строку матрицы с номером K.

Matrix62. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Удалить столбец матрицы с номером K.

Matrix63. Дана матрица размера M × N. Удалить строку, содержащую минимальный элемент матрицы.

Matrix64. Дана матрица размера M × N. Удалить столбец, содержащий максимальный элемент матрицы.

Matrix65. Дана матрица размера M × N. Удалить ее первый столбец, содержащий только положительные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix66. Дана матрица размера M × N. Удалить ее последний столбец, содержащий только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix67. Дана матрица размера M × N, содержащая как положительные, так и отрицательные элементы. Удалить все ее столбцы, содержащие только положительные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix68. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Перед строкой матрицы с номером K вставить строку из нулей.

Matrix69. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). После столбца матрицы с номером K вставить столбец из единиц.

Matrix70. Дана матрица размера M × N. Продублировать строку матрицы, содержащую ее максимальный элемент.

Matrix71. Дана матрица размера M × N. Продублировать столбец матрицы, содержащий ее минимальный элемент. 70

Matrix72. Дана матрица размера M × N. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix73. Дана матрица размера M × N. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.

Matrix74. Дана матрица размера M × N. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.

Matrix75. Дана матрица размера M × N. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальныx максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.

Matrix76. Дана матрица размера M × N. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.

Matrix77. Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.

Matrix78. Дана матрица размера M × N. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.

Matrix79. Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их максимальные элементы образовывали возрастающую последовательность. Диагонали квадратной матрицы

Matrix80. Дана квадратная матрица A порядка M. Найти сумму элементов ее главной диагонали, то есть диагонали, содержащей следующие элементы: A1,1, A2,2, A3,3, . . ., AM,M .

Matrix81. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов ее побочной диагонали, то есть диагонали, содержащей следующие элементы: A1,M, A2,M −1, A3,M −2, . . ., AM,1 .

Matrix82 . Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M). Двумерные массивы (матрицы) 71

Matrix83. Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1.

Matrix84. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M).

Matrix85. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1).

Matrix86. Дана квадратная матрица A порядка M. Найти минимальный элемент для каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M).

Matrix87. Дана квадратная матрица A порядка M. Найти максимальный элемент для каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1).

Matrix88. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие ниже главной диагонали. Условный оператор не использовать.

Matrix89. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие выше побочной диагонали. Условный оператор не использовать.

Matrix90. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие на побочной диагонали и ниже нее. Условный оператор не использовать.

Matrix91. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие на главной диагонали и выше нее. Условный оператор не использовать.

Matrix92. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и выше побочной диагонали. Условный оператор не использовать.

Matrix93. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и ниже побочной диагонали. Условный оператор не использовать.

Matrix94. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие одновременно ниже главной диагонали (включая эту диагональ) и выше побочной диагонали (также включая эту диагональ). Условный оператор не использовать.

Matrix95. Дана квадратная матрица порядка M. Обнулить элементы матрицы, 72 лежащие одновременно ниже главной диагонали (включая эту диагональ) и ниже побочной диагонали (также включая эту диагональ). Условный оператор не использовать.

Matrix96. Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно главной диагонали (при этом элементы главной диагонали останутся на прежнем месте, элемент A1,2 поменяется местами с A2,1, элемент A1,3 – с A3,1 и т. д.). Вспомогательную матрицу не использовать.

Matrix97. Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно побочной диагонали (при этом элементы побочной диагонали останутся на прежнем месте, элемент A1,1 поменяется местами с AM,M, элемент A1,2 – с AM −1,M и т. д.). Вспомогательную матрицу не использовать.

Matrix98. Дана квадратная матрица A порядка M. Повернуть ее на угол 180 (при этом элемент A1,1 поменяется местами с AM,M, элемент A1,2 – с AM,M −1 и т. д.). Вспомогательную матрицу не использовать.

Matrix99. Дана квадратная матрица A порядка M. Повернуть ее на угол 90в положительном направлении, то есть против часовой стрелки (при этом элемент A1,1 перейдет в AM,1, элемент AM,1 – в AM,M и т. д.). Вспомогательную матрицу не использовать.

Matrix100. Дана квадратная матрица A порядка M. Повернуть ее на угол 90в отрицательном направлении, то есть по часовой стрелке (при этом элемент A1,1 перейдет в A1,M, элемент A1,M – в AM,M и т. д.). Вспомогательную матрицу не использовать. Символы и строки При выполнении заданий на обработку русских букв можно считать, что буква «ё» в исходных строковых данных отсутствует. Символы и их коды. Формирование строк

String1. Дан символ C. Вывести его код (то есть номер в кодовой таблице).

String2. Дано целое число N (32 ≤ N ≤ 126). Вывести символ с кодом, равным N. Символы и строки 73

String3. Дан символ C. Вывести два символа, первый из которых предшествует символу C в кодовой таблице, а второй следует за символом C.

String4. Дано целое число N (1 ≤ N ≤ 26). Вывести N первых прописных (то есть заглавных) букв латинского алфавита.

String5. Дано целое число N (1 ≤ N ≤ 26). Вывести N последних строчных (то есть маленьких) букв латинского алфавита в обратном порядке (начиная с буквы «z»).

String6. Дан символ C, изображающий цифру или букву (латинскую или русскую). Если C изображает цифру, то вывести строку «digit», если латинскую букву – вывести строку «lat», если русскую – вывести строку «rus».

String7. Дана непустая строка. Вывести коды ее первого и последнего символа.

String8. Дано целое число N ( 0) и символ C. Вывести строку длины N, которая состоит из символов C.

String9. Дано четное число N ( 0) и символы C 1 и C 2 . Вывести строку длины N, которая состоит из чередующихся символов C 1 и C 2, начиная с C1.

String10. Дана строка. Вывести строку, содержащую те же символы, но расположенные в обратном порядке.

String11. Дана непустая строка S. Вывести строку, содержащую символы строки S, между которыми вставлено по одному пробелу.

String12. Дана непустая строка S и целое число N ( 0). Вывести строку, содержащую символы строки S, между которыми вставлено по N символов «*» (звездочка). Посимвольный анализ и преобразование строк. Строки и числа

String13. Дана строка. Подсчитать количество содержащихся в ней цифр.

String14. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.

String15. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.

String16. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.

String17. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные. 74

String18. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные – в строчные.

String19. Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) – вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.».

String20. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева направо).

String21. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа налево).

String22. Дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа.

String23. Дана строка, изображающая арифметическое выражение вида «±±. . .±», где на месте знака операции «±» находится символ «+» или «−» (например, «4+7−2−8»). Вывести значение данного выражения (целое число).

String24. Дана строка, изображающая двоичную запись целого положительного числа. Вывести строку, изображающую десятичную запись этого же числа.

String25. Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа. Обработка строк с помощью стандартных функций. Поиск и замена В заданиях, связанных с поиском и заменой подстрок, можно считать, что исходная строка не содержит перекрывающихся вхождений требуемых подстрок. В заданиях String32, String35 и String38, кроме этого, можно также считать, что удаление (в String32 и String35) или замена (в String38) любого вхождения подстроки не приведет к появлению в строке новых вхождений данной подстроки.

String26. Дано целое число N ( 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то Символы и строки 75 отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы «.» (точка).

String27. Даны целые положительные числа N 1 и N 2 и строки S 1 и S 2 . Получить из этих строк новую строку, содержащую первые N 1 символов строки S 1 и последние N 2 символов строки S 2 (в указанном порядке).

String28. Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S.

String29. Дан символ C и строки S, S 0 . Перед каждым вхождением символа C в строку S вставить строку S 0 .

String30. Дан символ C и строки S, S 0 . После каждого вхождения символа C в строку S вставить строку S 0 .

String31. Даны строки S и S 0 . Проверить, содержится ли строка S 0 в строке S. Если содержится, то вывести TRUE, если не содержится, то вывести FALSE.

String32. Даны строки S и S 0 . Найти количество вхождений строки S 0 в строку S.

String33. Даны строки S и S 0 . Удалить из строки S первую подстроку, совпадающую с S 0 . Если совпадающих подстрок нет, то вывести строку S без изменений.

String34. Даны строки S и S 0 . Удалить из строки S последнюю подстроку, совпадающую с S 0 . Если совпадающих подстрок нет, то вывести строку S без изменений.

String35. Даны строки S и S 0 . Удалить из строки S все подстроки, совпадающие с S 0 . Если совпадающих подстрок нет, то вывести строку S без изменений.

String36. Даны строки S, S 1 и S 2 . Заменить в строке S первое вхождение строки S 1 на строку S 2 .

String37. Даны строки S, S 1 и S 2 . Заменить в строке S последнее вхождение строки S 1 на строку S 2 .

String38. Даны строки S, S 1 и S 2 . Заменить в строке S все вхождения строки S 1 на строку S 2 .

String39. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку.

String40. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом 76 исходной строки. Если строка содержит только один пробел, то вывести пустую строку. Анализ и преобразование слов в строке Во всех заданиях данного пункта предполагается, что исходные строки являются непустыми и не содержат начальных и конечных пробелов.

String41. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти количество слов в строке.

String42. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые начинаются и заканчиваются одной и той же буквой.

String43. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат хотя бы одну букву «А».

String44. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат ровно три буквы «А».

String45. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти длину самого короткого слова.

String46. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти длину самого длинного слова.

String47. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним символом «.» (точка). В конце строки точку не ставить.

String48. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Преобразовать каждое слово в строке, заменив в нем все последующие вхождения его первой буквы на символ «.» (точка). Например, слово «МИНИМУМ» надо преобразовать в «МИНИ.У.». Количество пробелов между словами не изменять.

String49. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Преобразовать каждое слово в строке, заменив в нем все предыдущие вхождения его последней буквы на символ «.» (точка). Например, слово «МИНИМУМ» Символы и строки 77 надо преобразовать в «.ИНИ.УМ». Количество пробелов между словами не изменять.

String50. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в обратном порядке.

String51. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в алфавитном порядке.

String52. Дана строка-предложение на русском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки. Слова, не начинающиеся с буквы, не изменять.

String53. Дана строка-предложение на русском языке. Подсчитать количество содержащихся в строке знаков препинания.

String54. Дана строка-предложение на русском языке. Подсчитать количество содержащихся в строке гласных букв.

String55. Дана строка-предложение на русском языке. Вывести самое длинное слово в предложении. Если таких слов несколько, то вывести первое из них. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки.

String56. Дана строка-предложение на русском языке. Вывести самое короткое слово в предложении. Если таких слов несколько, то вывести последнее из них. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки.

String57. Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между словами был ровно один пробел. Дополнительные задания на обработку строк

String58. Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой строки имя файла (без расширения).

String59. Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой 78 строки расширение файла (без предшествующей точки).

String60. Дана строка, содержащая полное имя файла. Выделить из этой строки название первого каталога (без символов «»). Если файл содержится в корневом каталоге, то вывести символ «».

String61. Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего каталога (без символов «»). Если файл содержится в корневом каталоге, то вывести символ «».

String62. Дана строка-предложение на русском языке. Зашифровать ее, выполнив циклическую замену каждой буквы на следующую за ней в алфавите и сохранив при этом регистр букв («А» перейдет в «Б», «а» – в «б», «Б» – в «В», «я» – в «а» и т. д.). Букву «ё» в алфавите не учитывать («е» должна переходить в «ж»). Знаки препинания и пробелы не изменять.

String63. Дана строка-предложение на русском языке и число K (0

String64. Дано зашифрованное предложение на русском языке (способ шифрования описан в задании String63) и кодовое смещение K (0

String65. Дано зашифрованное предложение на русском языке (способ шифрования описан в задании String63) и его расшифрованный первый символ C. Найти кодовое смещение K и расшифровать предложение.

String66. Дана строка-предложение. Зашифровать ее, поместив вначале все символы, расположенные на четных позициях строки, а затем, в обратном порядке, все символы, расположенные на нечетных позициях (например, строка «Программа» превратится в «ргамамроП»).

String67. Дано предложение, зашифрованное по правилу, описанному в задании String66. Расшифровать это предложение.

String68. Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по алфавиту, то вывести 0; в противном случае вывести номер первого символа строки, нарушающего алфавитный порядок.

String69. Дана строка, содержащая латинские буквы и круглые скобки. Если скобки расставлены правильно (то есть каждой открывающей соотДвоичные файлы 79 ветствует одна закрывающая), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная закрывающая скобка, или, если закрывающих скобок не хватает, число −1.

String70. Дана строка, содержащая латинские буквы и скобки трех видов: «()», «[]», «{}». Если скобки расставлены правильно (то есть каждой открывающей соответствует закрывающая скобка того же вида), то вывести число 0. В противном случае вывести или номер позиции, в которой расположена первая ошибочная скобка, или, если закрывающих скобок не хватает, число −1. Двоичные файлы Условие вида «дан файл (целых чисел, вещественных чисел и т. д.)» означает, что в наборе исходных данных указано имя данного файла (текстовая строка), а сам исходный файл существует и находится в текущем каталоге. Если существование исходных файлов требуется проверять в ходе выполнения задания, то это особо оговаривается в формулировке задания. Элементы исходных файлов следует считывать с помощью стандартных процедур используемого языка программирования. Если в задании требуется создать новый файл, то имя создаваемого файла также входит в набор исходных данных и обычно является последним элементом этого набора. Записывать элементы в создаваемые (или модифицируемые) файлы следует с помощью стандартных процедур используемого языка программирования. Под размером типизированного файла всегда подразумевается количество содержащихся в нем элементов указанного типа (а не количество байтов, как это принято в операционной системе). В заданиях предполагается, что файловые элементы нумеруются от 1, поэтому в языке Pascal для перехода к K-му элементу файла F необходимо использовать процедуру Seek(F, K − 1). Если о минимальном размере исходного файла в задании ничего не сказано, то предполагается, что он равен 2 (то есть файл содержит по крайней мере два элемента). Максимальный размер исходных файлов не устанавливается, поэтому при решении заданий не следует использовать вспомогательные массивы, содержащие все элементы исходных файлов, однако допускается использование вспомогательных файлов. 80 Основные операции с двоичными файлами Создание файла, ввод и вывод его элементов

File1. Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести TRUE. Если файл с именем S создать нельзя, то вывести FALSE.

File2. Дано имя файла и целое число N ( 1). Создать файл целых чисел с данным именем и записать в него N первых положительных четных чисел (2, 4, . . .).

File3. Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D: A, A + D, A + 2•D, A + 3•D, . . . .

File4. Даны имена четырех файлов. Найти количество файлов с указанными именами, которые имеются в текущем каталоге.

File5. Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести −1.

File6. Дано целое число K и файл, содержащий неотрицательные целые числа. Вывести K-й элемент файла (элементы нумеруются от 1). Если такой элемент отсутствует, то вывести −1.

File7. Дан файл целых чисел, содержащий не менее четырех элементов. Вывести первый, второй, предпоследний и последний элементы данного файла.

File8. Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него начальный и конечный элементы существующего файла (в указанном порядке).

File9. Даны имена двух файлов вещественных чисел. Известно, что один из них (не обязательно первый) существует и является непустым, а другой в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него конечный и начальный элементы существующего файла (в указанном порядке).

File10. Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке.

File11. Дан файл вещественных чисел. Создать два новых файла, первый из которых содержит элементы исходного файла с нечетными номерами Двоичные файлы 81 (1, 3, . . .), а второй – с четными (2, 4, . . .).

File12. Дан файл целых чисел. Создать два новых файла, первый из которых содержит четные числа из исходного файла, а второй – нечетные (в том же порядке). Если четные или нечетные числа в исходном файле отсутствуют, то соответствующий результирующий файл оставить пустым.

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

File14. Дан файл вещественных чисел. Найти среднее арифметическое его элементов.

File15. Дан файл вещественных чисел. Найти сумму его элементов с четными номерами.

File16. Дан файл целых чисел. Найти количество содержащихся в нем серий (то есть наборов последовательно расположенных одинаковых элементов). Например, для файла с элементами 1, 5, 5, 5, 4, 4, 5 результат равен 4.

File17. Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла (серией называется набор последовательно расположенных одинаковых элементов, а длиной серии – количество этих элементов). Например, для исходного файла с элементами 1, 5, 5, 5, 4, 4, 5 содержимое результирующего файла должно быть следующим: 1, 3, 2, 1.

File18. Дан файл вещественных чисел. Найти его первый локальный минимум (локальным минимумом называется элемент, который меньше своих соседей).

File19. Дан файл вещественных чисел. Найти его последний локальный максимум (локальным максимумом называется элемент, который больше своих соседей).

File20. Дан файл вещественных чисел. Найти общее количество его локальных экстремумов, то есть локальных минимумов и локальных максимумов (определения локального минимума и локального максимума даны в заданиях File18 и File19).

File21. Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке 82 возрастания (определение локального максимума дано в задании File19).

File22. Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания (определение локального экстремума дано в задании File20).

File23. Дан файл вещественных чисел. Создать файл целых чисел, содержащий длины всех убывающих последовательностей элементов исходного файла. Например, для исходного файла с элементами 1.7, 4.5, 3.4, 2.2, 8.5, 1.2 содержимое результирующего файла должно быть следующим: 3, 2.

File24. Дан файл вещественных чисел. Создать файл целых чисел, содержащий длины всех монотонных последовательностей элементов исходного файла. Например, для исходного файла с элементами 1.7, 4.5, 3.4, 2.2, 8.5, 1.2 содержимое результирующего файла должно быть следующим: 2, 3, 2, 2. Преобразование файла

File25. Дан файл вещественных чисел. Заменить в нем все элементы на их квадраты.

File26. Дан файл вещественных чисел. Поменять в нем местами минимальный и максимальный элементы.

File27. Дан файл целых чисел с элементами A1, A2, . . ., AN (N – количество элементов в файле). Заменить исходное расположение его элементов на следующее: A1, AN, A2, AN −1, A3, . . . .

File28. Дан файл вещественных чисел. Заменить в файле каждый элемент, кроме начального и конечного, на его среднее арифметическое с предыдущим и последующим элементом.

File29. Дан файл целых чисел, содержащий более 50 элементов. Уменьшить его размер до 50 элементов, удалив из файла необходимое количество конечных элементов.

File30. Дан файл целых чисел, содержащий четное количество элементов. Удалить из данного файла вторую половину элементов.

File31. Дан файл целых чисел, содержащий более 50 элементов. Уменьшить его размер до 50 элементов, удалив из файла необходимое количество начальных элементов. Двоичные файлы 83

File32. Дан файл целых чисел, содержащий четное количество элементов. Удалить из данного файла первую половину элементов.

File33. Дан файл целых чисел. Удалить из него все элементы с четными номерами.

File34. Дан файл целых чисел. Удалить из него все отрицательные числа.

File35. Дан файл целых чисел, содержащий менее 50 элементов. Увеличить его размер до 50 элементов, записав в начало файла необходимое количество нулей.

File36. Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в том же порядке).

File37. Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в обратном порядке).

File38. Дан файл целых чисел. Продублировать в нем все элементы с нечетными номерами.

File39. Дан файл целых чисел. Продублировать в нем все числа, принадлежащие диапазону 5–10.

File40. Дан файл целых чисел. Заменить в нем каждый элемент с четным номером на два нуля.

File41. Дан файл целых чисел. Заменить в нем каждое положительное число на три нуля. Обработка нетипизированных двоичных файлов

File42. Даны два файла произвольного типа. Поменять местами их содержимое.

File43. Дан файл произвольного типа. Создать его копию с новым именем.

File44. Даны три файла одного и того же типа, но разного размера. Заменить содержимое самого длинного файла на содержимое самого короткого.

File45. Даны три файла одного и того же типа, но разного размера. Заменить содержимое самого короткого файла на содержимое самого длинного.

File46. Дана строка S 0, целое число N (≤ 4) и N файлов одного и того же типа с именами S 1, . . ., S N . Объединить содержимое этих файлов (в указанном порядке) в новом файле с именем S 0 .

File47. Даны два файла одного и того же типа. Добавить к первому файлу содержимое второго файла, а ко второму файлу – содержимое первого. 84 Работа с несколькими числовыми файлами. Файлы-архивы

File48. Даны три файла целых чисел одинакового размера с именами S A, S B, S C и строка S D . Создать новый файл с именем S D, в котором чередовались бы элементы исходных файлов с одним и тем же номером: A1, B1, C 1, A2, B2, C 2, . . . .

File49. Даны четыре файла целых чисел разного размера с именами S A, S B, S C, S D и строка S E . Создать новый файл с именем S E, в котором чередовались бы элементы исходных файлов с одним и тем же номером (как в задании

File48). «Лишние» элементы более длинных файлов в результирующий файл не записывать.

File50. Даны два файла вещественных чисел с именами S 1 и S 2, элементы которых упорядочены по возрастанию. Объединить эти файлы в новый файл с именем S 3 так, чтобы его элементы также оказались упорядоченными по возрастанию.

File51. Даны три файла вещественных чисел с именами S 1, S 2 и S 3, элементы которых упорядочены по убыванию. Объединить эти файлы в новый файл с именем S 4 так, чтобы его элементы также оказались упорядоченными по убыванию.

File52. Дана строка S 0, целое число N (≤ 4) и N файлов целых чисел с именами S 1, . . ., S N . Объединить их содержимое в новом файле-архиве с именем S 0, используя следующий формат: в первом элементе файла-архива хранится число N, в следующих N элементах хранится размер (число элементов) каждого из исходных файлов, а затем последовательно размещаются данные из каждого исходного файла.

File53. Дана строка S, целое число N ( 0) и файл-архив целых чисел, содержащий данные из нескольких файлов в формате, описанном в задании

File52. Восстановить из файла-архива файл с номером N и сохранить его под именем S. Если файл-архив содержит данные из менее чем N файлов, то оставить результирующий файл пустым.

File54. Дана строка S и файл-архив целых чисел, содержащий данные из нескольких (не более шести) файлов в формате, описанном в задании

File52. Для каждого из файлов, содержащихся в архиве, найти среднее арифметическое всех его элементов (вещественное число) и записать найденные числа (в том же порядке) в файл вещественных чисел с именем S.

File55. Дана строка S 0, целое число N (≤ 4) и N файлов целых чисел с именами S 1, . . ., S N . Объединить их содержимое в новом файле-архиве с именем S 0, Двоичные файлы 85 последовательно записывая в него следующие данные: размер (число элементов) первого исходного файла и все элементы этого файла, размер второго исходного файла и все его элементы, . . ., размер N-го исходного файла и все его элементы.

File56. Дана строка S, целое число N ( 0) и файл-архив целых чисел, содержащий данные из нескольких файлов в формате, описанном в задании

File55. Восстановить из файла-архива файл с номером N и сохранить его под именем S. Если файл-архив содержит данные из менее чем N файлов, то оставить результирующий файл пустым.

File57. Даны строки S 1, S 2 и файл-архив целых чисел, содержащий данные из нескольких файлов в формате, описанном в задании File55. Создать новые файлы целых чисел с именами S 1 и S 2 и записать в первый из них начальные элементы всех файлов, содержащихся в архиве, а во второй – конечные элементы этих файлов (в том же порядке). Cимвольные и строковые файлы Строковым файлом называется типизированный файл, элементами которого являются текстовые строки. В системе Borland Delphi файловые переменные для строковых файлов необходимо описывать как file of ShortString; этот же тип следует указывать при описании переменных, которые используются в процедурах ввода-вывода для строковых файлов.

File58. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после первого символа пробела, включая и этот пробел.

File59. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные после последнего символа пробела, включая и этот пробел.

File60. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные перед первым символом пробела, включая и этот пробел.

File61. Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы, расположенные перед последним символом пробела, включая и этот пробел.

File62. Дан символьный файл. Упорядочить его элементы по возрастанию их кодов. 86

File63. Дано целое число K ( 0) и строковый файл. Создать два новых файла: строковый, содержащий первые K символов каждой строки исходного файла, и символьный, содержащий K-й символ каждой строки (если длина строки меньше K, то в строковый файл записывается вся строка, а в символьный файл записывается пробел).

File64. Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).

File65. Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наибольшей длины (в обратном порядке).

File66. Дан строковый файл. Создать новый строковый файл, в котором строки из исходного файла располагались бы в лексикографическом порядке, то есть по возрастанию кодов их символов, начиная с первого символа.

File67. Дан строковый файл, содержащий даты в формате «день/месяц/год», причем под день и месяц отводится по две позиции, а под год – четыре (например, «16/04/2001»). Создать два файла целых чисел, первый из которых содержит значения дней, а второй – значения месяцев для дат из исходного строкового файла (в том же порядке).

File68. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать два файла целых чисел, первый из которых содержит значения месяцев, а второй – значения лет для дат из исходного строкового файла (в обратном порядке).

File69. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, содержащий все летние даты из исходного файла (в том же порядке). Если даты с требуемым временем года в файле отсутствуют, то оставить результирующий файл пустым.

File70. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, содержащий все зимние даты из исходного файла (в обратном порядке). Если даты с требуемым временем года в файле отсутствуют, то оставить результирующий файл пустым.

File71. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Найти строку, содержащую самую раннюю весеннюю дату. Если даты с требуемым временем года в файле отсутствуют, то вывести пустую строку.

File72. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Найти строку, содержащую самую позднюю осеннюю дату. 87 Двоичные файлы Если даты с требуемым временем года в файле отсутствуют, то вывести пустую строку.

File73. Дан строковый файл, содержащий даты в формате, описанном в задании File67. Создать новый строковый файл, в котором даты из исходного файла располагались бы в порядке убывания. Использование файлов для работы с матрицами Матрицей размера M × N называется прямоугольная таблица чисел, содержащая M строк и N столбцов. Для работы с матрицами обычно используются двумерные массивы (см. задания группы Matrix). Данный пункт посвящен способам обработки матриц, хранящихся в типизированных файлах на внешних носителях (дисках). Как и в остальных заданиях на обработку файловых данных, при выполнении заданий из данного пункта не следует использовать вспомогательные массивы, содержащие все файловые элементы. В заданиях данного пункта используются дополнительные понятия теории матриц. Приведем определения этих понятий. Пусть A – матрица размера M × N. Матрица B называется транспонированной к матрице A, если она имеет размер N × M и ее элементы удовлетворяют следующему соотношению: BI,J = AJ,I, I = 1, . . ., N, J = 1, . . . M. Пусть A – матрица размера M × N, B – матрица размера N × P. Матрица C называется произведением матриц A и B (и обозначается A•B), если она имеет размер M × P и ее элементы удовлетворяют следующему соотношению: C I,J = AI,1 •B1,J + AI,2 •B2,J + . . . + A1,N •BN,J, I = 1, . . ., M, J = 1, . . . P. Квадратная матрица A называется верхнетреугольной, если все ее элементы, лежащие ниже главной диагонали, равны нулю (определение главной диагонали см. в задании Matrix80): AI,J = 0, I J. Квадратная матрица A называется нижнетреугольной, если все ее элементы, лежащие выше главной диагонали, равны нулю: AI,J = 0, I 1.

File74. Даны два целых числа I, J и файл вещественных чисел, содержащий элементы квадратной матрицы (по строкам). Вывести элемент матрицы, расположенный в I-й строке и J -м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент отсутствует, то вывести 0.

File75. Дан файл вещественных чисел, содержащий элементы квадратной матрицы (по строкам). Создать новый файл, содержащий элементы матрицы, транспонированной к исходной.

File76. Даны два файла вещественных чисел с именами S A и S B, содержащие элементы квадратных матриц A и B (по строкам). Создать новый файл с именем S C, содержащий элементы произведения A•B. Если матрицы A и B нельзя перемножать, то оставить файл S C пустым.

File77. Даны два целых числа I, J и файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Вывести элемент матрицы, расположенный в I-й строке и J -м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент отсутствует, то вывести 0.

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

File79. Даны два файла вещественных чисел с именами S A и S B, содержащие элементы прямоугольных матриц A и B (по строкам), причем первый элемент каждого файла содержит количество столбцов соответствующей матрицы. Создать файл той же структуры с именем S C, содержащий элементы произведения A•B. Если матрицы A и B нельзя перемножать, то оставить файл S C пустым.

File80. Дан файл вещественных чисел, содержащий элементы верхнетреугольной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам). Двоичные файлы 89

File81. Дан файл вещественных чисел, содержащий элементы нижнетреугольной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам).

File82. Дан файл вещественных чисел, содержащий элементы трехдиагональной матрицы (по строкам). Создать новый файл, содержащий элементы ненулевой части данной матрицы (по строкам).

File83. Даны два целых числа I, J и файл вещественных чисел, содержащий ненулевую часть верхнетреугольной матрицы (по строкам). Вывести порядок матрицы и ее элемент, расположенный в I-й строке и J -м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент находится в нулевой части матрицы, то вывести 0; если элемент отсутствует, то вывести −1.

File84. Даны два целых числа I, J и файл вещественных чисел, содержащий ненулевую часть нижнетреугольной матрицы (по строкам). Вывести порядок матрицы и ее элемент, расположенный в I-й строке и J -м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент находится в нулевой части матрицы, то вывести 0; если элемент отсутствует, то вывести −1.

File85. Даны два целых числа I, J и файл вещественных чисел, содержащий ненулевую часть трехдиагональной матрицы (по строкам). Вывести порядок матрицы и ее элемент, расположенный в I-й строке и J -м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент находится в нулевой части матрицы, то вывести 0; если элемент отсутствует, то вывести −1.

File86. Дан файл вещественных чисел, содержащий ненулевую часть верхнетреугольной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

File87. Дан файл вещественных чисел, содержащий ненулевую часть нижнетреугольной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

File88. Дан файл вещественных чисел, содержащий ненулевую часть трехдиагональной матрицы (по строкам). Создать новый файл, содержащий все элементы данной матрицы (по строкам).

File89. Даны два файла вещественных чисел с именами S A и S B, содержащие ненулевые части верхнетреугольных матриц A и B (по строкам). Создать новый файл с именем S C, содержащий ненулевую часть произ90 ведения A•B (по строкам). Если матрицы A и B нельзя перемножать, то оставить файл S C пустым.

File90. Даны два файла вещественных чисел с именами S A и S B, содержащие ненулевые части нижнетреугольных матриц A и B (по строкам). Создать новый файл с именем S C, содержащий ненулевую часть произведения A•B (по строкам). Если матрицы A и B нельзя перемножать, то оставить файл S C пустым. Текстовые файлы Условие вида «дан текстовый файл» означает, что в наборе исходных данных указано имя данного файла (текстовая строка). Все исходные файлы в заданиях данной группы считаются существующими. Элементы исходных файлов следует считывать с помощью стандартных процедур используемого языка программирования. Если в задании требуется создать новый файл, то имя создаваемого файла также входит в набор исходных данных (и, как правило, является последним элементом этого набора). Записывать элементы в создаваемые (или модифицируемые) файлы следует с помощью стандартных процедур используемого языка программирования. Максимальный размер исходных файлов не устанавливается, поэтому при решении заданий не следует использовать вспомогательные массивы, содержащие все элементы исходных файлов, однако допускается использование вспомогательных файлов. Используемые в заданиях типизированные файлы удовлетворяют условиям, которые перечислены в начале раздела «Типизированные файлы». Основные операции с текстовыми файлами

Text1. Дано имя файла и целые положительные числа N и K. Создать текстовый файл с указанным именем и записать в него N строк, каждая из которых состоит из K символов «*» (звездочка).

Text2. Дано имя файла и целое число N (0

Text3. Дано имя файла и целое число N (0

Text4. Дан текстовый файл. Вывести количество содержащихся в нем символов и строк (маркеры концов строк EOLN и конца файла EOF при подсчете количества символов не учитывать).

Text5. Дана строка S и текстовый файл. Добавить строку S в конец файла.

Text6. Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Text7. Дана строка S и текстовый файл. Добавить строку S в начало файла.

Text8. Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.

Text9. Дано целое число K и текстовый файл. Вставить пустую строку перед строкой файла с номером K. Если строки с таким номером нет, то оставить файл без изменений.

Text10. Дано целое число K и текстовый файл. Вставить пустую строку после строки файла с номером K. Если строки с таким номером нет, то оставить файл без изменений.

Text11. Дан текстовый файл. Продублировать в нем все пустые строки.

Text12. Дана строка S и текстовый файл. Заменить в файле все пустые строки на строку S.

Text13. Дан непустой текстовый файл. Удалить из него первую строку.

Text14. Дан непустой текстовый файл. Удалить из него последнюю строку.

Text15. Дано целое число K и текстовый файл. Удалить из файла строку с номером K. Если строки с таким номером нет, то оставить файл без изменений.

Text16. Дан текстовый файл. Удалить из него все пустые строки.

Text17. Даны два текстовых файла. Добавить в конец каждой строки первого файла соответствующую строку второго файла. Если второй файл короче первого, то оставшиеся строки первого файла не изменять.

Text18. Дано целое число K и текстовый файл. Удалить из каждой строки 92 файла первые K символов (если длина строки меньше K, то удалить из нее все символы).

Text19. Дан текстовый файл. Заменить в нем все прописные русские буквы на строчные, а все строчные – на прописные.

Text20. Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел.

Text21. Дан текстовый файл, содержащий более трех строк. Удалить из него последние три строки.

Text22. Дано целое число K (0

Text23. Дано целое число K (0

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

Text25. Дано целое число K и текстовый файл. Удалить из файла абзац с номером K (абзацы отделяются друг от друга одной или несколькими пустыми строками). Пустые строки, предшествующие и следующие за удаляемым абзацем, не удалять. Если абзац с данным номером отсутствует, то оставить файл без изменений.

Text26. Дан текстовый файл. Найти количество абзацев в тексте, если первая строка каждого абзаца начинается с 5 пробелов («красная строка»). Пустые строки между абзацами не учитывать.

Text27. Дано целое число K и текстовый файл. Удалить из файла абзац с номером K (абзацы выделяются с помощью красной строки – см. задание

Text26). Пустые строки между абзацами не учитывать и не удалять. Если абзац с данным номером отсутствует, то оставить файл без изменений.

Text28. Дан текстовый файл. Абзацы выделяются в нем с помощью красной строки (см. задание Text26), а пустых строк нет. Вставить между соседними абзацами по одной пустой строке (в начало и конец файла пустые строки не добавлять).

Text29. Дан текстовый файл. Вывести первое слово текста наибольшей длины. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки. Текстовые файлы 93

Text30. Дан текстовый файл. Вывести последнее слово текста наименьшей длины. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки.

Text31. Дано целое число K и текстовый файл. Создать строковый файл и записать в него все слова длины K из исходного файла. Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки. Если исходный файл не содержит слов длины K, то оставить результирующий файл пустым.

Text32. Дан символ C – прописная (заглавная) русская буква и текстовый файл. Создать строковый файл и записать в него все слова из исходного файла, начинающиеся на эту букву (прописную или строчную). Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки. Если исходный файл не содержит подходящих слов, то оставить результирующий файл пустым.

Text33. Дан символ C – строчная (маленькая) русская буква и текстовый файл. Создать строковый файл и записать в него все слова из исходного файла, содержащие хотя бы одну букву C (прописную или строчную). Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки. Если исходный файл не содержит подходящих слов, то оставить результирующий файл пустым.

Text34. Дан текстовый файл, содержащий текст, выровненный по левому краю. Выровнять текст по правому краю, добавив в начало каждой непустой строки нужное количество пробелов (ширину текста считать равной 50).

Text35. Дан текстовый файл, содержащий текст, выровненный по левому краю. Выровнять текст по центру, добавив в начало каждой непустой строки нужное количество пробелов (ширину текста считать равной 50). Строки нечетной длины перед центрированием дополнять слева пробелом.

Text36. Дан текстовый файл, содержащий текст, выровненный по правому краю. Выровнять текст по центру, удалив из каждой непустой строки половину начальных пробелов. В строках с нечетным количеством начальных пробелов перед центрированием удалять первый начальный пробел.

Text37. Дан текстовый файл, содержащий текст, выровненный по левому краю. 94 Абзацы текста разделяются одной пустой строкой. Выровнять текст по ширине (то есть и по левому, и по правому краю), увеличив в каждой непустой строке (кроме последних строк абзацев) количество пробелов между словами, начиная с последнего пробела в строке (ширину текста считать равной 50).

Text38. Дано целое число K ( 25) и текстовый файл, содержащий текст, выровненный по левому краю. Абзацы текста отделяются друг от друга одной пустой строкой. Отформатировать текст так, чтобы его ширина не превосходила K позиций, и выровнять текст по левому краю, сохранив деление на абзацы. Пробелы в конце строк удалить. Сохранить отформатированный текст в новом текстовом файле.

Text39. Дано целое число K ( 25) и текстовый файл, содержащий текст, выровненный по левому краю. Абзацы выделяются в нем с помощью красной строки (5 начальных пробелов), а пустых строк нет. Отформатировать текст так, чтобы его ширина не превосходила K позиций, и выровнять текст по левому краю, сохранив деление на абзацы. Пробелы в конце строк удалить. Сохранить отформатированный текст в новом текстовом файле. Текстовые файлы с числовой информацией В заданиях на обработку текстовых файлов с числовой информацией предполагается, что в изображениях вещественных чисел, содержащихся в текстовых файлах, дробная часть отделяется от целой части десятичной точкой.

Text40. Даны два файла целых чисел одинакового размера. Создать текстовый файл, содержащий эти числа, расположенные в два столбца шириной по 30 символов (в первом столбце содержатся числа из первого исходного файла, во втором – из второго файла). В начало и конец каждой строки текстового файла добавить разделитель «|» (код 124). Числа выравниваются по правому краю столбца.

Text41. Даны три файла целых чисел одинакового размера. Создать текстовый файл, содержащий эти числа, расположенные в три столбца шириной по 20 символов (в каждом столбце содержатся числа из соответствующего исходного файла). В начало и конец каждой строки текстового файла добавить разделитель «|» (код 124). Числа выравниваются по левому краю Текстовые файлы 95 столбца.

Text42. Даны вещественные числа A, B и целое число N. Создать текстовый √ файл, содержащий таблицу значений функции x на промежутке [A, B] с шагом (B − A)/N. Таблица состоит из двух столбцов: с аргументами x √ (10 позиций, из них 4 под дробную часть) и со значениями x (15 позиций, из них 8 под дробную часть). Столбцы выравниваются по правому краю.

Text43. Даны вещественные числа A, B и целое число N. Создать текстовый файл, содержащий таблицу значений функций sin(x) и cos(x) на промежутке [A, B] с шагом (B − A)/N. Таблица состоит из трех столбцов: с аргументами x (8 позиций, из них 4 под дробную часть) и со значениями sin(x) и cos(x) (по 12 позиций, из них 8 под дробную часть). Столбцы выравниваются по правому краю.

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

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

Text46. Дан текстовый файл, каждая строка которого содержит изображения нескольких чисел, разделенные пробелами (вещественные числа имеют ненулевую дробную часть). Создать файл вещественных чисел, содержащий (в том же порядке) все числа из исходного файла, имеющие ненулевую дробную часть.

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

Text48. Дан текстовый файл, каждая строка которого содержит изображения нескольких чисел, разделенные пробелами (вещественные числа имеют ненулевую дробную часть). Создать файл целых чисел, содержащий все целые числа из исходного файла (в том же порядке).

Text49. Дан текстовый файл и файл целых чисел. Добавить в конец каждой строки текстового файла изображение соответствующего числа из файла целых чисел. Если файл целых чисел короче текстового файла, то оставшиеся строки текстового файла не изменять. 96

Text50. Дан текстовый файл. В каждой его строке первые 30 позиций отводятся под текст, а оставшаяся часть – под вещественное число. Создать два файла: строковый файл, содержащий текстовую часть исходного файла, и файл вещественных чисел, содержащий числа из исходного файла (в том же порядке).

Text51. Дан текстовый файл, содержащий таблицу из трех столбцов вещественных чисел. Ширина столбцов таблицы и способ их выравнивания являются произвольными, специальных символов-разделителей таблица не содержит. Создать три файла вещественных чисел, каждый из которых содержит числа из соответствующего столбца таблицы (в том же порядке).

Text52. Дан текстовый файл, содержащий таблицу из трех столбцов целых чисел. В начале и в конце каждой строки таблицы, а также между ее столбцами располагается символ-разделитель. Ширина столбцов таблицы, способ их выравнивания и вид символа-разделителя являются произвольными. Создать файл целых чисел, содержащий сумму чисел из каждой строки исходной таблицы. Дополнительные задания на обработку текстовых файлов

Text53. Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле (в том же порядке).

Text54. Дан текстовый файл. Создать символьный файл, содержащий все символы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке их первого появления в тексте.

Text55. Дан текстовый файл. Создать символьный файл, содержащий все символы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке возрастания их кодов.

Text56. Дан текстовый файл. Создать символьный файл, содержащий все символы, встретившиеся в тексте, включая пробел и знаки препинания (без повторений). Символы располагать в порядке убывания их кодов.

Text57. Дан текстовый файл. Подсчитать число появлений в нем каждой строчной (то есть маленькой) русской буквы и создать строковый файл, элементы которого имеют вид «–» (например, «а–25»). Буквы, отсутствующие в тексте, в файл не включать. Строки упорядочить по возрастанию кодов букв. Составные типы данных в процедурах и функциях 97

Text58. Дан текстовый файл. Подсчитать число появлений в нем каждой строчной (то есть маленькой) русской буквы и создать строковый файл, элементы которого имеют вид «–» (например, «а–25»). Буквы, отсутствующие в тексте, в файл не включать. Строки упорядочить по убыванию числа появлений букв, а при равном числе появлений – по возрастанию кодов букв.

Text59. Дана строка S, состоящая из 10 цифр, и файл с русским текстом. Зашифровать файл, выполнив циклическую замену каждой русской буквы, стоящей на K-й позиции строки, на букву того же регистра, расположенную в алфавите на S K -м месте после шифруемой буквы (для K = 11 снова используется смещение S 1 и т. д.). Букву «ё» в алфавите не учитывать, знаки препинания и пробелы не изменять.

Text60. Дана строка и файл с русским текстом, зашифрованным по правилу, описанному в задании Text59. Данная строка представляет собой первую расшифрованную строку текста. Расшифровать остальные строки и заменить в файле зашифрованный текст на расшифрованный. Если информации для расшифровки недостаточно, то исходный файл не изменять. Составные типы данных в процедурах и функциях В каждом задании данного раздела требуется описать процедуру или функцию и затем использовать ее для обработки исходных данных. Все параметры любой функции считаются входными. Для процедур всегда указывается, какие параметры являются выходными (или одновременно входными и выходными); если о виде параметра процедуры ничего не сказано, то он считается входным. Одномерные и двумерные массивы При вводе исходного массива вначале следует ввести его размер (одно число для одномерных массивов, два числа – количество строк и столбцов – для двумерных массивов-матриц), а затем – все его элементы. Если в задании явно не указывается размер одномерного массива, являющегося параметром процедуры или функции, то предполагается, что этот размер может изменяться в пределах от 1 до 10. Для двумерных массивовматриц предполагается, что число их строк и столбцов может меняться от 1 98 до 10. Индексы начальных элементов как одномерных, так и двумерных массивов всегда считаются равными 1. При описании процедур, выполняющих преобразование массива, не следует использовать вспомогательный массив того же размера.

Param1. Описать функцию MinElem(A, N) целого типа, находящую минимальный элемент целочисленного массива A размера N. С помощью этой функции найти минимальные элементы массивов A, B, C размера N A, N B, N C соответственно.

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 размера N A, N B, N C соответственно.

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, выводя результаты каждого сглаживания. Составные типы данных в процедурах и функциях 99

Param7. Описать процедуру Smooth3(A, N), выполняющую сглаживание вещественного массива A размера N следующим образом: каждый элемент массива заменяется на его среднее арифметическое с соседними элементами (при вычислении среднего арифметического используются исходные значения соседних элементов). Массив A является входным и выходным параметром. С помощью этой процедуры выполнить пятикратное сглаживание данного массива A размера N, выводя результаты каждого сглаживания.

Param8. Описать процедуру RemoveX(A, N, X), удаляющую из целочисленного массива A размера N элементы, равные целому числу X. Массив A и число N являются входными и выходными параметрами. С помощью этой процедуры удалить числа X A, X B, X C из массивов A, B, C размера N A, N B, N C соответственно и вывести размер и содержимое полученных массивов.

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 размера N A, N B, N C соответственно и вывести размер и содержимое полученных массивов.

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 размера N A, N B, N C соответственно.

Param12. Описать процедуру SortIndex(A, N, I), формирующую для вещественного массива A размера N индексный массив I – массив целых чисел 100 того же размера, содержащий номера элементов массива A в том порядке, который соответствует возрастанию элементов массива A (сам массив A при этом не изменяется). Индексный массив I является выходным параметром. С помощью этой процедуры создать индексные массивы для массивов A, B, C размера N A, N B, N C соответственно.

Param13. Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий: наименьший элемент массива располагается на первом месте, наименьший из оставшихся элементов – на последнем, следующий по величине располагается на втором месте, следующий – на предпоследнем и т. д. (в результате график значений элементов будет напоминать холм). Массив A является входным и выходным параметром. С помощью этой процедуры преобразовать массивы A, B, C размера N A, N B, N C соответственно.

Param14. Описать процедуру Split1(A, N A, B, N B, C, N C), формирующую по вещественному массиву A размера N A два вещественных массива B и C размера N B и N C соответственно; при этом массив B содержит все элементы массива A с нечетными порядковыми номерами (1, 3, . . .), а массив C – все элементы массива A с четными номерами (2, 4, . . .). Массивы B и C и числа N B и N C являются выходными параметрами. Применить эту процедуру к данному массиву A размера N A и вывести размер и содержимое полученных массивов B и C.

Param15. Описать процедуру Split2(A, N A, B, N B, C, N C), формирующую по целочисленному массиву A размера N A два целочисленных массива B и C размера N B и N C соответственно; при этом массив B содержит все четные числа из массива A, а массив C – все нечетные числа (в том же порядке). Массивы B и C и числа N B и N C являются выходными параметрами. Применить эту процедуру к данному массиву A размера N A и вывести размер и содержимое полученных массивов B и C.

Param16. Описать процедуру ArrayToMatrRow(A, K, M, N, B), формирующую по вещественному массиву A размера K матрицу B размера M × N (матрица заполняется элементами массива A по строкам). «Лишние» элементы массива игнорируются; если элементов массива недостаточно, то оставшиеся элементы матрицы полагаются равными 0. Двумерный массив B является выходным параметром. С помощью этой процедуры на основе данного массива A размера K и целых чисел M и N сформировать матрицу B размера M × N. Составные типы данных в процедурах и функциях 101

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, K 1, K 2), осуществляющую перемену местами строк вещественной матрицы A размера M × N с 102 номерами K 1 и K 2 . Матрица A является входным и выходным параметром; если K 1 или K 2 больше M, то матрица не изменяется. Используя эту процедуру, поменять для данной матрицы A размера M × N строки с данными номерами K 1 и K 2 .

Param24. Описать процедуру SwapCol(A, M, N, K 1, K 2), осуществляющую перемену местами столбцов вещественной матрицы A размера M × N с номерами K 1 и K 2 . Матрица A является входным и выходным параметром; если K 1 или K 2 больше N, то матрица не изменяется. Используя эту процедуру, поменять для данной матрицы A размера M × N столбцы с данными номерами K 1 и K 2 .

Param25. Описать процедуру Transp(A, M), выполняющую транспонирование (то есть зеркальное отражение относительно главной диагонали) квадратной вещественной матрицы A порядка M. Матрица A является входным и выходным параметром. Используя эту процедуру, транспонировать данную матрицу A порядка M.

Param26. Описать процедуру RemoveRows(A, M, N, K 1, K 2), удаляющую из вещественной матрицы A размера M × N строки с номерами от K 1 до K 2 включительно (предполагается, что 1 M, то матрица не изменяется; если K 2 M, то удаляются строки матрицы с номерами от K 1 до M. Двумерный массив A и числа M, N являются входными и выходными параметрами. Используя процедуру RemoveRows, удалить из данной матрицы A размера M × N строки с номерами от K 1 до K 2 и вывести размер полученной матрицы и ее элементы.

Param27. Описать процедуру RemoveCols(A, M, N, K 1, K 2), удаляющую из вещественной матрицы A размера M × N столбцы с номерами от K 1 до K 2 включительно (предполагается, что 1 N, то матрица не изменяется; если K 2 N, то удаляются столбцы матрицы с номерами от K 1 до N. Двумерный массив A и числа M, N являются входными и выходными параметрами. Используя процедуру RemoveCols, удалить из данной матрицы A размера M × N столбцы с номерами от K 1 до K 2 и вывести размер полученной матрицы и ее элементы.

Param28. Описать процедуру RemoveRowCol(A, M, N, K, L), удаляющую из вещественной матрицы A размера M × N строку и столбец, которые содержат элемент AK,L (предполагается, что M 1 и N 1; если K M или L N, то матрица не изменяется). Двумерный массив A и числа M, N являются входными и выходными параметрами. Дана матрица A размера Составные типы данных в процедурах и функциях 103 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

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 и каждой из трех пар положительных целых чисел: (K 1, N 1), (K 2, N 2), (K 3, N 3).

Param37. Описать функцию PosSub(S 0, S, K, N) целого типа, возвращающую номер позиции, начиная с которой в строке S содержится первое вхождение строки S 0, причем анализируются только N символов строки S, начиная с ее K-го символа (таким образом, PosSub обеспечивает поиск в подстроке). Если K превосходит длину строки S, то возвращается 0, если длина строки меньше K + N, то анализируются все символы строки, начиная с ее K-го символа. Если в требуемой подстроке строки S вхождения S 0 отсутствуют, то функция возвращает 0. Вывести значения функции PosSub для данных строк S 0, S и каждой из трех пар положительных целых чисел: (K 1, N 1), (K 2, N 2), (K 3, N 3).

Param38. Описать функцию PosLast(S 0, S) целого типа, возвращающую номер позиции, начиная с которой в строке S содержится последнее вхождение подстроки S 0 . Считать, что перекрывающихся вхождений подстрок S 0 строка S не содержит. Если в строке S отсутствуют подстроки S 0, то функция возвращает 0. Вывести значения этой функции для пяти данных пар строк S 0 и S.

Param39. Описать функцию PosK(S 0, S, K) целого типа, возвращающую номер позиции, начиная с которой в строке S содержится K-е вхождение подстроки S 0 (K 0). Если количество вхождений S 0 в строке S меньше K, то функция возвращает 0. Считать, что перекрывающихся вхождений подстрок S 0 строка S не содержит. Вывести значения этой функции для пяти Составные типы данных в процедурах и функциях 105 данных троек: S 0, S и K.

Param40. Описать функцию WordK(S, K) строкового типа, возвращающую K-е слово строки S (словом считается набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки). Если количество слов в строке меньше K, то функция возвращает пустую строку. Используя эту функцию, выделить из данной строки S слова с данными номерами K 1, K 2, K 3 .

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 числа 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). Если строка файла является пустой, то она также нумеруется, но пробелы после номера не добавляются. Применить эту процедуру к данному файлу, Составные типы данных в процедурах и функциях 107 используя указанные значения N, K и L.

Param52. Описать процедуру RemoveLineNumbers(S), удаляющую из начала каждой строки существующего текстового файла с именем S ее порядковый номер, добавленный процедурой AddLineNumbers (см. задание

Param51), а также пробелы, отделяющие номер от последующего текста. Если строки не содержат номеров, то процедура не выполняет никаких действий. Применить эту процедуру к файлу с данным именем.

Param53. Описать процедуру SplitIntFile(S 0, K, S 1, S 2), копирующую первые K (≥ 0) элементов существующего файла целых чисел с именем S 0 в новый файл целых чисел с именем S 1, a остальные элементы – в новый файл целых чисел с именем S 2 . Один из созданных файлов может остаться пустым. Применить эту процедуру к файлу с данным именем 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

Param58. Описать процедуру DecodeText(S, K), которая дешифрует текстовый 108 файл с именем 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 к пяти данным датам. Составные типы данных в процедурах и функциях 109

Param63. Используя тип TDate и функции DaysInMonth и CheckDate (см. задания Param59−Param61), описать процедуру NextDate(D) с параметром типа TDate, которая преобразует дату D к следующей дате (если дата D является неправильной, то она не изменяется). Запись D является входным и выходным параметром. Применить процедуру NextDate к пяти данным датам.

Param64. Описать тип TPoint – запись с полями вещественного типа X и Y (координаты точки на плоскости) – и функцию Leng(A, B) вещественного типа, находящую длину отрезка AB на плоскости по координатам его концов: |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 находящую высоты 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) вещественного типа, вычисляющую значение двойного факториала Рекурсия 111 N!! = 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

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 0, 0 ≤ K ≤ N. Дано число N и пять различных значений K. Вывести числа C(N, K) вместе с количеством рекурсивных вызовов функции Combin1, потребовавшихся для их нахождения. 112

Recur7. Описать рекурсивную функцию 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 0, 0 ≤ K ≤ N. Считать, что параметр N не превосходит 20. Для уменьшения количества рекурсивных вызовов по сравнению с функцией Combin1 (см. задание Recur6) описать вспомогательный двумерный массив для хранения уже вычисленных чисел C(N, K) и обращаться к нему при выполнении функции Combin2. С помощью функции Combin2 найти числа C(N, K) для данного значения N и пяти различных значений K.

Recur8. Описать рекурсивную функцию RootK(X, K, N) вещественного типа, находящую приближенное значение корня K-й степени из числа X по формуле: Y 0 = 1, Y N +1 = Y N − (Y N − X /(Y N)K−1)/K, где Y N обозначает RootK(X, K, N) при фиксированных X и K. Параметры функции: X ( 0) – вещественное число, K ( 1) и N ( 0) – целые. С помощью функции RootK найти для данного числа X приближенные значения его корня K-й степени при шести данных значениях N.

Recur9. Описать рекурсивную функцию NOD(A, B) целого типа, находящую наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A. С помощью этой функции найти НОД(A, B), НОД(A, C), НОД(A, D), если даны числа A, B, C, D.

Recur10. Описать рекурсивную функцию DigitSum(K) целого типа, которая находит сумму цифр целого числа K, не используя оператор цикла. С помощью этой функции найти суммы цифр для пяти данных целых чисел.

Recur11. Описать рекурсивную функцию MaxElem(A, N) целого типа, которая находит максимальный элемент целочисленного массива A размера N (1 ≤ N ≤ 10), не используя оператор цикла. С помощью этой функции найти максимальные элементы массивов A, B, C размера N A, N B, N C соответственно.

Recur12. Описать рекурсивную функцию DigitCount(S) целого типа, которая находит количество цифр в строке S, не используя оператор цикла. С Рекурсия 113 помощью этой функции найти количество цифр в каждой из пяти данных строк.

Recur13. Описать рекурсивную функцию Palindrom(S) логического типа, возвращающую TRUE, если строка S является палиндромом (то есть читается одинаково слева направо и справа налево), и FALSE в противном случае. Оператор цикла в теле функции не использовать. Вывести значения функции Palindrom для пяти данных строк. Разбор выражений Во всех заданиях данного пункта предполагается, что исходные строки, определяющие выражения, не содержат пробелов. При выполнении заданий не следует использовать оператор цикла.

Recur14. Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом: ::= | + | −

Recur15 . Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом: ::= | + | − ::= | *

Recur16 . Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом: ::= | + | − ::= | * ::= | ()

Recur17 . Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом: ::= | () ::= + | − | *

Recur18 . Проверить правильность выражения, заданного в виде непустой строки S (выражение определяется по тем же правилам, что и в задании 114

Recur17). Если выражение составлено правильно, то вывести TRUE, иначе вывести FALSE.

Recur19. Проверить правильность выражения, заданного в виде непустой строки S (выражение определяется по тем же правилам, что и в задании Recur17). Если выражение составлено правильно, то вывести 0, в противном случае вывести номер первого ошибочного, лишнего или недостающего символа в строке S.

Recur20. Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом (функция M возвращает максимальный из своих параметров, а функция m – минимальный): ::= | M(,) | m(,)

Recur21 . Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» – TRUE, «F» – FALSE): ::= T | F | And(,) | Or(,)

Recur22. Вывести значение целочисленного выражения, заданного в виде строки S. Выражение определяется следующим образом (функция M возвращает максимальный из своих параметров, а функция m – минимальный): ::= | M() | m() ::= |,

Recur23. Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» – TRUE, «F» – FALSE): ::= T | F | And() | Or() ::= |,

Recur24. Вывести значение логического выражения, заданного в виде строки S. Выражение определяется следующим образом («T» – TRUE, «F» – FALSE): ::= T | F | And() | Or() | Not() ::= |, Рекурсия 115 Перебор с возвратом

Recur25. Дано дерево глубины N, каждая внутренняя вершина которого имеет K (

Recur26. Дано дерево глубины N, каждая внутренняя вершина которого имеет K (

Recur27. Дано дерево глубины N (N – четное), каждая внутренняя вершина которого имеет 2 непосредственных потомка: A с весом 1 и B с весом −1. Корень дерева C имеет вес 0. Записать в текстовый файл с данным именем все пути от корня к листьям, удовлетворяющие следующему условию: суммарный вес элементов пути равен 0. Порядок перебора путей такой же, как в задании Recur25.

Recur28. Дано дерево глубины N того же типа, что и в задании Recur27. Записать в текстовый файл с данным именем все пути от корня к листьям, удовлетворяющие следующему условию: суммарный вес элементов для любого начального отрезка пути неотрицателен. Порядок перебора путей такой же, как в задании Recur25.

Recur29. Дано дерево глубины N, каждая внутренняя вершина которого имеет 3 непосредственных потомка: A с весом 1, B с весом 0 и C с весом −1. Корень дерева D имеет вес 0. Записать в текстовый файл с данным именем все пути от корня к листьям, удовлетворяющие следующим условиям: суммарный вес элементов для любого начального отрезка пути неположителен, а суммарный вес всех элементов пути равен 0. Порядок перебора путей такой же, как в задании Recur25.

Recur30. Дано дерево глубины N того же типа, что и в задании Recur29. Записать в текстовый файл с данным именем все пути от корня к листьям, удовлетворяющие следующим условиям: никакие соседние элементы пути не обозначаются одной и той же буквой, а суммарный вес всех элементов пути равен 0. Порядок перебора путей такой же, как в задании 116

Recur25. Динамические структуры данных Данный раздел содержит описание варианта группы Dynamic, предназначенного для языков программирования Pascal и C++. Все числа, упоминаемые в заданиях данной группы, являются целыми. Все указатели имеют тип PNode и указывают на записи типа TNode. Типы PNode и TNode описаны в варианте задачника для языка Pascal следующим образом: type PNode = ^TNode; TNode = record Data: integer; Next: PNode; Prev: PNode; end; Аналогично описываются эти типы в варианте задачника для языка С++: struct TNode { int Data; TNode* Next; TNode* Prev; }; typedef TNode* PNode; Во вводных заданиях Dynamic1–Dynamic2, а также в заданиях на стек и очередь (Dynamic3–Dynamic28) при работе с записями типа TNode используются только поля Data и Next (см. задание Dynamic1); в заданиях на списки (Dynamic29–Dynamic80) используются все поля записи TNode (см. задание

Dynamic29). Так как переменные типа «указатель» предназначены для хранения адресов, в формулировках заданий слова «указатель» (на элемент данных) и «адрес» (элемента данных) используются как синонимы. Динамические структуры данных 117 В заданиях, в которых идет речь о номерах элементов списка, предполагается, что элементы списка нумеруются от 1. Для обозначения нулевого указателя в формулировках заданий используется имя nil (как в языке Pascal).

Dynamic1. Дан адрес P1 записи типа TNode, содержащей поле Data (целого типа) и поле Next (типа PNode – указателя на TNode). Эта запись связана полем Next со следующей записью того же типа. Вывести значения полей Data обеих записей, а также адрес P2 следующей записи.

Dynamic2. Дан адрес P1 записи типа TNode. Эта запись связана полем Next со следующей записью того же типа, она, в свою очередь, – со следующей, и так далее до записи, поле Next которой равно nil (таким образом, возникает цепочка связанных записей). Вывести значения полей Data для всех элементов цепочки, длину цепочки (то есть число ее элементов) и адрес ее последнего элемента. Стек В заданиях Dynamic3–Dynamic13 структура «стек» (stack) моделируется цепочкой связанных узлов-записей типа TNode (см. задание Dynamic2). Поле Next последнего элемента цепочки равно nil. Вершиной стека (top) считается первый элемент цепочки. Для доступа к стеку используется указатель на его вершину (для пустого стека данный указатель полагается равным nil). Значением элемента стека считается значение его поля Data.

Dynamic3. Дано число D и указатель P1 на вершину непустого стека. Добавить элемент со значением D в стек и вывести адрес P2 новой вершины стека.

Dynamic4. Дано число N ( 0) и набор из N чисел. Создать стек, содержащий исходные числа (последнее число будет вершиной стека), и вывести указатель на его вершину.

Dynamic5. Дан указатель P1 на вершину непустого стека. Извлечь из стека первый (верхний) элемент и вывести его значение D, а также адрес P2 новой вершины стека. Если после извлечения элемента стек окажется пустым, то положить P2 = nil. После извлечения элемента из стека освободить память, занимаемую этим элементом.

Dynamic6. Дан указатель P1 на вершину стека, содержащего не менее десяти элементов. Извлечь из стека первые девять элементов и вывести их 118 значения. Вывести также адрес новой вершины стека. После извлечения элементов из стека освобождать память, которую они занимали.

Dynamic7. Дан указатель P1 на вершину стека (если стек пуст, то P1 = nil). Извлечь из стека все элементы и вывести их значения. Вывести также количество извлеченных элементов N (для пустого стека вывести 0). После извлечения элементов из стека освобождать память, которую они занимали.

Dynamic8. Даны указатели P1 и P2 на вершины двух непустых стеков. Переместить все элементы из первого стека во второй (в результате элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному) и вывести адрес новой вершины второго стека. Операции выделения и освобождения памяти не использовать.

Dynamic9. Даны указатели P1 и P2 на вершины двух непустых стеков. Перемещать элементы из первого стека во второй, пока значение вершины первого стека не станет четным (перемещенные элементы первого стека будут располагаться во втором стеке в порядке, обратном исходному). Если в первом стеке нет элементов с четными значениями, то переместить из первого стека во второй все элементы. Вывести адреса новых вершин первого и второго стека (если первый стек окажется пустым, то вывести для него константу nil). Операции выделения и освобождения памяти не использовать.

Dynamic10. Дан указатель P1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а во второй – с нечетными (элементы в новых стеках будут располагаться в порядке, обратном исходному; один из этих стеков может оказаться пустым). Вывести адреса вершин полученных стеков (для пустого стека вывести nil). Операции выделения и освобождения памяти не использовать.

Dynamic11. Дан указатель P1 на вершину стека (если стек пуст, то P1 = nil). Также дано число N ( 0) и набор из N чисел. Описать тип TStack – запись с одним полем Top типа PNode (поле указывает на вершину стека) – и процедуру Push(S, D), которая добавляет в стек S новый элемент со значением D (S – входной и выходной параметр типа TStack, D – входной параметр целого типа). С помощью процедуры Push добавить в исходный стек данный набор чисел (последнее число будет вершиной стека) и вывести адрес новой вершины стека. Динамические структуры данных 119

Dynamic12. Дан указатель P1 на вершину стека, содержащего не менее пяти элементов. Используя тип TStack (см. задание Dynamic11), описать функцию Pop(S) целого типа, которая извлекает из стека S первый (верхний) элемент, возвращает его значение и освобождает память, которую занимал извлеченный элемент (S – входной и выходной параметр типа TStack). С помощью функции Pop извлечь из исходного стека пять элементов и вывести их значения. Вывести также указатель на новую вершину стека (если результирующий стек окажется пустым, то этот указатель должен быть равен nil).

Dynamic13. Дан указатель P1 на вершину стека. Используя тип TStack (см. задание Dynamic11), описать функции StackIsEmpty(S) логического типа (возвращает TRUE, если стек S пуст, и FALSE в противном случае) и Peek(S) целого типа (возвращает значение вершины непустого стека S, не удаляя ее из стека). В обеих функциях переменная S является входным параметром типа TStack. С помощью этих функций, а также функции Pop из задания Dynamic12, извлечь из исходного стека пять элементов (или все содержащиеся в нем элементы, если их менее пяти) и вывести их значения. Вывести также значение функции StackIsEmpty для результирующего стека и, если результирующий стек не является пустым, значение и адрес его новой вершины. Очередь В заданиях Dynamic14–Dynamic28 структура «очередь» (queue) моделируется цепочкой связанных узлов-записей типа TNode (см. задание Dynamic2). Поле Next последнего элемента цепочки равно nil. Началом очереди («головой», head) считается первый элемент цепочки, концом («хвостом», tail) – ее последний элемент. Для возможности быстрого добавления в конец очереди нового элемента удобно хранить, помимо указателя на начало очереди, также и указатель на ее конец. В случае пустой очереди указатели на ее начало и конец полагаются равными nil. Как и для стека, значением элемента очереди считается значение его поля Data.

Dynamic14. Дан набор из 10 чисел. Создать очередь, содержащую данные числа в указанном порядке (первое число будет размещаться в начале очереди, последнее – в конце), и вывести указатели P1 и P2 на начало и конец очереди. 120

Dynamic15. Дан набор из 10 чисел. Создать две очереди: первая должна содержать числа из исходного набора с нечетными номерами (1, 3, . . ., 9), а вторая – с четными (2, 4, . . ., 10); порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе. Вывести указатели на начало и конец первой, а затем второй очереди.

Dynamic16. Дан набор из 10 чисел. Создать две очереди: первая должна содержать все нечетные, а вторая – все четные числа из исходного набора (порядок чисел в каждой очереди должен совпадать с порядком чисел в исходном наборе). Вывести указатели на начало и конец первой, а затем второй очереди (одна из очередей может оказаться пустой; в этом случае вывести для нее две константы nil).

Dynamic17. Дано число D и указатели P1 и P2 на начало и конец очереди (если очередь является пустой, то P1 = P2 = nil). Добавить элемент со значением D в конец очереди и вывести новые адреса начала и конца очереди.

Dynamic18. Дано число D и указатели P1 и P2 на начало и конец очереди, содержащей не менее двух элементов. Добавить элемент со значением D в конец очереди и извлечь из очереди первый (начальный) элемент. Вывести значение извлеченного элемента и новые адреса начала и конца очереди. После извлечения элемента из очереди освободить память, занимаемую этим элементом.

Dynamic19. Дано число N ( 0) и указатели P1 и P2 на начало и конец непустой очереди. Извлечь из очереди N начальных элементов и вывести их значения (если очередь содержит менее N элементов, то извлечь все ее элементы). Вывести также новые адреса начала и конца очереди (для пустой очереди дважды вывести nil). После извлечения элементов из очереди освобождать память, которую они занимали.

Dynamic20. Даны указатели P1 и P2 на начало и конец непустой очереди. Извлекать из очереди элементы, пока значение начального элемента очереди не станет четным, и выводить значения извлеченных элементов (если очередь не содержит элементов с четными значениями, то извлечь все ее элементы). Вывести также новые адреса начала и конца очереди (для пустой очереди дважды вывести nil). После извлечения элементов из очереди освобождать память, которую они занимали.

Dynamic21. Даны две очереди; адреса начала и конца первой равны P1 и P2, а второй – P3 и P4 (если очередь является пустой, то соответствующие Динамические структуры данных 121 адреса равны nil). Переместить все элементы первой очереди (в порядке от начала к концу) в конец второй очереди и вывести новые адреса начала и конца второй очереди. Операции выделения и освобождения памяти не использовать.

Dynamic22. Дано число N ( 0) и две непустые очереди; адреса начала и конца первой равны P1 и P2, а второй – P3 и P4 . Переместить N начальных элементов первой очереди в конец второй очереди. Если первая очередь содержит менее N элементов, то переместить из первой очереди во вторую все элементы. Вывести новые адреса начала и конца первой, а затем второй очереди (для пустой очереди дважды вывести nil). Операции выделения и освобождения памяти не использовать.

Dynamic23. Даны две непустые очереди; адреса начала и конца первой равны P1 и P2, а второй – P3 и P4 . Перемещать элементы из начала первой очереди в конец второй, пока значение начального элемента первой очереди не станет четным (если первая очередь не содержит четных элементов, то переместить из первой очереди во вторую все элементы). Вывести новые адреса начала и конца первой, а затем второй очереди (для пустой очереди дважды вывести nil). Операции выделения и освобождения памяти не использовать.

Dynamic24. Даны две непустые очереди; адреса начала и конца первой равны P1 и P2, а второй – P3 и P4 . Очереди содержат одинаковое количество элементов. Объединить очереди в одну, в которой элементы исходных очередей чередуются (начиная с первого элемента первой очереди). Вывести указатели на начало и конец полученной очереди. Операции выделения и освобождения памяти не использовать.

Dynamic25. Даны две непустые очереди; адреса начала и конца первой равны P1 и P2, а второй – P3 и P4 . Элементы каждой из очередей упорядочены по возрастанию (в направлении от начала очереди к концу). Объединить очереди в одну с сохранением упорядоченности элементов. Вывести указатели на начало и конец полученной очереди. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic26. Даны указатели P1 и P2 на начало и конец очереди (если очередь является пустой, то P1 = P2 = nil). Также дано число N ( 0) и набор из N чисел. Описать тип TQueue – запись с двумя полями Head и Tail типа PNode (поля указывают на начало и конец очереди) – и процедуру Enqueue(Q, D), которая добавляет в конец очереди Q новый элемент со 122 значением D (Q – входной и выходной параметр типа TQueue, D – входной параметр целого типа). С помощью процедуры Enqueue добавить в исходную очередь данный набор чисел и вывести новые адреса ее начала и конца.

Dynamic27. Даны указатели P1 и P2 на начало и конец очереди, содержащей не менее пяти элементов. Используя тип TQueue (см. задание Dynamic26), описать функцию Dequeue(Q) целого типа, которая извлекает из очереди первый (начальный) элемент, возвращает его значение и освобождает память, занимаемую извлеченным элементом (Q – входной и выходной параметр типа TQueue). С помощью функции Dequeue извлечь из исходной очереди пять начальных элементов и вывести их значения. Вывести также адреса начала и конца результирующей очереди (если очередь окажется пустой, то эти адреса должны быть равны nil).

Dynamic28. Даны указатели P1 и P2 на начало и конец очереди. Используя тип TQueue (см. задание Dynamic26), описать функцию QueueIsEmpty(Q) логического типа, которая возвращает TRUE, если очередь Q пуста, и FALSE в противном случае (Q – входной параметр типа TQueue). Используя эту функцию для проверки состояния очереди, а также функцию Dequeue из задания Dynamic27, извлечь из исходной очереди пять начальных элементов (или все содержащиеся в ней элементы, если их менее пяти) и вывести их значения. Вывести также значение функции QueueIsEmpty для полученной очереди и новые адреса ее начала и конца. Двусвязный список

Dynamic29. Дан адрес P2 записи типа TNode, содержащей поле Data (целого типа) и поля Prev и Next (типа PNode – указателя на TNode). Эта запись связана полями Prev и Next соответственно с предыдущей и последующей записью того же типа. Вывести значения полей Data предыдущей и последующей записи, а также адреса P1 и P3 предыдущей и последующей записи.

Dynamic30. Дан указатель P1 на начало непустой цепочки элементов-записей типа TNode, связанных между собой с помощью поля Next. Используя поле Prev записи TNode, преобразовать исходную (односвязную) цепочку в двусвязную, в которой каждый элемент связан не только с последующим элементом (с помощью поля Next), но и с предыдущим (с помощью поля Prev). Поле Prev первого элемента положить равным nil. Вывести указаДинамические структуры данных 123 тель на последний элемент преобразованной цепочки. В заданиях Dynamic31–Dynamic69 структура «двусвязный список» (doubly linked list) моделируется цепочкой узлов-записей типа TNode, связанных как с предыдущим, так и с последующим узлом (см. задание Dynamic30). Поле Next последнего элемента цепочки и поле Prev первого элемента цепочки равны nil. Для доступа к любому элементу двусвязного списка достаточно иметь указатель на один из его элементов, однако для ускорения операций со списком удобно хранить три указателя: на первый элемент списка (first), на его последний элемент (last) и на текущий элемент (current). Для пустого списка все эти указатели полагаются равными nil. Как в случае стека и очереди, значением элемента списка считается значение его поля Data.

Dynamic31. Дан указатель P0 на один из элементов непустого двусвязного списка. Вывести число N – количество элементов в списке, а также указатели P1 и P2 на первый и последний элементы списка.

Dynamic32. Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в начало списка новый элемент со значением D1, а в конец – новый элемент со значением D2 . Вывести адреса первого и последнего элементов полученного списка.

Dynamic33. Дано число D и указатель P0 на один из элементов непустого двусвязного списка. Вставить перед данным элементом списка новый элемент со значением D и вывести указатель на добавленный элемент списка.

Dynamic34. Дано число D и указатель P0 на один из элементов непустого двусвязного списка. Вставить после данного элемента списка новый элемент со значением D и вывести указатель на добавленный элемент списка.

Dynamic35. Даны указатели P1 и P2 на первый и последний элементы двусвязного списка, содержащего не менее двух элементов. Продублировать в списке первый и последний элементы (новые элементы добавлять перед существующими элементами с такими же значениями) и вывести указатель на первый элемент преобразованного списка.

Dynamic36. Даны указатели P1 и P2 на первый и последний элементы двусвязного списка, содержащего не менее двух элементов. Продублировать в списке первый и последний элементы (новые элементы добавлять после существующих элементов с такими же значениями) и вывести указатель на последний элемент преобразованного списка. 124

Dynamic37. Дан указатель P1 на первый элемент непустого двусвязного списка. Продублировать в списке все элементы с нечетными номерами (новые элементы добавлять перед существующими элементами с такими же значениями) и вывести указатель на первый элемент преобразованного списка.

Dynamic38. Дан указатель P1 на первый элемент непустого двусвязного списка. Продублировать в списке все элементы с нечетными номерами (новые элементы добавлять после существующих элементов с такими же значениями) и вывести указатель на последний элемент преобразованного списка.

Dynamic39. Дан указатель P1 на первый элемент непустого двусвязного списка. Продублировать в списке все элементы с нечетными значениями (новые элементы добавлять перед существующими элементами с такими же значениями) и вывести указатель на первый элемент преобразованного списка.

Dynamic40. Дан указатель P1 на первый элемент непустого двусвязного списка. Продублировать в списке все элементы с нечетными значениями (новые элементы добавлять после существующих элементов с такими же значениями) и вывести указатель на последний элемент преобразованного списка.

Dynamic41. Дан указатель P0 на один из элементов непустого двусвязного списка. Удалить из списка данный элемент и вывести два указателя: на элемент, предшествующий удаленному, и на элемент, следующий за удаленным (один или оба этих элемента могут отсутствовать; для отсутствующих элементов выводить nil). После удаления элемента из списка освободить память, занимаемую этим элементом.

Dynamic42. Дан указатель P1 на первый элемент двусвязного списка, содержащего не менее двух элементов. Удалить из списка все элементы с нечетными номерами и вывести указатель на первый элемент преобразованного списка. После удаления элементов из списка освобождать память, которую они занимали.

Dynamic43. Дан указатель P1 на первый элемент непустого двусвязного списка. Удалить из списка все элементы с нечетными значениями и вывести указатель на первый элемент преобразованного списка (если в результате удаления элементов список окажется пустым, то вывести nil). После удаления элементов из списка освобождать память, которую они занимали. Динамические структуры данных 125

Dynamic44. Дан указатель P0 на один из элементов непустого двусвязного списка. Переместить данный элемент в конец списка и вывести указатели на первый и последний элементы преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic45. Дан указатель P0 на один из элементов непустого двусвязного списка. Переместить данный элемент в начало списка и вывести указатели на первый и последний элементы преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic46. Дано число K ( 0) и указатель P0 на один из элементов непустого двусвязного списка. Переместить в списке данный элемент на K позиций вперед (если после данного элемента находится менее K элементов, то переместить его в конец списка). Вывести указатели на первый и последний элементы преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic47. Дано число K ( 0) и указатель P0 на один из элементов непустого двусвязного списка. Переместить в списке данный элемент на K позиций назад (если перед данным элементом находится менее K элементов, то переместить его в начало списка). Вывести указатели на первый и последний элементы преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic48. Даны указатели PX и PY на два различных элемента двусвязного списка (элемент с адресом PX находится в списке перед элементом с адресом PY, но не обязательно рядом с ним). Поменять местами данные элементы и вывести указатель на первый элемент преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic49. Дан указатель P1 на первый элемент непустого двусвязного списка. Перегруппировать его элементы, переместив все элементы с нечетными номерами в конец списка (в том же порядке) и вывести указатель на первый элемент преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic50. Дан указатель P1 на первый элемент непустого двусвязного списка. Перегруппировать его элементы, переместив все элементы с нечетными значениями в конец списка (в том же порядке) и вывести указатель на 126 первый элемент преобразованного списка. Операции выделения и освобождения памяти не использовать, поля Data не изменять.

Dynamic51. Даны два непустых двусвязных списка и связанные с ними указатели: P1 и P2 указывают на первый и последний элементы первого списка, P0 – на один из элементов второго. Объединить исходные списки, поместив все элементы первого списка (в том же порядке) перед данным элементом второго списка, и вывести указатели на первый и последний элементы объединенного списка. Операции выделения и освобождения памяти не использовать.

Dynamic52. Даны два непустых двусвязных списка и связанные с ними указатели: P1 и P2 указывают на первый и последний элементы первого списка, P0 – на один из элементов второго. Объединить исходные списки, поместив все элементы первого списка (в том же порядке) после данного элемента второго списка, и вывести указатели на первый и последний элементы объединенного списка. Операции выделения и освобождения памяти не использовать.

Dynamic53. Даны указатели PX и PY на два различных элемента двусвязного списка; элемент с адресом PX находится в списке перед элементом с адресом PY, но не обязательно рядом с ним. Переместить элементы, расположенные между данными элементами (включая данные элементы), в новый список (в том же порядке). Вывести указатели на первые элементы преобразованного и нового списков. Если преобразованный список окажется пустым, то связанный с ним указатель положить равным nil. Операции выделения и освобождения памяти не использовать.

Dynamic54. Даны указатели PX и PY на два различных элемента двусвязного списка; элемент с адресом PX находится в списке перед элементом с адресом PY, но не обязательно рядом с ним. Переместить элементы, расположенные между данными элементами (не включая данные элементы), в новый список (в том же порядке). Вывести указатели на первые элементы преобразованного и нового списков. Если новый список окажется пустым, то связанный с ним указатель положить равным nil. Операции выделения и освобождения памяти не использовать.

Dynamic55. Дан указатель P1 на первый элемент непустого двусвязного списка. Преобразовать список в циклический, записав в поле Next последнего элемента списка адрес его первого элемента, а в поле Prev первого элемента – адрес последнего элемента. Вывести указатель на элемент, который Динамические структуры данных 127 был последним элементом исходного списка.

Dynamic56. Даны указатели P1 и P2 на первый и последний элементы непустого двусвязного списка, содержащего четное количество элементов. Преобразовать список в два циклических списка (см. задание Dynamic55), первый из которых содержит первую половину элементов исходного списка, а второй – вторую половину. Вывести указатели P3 и P4 на два средних элемента исходного списка (элемент с адресом P3 должен входить в первый циклический список, а элемент с адресом P4 – во второй). Операции выделения и освобождения памяти не использовать.

Dynamic57. Дано число K ( 0) и указатели P1 и P2 на первый и последний элементы непустого двусвязного списка. Осуществить циклический сдвиг элементов списка на K позиций вперед (то есть в направлении от начала к концу списка) и вывести указатели на первый и последний элементы полученного списка. Для выполнения циклического сдвига преобразовать исходный список в циклический (см. задание Dynamic55), после чего «разорвать» его в позиции, соответствующей данному значению K. Операции выделения и освобождения памяти не использовать.

Dynamic58. Дано число K ( 0) и указатели P1 и P2 на первый и последний элементы непустого двусвязного списка. Осуществить циклический сдвиг элементов списка на K позиций назад (то есть в направлении от конца к началу списка) и вывести указатели на первый и последний элементы полученного списка. Для выполнения циклического сдвига преобразовать исходный список в циклический (см. задание Dynamic55), после чего «разорвать» его в позиции, соответствующей данному значению K. Операции выделения и освобождения памяти не использовать.

Dynamic59. Даны указатели P1, P2 и P3 на первый, последний и текущий элементы двусвязного списка (если список является пустым, то P1 = P2 = P3 = nil). Также дано число N ( 0) и набор из N чисел. Описать тип TList – запись с полями First, Last и Current типа PNode (поля указывают соответственно на первый, последний и текущий элементы списка) – и процедуру InsertLast(L, D), которая добавляет новый элемент со значением D в конец списка L (L – входной и выходной параметр типа TList, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в конец исходного списка данный набор чисел (в том же порядке) и вывести новые адреса его первого, последнего и текущего элементов. 128

Dynamic60. Даны указатели P1, P2 и P3 на первый, последний и текущий элементы двусвязного списка (если список является пустым, то P1 = P2 = P3 = nil). Также дано число N ( 0) и набор из N чисел. Используя тип TList (см. задание Dynamic59), описать процедуру InsertFirst(L, D), которая добавляет новый элемент со значением D в начало списка L (L – входной и выходной параметр типа TList, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в начало исходного списка данный набор чисел (добавленные числа будут располагаться в списке в обратном порядке) и вывести новые адреса его первого, последнего и текущего элементов.

Dynamic61. Дан непустой двусвязный список, первый, последний и текущий элементы которого имеют адреса P1, P2 и P3 . Также даны пять чисел. Используя тип TList (см. задание Dynamic59), описать процедуру InsertBefore(L, D), которая вставляет новый элемент со значением D перед текущим элементом списка L (L – входной и выходной параметр типа TList, D – входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список и вывести новые адреса его первого, последнего и текущего элементов.

Dynamic62. Дан непустой двусвязный список, первый, последний и текущий элементы которого имеют адреса P1, P2 и P3 . Также даны пять чисел. Используя тип TList (см. задание Dynamic59), описать процедуру InsertAfter(L, D), которая вставляет новый элемент со значением D после текущего элемента списка L (L – входной и выходной параметр типа TList, D – входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список и вывести новые адреса его первого, последнего и текущего элементов.

Dynamic63. Дан непустой двусвязный список, первый, последний и текущий элементы которого имеют адреса P1, P2 и P3 . Используя тип TList (см. задание Dynamic59), описать процедуры ToFirst(L) (делает текущим первый элемент списка L), ToNext(L) (делает текущим в списке L следующий элемент, если он существует), SetData(L, D) (присваивает текущему элементу списка L значение D целого типа) и функцию IsLast(L) логического типа (возвращает TRUE, если текущий элемент списка L является его последним элементом, и FALSE в противном случае). Параметр L имеет тип TList; Динамические структуры данных 129 в процедурах ToFirst и ToNext он является входным и выходным. С помощью этих процедур и функций присвоить нулевые значения элементам исходного списка с нечетными номерами и вывести количество элементов в списке, а также новые адреса его первого, последнего и текущего элементов.

Dynamic64. Дан непустой двусвязный список, первый, последний и текущий элементы которого имеют адреса P1, P2 и P3 . Используя тип TList (см. задание Dynamic59), описать процедуры ToLast(L) (делает текущим последний элемент списка L), ToPrev(L) (делает текущим в списке L предыдущий элемент, если он существует) и функции GetData(L) целого типа (возвращает значение текущего элемента списка L), IsFirst(L) логического типа (возвращает TRUE, если текущий элемент списка L является его первым элементом, и FALSE в противном случае). Параметр L имеет тип TList; в процедурах ToLast и ToPrev он является входным и выходным. С помощью этих процедур и функций вывести все четные значения элементов исходного списка, просматривая список с конца. Вывести также количество элементов в списке.

Dynamic65. Даны указатели P1, P2 и P3 на первый, последний и текущий элементы двусвязного списка, содержащего не менее пяти элементов. Используя тип TList (см. задание Dynamic59), описать функцию DeleteCurrent(L) целого типа, удаляющую из списка L текущий элемент и возвращающую его значение (L – входной и выходной параметр типа TList). После удаления элемента текущим становится следующий элемент или, если следующего элемента не существует, последний элемент списка. Функция также освобождает память, занимаемую удаленным элементом. С помощью этой функции удалить из исходного списка пять элементов и вывести их значения. Вывести также новые адреса первого, последнего и текущего элементов списка (для пустого списка вывести три константы nil).

Dynamic66. Даны указатели P1, P2 и P3 на первый, последний и текущий элементы непустого двусвязного списка. Используя тип TList (см. задание Dynamic59), описать процедуру SplitList(L1, L2), которая переносит элементы списка L1 от текущего до последнего в новый список L2 (таким образом, список L1 делится на две части, причем первая часть может оказаться пустой). Параметры процедуры имеют тип TList; первый параметр является входным и выходным, второй – выходным. Текущими элемен130 тами непустых результирующих списков становятся их первые элементы. Операции выделения и освобождения памяти в процедуре не использовать. С помощью этой процедуры разбить исходный список на два и вывести адреса первого, последнего и текущего элементов полученных списков.

Dynamic67. Даны указатели на первый, последний и текущий элементы двух непустых двусвязных списков. Используя тип TList (см. задание

Dynamic59), описать процедуру AddList(L1, L2), которая добавляет все элементы из списка L1 (в том же порядке) в конец списка L2 ; в результате список L1 становится пустым. Текущим элементом списка L2 становится первый из добавленных элементов. Оба параметра процедуры имеют тип TList и являются входными и выходными. Операции выделения и освобождения памяти в процедуре не использовать. С помощью этой процедуры добавить первый из исходных списков в конец второго и вывести адреса первого, последнего и текущего элементов объединенного списка.

Dynamic68. Даны указатели на первый, последний и текущий элементы двух непустых двусвязных списков. Используя тип TList (см. задание

Dynamic59), описать процедуру InsertList(L1, L2), которая вставляет все элементы из списка L1 (в том же порядке) в список L2 перед его текущим элементом; в результате список L1 становится пустым. Текущим элементом списка L2 становится первый из вставленных элементов. Оба параметра процедуры имеют тип TList и являются входными и выходными. Операции выделения и освобождения памяти в процедуре не использовать. С помощью этой процедуры вставить первый из исходных списков в текущую позицию второго и вывести адреса первого, последнего и текущего элементов объединенного списка.

Dynamic69. Даны указатели на первый, последний и текущий элементы двух двусвязных списков (второй список может быть пустым). Используя тип TList (см. задание Dynamic59), описать процедуру MoveCurrent(L1, L2), которая перемещает текущий элемент списка L1 в список L2 (элемент вставляется после текущего элемента списка L2 и сам становится текущим; в списке L1 текущим становится следующий элемент или, если следующего элемента не существует, последний элемент). Оба параметра процедуры имеют тип TList и являются входными и выходными. Операции выделения и освобождения памяти в процедуре не использовать. С помощью этой процедуры переместить текущий элемент первого списка Динамические структуры данных 131 во второй и вывести адреса первого, последнего и текущего элементов полученных списков. Список с барьерным элементом Использованная в заданиях Dynamic31–Dynamic69 реализация двусвязного списка в виде цепочки узлов, ограниченной по краям нулевыми указателями, не является единственно возможной. Двусвязный список можно также реализовать в виде замкнутой цепочки узлов с дополнительным фиктивным, или барьерным, элементом. Этот барьерный элемент связан своими полями Next и Prev с первым и последним «настоящим» элементом списка соответственно, поэтому, имея указатель на барьерный элемент, можно сразу перейти как к первому, так и к последнему элементу списка (естественно, первый и последний элементы также связаны с барьерным элементом своими полями Prev и Next соответственно). Для работы с двусвязным списком, снабженным барьерным элементом, достаточно хранить два указателя: Barrier, указывающий на барьерный элемент, и Current, указывающий на текущий элемент (который может быть как «настоящим», так и барьерным элементом). Поле Data барьерного элемента может быть произвольным; для определенности его можно положить равным 0. Пустой список в данной реализации представляет собой единственный барьерный элемент, «замкнутый на себя». Задания Dynamic70–Dynamic80 посвящены двусвязным спискам с барьерным элементом.

Dynamic70. Даны указатели P1 и P2 на первый и последний элементы двусвязного списка, реализованного в виде цепочки узлов, ограниченной по краям нулевыми указателями (если список пуст, то P1 = P2 = nil). Преобразовать исходный список в циклический список (см. задание Dynamic55), снабженный барьерным элементом. Барьерный элемент должен иметь значение 0 и быть связан своими полями Next и Prev с первым и последним элементом исходного списка (в случае пустого исходного списка поля Next и Prev барьерного элемента должны указывать на сам барьерный элемент). Вывести указатель на барьерный элемент полученного списка. Операцию выделения памяти использовать только для создания барьерного элемента.

Dynamic71. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка (о списке с барьерным элементом см. задание Dynamic70). 132 Разбить список на два, перенеся во второй список все элементы от текущего до последнего и добавив ко второму списку барьерный элемент. Если текущий элемент исходного списка является барьерным элементом, то второй список должен быть пустым (то есть состоять только из барьерного элемента). Вывести указатель на барьерный элемент второго списка. Операцию выделения памяти использовать только для создания барьерного элемента второго списка.

Dynamic72. Даны указатели P1 и P2 на барьерные элементы двух двусвязных списков (о списке с барьерным элементом см. задание Dynamic70). Объединить исходные списки, связав конец первого и начало второго списка (барьерным элементом объединенного списка должен остаться барьерный элемент первого списка). Вывести указатели на первый и последний элементы объединенного списка (если объединенный список является пустым, то дважды вывести указатель на его барьерный элемент). После удаления лишнего барьерного элемента освободить занимаемую им память.

Dynamic73. Даны указатели P1 и P2 на барьерные элементы двух двусвязных списков (о списке с барьерным элементом см. задание Dynamic70). Объединить исходные списки, связав конец первого и начало второго списка (барьерным элементом объединенного списка должен остаться барьерный элемент второго списка). Вывести указатели на первый и последний элементы объединенного списка (если объединенный список является пустым, то дважды вывести указатель на его барьерный элемент). После удаления лишнего барьерного элемента освободить занимаемую им память.

Dynamic74. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка (о списке с барьерным элементом см. задание Dynamic70). Также дано число N ( 0) и набор из N чисел. Описать тип TListB – запись с полями Barrier и Current типа PNode (поля указывают соответственно на барьерный и текущий элементы списка) – и процедуру LBInsertLast(L, D), которая добавляет новый элемент со значением D в конец списка L (L – входной и выходной параметр типа TListB, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в конец исходного списка данный набор чисел (в том же порядке) и вывести адрес текущего элемента полученного списка.

Dynamic75. Даны указатели P1 и P2 на барьерный и текущий элеменДинамические структуры данных 133 ты двусвязного списка. Также дано число N ( 0) и набор из N чисел. Используя тип TListB (см. задание Dynamic74), описать процедуру LBInsertFirst(L, D), которая добавляет новый элемент со значением D в начало списка L (L – входной и выходной параметр типа TListB, D – входной параметр целого типа). Добавленный элемент становится текущим. С помощью этой процедуры добавить в начало исходного списка данный набор чисел (добавленные числа будут располагаться в списке в обратном порядке) и вывести адрес текущего элемента полученного списка.

Dynamic76. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Также даны пять чисел. Используя тип TListB (см. задание Dynamic74), описать процедуру LBInsertBefore(L, D), которая вставляет новый элемент со значением D перед текущим элементом списка L (L – входной и выходной параметр типа TListB, D – входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список и вывести новый адрес его текущего элемента.

Dynamic77. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Также даны пять чисел. Используя тип TListB (см. задание Dynamic74), описать процедуру LBInsertAfter(L, D), которая вставляет новый элемент со значением D после текущего элемента списка L (L – входной и выходной параметр типа TListB, D – входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список и вывести новый адрес его текущего элемента.

Dynamic78. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Используя тип TListB (см. задание Dynamic74), описать процедуры LBToFirst(L) (делает текущим первый элемент списка L), LBToNext(L) (делает текущим в списке L следующий элемент), LBSetData(L, D) (присваивает текущему элементу списка L значение D целого типа, если данный элемент не является барьерным) и функцию IsBarrier(L) логического типа (возвращает TRUE, если текущий элемент списка L является его барьерным элементом, и FALSE в противном случае). Параметр L имеет тип TListB; в процедурах LBToFirst и LBToNext он является входным и выходным. С помощью этих процедур и функций присвоить нулевые значения элементам исходного списка с нечетными номерами и вывести количество элементов в списке, а также новый ад134 рес текущего элемента списка. Нумерация ведется от первого элемента списка; барьерный элемент не нумеруется и не учитывается при подсчете элементов.

Dynamic79. Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Используя тип TListB (см. задание Dynamic74), описать процедуры LBToLast(L) (делает текущим последний элемент списка L), LBToPrev(L) (делает текущим в списке L предыдущий элемент) и функцию LBGetData(L) целого типа (возвращает значение текущего элемента списка L). Параметр L имеет тип TListB; в процедурах LBToLast и LBToPrev он является входным и выходным. С помощью этих процедур и функций, а также с использованием функции IsBarrier из задания

Dynamic78, вывести все четные значения элементов исходного списка, просматривая список с конца. Вывести также количество элементов в списке. Барьерный элемент не обрабатывается и не учитывается при подсчете элементов.

Dynamic80. Даны указатели P1 и P2 на барьерный и текущий элементы непустого двусвязного списка, причем текущий элемент не совпадает с барьерным. Используя тип TListB (см. задание Dynamic74), описать функцию LBDeleteCurrent(L) целого типа, удаляющую из списка L текущий элемент и возвращающую его значение (L – входной и выходной параметр типа TListB). Текущим становится следующий элемент или, если следующий элемент является барьерным, предыдущий элемент списка. Функция также освобождает память, занимаемую удаленным элементом. Если текущим элементом является барьерный элемент, то функция не выполняет никаких действий и возвращает 0. С помощью этой функции, а также функции IsBarrier из задания Dynamic78, удалить из исходного списка пять элементов (или все элементы, если их менее пяти) и вывести их значения. Вывести также новый адрес текущего элемента списка.

Примеры заданий ЕГЭ по информатике с решением на Паскале. На странице использованы условия задач из демо вариантов и задачника с сайта Полякова Константина Юрьевича (kpolyakov.spb.ru)

Содержание

  1. Задание 5
  2. Задание 6
  3. Задание 14
  4. Задание 15
  5. Задание 16
  6. Задание 17
  7. Задание 22
  8. Задание 24
  9. Задание 25

Задание 5

Демо-2022
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему
правилу:
а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью результирующегочисла R.
Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 77. В ответе это число запишите в десятичной системе счисления.

Решение:

var
  n, i, b, s, k: integer;
  r: real;
  st: string;
begin
  for n := 1 to 100 do
  begin
    k := n; //перебор исходного числа N
    s := 0; //сумма цифр двоичного кода
    r := 0; //результирующее десятичное число R
    st := ''; //очищаем строку двоичного кода для нового числа
    while k >= 1 do //цикл перевода в двоичный код исходного числа
    begin
      s := s + (k mod 2); //вычисление суммы цифр двоичного кода
      st := st + (k mod 2);//формирование строки двоичного кода из остатков деления на 2
      k := k div 2;// деление на 2
    end;
    st := ReverseString(st) + s mod 2; //переворачиваем код и дописываем остаток
    s := s + s mod 2;//вычисление суммы нового кода
    st := st + s mod 2;//формирование строки двоичного кода с добавлением остатка
    for i := 1 to Length(st) do //преобразование двоичного кода в десятичное число
      if st[i] = '1' then r := r + power(2, Length(st) - i);
    if r > 77 then begin println(n, r);break; end;//вывод найденных чисел
  end;
end.

Задание 6

Демо-2022 Определите, при каком наибольшем введённом значении переменной s программа выведет число 64.

zad6-22

Решение: Используем исходный код. Добавим в него цикл перебора значений S и вывода при выполнении условия. Последнее значение и будет ответом.

var
  s, n, i: integer;
begin
  for i := 1 to 510 do
  begin
    s := i;  
    s := s div 10;
    n := 1;
    while s < 51 do
    begin
      s := s + 5;
      n := n * 2
    end;
    if n = 64 then writeln(i);
  end;
end.

Задание 14

Демо-2022 Значение арифметического выражения: 3*438+2*423+420+3*45+2*44+1 – записали в системе счисления с основанием 16. Сколько значащих нулей содержится в этой записи?

Решение:

var k,x:biginteger;
begin
  k:=0;
	x:=3*4bi**38+2*4bi**23+4bi**20+3*4bi**5+2*4bi**4+1;
	while x>0 do
	begin
		if x mod 16=0 then k:=k+1;
		x:=x div 16;
	end;
  print(k)
end.

Демо-2021 Значение арифметического выражения: 497 + 721 – 7 – записали в системе счисления с основанием 7. Сколько цифр 6 содержится в этой записи?

Решение:

var s, i,k6,x:integer;
osn,n:biginteger;
begin
  osn:=7; 
    k6:=0;
    n:=power(osn,14)+power(osn,21)-7;
    while n>0 do
    begin
      if n mod 7 = 6 then k6:=k6+1;
      n:=n div 7;
    end;
      print(k6);          
end.

Демо-2020 Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
_ПОКА нашлось (2222) ИЛИ нашлось (8888)
__ЕСЛИ нашлось (2222)
___ТО заменить (2222, 88)
___ИНАЧЕ заменить (8888, 22)
__КОНЕЦ ЕСЛИ
_КОНЕЦ ПОКА
КОНЕЦ

Решение:

begin
  var s: string := '8' * 70;
  while (s.contains('2222')) or (s.contains('8888')) do
  begin
    if (s.contains('2222')) then
      s := s.replace('2222', '88')
    else
      s := s.replace('8888', '22');
  end;
  writeln(s);
end.

Задание 15

Демо-2021 Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула ¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9)) тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?

Решение:

// Делители
var
 a,x, flag: integer;
 
begin
  for  a := 1 to 100 do
  begin
    flag := 0;
    for x := 1 to 1000 do
      if not(x mod a = 0) <= ((x mod 6 = 0) <= not (x mod 9 = 0)) = false then begin
        flag := 1;
        break;
      end;
    if flag = 0 then print(a);
  end;
end.

К.Поляков №161 Определите наименьшее натуральное число A, такое что выражение
(X & 29 ≠ 0) → ((X & 17 = 0) → (X & A ≠ 0))
тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)?

Посмотреть решение

var
  A, x, flag: integer;
 
begin
  for A := 0 to 31 do
  begin
    flag := 0;
    for x := 0 to 31 do
      if (((x and 29) = 0) or ((x and 17) <> 0) or ((x and A) <> 0))=false then flag := 1;
      if flag = 0 then 
	  begin
        writeln(A); 
	    break;
      end;
  end;
end.

Задание 16

Демо-2022 Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n + F(n − 1), если n – чётно,
F(n) = 2 × F(n − 2), если n > 1 и при этом n – нечётно.
Чему равно значение функции F(26)?

Решение:

var
  i, n: integer;
  f: array[1..100] of integer;
begin
  print('Введите значение n');
  readln(n);
  f[1] := 1;
  for i := 2 to n do 
    if i mod 2 = 0 then f[i] := i + f[i - 1] else f[i] := 2 * f[i - 2];
  print(f[n]);
end.

К.Поляков №46Алгоритм вычисления функции F(n) задан следующими соотношениями:
F(n) = n при n ≤ 3;
F(n) = 2 · n · n + F(n – 1) при чётных n > 3;
F(n) = n · n · n + n + F(n – 1) при нечётных n > 3;
Определите количество натуральных значений n, при которых F(n) меньше, чем 107.

Посмотреть решение

var
  i: integer;
  f: array[1..1000] of integer;
begin
  i:=3;
  f[1] := 1;
  f[2] := 2;
  f[3] := 3;
 while f[i]< 10**7 do 
   begin
    i:=i+1;
    if i mod 2 = 0 then f[i] := 2*i*i + f[i - 1] else f[i] := i*i*i+i +f[i - 1];    
    end;
  print(i-1);// не учитываем последнее число
end.

Задание 17

Демо-2022
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Файл с данными: 17.txt

Решение:

var a,b,k,maxsum: integer;  
begin    
  Assign( input, '17.txt' );
  maxsum:=-20000; k:=0;
  readln(a);
  while not eof do begin
  readln(b);
  if (a mod 3 = 0) or (b mod 3 = 0) then begin
            k := k + 1;
            if a + b > maxsum then maxsum := a + b;
        end;
        a := b;
    end;
  Println( k, maxsum)
end.

Задание 22

Демо-2022
Ниже на языке программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4,а потом 5.
задание 22 демо 22

Решение:

var
  x, i, L, M, Q: integer;
begin
  for i := 9 to 50 do
  begin
    x := i;
    Q := 9;
    L := 0;
    while x >= Q do
    begin
      L := L + 1;
      x := x - Q;
    end;
    M := x;
    if M < L then
    begin
      M := L;
      L := x;
    end;
    if (L = 4) and (M = 5) then print(i);
  end;
end.

Задание 24

Демо-2022
Текстовый файл состоит из символов P, Q, R и S. Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P. Для выполнения этого задания следует написать программу.

Файл с данными: 24.txt

Решение:

var
  i, maxlen, curlen: longint;  {описание переменных}
  s: string;
  f: text;{текстовый файл}
begin
  assign(f, '24.txt');    {исходный текстовые файл с данными}
  reset(f);
  readln(f, s);{открываем файл для чтения данных}
  maxlen := 1;            
  curlen := 1; 
  for i := 2 to Length(s) do 
    if not ((s[i] = 'P') and (s[i-1] = 'P')) then 
    begin
      curLen := curLen + 1;
      if curLen > maxLen then maxLen := curLen;
    end
    else curLen := 1;
  writeln(maxLen);   
  close(f);     { закрываем файл}
end.

Задание 25

Демо-2022
Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей и у числа нет, то значение M считается равным нулю. Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М.
Строки выводятся в порядке возрастания найденных чисел.

Решение:

var
  d1, chislo: integer;
begin
  for chislo := 700001 to 700100 do
    for d1 := 2 to chislo - 1 do
      if chislo mod d1 = 0 then begin
        if (d1 + chislo div d1) mod 10 = 8 then println(chislo, d1 + chislo div d1);
        break;
      end;
end.

«Программы без ошибок можно написать
двумя способами, но работает — третий»
Алан Джей Перлис

Практика программирования для начинающих

В этом разделе собраны задачи по программированию, которые желательно выполнять по ходу обучения. Задачи разбиты на определенные темы, соответствующие темам уроков программирования.

Для того, чтобы вы могли проверить правильность решения задач, я буду выкладывать ответы к ним. Сразу скажу, что мое решение может не совпадать с вашим. Это не значит, что вы решили неправильно. Одну и ту же задачу можно решить разными способами. Главное, чтобы программа выдавала правильный результат.

Если вам не удается выполнить задание, то возможно следует еще раз ознакомиться с материалами уроков программирования и заглянуть в раздел теория программирования.

Желаю удачи!))

Практика программирования на Pascal

1. Begin — ввод и вывод данных, оператор присваивания в Pascal

2. Integer — действия с целыми числами в Pascal

3. Boolean — логические выражения в Pascal

4. If — условный оператор в Pascal

5. Оператор выбора Case в Pascal

6. For — цикл с параметром в Pascal

К оглавлению | Назад | Вперёд

Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда PascalABC.Net 3.0.

Простые задачи[править]

Обработка множеств[править]

Пересечение множеств[править]

begin
  var A := new SortedSet<integer>(Range(5, 25));
  var B := new SortedSet<integer>(Range(17, 34));
  var C := new SortedSet<integer>(Range(1, 20));
  A.IntersectWith(B);
  A.IntersectWith(C);
  Writeln(A);
end.

var

 Multiplicity: set of integer;

begin

 for var i := 1 to ReadlnInteger('Count:') do
   Include(Multiplicity, ReadlnInteger());
 
 Writeln(Multiplicity);
 
 var Count := 0;
 foreach var c in Multiplicity do
   if c < 0 then Inc(Count);
 
 WritelnFormat('Количество отрицательных чисел равно {0}.', Count);

end.
</syntaxhighlight>

begin
  WritelnFormat('Количество отрицательных элементов равно {0}.', ReadArrInteger(ReadlnInteger('N:')).ToSortedSet().Where(x -> x < 0).Count());
end.

Сортировки[править]

Сортировка пузырьком[править]

begin
  var N := ReadlnInteger('Размер массива:');
  var A := ReadArrInteger(N);
  var IsSwapped := false;
  
  for var j := N - 1 downto 0 do
  begin
    IsSwapped := false;
    for var i := 0 to j - 1 do
      if A[i] < A[i + 1] then
      begin
        Swap(A[i], A[i + 1]);
        IsSwapped := true;
      end;
    if IsSwapped = false then break;
  end;
  Writeln(A);
end.

Шейкерная сортировка[править]

Описание алгоритма
  1. Переместить минимум в левый край сортируемой части массива, максимум — в правый.
  2. Уменьшить размер сортируемой части массива.
  3. Вернуться к шагу 1.
const
  N = 4;

var
  A: array [0..N - 1] of integer; 
  Left, Right: integer;

begin
  for var i := 0 to N - 1 do A[i] := Random(100); 
  
  Left := 0; 
  Right := N - 1; 
  while Left < Right do 
  begin
    for var i := Right downto Left + 1 do 
      if A[i - 1] > A[i] then Swap(A[i - 1], A[i]); 
    for var i := Left + 1 to Right - 1 do 
      if A[i] > A[i + 1] then Swap(A[i], A[i + 1]);
    Dec(Right); 
    Inc(Left); 
  end;
  
  Writeln(A); 
end.

Смотрите также: реализация на Python.

Сортировка элементов, удовлетворяющих условию[править]

begin
  var A := Arr(1, 4, 6, 1, 9, 3);
  var Indexes := new List<integer>();
  
  for var i := 0 to A.Length - 1 do
    if A[i] mod 3 = 0 then
      Indexes.Add(i);
  
  for var i := 0 to Indexes.Count - 1 do
    for var j := i + 1 to Indexes.Count - 1 do
      if A[Indexes[i]] > A[Indexes[j]] then
        Swap(A[Indexes[i]], A[Indexes[j]]);
  
  Writeln(A);
end.

Обработка массивов[править]

Полные квадраты[править]

const
  N = 5;

var
  A: array [0..N - 1] of integer;

function IsSquare(x: integer): boolean;
begin
  var y := 1;
  while Sqr(y) < x do
    Inc(y);
  Result := Sqr(y) = x;
end;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  for var i := 0 to N - 1 do
    if IsSquare(A[i]) then Write(A[i]:5);
  Writeln();
end.

Поменять местами максимальный и первый элементы[править]

const
  N = 10;

var
  A: array [0..N - 1] of integer;
  Max: integer := integer.MinValue;
  MaxI: integer;

procedure Print();
begin
  for var i := 0 to N - 1 do
    Write(A[i]:5);
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    if A[i] > Max then
    begin
      Max := A[i];
      MaxI := i;
    end;
  end;
  
  Print();
  Swap(A[0], A[MaxI]);
  Print();
end.
const
  N = 10;
 
var
  A: array [0..N - 1] of integer;
  MaxI: integer = -1;
 
procedure Print();
begin
  for var i := 0 to N - 1 do
    Write(A[i]:5);
  Writeln();
end;
 
begin
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    if (MaxI = -1) or (A[i] > A[MaxI]) then MaxI := i;
  end;
  
  Print();
  Swap(A[0], A[MaxI]);
  Print();
end.

Вставить число перед нечётными элементами[править]

const
  N = 10;

type
  IntArray = array of integer;

var
  A: IntArray;
  Count: integer;

procedure Print();
begin
  for var i := 0 to A.Length - 1 do
    Write(A[i]:5);
  Writeln();
end;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    Inc(Count, A[i] mod 2);
  end;
  SetLength(A, N + Count);
  
  Print();
  var i := N - 1;
  var j := N + Count - 1;
  while i >= 0 do
  begin
    A[j] := A[i];
    if A[i] mod 2 <> 0 then
    begin
      A[j - 1] := 400;
      Dec(j);
    end;
    Dec(i);Dec(j);
  end;
  Print();
end.

Сдвиг элементов массива[править]

Сдвинуть элементы массива, который состоит из 4-х элементов так, чтобы из: a b c d получилось b c d a.

const
  N = 4;

var
  A: array [0..N] of integer;

procedure Print(s: string);
begin
  Writeln(s);
  for var i := 0 to N - 1 do
    Write(A[i]);
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  Print('Изначальный массив:');
  
  var C := A[0];
  for var i := 0 to N - 2 do
    A[i] := A[i + 1];
  
  A[N - 1] := C;
  
  Print('Измененный массив:');
end.
//Аналог через List<T>.
begin
  var L := ReadArrInteger(4).Println().ToList();
  L.Add(L[0]); L.RemoveAt(0);
  L.Println();
end.

Массив с максимумом максимумов[править]

Вывести массив с максимумом максимумов двух массивов.

begin
  var A := Arr(Arr(1, 2, 10), Arr(4, 5, 6)).MaxBy(x -> x.Max());
  Writeln(A);
  WritelnFormat('Индекс максимального элемента {0} равен {1}.', A.Max(), A.IndexMax(0));
end.

Смотрите также: реализация на Python.

Слияние отсортированных массивов[править]

var
  C: array of integer;
  i, j, k: integer;

begin
  var A := Arr(1, 6, 7, 45, 100, 210);
  var B := Arr(2, 8);
  
  SetLength(C, A.Length + B.Length);
  while (i < A.Length) or (j < B.Length) do
  begin
    if (j >= B.Length) or (i < A.Length) and (j < B.Length) and (A[i] < B[j]) then
    begin
      C[k] := A[i];
      Inc(i);
    end
    else if (i >= A.Length) or (i < A.Length) and (j < B.Length) and (A[i] >= B[j]) then
    begin
      C[k] := B[j];
      Inc(j);
    end;
    Inc(k);
  end;
  
  C.Println();
end.

Разделение отрицательных и положительных чисел с сохранением порядка[править]

Переместить все отрицательные числа в левую половину массива, остальные — в правую. Порядок следования отрицательных и неотрицательных чисел должен быть сохранен.

const
  N = 10;
  D = 10;

var
  A: array [0..N - 1] of integer;

procedure Print();
begin
  for var i := 0 to N - 1 do
    Write(A[i]:4);
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    A[i] := -D + Random(2 * D + 1);
  
  Print();
  
  for var i := 0 to N - 1 do
    for var j := N - 2 downto i + 1 do
      if (A[j] > 0) and (A[j + 1] < 0) then
        Swap(A[j], A[j + 1]);
  
  Print();
end.

Обработка матриц без условных операторов[править]

Замена отрицательных элементов на неотрицательные[править]

const
  N = 5;
  M = 5;

var
  A: array [0..N - 1, 0..M - 1] of integer;

procedure Print(d: integer);
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print(4);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := (1 - 2 * Ord(A[i, j] < 0)) * A[i, j];
  
  Print(4);
end.

Удвоить положительные элементы[править]

const
  N = 5;
  M = 5;

var
  A: array [0..N - 1, 0..M - 1] of integer;

procedure Print(d: integer);
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print(4);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := (1 + Ord(A[i, j] > 0)) * A[i, j];
  
  Print(4);
end.

Исключение нечетных элементов[править]

const
  N = 5;
  M = 5;

var
  A: array [0..N - 1, 0..M - 1] of integer;

procedure Print(d: integer);
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print(4);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := Ord(Abs(A[i, j]) mod 2 = 0) * A[i, j];
  
  Print(4);
end.

Обнуление отрицательных чисел и удвоение положительных[править]

const
  N = 5;

var
  A: array [0..N - 1] of integer;

procedure Print();
begin
  for var i := 0 to N - 1 do
    Write(A[i]:4);
  Writeln();
end;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  Print();
  
  for var i := 0 to N - 1 do
    A[i] := Ord(A[i] > 0) * 2 * A[i];
  Print();
end.

Задачи К. Полякова[править]

Обработка массивов[править]

Удаление лишних пробелов в строках массива[править]

begin
  ReadArrString(3).Select(x -> x.ToWords().JoinIntoString(' ')).Println();
end.

Использование x.ToWords() не эквивалентно x.Split().

Смотрите также: реализация на Python.

Локальные минимумы[править]

Дан массив, содержащий 2014 положительных целых чисел.
Напишите на одном из языков программирования программу,
которая находит в этом массиве количество локальных минимумов.
Локальным минимумом называется элемент массива, который меньше всех своих соседей.
Например, в массиве из 6 элементов, содержащем числа 4, 6, 12, 7, 3, 8, есть два локальных минимума:
это элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов,
значения элементов выводить не нужно. Исходные данные объявлены так, как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

const
  N = 2014;

var
  A: array [0..N - 1] of integer;
  K: integer;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  if A[0] < A[1] then Inc(K);
  if A[N - 2] > A[N - 1] then Inc(K);
  
  for var i := 1 to N - 2 do
    if (A[i - 1] > A[i]) and (A[i] < A[i + 1]) then Inc(K);
  
  Writeln(K);
end.

Смотрите также: реализация на Python.

Минимальный чётный и нечётный элементы[править]

Дан массив, содержащий неотрицательные целые числа, не превышающие 10 000. Необходимо вывести:

  1. минимальный чётный элемент, если количество чётных элементов не больше, чем нечётных;
  2. минимальный нечётный элемент, если количество нечётных элементов меньше, чем чётных.

Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 9, 8,
ответом будет 9 – наименьшее нечётное число, поскольку нечётных чисел в этом массиве меньше.

const
  N = 20;

var
  A: array [0..N - 1] of integer;
  C1, C2, Min1, Min2: integer;

begin
  Min1 := integer.MaxValue;
  Min2 := integer.MaxValue;
  
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    if A[i] mod 2 = 0 then
    begin
      Inc(C1);
      if A[i] < Min1 then Min1 := A[i];
    end
    else
    begin
      Inc(C2);
      if A[i] < Min2 then Min2 := A[i];
    end;
  end;
  
  if C1 <= C2 then Writeln(Min1) else Writeln(Min2);
end.
//Аналог через готовые методы.
begin
  Writeln(ReadArrInteger(ReadlnInteger('N:')).GroupBy(x -> x mod 2 = 0).Last().Min()); 
end.

Смотрите также: реализация на Python.

Задача о сумме элементов[править]

Дан целочисленный массив из 2000 элементов.
Если сумма всех элементов массива чётная,
нужно вывести количество нечётных (по значению) элементов массива,
если нечётная – количество чётных. Например, для массива из 6 элементов,
равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 2 – количество нечётных элементов,
так как общая сумма всех элементов чётна.

const
  N = 2000;

var
  A: array [0..N - 1] of integer;
  S: integer;
  K1, K2: integer;

begin
  for var i := 0 to N - 1 do
  begin
    Readln(A[i]);
    Inc(S, A[i]);
    if A[i] mod 2 = 0 then Inc(K1) else Inc(K2);
  end;
  
  if S mod 2 = 0 then Write(K2) else Write(K1);
end.
//Аналог через готовые методы.
begin
  var A := ReadArrInteger(ReadlnInteger('N:'));
  Writeln(A.Count(x -> x mod 2 <> A.Sum() mod 2))
end.

Смотрите также: реализация на Python.

Пары с элементом кратным 3[править]

Дан целочисленный массив из 20 элементов.
Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно.
Опишите на естественном языке или на одном из языков программирования алгоритм,
позволяющий найти и вывести количество пар элементов массива,
в которых хотя бы одно число делится на 3.
В данной задаче под парой подразумевается два подряд идущих элемента массива.

const
  N = 20;

var
  A: array [0..N - 1] of integer;
  K: integer;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  for var i := 0 to N - 2 do
    if (A[i] mod 3 = 0) or (A[i + 1] mod 3 = 0) then Inc(K);
  
  Writeln(K);
end.
//Аналог через готовые методы.
begin
  Writeln(ReadArrInteger(ReadlnInteger('N:')).Pairwise((x, y) -> Ord((x mod 3) * (y mod 3) = 0)).Sum());
end.

Смотрите также: реализация на Python.

Числа, оканчивающиеся на 5[править]

Дан целочисленный массив из 40 элементов.
Элементы массива могут принимать целые значения от 0 до 10000 включительно.
Опишите на естественном языке или на одном из языков программирования алгоритм,
позволяющий найти и вывести количество пар элементов массива,
в которых десятичная запись хотя бы одного числа оканчивается на 5.

const
  N = 40;

var
  A: array [0..N - 1] of integer;
  K: integer;

begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  for var i := 0 to N - 1 do
    for var j := i + 1 to N - 1 do
      if (A[i] mod 10 = 5) or (A[j] mod 10 = 5) then Inc(K);
  
  Writeln(K);
end.

Смотрите также: реализация на Python.

Обработка строк[править]

Удаление лишних пробелов[править]

var
  S, S2: string;
  i: integer := 1;

begin
  Readln(S);
  while i <= Length(S) do
  begin
    if S.Chars[i] = ' ' then
    begin
      S2 += ' ';
      Inc(i);
    end;
    while (i <= Length(S)) and (S.Chars[i] = ' ') do Inc(i);
    while (i <= Length(S)) and (S.Chars[i] <> ' ') do
    begin
      S2 += S.Chars[i];
      Inc(i);
    end;
  end;
  S := S2;
  Writeln(S);
end.

Задача о школах[править]

На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат:

<Фамилия> <Инициалы> <номер школы>

где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки:

Иванов П.С. 57 

Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника. Следует учитывать, что N >= 1000.

const
  N = 4;
  M = 99;
  
var
  Schools: array [1..M] of integer;
  Data: string;
  Max, MaxI: integer;

begin
  for var i := 0 to N - 1 do
  begin
    Readln(Data);
    Inc(Schools[StrToInt(Data.ToWords()[2])]);
  end;
  
  Max := integer.MinValue;
  for var i := 1 to M do
    if Schools[i] > Max then
    begin
      Max := Schools[i];
      MaxI := i;
    end;
  
  WritelnFormat('В школу с номером {0} пришло наибольшее количество учеников ({1}).', MaxI, Max);
end.

Худшие ученики[править]

Вариант задачи 1[править]

На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат:

<Фамилия> <Имя> <оценки>

, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:

Иванов Петр 4 5 3

Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.

const
  N = 6;
  M = 3;

type
  TStudent = class
  public 
    Name, Surname: string;
    Assessments: array [0..2] of integer;
    
    constructor(n, sn: string; r1, r2, r3: integer);
    begin
      Name := n;
      Surname := sn;
      Assessments[0] := r1;Assessments[1] := r2;Assessments[2] := r3;
    end;
    
    function Sum()  := Assessments[0] + Assessments[1] + Assessments[2];
  end;

var
  Students: array of TStudent;
  Data: string;
  j: integer;

begin
  SetLength(Students, N);
  for var i := 0 to N - 1 do
  begin
    Readln(Data);
    var a := Data.ToWords();
    Students[i] := new TStudent(a[0], a[1], StrToInt(a[2]), StrToInt(a[3]), StrToInt(a[4]));
  end;
  
  Students := Students.OrderBy(v -> v.Assessments.Sum()).ToArray();
  
  var i := 0;
  var Sum := Students[0].Sum();
  while i < N do
  begin
    while (i < N) and (Students[i].Sum() = Sum) do
    begin
      WritelnFormat('Ученик {0} {1} {2}-ый по счету имеет баллы {3}.', Students[i].Name, Students[i].Surname, j + 1, Students[i].Sum());
      Inc(i);
    end;
    
    if i < N then
    begin
      Inc(j);
      Sum := Students[i].Sum();
    end;
    
    if j >= M then break;
  end;
end.

Вариант задачи 2[править]

Вывести имена трех худших учеников и среднее арифметическое их баллов.

begin
  ReadArrString(20).Select(x -> x.ToWords()).OrderBy(x -> x.Skip(2).Sum(v -> StrToInt(v))).
  Select(x -> Format('{0} {1} {2}', x[0], x[1], x.Skip(2).Average(v -> StrToFloat(v)))).Take(3).Println();
end.

Абитуриенты, не допущенные к сдаче экзаменов[править]

В некотором вузе абитуриенты проходят предварительное тестирование, по результатам которого могут быть допущены к сдаче вступительных экзаменов в первом потоке. Тестирование проводится по двум предметам, по каждому предмету абитуриент может набрать от 0 до 100 баллов. При этом к сдаче экзаменов в первом потоке допускаются абитуриенты, набравшие по результатам тестирования не менее 30 баллов по каждому из двух предметов. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 500.
В первой строке вводится количество абитуриентов, принимавших участие в тестировании, N. Далее следуют N строк, имеющих следующий формат:

<Фамилия> <Имя> <Баллы> 

Здесь <Фамилия> – строка, состоящая не более чем из 20 символов; <Имя> – строка, состоящая не более чем из 15 символов; <Баллы> – строка, содержащая два целых числа, разделенных пробелом, соответствующих баллам, полученным на тестировании по каждому из двух предметов. При этом <Фамилия> и <Имя>, <Имя> и <Баллы> разделены одним пробелом. Примеры входных строк:

Ветров Роман 68 59
Анисимова Екатерина 64 88 

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

const
  N = 3;

type
  TPerson = auto class
    Surname, Name: string;
    Assessments: array of integer;
  end;

var
  A: array of TPerson;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
  begin
    var p := ReadlnString().ToWords();
    A[i] := new TPerson(p[0], p[1], p.Skip(2).Select(x -> StrToInt(x)).ToArray());
  end;
  
  Writeln('Не прошли экзамен:');
  A.Where(x -> x.Assessments.Any(y -> y < 30)).OrderBy(x -> x.Name).
  Select(x -> Format('{0} {1} {2}', x.Surname, x.Name, x.Assessments.JoinIntoString()) + NewLine).Println('');
end.
const
  N = 3;

type
  TPerson = record
    Surname, Name: string;
    Assessments: array of integer;
  end;

var
  A: array of TPerson;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
  begin
    var p := ReadlnString().ToWords();
    A[i].Surname := p[0];
    A[i].Name := p[1];
    A[i].Assessments := p.Skip(2).Select(x -> StrToInt(x)).ToArray();
  end;
  
  Writeln('Не прошли экзамен:');
  A.Where(x -> x.Assessments.Any(y -> y < 30)).OrderBy(x -> x.Name).
  Select(x -> Format('{0} {1} {2}', x.Surname, x.Name, x.Assessments.JoinIntoString()) + NewLine).Println('');
end.

Задача о сотрудниках[править]

На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения. В первой строке сообщается количество сотрудников N, каждая из следующих N строк имеет следующий формат:

<Фамилия> <Инициалы> <телефон>

где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> — строка, состоящая не более чем из 4-х символов (буква, точка, буква, точка), <телефон> – семизначный номер, 3-я и 4, я, а также 5-я и 6-я цифры которого разделены символом «–». <Фамилия> и <Инициалы>, а также <Инициалы> и <телефон> разделены одним пробелом. Пример входной строки:

Иванов П.С. 555-66-77

Сотрудники одного подразделения имеют один и тот же номер телефона. Номера телефонов в учреждении отличаются только двумя последними цифрами. Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию, сколько в среднем сотрудников работает в одном подразделении данного учреждения.

const
  N = 3;

var
  A: array of string;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
    A[i] := ReadlnString().ToWords()[2];
  
  Writeln(A.GroupBy(s -> s.ToWords()[2]).Println(NewLine).Average(g -> g.Count));
end.

Задача о сметанах[править]

В молочных магазинах города Х продается сметана с жирностью 15, 20 и 25 процентов. В городе X был проведен мониторинг цен на сметану. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять для каждого вида сметаны, сколько магазинов продают ее дешевле всего. На вход программе сначала подается число магазинов N. В каждой из следующих N строк находится информация в следующем формате:

<Фирма> <Улица> <Жирность> <Цена>

где <Фирма> – строка, состоящая не более, чем из 20 символов без пробелов, <Улица> – строка, состоящая не более, чем из 20 символов без пробелов, <Жирность> – одно из чисел – 15, 20 или 25, <Цена> – целое число в диапазоне от 2000 до 5000, обозначающее стоимость одного литра сметаны в копейках. <Фирма> и <Улица>, <Улица> и <Жирность>, а также <Жирность> и <Цена> разделены ровно одним пробелом. Пример входной строки:

Перекресток Короленко 25 3200

Программа должна выводить через пробел 3 числа – количество магазинов, продающих дешевле всего сметану с жирностью 15, 20 и 25 процентов. Если какой-то вид сметаны нигде не продавался, то следует вывести 0.
Пример выходных данных:

12 10 0
const
  N = 5;

type
  TData = auto class
    MinPrice, Count: integer;
  end;

var
  FatContent: array [0..2] of TData;

begin
  for var i := 0 to 2 do
    FatContent[i] := new TData(integer.MaxValue, 0);
  
  for var i := 0 to N - 1 do
  begin
    var p := ReadlnString().ToWords();
    var j := (StrToInt(p[2]) - 15) div 5;
    var price := StrToInt(p[3]);
    if price < FatContent[j].MinPrice then
    begin
      FatContent[j].MinPrice := price;
      FatContent[j].Count := 1;
    end
    else if price = FatContent[j].MinPrice then Inc(FatContent[j].Count);
  end;
  
  WritelnFormat('{0} {1} {2}', FatContent[0].Count, FatContent[1].Count, FatContent[2].Count);
end.
const
  N = 5;

type
  TData = record
    MinPrice, Count: integer;
  end;

var
  FatContent: array [0..2] of TData;

begin  
  for var i := 0 to N - 1 do
  begin
    var p := ReadlnString().ToWords();
    var j := (StrToInt(p[2]) - 15) div 5;
    var price := StrToInt(p[3]);
    if price < FatContent[j].MinPrice then
    begin
      FatContent[j].MinPrice := price;
      FatContent[j].Count := 1;
    end
    else if price = FatContent[j].MinPrice then Inc(FatContent[j].Count);
  end;
  
  WritelnFormat('{0} {1} {2}', FatContent[0].Count, FatContent[1].Count, FatContent[2].Count);
end.

Задача о партиях[править]

Имеется список результатов голосования избирателей за несколько партий, в виде списка названий данных партий. На вход программе в первой строке подается количество избирателей в списке N. В каждой из последующих N строк записано название партии, за которую проголосовал данный избиратель, в виде текстовой строки. Длина строки не превосходит 50 символов, название может содержать буквы, цифры, пробелы и прочие символы.
Пример входных данных:

6
Party one
Party two
Party three
Party three
Party two
Party three

Программа должна вывести список всех партий, встречающихся в исходном списке, в порядке убывания количества голосов, отданных за эту партию. При этом название каждой партии должно быть выведено ровно один раз, вне зависимости от того, сколько голосов было отдано за данную партию. Пример выходных данных для приведенного выше примера входных данных:

Party three
Party two
Party one
var
  D: Dictionary<string, integer>;

begin
  D := new Dictionary<string, integer>();
  
  for var i := 0 to ReadlnInteger('Количество избирателей:') - 1 do
  begin
    var p := ReadlnString();
    if not D.ContainsKey(p) then D.Add(p, 1) else D[p] += 1;
  end;
  
  Writeln();
  D.OrderByDescending(x -> x.Value).Select(x -> x.Key).JoinIntoString(NewLine).Println();
end.
//Аналог через готовые методы.
begin
  ReadArrString(ReadlnInteger()).GroupBy(x -> x).OrderByDescending(x -> x.Count()).Select(x -> x.First()).JoinIntoString(NewLine).Println();
end.

Задача о цифрах[править]

На вход программе подается последовательность символов, заканчивающаяся точкой. Требуется написать программу, которая определяет, есть ли в этой последовательности десятичные цифры, и выводит наибольшее число, которое можно составить из этих цифр. Ведущих нулей в числе быть не должно (за исключением числа 0, запись которого содержит ровно одну цифру). Если цифр нет, программа должна вывести на экран слово «Нет», а если есть – слово «Да» и в следующей строчке искомое число. Например, если исходная последовательность была такая:

Day 10, mice 8: "Year" 7 is a mistake 91. 

то результат должен быть следующий:

Да
987110
begin
  var A := ReadlnString().Where(x -> char.IsDigit(x));
  Writeln(A.Count > 0 ? Format('{0}{1}{2}', 'Да', NewLine, A.OrderByDescending(x -> x).JoinIntoString('')) : 'Нет');
end.

Математические задачи[править]

Задача о принадлежности точки кольцу[править]

var
  R1, R2, X, Y: real;

begin
  Readln(R1, R2, X, Y);
  if R1 > R2 then Swap(R1, R2);
  var D := Sqrt(Sqr(X) + Sqr(Y));
  if (D > R1) and (D < R2) then Writeln('Точка внутри кольца.') else Writeln('Точка вне кольца.');
end.

Смотрите также: реализация на Python.

Задача о решении уравнений[править]

var
  A, B, C, D, X1, X2: real;

begin
  Readln(A, B, C);
  D := Sqr(B) - 4 * A * C;
  if D >= 0 then
  begin
    var d2 := Sqrt(D);
    var a2 := 2 * A;
    X1 := (-B + d2) / a2;
    X2 := (-B - d2) / a2;
    if X1 = X2 then
      WritelnFormat('Найден один корень, равный {0}', X1)
    else
      WritelnFormat('Найдены два корня, равные {0} и {1}', X1, X2);
  end
  else
    WritelnFormat('Ошибка нахождения корней: недопустимое значение {0} для D (< 0).', D);
end.

Смотрите также: реализация на Python.

Простое число с максимальным количеством единиц в двоичном представлении[править]

function F(a: integer): integer;
begin
  while a <> 0 do
  begin
    if a mod 2 = 1 then Inc(Result);
    a := a div 2;
  end;
end;

begin
  Writeln(ReadArrInteger(10).Where(x -> (x = 1) or (Range(2, Trunc(Sqrt(x))).All(y -> x mod y <> 0))).MaxBy(x -> F(x)));
end.
//Аналог через готовые методы.
begin
  Writeln(ReadArrInteger(10).Where(x -> (x = 1) or (Range(2, Trunc(Sqrt(x))).All(y -> x mod y <> 0))).
    MaxBy(x -> System.Convert.ToString(x, 2).Count(ch -> ch = '1')));
end.

Простое число[править]

function IsPrime(a: integer): boolean;
begin
  Result := false;
  if (a mod 2 = 0) and (a <> 2) then exit;
  
  var i := 3;
  while i <= Round(Sqrt(a)) do
    if a mod i = 0 then
      exit
    else
      Inc(i, 2);
  Result := true;
end;

begin
  var X := ReadlnInteger();
  WritelnFormat('Число {0} {1}простое.', X, IsPrime(X) ? '' : 'не');
end.

Подсчёт числа инверсий[править]

begin
  var A := ArrRandom(10, 0, 10);
  Writeln(A);
  
  var Count := 0;
  for var i := 0 to A.Length - 1 do
    for var j := i + 1 to A.Length - 1 do
      if A[j] > A[i] then
        Inc(Count);
  
  WritelnFormat('Количество инверсий равно {0}.', Count);
end.

Интегрирование[править]

type
  TFunction = function(x: real): real;

function Integrate(a, b: real; c: integer; func: TFunction): real;
begin
  var s := (b - a) / c;
  for var i := 0 to c - 1 do
    Result += Abs(func(a + i * s));
  Result *= s;
end;

begin
  Writeln(Integrate(-1, 1, 100, Sin));
end.

Ханойские башни[править]

var
  N: integer;

procedure F(d, l1, l2: integer);
var
  delta, dm: integer;

begin
  delta := 6 - l1 - l2;
  dm := d - 1;
  if d <> 1 then F(dm, l1, delta);
  WritelnFormat('Диск {0} переставлен на {1} на {2}.', d, l1, l2);
  if d <> 1 then F(dm, delta, l2);
end;

begin
  Readln(N);
  F(N, 1, 3);
end.

Повышенная сложность[править]

Задачи на алгоритмы[править]

Задачи на обработку последовательностей[править]

Числа, удовлетворяющие условию[править]

Подсчитать количество чисел, принадлежащих промежутку [A, B] и сумму чисел, стоящих на местах, кратных 3.

begin
  var A := ReadlnInteger('A:');
  var B := ReadlnInteger('B:');
  
  var i := 0;
  var Sum := 0;
  var Count := 0;
  
  var N := 0;
  
  while i < B - A + 1 do
  begin
    Readln(N);
    if (N >= A) and (N <= B) then Inc(Count);
    if i mod 3 = 0 then Inc(Sum, N);
    Inc(i);
  end;
  
  WritelnFormat('Количество чисел в [A, B] равно {0}. Сумма чисел равна {1}.', Count, Sum);
end.
begin
  var A := ReadArrInteger(ReadlnInteger('N:'));
  var R := Range(ReadlnInteger('A:'), ReadlnInteger('B:'));
  
  WritelnFormat('Количество чисел, принадлежащих промежутку [{0}, {1}] равно {2}. ' + NewLine 
                + 'Сумма чисел, стоящих на местах, кратных 3, равна {3}.',
                R.First(), R.Last(), A.Count(x -> x in R), A.Where((x, i)-> i mod 2 = 0).Sum());
end.

Последовательность максимальной длины[править]

Вариант с файлом[править]
const
  Path1 = 'C:IlyaAlgoРитмыФайл1.txt';
  Path2 = 'C:IlyaAlgoРитмыФайл2.txt';

var
  F1, F2: Text;
  L: List<integer>;
  N: integer;
  MaxL: integer;

begin
  Assign(F1, Path1);
  Assign(F2, Path2);
  Reset(F1);
  Rewrite(F2);
  
  L := new List<integer>();
  
  while not Eof(F1) do
  begin
    Readln(F1, N);
    L.Add(N);
  end;
  
  var i := 0;
  N := L[0];
  while i < L.Count do
  begin
    var len := 1;
    while (i < L.Count) and (L[i] = N) do
    begin
      Inc(len);
      Inc(i);
    end;
    if len > MaxL then
      MaxL := len;
    if i < L.Count then
      N := L[i];
  end;
  
  Write(F2, MaxL);
  Close(F1);
  Close(F2);
end.
Вариант без файла[править]
begin
  Writeln(ReadlnString().AdjacentGroup().MaxBy(x -> x.Count()).First());
end.

Задача с CyberForum[править]

  1. Заполнить массив по формуле: 5.5 * Sin(index * H) + Cos(A * X + index * H), где H, A и X — числа, которые ввел пользователь.
  2. Удалить из массива все положительные элементы, которые удовлетворяют условию: A[index] < index / 3.
  3. Найти среднее арифметическое элементов, стоящих между первым минимальным по модулю и последним отрицательным элементами.
const
  N = 10;
 
var
  A: array [1..N] of real;
  Exists: array [1..N] of boolean;
  NegativeI: integer;
 
begin
  var H := ReadlnInteger();
  var X := ReadlnInteger();
  var A := ReadlnInteger();
  
  for var i := 1 to N do
  begin
    var c := i * H;
    A[i] := 5.5 * Sin(c) + Cos(A * X + c);
    Exists[i] := true;
  end;
  
  for var i := 1 to N do
    if (A[i] > 0) and (A[i] < i / 3) then
      Exists[i] := false;
  
  var Min := real.MaxValue;
  var MinI := 0;
  for var i := 1 to N do
    if Exists[i] and (Abs(A[i]) < Min) then
    begin
      Min := Abs(A[i]);
      MinI := i;
    end;
  
  for NegativeI := N downto 1 do
    if Exists[NegativeI] and (A[NegativeI] < 0) then
      break;
  
  var Sum := 0.0;
  var Count := 0;
  for var i := MinI to NegativeI do
    if Exists[i] then
    begin
      Sum += A[i];
      Inc(Count);
    end;
  
  WritelnFormat('Среднее арифметическое равно {0}.', Sum / Count);
end.

Определить является ли данная последовательность арифметической прогрессией[править]

begin
  var A := ReadlnInteger();
  var B := ReadlnInteger();
  var D := B - A;
  var Yes := true;
  
  while Yes and (B <> 0) do
  begin
    Swap(A, B);
    B := ReadlnInteger();
    if (B <> 0) and (B - A <> D) then
      Yes := false;
  end;
  
  if Yes then Writeln('Yes') else Writeln('No');
end.
//Аналог через готовые методы.
const
  Eps = 1E-5;

begin
  var A := ReadlnString().ToReals().Incremental((x, y) -> y - x);
  WritelnFormat('Последовательность - {0}арифметическая прогрессия.', A.All(x -> Abs(x - A.First()) < Eps) ? '' : 'не ');
end.

Сжатие последовательности[править]

Вариант первый[править]

Из последовательности 1, 1, 3, 3, 5, 1 получить:

1:2
3:2
5:1
1:1
const
  N = 6;
 
var
  A: array [0..N - 1] of integer;
 
begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  var K := A[0];
  var Count := 0;
  
  var i := 0;
  while i < N do
  begin
    while (i < N) and (A[i] = K) do
    begin
      Inc(i);
      Inc(Count);
    end;
    WritelnFormat('{0}:{1}', K, Count);
    if i < N then
    begin
      K := A[i];
      Count := 0;
    end;
  end;
end.
Вариант второй[править]
//Аналог через готовые методы.
begin
  ReadlnString().AdjacentGroup().Select(x -> Format('{0}({1})', x.First, x.Count)).JoinIntoString('').Println();
end.

Удаление двух максимумов и двух минимумов[править]

begin
  var A := Arr(1, 2, 34, 4, 15, 6, 71, 8, 9);
  A := A.Numerate().Println().OrderBy(x -> x[1]).Skip(2).SkipLast(2).OrderBy(x -> x[0]).Select(x -> x[1]).ToArray();
  Writeln(A);
end.

Случайные последовательности[править]

Последовательность без повторений[править]
const
  D = 5;

begin
  for var i := 1 to 10 do
  begin
    var m := i * D;
    Writeln(Random(m, m + D - 1));
  end;
end.

Обработка чисел[править]

Перевод секунд в часы, минуты и секунды[править]

begin
  var Seconds := ReadlnInteger();
  var H := Seconds div 3600 mod 24;
  var M := Seconds mod 3600 div 60;
  var S := Seconds mod 60; 
  WritelnFormat('{0}:{1}:{2}', H, M, S);
end.

Вывод делителей числа[править]

begin
  var X := ReadInteger('Введите целое число x (x > 1): ');
  Assert(X > 1);
  
  var I := 2;
  WriteFormat('{0} = 1', X);
  
  repeat
    if X mod I = 0 then
    begin
      WriteFormat(' * {0}', I);
      X := X div I;
    end
    else
      I += 1;
  until X = 1;
  
  Writeln();
end.

Вывод цифр числа в правильном порядке[править]

var
  N: integer;
  C: integer;

begin
  Readln(N);
  
  var N2 := N;
  while N2 <> 0 do
  begin
    Inc(C);
    N2 := N2 div 10;
  end;
  Dec(C);
  C := Round(Power(10, C));
  
  while C > 0 do
  begin
    Writeln(N div C);
    N := N mod C;
    C := C div 10;
  end;
end.

Переворот числа[править]

var
  N: integer;
  C: integer;

begin
  Readln(N);
  
  var N2 := N;
  while N2 <> 0 do
  begin
    Inc(C);
    N2 := N2 div 10;
  end;
  Dec(C);
  C := Round(Power(10, C));
  
  N2 := 0;
  while N > 0 do
  begin
    N2 += N mod 10 * C;
    N := N div 10;
    C := C div 10;
  end;
  Writeln(N2);
end.

Квадраты чисел[править]

Найти все такие числа, запись которых совпадает с последними цифрами их квадрата.

function IsSuitable(a: integer): boolean;
begin
  var b := Sqr(a);
  
  Result := true;
  while Result and (a <> 0) do
  begin
    if a mod 10 <> b mod 10 then Result := false;
    a := a div 10;
    b := b div 10;
  end;
end;

begin
  var N:=ReadlnInteger();
  
  for var i := 1 to N do
    if IsSuitable(i) then Writeln(i);
end.

Поиск натурального N[править]

Вычислить такое N, при котором последовательность вида Sqrt(6 + Sqrt(6 + Sqrt(6 + … Sqrt(6)))) / N приближается к 3 с погрешностью 10^(-4).

const
  Infelicity = 1E-4;

begin
  var F := Sqrt(6.0);
  var N := 1;
  
  while Abs(F - 3) > Infelicity do
  begin
    F := Sqrt(6 + F);
    Inc(N);
  end;
  
  WritelnFormat('N = {0}.', N);
end.

Поиск наибольшего общего делителя[править]

Для пары чисел[править]
begin
  var A := ReadlnInteger('A:');
  var B := ReadlnInteger('B:');
  
  while (A <> 0) and (B <> 0) do
    if A > B then A := A mod B else B := B mod A;
  
  Writeln(A + B);
end.
Для N чисел[править]
const
  N = 4;

var
  A: array[0..N - 1] of integer;
  Outcome: integer;

function F(a, b: integer): integer;
begin
  while (a <> 0) and (b <> 0) do
    if a > b then a := a mod b else b := b mod a;
  Result := a + b;
end;


begin
  for var i := 0 to N - 1 do
    Readln(A[i]);
  
  Outcome := F(A[0], A[1]);
  for var i := 2 to N - 1 do
    Outcome := F(Outcome, A[i]);
  WritelnFormat('НОД = {0}.', Outcome);
end.

Таблица умножения в шестнадцатеричной системе счисления[править]

const
  S = '0123456789ABCDEF';

function ToHex(x: integer): string;
begin
  while x <> 0 do
  begin
    Result := S.Chars[x mod 16 + 1] + Result;
    x := x div 16;
  end;
end;

begin
  for var i := 1 to 9 do
  begin
    for var j := 1 to 9 do
      Write(ToHex(i * j):5);
    Writeln();
  end;
end.

Поразрядное сравнение чисел[править]

begin
  var A := ReadlnInteger('A:');
  var B := ReadlnInteger('B:');
  var C := 0;
  
  while (A <> 0) and (B <> 0) do
  begin
    if A mod 10 = B mod 10 then Inc(C);
    A := A div 10;
    B := B div 10;
  end;
  WritelnFormat('Количество совпадений в равносильных разрядах чисел равно {0}.', C);
end.

Задачи на матрицы[править]

Обнуление элементов, стоящих выше главной диагонали и ниже побочной[править]

begin
  var N := ReadlnInteger();
  var A := MatrRandom(N, N, 1, 10);
  A.Println();
  
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if (i < j) and (N - i - 1 < j) then
        A[i, j] := 0;
  
  Writeln();
  A.Println();
end.

Треугольник Паскаля[править]

const
  M = 15;

var
  A: array[1..M, 1..M] of integer;
  N: integer;

begin
  Write('Количество итераций: ');
  Readln(N);
  
  A[1, 1] := 1;
  
  for var i := 2 to N + 1 do
    for var j := 1 to N + 1 do
      if (j = 1) or (j = i) then
        A[i, j] := 1
      else
        A[i, j] := A[i - 1, j - 1] + A[i - 1, j];
  
  for var i := 1 to N do 
  begin
    for var j := 1 to N do
      if A[i, j] <> 0 then write(A[i, j]:5);
    Writeln();
  end;
end.

Перемножение матриц[править]

var
  MatrixA, MatrixB: array [,] of integer;
 
procedure PrintMatrix(matrix: array [,] of integer);
begin
  for var i := 0 to Length(matrix, 0) - 1 do
  begin
    for var j := 0 to Length(matrix, 1) - 1 do
      Write(matrix[i, j]:4);
    Writeln();
  end;
end;
 
function MultMatrixes(matrixA, matrixB: array [,] of integer): array [,] of integer;
begin
  if Length(matrixA, 1) = Length(matrixB, 0) then
  begin
    SetLength(Result, Length(matrixA, 0), Length(matrixB, 1));
    for var i := 0 to Length(Result, 0) - 1 do
      for var j := 0 to Length(Result, 1) - 1 do
        for var AjBi := 0 to Length(matrixA, 1) - 1 do
            Result[i, j] += matrixA[i, AjBi] * matrixB[AjBi, j];
  end
  else
    raise new Exception('Количество столбцов первой матрицы не равно количеству строк второй.');
end;

begin
  SetLength(MatrixA, 3, 2);
  SetLength(MatrixB, 2, 2);
  
  for var i := 0 to Length(MatrixA, 0) - 1 do
    for var j := 0 to Length(MatrixA, 1) - 1 do
      MatrixA[i, j] := Random(6);
  
  for var i := 0 to Length(MatrixB, 0) - 1 do
    for var j := 0 to Length(MatrixB, 1) - 1 do
      MatrixB[i, j] := Random(6);
  
  Writeln('MatrixA:');
  PrintMatrix(MatrixA);
  Writeln();
  
  Writeln('MatrixB:');
  PrintMatrix(MatrixB);
  Writeln();
  
  Writeln('MatrixC:');
  PrintMatrix(MultMatrixes(MatrixA, MatrixB));
end.

Сортировки[править]

Быстрая сортировка[править]

Описание алгоритма
  1. Найти средний элемент.
  2. Выполнять цикл до тех пор пока элементы x[i] и x[j] находятся на правильных местах (x[i]-ый левее или на той же позиции, что и x[j]).
  3. Найти такой i-ый элемент, что он будет больше или равен m.
  4. Найти такой j-ый элемент, что он будет меньше или равен m.
  5. Если элементы i-ый и j-ый нашлись, то если они находятся в правильном порядке, поменять их местами и сдвинуть i на 1 вправо, а j — на 1 влево.
  6. Если длина подмассива от l до j превышает или равна 1, то вызвать рекурсивно для нее процедуру.
  7. Если длина подмассива от i до r превышает или равна 1, то вызвать рекурсивно для нее процедуру.
const
  N = 10;

var
  A: array of integer;

procedure Sort(var x: array of integer; l, r: integer);
var
  i, j, m: integer;
begin
  i := l; 
  j := r; 
  m := x[(l + r) div 2];
  
  while i <= j do
  begin
    while x[i] < m do Inc(i); 
    while x[j] > m do Dec(j); 
    if i <= j then 
    begin
      Swap(x[i], x[j]); 
      Inc(i); 
      Dec(j);
    end;
  end;
  
  if l < j then Sort(x, l, j); 
  if i < r then Sort(x, i, r); 
end;

begin
  SetLength(A, N);
  
  for var i := 0 to N - 1 do A[i] := Random(100);
  
  Writeln(A); 
  Sort(A, 0, N - 1); 
  Writeln(A); 
end.
  1. Элементы x[i], x[j] рано или поздно найдутся: поскольку даже если все элементы стоят на своих местах, то x[i] и x[j] будут равны m.
  2. Если i пробежал n элементов и указывает на n + 1, то все n элементов стоят на правильных местах. Аналогично и с j.

Бинарный поиск[править]

const
  N = 10;

var
  A: array of integer;

procedure Sort(var x: array of integer; l, r: integer);
var
  i, j, m: integer;
begin
  i := l; 
  j := r; 
  m := x[round((l + r) / 2)];
  
  repeat
    while x[i] < m do Inc(i); 
    while x[j] > m do Dec(j); 
    if i <= j then 
    begin
      Swap(x[i], x[j]); 
      Inc(i); 
      Dec(j); 
    end; 
  until i > j;
  
  if l < j then Sort(x, l, j); 
  if i < r then Sort(x, i, r); 
end;

procedure BinarySeach(var a: array of integer; x, l, r: integer);
  function NewMiddle()  := round((l + r) / 2);

begin
  var m := NewMiddle();
  
  while l <= r do
  begin
    if a[m] = x then
    begin
      WritelnFormat('Элемент {0} был найден в позиции {1}.', x, m);
      exit;
    end
    else if x > a[m] then
    begin
      l := m + 1;
      m := NewMiddle();
    end
    else
    begin
      r := m - 1;
      m := NewMiddle();
    end
  end;
  WritelnFormat('Не обнаружено элемента со значением {0}.', x);
end;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
    A[i] := Random(10);
  
  Sort(A, 0, N - 1);
  Writeln(A);
  BinarySeach(A, 4, 0, N - 1);
end.

Смотрите также: реализация на Python

Математические задачи[править]

Задача про фундамент[править]

Вычислить значения все N при изначальном F1, шаге H и последнем F2. Причем, применялись формулы:

F = (N - RS) / (D - R), если F > 0.03S
F = (N - RS) / D, если F ≤ 0.03S
begin
  var F1 := ReadlnInteger('F1:');
  var F2 := ReadlnInteger('F2:');
  var H := ReadlnInteger('H:');
  
  var R := ReadlnInteger('R:');
  var S := ReadlnInteger('S:');
  var D := ReadlnInteger('D:');
  
  while F1 <= F2 do
  begin
    if F1 > 0.03 * S then
      Writeln(F1 * (D - R) + R * S)
    else
      Writeln(F1 * D + R * S);
    Inc(F1, H);
  end;
end.

Треугольник с максимальным периметром[править]

const
  N = 6;

type
  TPoint = auto class
    X, Y: integer;
  end;
  
  TPointComparer = auto class(IEqualityComparer<TPoint>)
  public 
    function Equals(a, b: TPoint) := (a.X = b.X) and (a.Y = b.Y);
    
    function GetHashCode(a: TPoint) := 0;
  end;

function Distance(a, b: TPoint) := Sqrt(Sqr(b.X - a.X) + Sqr(b.Y - a.Y));

function IsTriangle(a, b, c: TPoint): boolean;
begin
  var d1 := Distance(a, b);
  var d2 := Distance(b, c);
  var d3 := Distance(c, a);
  Result := (d1 + d2 <> d3) and (d2 + d3 <> d1) and (d3 + d1 <> d2);
end;

function Perimeter(a, b, c: TPoint) := Distance(a, b) + Distance(b, c) + Distance(c, a);

begin
  var A := ReadArrInteger(N).Batch(2).Select(x -> new TPoint(x.First, x.Last)).Distinct(new TPointComparer()).ToArray();
  
  Writeln(A);
  
  var P := 0.0;
  for var i := 0 to Length(A) - 1 do
    for var j := i + 1 to Length(A) - 1 do
      for var k := j + 1 to Length(A) - 1 do
      begin
        var P2 := Perimeter(A[i], A[j], A[k]);
        if IsTriangle(A[i], A[j], A[k]) and (P2 > P) then
          P := P2;
      end;
  
  if P > 0.0 then
    WritelnFormat('Треугольник с максимальным P = {0} существует.', P)
  else
    Writeln('Треугольник с максимальным P не существует.');
end.
Разделы справки, которые могут помочь:
  1. Классы -> Автоклассы.
  2. Интерфейсы.

IEqualityComparer<T> — что такое?

Суммы цифр чисел файла[править]

var
  N, S: integer;
  F: Text;

begin
  Assign(F, 'C:IlyaAlgoРитмыСохраненные задачиФайлыtest.txt');
  Reset(F);
  while not Eof(F) do
  begin
    Read(F, N);
    while N <> 0 do
    begin
      S += N mod 10;
      N := N div 10;
    end;
    WriteFormat('{0} ', S);
    S := 0;
  end;
  
  Writeln();
  Close(F);
end.

Ближайшая и дальняя точки[править]

const
  N = 4;

type
  TPoint = record
    X, Y: real;
    Dist: real;
  end;

var
  A: array [0..N] of TPoint;
  Found: boolean;

begin
  for var i := 0 to N - 1 do
  begin
    A[i].X := ReadlnReal('X:');
    A[i].Y := ReadlnReal('Y:');
    A[i].Dist := Sqrt(Sqr(A[i].X) + Sqr(A[i].Y));
  end;
  
  var Min := real.MaxValue;
  var MinI := 0;
  
  for var i := 0 to N - 1 do
  begin
    if A[i].Dist < Min then
    begin
      Min := A[i].Dist;
      MinI := i;
    end;
  end;
  
  WritelnFormat('Ближняя точка {0} имеет расстоянее до начала координат, равное {1}.', MinI, Min);
  
  Found := false;
  for var i := 0 to N - 1 do
    if (MinI <> i) and (Min = A[i].Dist) then
    begin
      WritelnFormat('Точка {0} также близка как ближайшая к началу координат.', i);
      Found := true;
    end;
  if not Found then Writeln('Более ближайших точек не обнаружено.');
  
  var Max := real.MinValue;
  var MaxI := 0;
  
  for var i := 0 to N - 1 do
  begin
    if A[i].Dist > Max then
    begin
      Max := A[i].Dist;
      MaxI := i;
    end;
  end;
  
  WritelnFormat('Дальняя точка {0} имеет расстоянее до начала координат, равное {1}.', MaxI, Max);
  
  Found := false;
  for var i := 0 to N - 1 do
    if (MaxI <> i) and (Max = A[i].Dist) then
      WritelnFormat('Точка {0} также далека как дальняя от начала координат.', i);
  if not Found then Writeln('Более дальних точек не обнаружено.');
end.

Сортировка треугольников по возрастанию периметра[править]

const
  N = 3;

type
  TPoint = record
    X, Y: integer;
    
    constructor(px, py: integer);
    begin
      X := px;Y := py;
    end;
  end;
  
  TTriangle = record
    A, B, C: TPoint;
    P: real;
    
    constructor(pA, pB, pC: TPoint);
    begin
      A := pA;B := pB;C := pC;
    end;
  end;

function ReadlnPoint()  := new TPoint(ReadlnInteger('X:'), ReadlnInteger('Y:'));

function Distance(pA, pB: TPoint) := Sqrt(Sqr(pA.X - pB.X) + Sqr(pA.Y - pB.Y));

function PointToString(p: TPoint) := Format('({0}, {1})', p.X, p.Y);

function TriangleToString(t: TTriangle) := Format('Triangle: A{0}, B{1}, C{2}, P = {3}.', PointToString(t.A), PointToString(t.B), PointToString(t.C), t.P);

var
  A: array [0..N - 1] of TTriangle;

begin
  for var i := 0 to N - 1 do
  begin
    Writeln('New triangle:');
    A[i] := new TTriangle(ReadlnPoint(), ReadlnPoint(), ReadlnPoint());
    A[i].P := Distance(A[i].A, A[i].B) + Distance(A[i].B, A[i].C) + Distance(A[i].C, A[i].A);
  end;
  
  for var i := 0 to N - 1 do
    for var j := i + 1 to N - 1 do
      if A[i].P > A[j].P then
        Swap(A[i], A[j]);
  
  for var i := 0 to N - 1 do
    Writeln(TriangleToString(A[i]));
end.

Дальние треугольники[править]

const
  N = 6;

type
  TPoint = auto class
    X, Y: real;
  end;

var
  L: List<(TPoint, TPoint, TPoint)>;
  Max: real;
  i1, i2: integer;

begin
  L := new List<(TPoint, TPoint, TPoint)>();
  
  for var i := 1 to N do
    L.Add((new Point(ReadlnInteger('X1:'), ReadlnInteger('Y1:')),
           new Point(ReadlnInteger('X2:'), ReadlnInteger('Y2:')),
           new Point(ReadlnInteger('X3:'), ReadlnInteger('Y3:'))
          ));
  
  Max := real.MinValue;
  for var i := 0 to N - 1 do
    for var j := i + 1 to N - 1 do
    begin
      var p1 := new TPoint((L[i].Item1.X + L[i].Item2.X + L[i].Item3.X) / 3,
                          (L[i].Item1.Y + L[i].Item2.Y + L[i].Item3.Y) / 3);
      var p2 := new TPoint((L[j].Item1.X + L[j].Item2.X + L[j].Item3.X) / 3,
                          (L[j].Item1.Y + L[j].Item2.Y + L[j].Item3.Y) / 3);                 
      var d := Sqrt(Sqr(p1.X - p2.X) + Sqr(p1.Y - p2.Y));
      if d > Max then
      begin
        i1 := i;
        i2 := j;
        Max := d;
      end;
    end;
  
  WritelnFormat('Индексы дальних треугольников: {0} и {1}.', i1, i2);
end.

Более сложные задачи[править]

Конвертирование числа в строку[править]

const
  S = '0123456789ABCDEF';

function ToString(a, base: integer): string;
begin
  while a <> 0 do
  begin
    Result := S.Chars[a mod base + 1] + Result;
    a := a div base;
  end;
end;

function ToStringRecursive(a, base: integer): string;
begin
  if a <> 0 then
    Result := S.Chars[a mod base + 1] + Result
  else
    Result := ToString(a div base, base);
end;

begin
  Writeln(ToString(15, 2) = ToStringRecursive(15, 2));
end.

Задача о детях[править]

const
  N = 3;

type
  TPerson = auto class
    Surname, Name: string;
    Year: integer;
    Mass, Height: integer;
  end;

var
  A: array of TPerson;

begin
  SetLength(A, N);
  for var i := 0 to N - 1 do
  begin
    var p := ReadlnString().ToWords();
    A[i] := new TPerson(p[0], p[1], StrToInt(p[2]), StrToInt(p[3]), StrToInt(p[4]));
  end;
  
  A.Where(x -> begin
                 var d := 2017 - x.Year;
                 Result := (d >= 10) and (d <= 12) and (x.Height >= 155) and (x.Mass <= 45)
               end).Select(x -> Format('{0} {1} {2} {3} {4}', x.Surname, x.Name, x.Year, x.Mass, x.Height)).Println();
end.

Потенциальные друзья[править]

Школа юных программистов решила разработать собственную социальную сеть, которая должна автоматически подбирать для каждого пользователя потенциальных друзей. При регистрации каждому пользователю сети предлагается пройти психологическое тестирование, по результатам которого определяются значения трёх психологических характеристик этого пользователя. Значение каждой характеристики — целое положительное число.

Считается, что если у двух пользователей различаются значения всех трёх психологических характеристик, то они будут постоянно ссориться, а если совпадают значения двух или трёх характеристик, то им будет скучно. Таким образом, потенциальными друзьями являются только такие пары пользователей, у которых совпадают значения ровно одной характеристики, а значения двух других — различаются.

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

var
  A: array of (integer, integer, integer);
  Count: integer;
 
begin
  SetLength(A, ReadlnInteger('Количество людей:'));
  for var i := 0 to A.Length - 1 do
  begin
    var p := ReadlnString().ToWords().ConvertAll(x -> StrToInt(x));
    A[i] := (p[0], p[1], p[2]);
  end;
  
  for var i := 0 to A.Length - 1 do
    for var j := i + 1 to A.Length - 1 do
      if Ord(A[i].Item1 = A[j].Item1) + Ord(A[i].Item2 = A[j].Item2) + Ord(A[i].Item3 = A[j].Item3) = 1 then
        Inc(Count);
  
  Writeln(Count);
end.
//Аналог через готовые методы.
begin
  var A := Range(1, ReadlnInteger('Количество людей')).Select(i -> ReadlnString().ToIntegers()).ToArray();
  Writeln(A.Cartesian(A, (v, t) -> Ord(v[0] = t[0]) + Ord(v[1] = t[1]) + Ord(v[2] = t[2])).Count(v -> v = 1) div 2);
end.

Хорошисты и отличники[править]

Вывести фамилии и имена студентов, сдавших 3 экзамена на 4 или 5.

type
  TAssessments = (integer, integer, integer, integer);
  TStatement = record
    Surname, Name: string;
    Assessments: TAssessments;
    
    constructor(s, n: string; a: TAssessments);
    begin
      Surname := s;Name := n;
      Assessments := a;
    end;
  end;
 
var
  L: List<TStatement>;
 
function F(a: integer) := (a = 4) or (a = 5);
 
begin
  L := new List<TStatement>();
  
  for var i := 0 to ReadlnInteger('N:') - 1 do
  begin
    var p := ReadlnString().ToWords();
    var k := p.Skip(2).ToList().ConvertAll(x -> StrToInt(x));
    L.Add(new TStatement(p[0], p[1], (k[0], k[1], k[2], k[3])));
  end;
  
  Writeln('Сдали 3 экзамена на 4 или 5:');
  L.Where(x -> Ord(F(x.Assessments.Item1)) + Ord(F(x.Assessments.Item2)) + Ord(F(x.Assessments.Item3)) + Ord(F(x.Assessments.Item4)) = 3).
  Select(x -> Format('{0} {1}', x.Surname, x.Name)).JoinIntoString(NewLine).Println();
  
  Writeln('Не сдали экзамены:');
  L.Where(x -> (x.Assessments.Item1 < 3) or (x.Assessments.Item2 < 3) or (x.Assessments.Item3 < 3) or (x.Assessments.Item4 < 3)).
  Select(x -> Format('{0} {1}', x.Surname, x.Name)).JoinIntoString(NewLine).Println();
end.

1. Найти значение выражения 1*1+2*2+…+n*n.

2. Сумма.

3. Составить из двух таблиц 3-ю упорядоченную по возраст.

4. Найти максимальное число из трёх.

5. Найти максимальное число из четырёх.

6. Кол-во букв «а» в тексте.

7. Среднее арифметическое таблицы.

8. Степень числа.

9. Факториал числа.

10. Подсчет кол-ва часов, минут и секунд в данном числе суток.

11. Составить программу проверки есть ли в тексте буква «s».

12. Найти значение выражения.

13. Найти значение выражения.

14. Определить лежит ли точка а на прямой y=kx+l.

15. Расположить слова в порядке убывания их длины в предложении.

16. Найти кол-во отрицательных элементов таблицы.

17. Найти максимальный элемент таблицы а[1..10].

18. Получить элементы таблицы, которые находятся между max и min.

19. Яв-ся ли треугольник равнобедренным.

20. Лежит ли точка на прямой.

21. Проверить существует ли строгое чередование.

22. Пересекаются ли отрезки.

23. Яв-ся ли n-угольник выпуклым.

24. Определить расстояния от точки до прямой.

25. Найти площадь треугольника (используя формулу Герона).

26. Даны координаты диагонали прямоугольника. Найти его площадь.

27. Найти номер максимального элемента таблицы а[1..10].

28. Составить программу упорядочивания элементов таблицы.

29. Составить программу вычисления (min(a,c)-min(a,b)/(5+min(b,c))

30. Яв-ся ли число b делителем числа a.

31. Составить программу определяющую яв-ся ли число простым.

32. Составить программу нахождения НОД и НОК двух чисел a и b.

33. Составить программу решения квадратного ур-я.

34. Найти сумму элементов прямоугольной таблицы размером [n:m]

35. Найти мaксимальный элемент прямоугольной таблицы размером [n:m].

36. Найти число.

37. Найти максимальный элемент таблицы и их кол-во.

38. Дано предложение, определить кол-во слов в нём.

39. Дан текст, определить кол-во слов «кот».

40. Определить является ли данное слово перевертышем.

41. Найти количество различных чисел в одномерной таблице.

42. Каждую букву слова A поместить в таблицу.

43. Найти наименьшее однозначное число х удовлетворяющее условию x*x*x-x*x=n.

44. Составить алгоритм нахождения суммы цифр числа.

45. Найти двузначное число сумма кубов цифр которого равна n.

46. Получить из слова a, вычеркивание некоторого кол-ва букв, слово b.

47. Заданы 2 точки. Определить какой из отрезков AO или BO образует больший угол с осью OX.

48. Записать положительные элементы таблицы А в таблицу В, а отрицательные элементы таблицы А в табл С.

49. Яв-ся ли перевёртышем число.

50. Построить таблицу С в которой сначала размещаются все элементы А, затем все элементы таблицы В.

51. Решить систему ур-ий {ax+by+c=0 и a1x+b1y+c1=0.

52. Определить площадь и периметр треугольника.

53. Дана таблица содержащая группы одинаковых подряд идущих чисел. Вывести на экран «число — кол-во чисел в группе, число — кол-во чисел в группе, … «

54. Определить площадь четырёхугольника.

55. Разбить выпуклый n-угольник на треугольники диагоналями так, чтобы…

56. Определить стоимость телеграммы.

57. Дана таблица a[1..n]. Ввести таблицу b[1..n] отбросив из а каждый второй элемент.

58. Дана таблица a[1..n] из целых чисел. Поставить сначала четные, а потом нечетные элементы.

59. Найти наибольшее кол-во одинаковых элементов.

60. Дана точка. Лежит ли она в кольце.

61. Примеры типов величин.

62. Табличные величины. Одномерный массив.

63. Табличные величины. Двумерный массив.

64. На оси Оx заданы N точек с координатами x1,x2,…,xn. Найти такую точку Z сумма расстояний от которой до данных точек минимальная.

65. Имеется n банок с целочисленными объёмами v1,v2,v3…,vn литров, пустой сосуд и кран с водой. Можно ли с помощью этих банок налить в сосуд ровно v литров воды. Решение: Обозначим s=nod(v1,v2…,vn). Если v делится нацело на s, то в сосуд с помощью банок можно налить v литров воды, иначе — нет.

66. Дана последовательность натуральных чисел. Найти наименьшее натуральное число, которое отсутствует в последовательности.

67. Дан выпуклый n-угольник и точка (х1,у1). Определить: а) является ли точка вершиной; б) принадлежит ли точка n-угольнику.

program z1;

{ Найти значение выражения 1*1+2*2+…+n*n }

var n,s,i : integer;

begin

write(‘n = ‘);

readln(n);

s:=0;

for i:=1 to n do

s:=s+i*i;

writeln(‘s = ‘,s);

readln;

end.

program z2;

{ Найти сумму. }

uses crt;

var a,b,s : integer;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

s:=a+b;

write(‘сумма s=’,s);

readln;

end.

program z3;

{ Даны две таб. Составить из них 3 таб. упорядоченную по возраст. }

uses crt;

var a : array [1..10] of longint;

b : array [1..20] of longint;

c : array [1..30] of longint;

n,m,k,l,i,j,min : longint;

begin

clrscr;

write(‘введ.кол.эл.таб.а n=’);readln(n);

write(‘введ.кол.эл.таб.b m=’);readln(m);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

for i:=1 to m do

begin

write(‘b[‘,i,’]=’);readln(b[i]);

end;

k:=n+m;{кол.эл.таб.с}

(*заносим эл.таб.а в таб.с*)

for i:=1 to n do c[i]:=a[i];

(*заносим эл.таб.в в таб.с*)

for i:=1 to m do c[i+n]:=b[i];

(*упорядочим таб.с[1..k] по возраст*)

for i:=1 to k-1 do

begin

l:=i;{номер мин.}min:=c[i];

for j:=i+1 to k do

if c[j]

begin

min:=c[j];l:=j;

end;

c[l]:=c[i];{меняем местами 1-й и мин.эл.}

c[i]:=min;

end;

for i:=1 to k do writeln(‘Ответ:c[‘,i,’]=’,c[i]);

readln;

end.

program z4;

{ Найти максимальное число из трёх. }

uses crt;

var a,b,c,max : integer;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

write(‘c=’);readln(c);

if (ab) and (ac) then max:=a;

if (ba) and (bc) then max:=b;

if (ca) and (b

write(‘max=’,max);

readln;

end.

program z5;

{ Найти наибольшее из четырёх чисел. }

uses crt;

var a,b,c,d,max,max1,max2 : real;

procedure bol2( aa,bb : real; var maxmax : real );

begin

if aabb then maxmax:=aa

else maxmax:=bb;

end;

begin

clrscr;

write(‘введте a,b,c,d через пробел ‘);

readln(a,b,c,d);

bol2(a,b,max1);

bol2(c,d,max2);

bol2(max1,max2,max);

writeln(‘max=’,max);

readln;

end.

program z6;

{ Кол-во букв «а» в тексте. }

uses crt;

var d : string[30];

n,i : integer;

begin

write(‘наберите текст ‘);

readln(d);

n:=0;

for i:=1 to length(d) do

if d[i]=’а’ then n:=n+1;

write(‘В тексте а=’,n);

readln;

end.

program z7;

{ Сост. программу определения сред. ариф. таб. а}

uses crt;

var a : array [1..10] of integer;

s : real;

sum,n,i : integer;

begin

clrscr;

write(‘n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);

readln(a[i]);

end;

sum:=0;

for i:=1 to n do

sum:=sum+a[i];

s:=sum/n;

writeln(‘ср ариф= ‘,s);

readln;

end.

program z8;

uses crt;

{ Записать программу возвед. числа а в степень n }

var a,n,i,p : integer;

begin

clrscr;

write(‘n=’);readln(n);

write(‘a=’);readln(a);

p:=1;

for i:=1 to n do p:=p*a;

write(‘p=’,p);

readln;

end.

program z9;

uses crt;

{ Сост. прог. выч. факториала числа n.

Пример: 5!=1*2*3*4*5

7!=1*2*3*4*5*6*7 }

var f,n,i : integer;

begin

clrscr;

write(‘n=’);readln(n);

f:=1;

for i:=1 to n do f:=f*i;

write(‘f=’,f);

readln;

end.

program z10;

{ Написать программу подсчета кол-ва часов,

минут и секунд в данном числе суток. }

uses crt;

var syt,has,min,sec : extended;

begin

clrscr;

write(‘сут = ‘);

readln(syt);

has:=24*syt;

min:=60*has;

sec:=60*min;

writeln(‘часов : ‘,has:0:0);

writeln(‘минут : ‘,min:0:0);

writeln(‘секунд : ‘,sec:0:0);

readln;

end.

program z11;

{ Составить программу проверки есть ли в тексте буква «s» }

uses crt;

var t : string;

i : integer;

ot : boolean;

begin

clrscr;

writeln(‘введите текст:’);readln(t);

for i:=1 to length(t) do

if t[i]=’s’ then ot:=true;

if ot=true then write(‘да’)

else write(‘нет’);

readln;

end.

program z12;

{ Найти значение выражения ( -натуральное число, а0, х0,

у=1+(1/(1+(1/1+…1+1/x))..) ) n знаков «+» }

uses crt;

var x,n,i : integer;

y : real;

begin

clrscr;

write(‘n=’);readln(n);

write(‘x=’);readln(x);

y:=x;

for i:=1 to n do y:=1+1/y;

write(‘y=’,y);

readln;

end.

program z13;

{ Найти значение выражения ( -нат. число, а0, х0,

f=sqr(a+sqr(a+sqr(a+..sqr(a))..) ) n знаков «+» }

uses crt;

var a,n,i : integer;

f : real;

begin

clrscr;

write(‘n=’);readln(n);

write(‘a=’);readln(a);

f:=a;

for i:=1 to n do f:=a+sqr(f);

write(‘f = ‘,f);

readln;

end.

program z14;

{ Определить лежит ли точка а на прямой y=kx+l }

uses crt;

var x,y,l,k : integer;

begin

clrscr;

write(‘x=’);readln(x);

write(‘y=’);readln(y);

write(‘k=’);readln(k);

write(‘l=’);readln(l);

if y=k*x+l then write(‘Да’)

else write(‘Нет’);

readln;

end.

program z15;

{ Дано предложение составить программу располагающую

слова в порядке убывания длины слов }

uses crt;

type slov = array [1..10] of string;

var p,b : string;

s : slov;

i,j,l : integer;

q : boolean;

procedure maxdl( ii,jj : integer;ss : slov; var ll : integer );

var t:integer;m:string;

begin

m:=ss[ii]; { считает max(t) }

ll:=ii; { l-номер max }

for t:=ii+1 to jj do

if length(m)

begin

m:=ss[t];

ll:=t;

end;

end;

begin

clrscr;

write(‘текст p=’);readln(p);

j:=1;

for i:=1 to length(p) do

begin

b:=p[i];

if b=’ ‘ then j:=j+1

else s[j]:=s[j]+b;{ склеивание слова и заносим в таб }

end;

b:=»;

for i:=1 to j do

begin

maxdl(i,j,s,l); { находим номер мах элм }

b:=s[i]; { меняем местами мах элм: }

s[i]:=s[l];

s[l]:=b;

end;

for i:=1 to j do write(s[i],’ ‘);

readln;

end.

program z16;

{ Дана вещ. таблица a[1..n].

Найти кол-во отрицательных элементов таблицы. }

uses crt;

var k,n,i : longint;

a : array [1..10] of longint;

begin

clrscr;

write(‘n = ‘);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

for i:=1 to n do

if a[i]

write(‘k = ‘,k);

readln;

end.

program z17;

{ Найти максимальный элемент таблицы а[1..10] }

uses crt;

var a : array [1..10] of longint;

max,i,n : longint;

begin

clrscr;

write(‘n = ‘);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

max:=a[1];

for i:=2 to n do

if a[i]max then max:=a[i];

write(‘max = ‘,max);

readln;

end.

program z18;

{ Дана таб a[1..n] из целых чисел. Получить

элементы, которые находятся между max и min}

uses crt;

var a,b : array [1..10]of longint;

f,i,j,n,m,max,min,k,l : longint;

label met;

begin

clrscr;

write(‘кол-во элм. табл. n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

max:=a[1];k:=1;

for i:=2 to n do

if a[i]max then

begin

max:=a[i];k:=i;

end;

min:=a[1];l:=1;

for i:=2 to n do

if a[i]

begin

min:=a[i];l:=i;

end;

if k

begin

for f:=k+1 to l-1 do

begin

j:=j+1;b[j]:=a[f];m:=m+1;

end;

goto met;

end;

if l

begin

for f:=l+1 to k-1 do

begin

j:=j+1;b[j]:=a[f];m:=m+1;

end;

end;

met : writeln;

for j:=1 to m do writeln(b[j]);

readln;

end.

program z19;

{ Даны координаты вершин треугольника

ABC A(x1;y1), B(x2;y2), C(x3;y3)

яв-ся ли треугольник равнобедренным }

uses crt;

var x1,x2,x3,y1,y2,y3,a,b,c : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

a:=sqrt(sqr(x1-x2)+sqr(y1-y2));

b:=sqrt(sqr(x2-x3)+sqr(y2-y3));

c:=sqrt(sqr(x1-x3)+sqr(y1-y3));

if (a=b)or(a=c)or(b=c) then write(‘равнобедренный’)

else write(‘не равнобедренный’);

readln;

end.

program z20;

{ Составить программу для определения лежит ли точка (x3;y3),

на прямой проходящей через точки (x1;y1),C(x2;y2) }

uses crt;

var x1,x2,x3,y1,y2,y3 : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

if (x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)=0

then write(‘лежит’)

else write(‘не лежит’);

readln;

end.

program z21;

{ Дана таб. а[1..n],сост. из нулей и единиц.

Проверить сущ. ли строгое чередование }

uses crt;

var a:array[1..10]of integer;

flag,i,k,n:integer;

begin

clrscr;

write(‘кол-во элм. таб. n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

i:=1;

while i

begin

flag:=0;

if ((a[i]=1)and(a[i+1]=0))or((a[i]=0)and(a[i+1]=1))

then flag:=1

else begin

write(‘нет’);flag:=0;

readln;halt;

end;

i:=i+2;

end;

if flag=1 then write(‘чередование существует’);

readln;

end.

program z22;

{ Пересекаются ли отрезки задаными координатами

(x1;y1),(x2;y2),(x3;y3),(x4;y4). }

uses crt;

var x1,x2,x3,x4,y1,y2,y3,y4,

l,l1,l2,p,p1,p2 : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

write(‘x4=’);readln(x4);

write(‘y4=’);readln(y4);

if x1

if x3

if l1l2 then l:=l1 else l:=l2;

if x1x2 then p1:=x1 else p1:=x2;

if x3x4 then p2:=x3 else p2:=x4;

if p1p2 then p:=p2 else p:=p1;

if lпересекаются’)

else write(‘не пересекаются’);

readln;

end.

program z23;

{ Определить яв-ся ли n-угольник выпуклым

Ввод состоит из n отрезков, n3 и n

uses crt;

var m,n,k,i,j : integer;

ot : boolean;

x,y : array[1..10] of integer;

z1,z2 : real;

procedure haltproc;

begin

writeln(‘Неверные данные’);

writeln(‘n = 3’);

readln;

halt;

end;

begin

clrscr;

write(‘n=’);readln(n);

if n

for i:=1 to n do

begin

write(‘x[‘,i,’]=’);readln(x[i]);

write(‘y[‘,i,’]=’);readln(y[i]);

end;

ot:=true;

for i:=1 to n do

begin

j:=i+1;

k:=j+1;

if k=n+1 then k:=1;

if i=n then j:=1;

m:=i-1;

if m=n-1 then k:=2;

if i=1 then m:=n;

z1:=(x[m]-x[i])*(y[j]-y[i])-(y[m]-y[i])*(x[j]-x[i]);

z2:=(x[k]-x[i])*(y[j]-y[i])-(y[k]-y[i])*(x[j]-x[i]);

if z1*z2

end;

if ot=true then write(‘выпуклый’)

else write(‘не выпуклый’);

readln;

end.

program z24;

{ Составить программу для определения расстояния от точки (x3;y3)

до прямой проходящей через точки (x1;y1),(x2;y2) }

uses crt;

var x1,x2,x3,y1,y2,y3,a,b,c,d,t : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

a:=y2-y1;

b:=x1-x2;

c:=-x1*(y2-y1)+y1*(x2-x1);

t:=sqrt(a*a+b*b);

d:=abs((a*x3+b*y3+c)/t);

write(‘расстояние =’,d);

readln;

end.

program z25;

{ Треугольник задан координатами вершин (x1;y1),(x2;y2),(x3;y3).

Найти площадь треугольника (используя формулу Герона) }

uses crt;

var x1,x2,x3,y1,y2,y3,a,b,c,s,p : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

a:=sqrt(sqr(x1-x2)+sqr(y1-y2));

b:=sqrt(sqr(x2-x3)+sqr(y2-y3));

c:=sqrt(sqr(x3-x1)+sqr(y1-y3));

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

write(‘s=’,s);

readln;

end.

program z26;

{ Даны координаты диагонали прямоугольника.

Найти его площадь. }

uses crt;

var x1,x2,y1,y2,s,a,b : real;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

a:=abs(x2-x1);

b:=abs(y2-y1);

s:=a*b;

write(‘s=’,s);

readln;

end.

program z27;

{ Найти номер максимального элемента таблицы а[1..10] }

uses crt;

var a : array [1..100] of longint;

k,i,n,max : longint;

begin

clrscr;

write(‘n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

max:=a[1];k:=1;

for i:=2 to n do

if a[i]max then

begin

max:=a[i];k:=i;

end;

write(‘номер: ‘,k);

readln;

end.

program z28;

{ Дан линейный массив из n эл-тов.

Составить программу упорядочивания элементов таблицы.}

uses crt;

var a : array [1..100] of longint;

j,i,n,max : longint;

begin

clrscr;

write(‘n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if a[j]a[i] then

begin

max:=a[j];

a[j]:=a[i];

a[i]:=max;

end;

for i:=1 to n do writeln(‘a[‘,i,’]=’,a[i] );

readln;

end.

program z29;

{ Даны числа a,b,c. Составить программу вычисления

(min(a,c)-min(a,b)/(5+min(b,c)) }

uses crt;

var a,b,c,m1,m2,m3,w:real;

procedure min(var d,e,m : real);

begin

if de then m:=e else m:=d;

end;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

write(‘c=’);readln(c);

min(a,c,m1);

min(a,b,m2);

min(b,c,m3);

w:=(m1-m2)/(5+m3);

writeln(‘ОТВЕТ:’,w);

readln;

end.

program z30;

{ Яв-ся ли число b делителем числа a. }

uses crt;

var a,b : integer;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

if a mod b=0 then write(‘делится’)

else write(‘не делится’);

readln;

end.

program z31;

{ Составить программу определяющую яв-ся ли число простым. }

uses crt;

var a : real;

p : boolean;

i : integer;

procedure haltproc;

begin

writeln(‘неверные данные’);

writeln(‘a=2’);readln;

halt;

end;

begin

clrscr;

write(‘a=’);readln(a);

if a

if a=2 then begin

writeln2(‘простое’);

readln;halt;

end;

p:=true;

for i:=2 to trunc(a-1) do

if a/i=trunc(a/i) then p:=false;

if p=true

then write(‘простое’)

else write(‘не простое’);

readln;

end.

program z32;

{ Составить программу нахождения НОД и НОК двух чисел a и b. }

uses crt;

var a,b,p : real;

nod,nok : real;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

p:=a*b;

while ab do

if ab then a:=a-b

else b:=b-a;

nod:=a;

nok:=p/nod;

writeln(‘НОД:’,a);

write(‘НОК:’,nok);

readln;

end.

program z33;

{ Составить программу решения квадратного ур-я. }

uses crt;

var a,b,c,x1,x2,d : real;

begin

clrscr;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

write(‘c=’);readln(c);

d:=sqr(b)-4*a*c;

if d0 then

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln(‘x1=’,x1);

writeln(‘x2=’,x2);

end;

if d=0 then

begin

x1:=(-b)/(2*a);

writeln(‘x=’,x1);

end;

if dкорней нет’);

readln;

end.

program z34;

{ Найти сумму элементов прямоугольной таблицы размером [n:m] }

uses crt;

var a : array [1..10,1..10] of longint;

i,j,n,m,s : longint;

begin

clrscr;

write(‘кол-во строк : ‘);readln(m);

write(‘кол-во столбцов : ‘);readln(n);

for i:=1 to m do

for j:=1 to n do

begin

write(‘a[‘,i,’,’,i,’]=’);readln(a[i,j]);

end;

for i:=1 to m do

for j:=1 to n do s:=s+a[i,j];

write(‘Сумма:’,s);

readln;

end.

program z35;

{ Найти maксимальный элемент прямоугольной

таблицы размером [n:m]. }

uses crt;

var a : array [1..10,1..10] of longint;

i,j,n,m,max : longint;

begin

clrscr;

write(‘кол-во строк : ‘);readln(m);

write(‘кол-во столбцов : ‘);readln(n);

for i:=1 to m do

for j:=1 to n do

begin

write(‘a[‘,i,’,’,j,’]=’);readln(a[i,j]);

end;

max:=a[1,1];

for i:=1 to m do

for j:=1 to n do

if max

write(‘max=’,max);

readln;

end.

program z36;

{ Цифры числа хранятся в таблице b. b[1] содержит цифру

высшего разряда a=a, a2, a3…an. Найти число. }

var n,i,a : integer;

b : array[1..6] of integer;

begin

write(‘Введите кол-во цифр числа n=’);

readln(n);

for i:=1 to n do

begin

write(‘b[‘,i,’]=’);readln(b[i]);

end;

a:=0;

for i:=1 to n do a:=a*10+b[i];

write(‘Число:’,a);

readln;

end.

program z37;

{ Найти макс. элм. таб. и кол-во макс. элементов }

uses crt;

var a : array [1..10] of longint;

k,n,i,max : longint;

begin

clrscr;

write(‘кол-во элм таб n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

max:=a[1];

for i:=2 to n do if a[i]max then max:=a[i];

for i:=1 to n do if a[i]=max then k:=k+1;

writeln(‘max=’,max);

writeln(‘кол-во: ‘,k);

readln;

end.

program z38;

{ Дано предложение, определить кол-во слов в нём. }

uses crt;

var tec : string;

l,i,n : longint;

begin

clrscr;

write(‘введите текст:’);readln(tec);

l:=length(tec)+1;tec[l]:=’ ‘;

for i:=1 to l do if tec[i]=’ ‘then n:=n+1;

write(‘В тексте ‘,n,’ слов’);

readln;

end.

program z39;

{ Дан текст, определить кол-во слов «кот». }

uses crt;

var a : string;

i,m,k,n : longint;

begin

clrscr;

write(‘введите текст ‘);readln(a);

k:=0;m:=length(a);

a:=a[m]+’ ‘;

for i:=1 to m do if a[i+2]=’кот’then inc(k);

write(‘В тексте ‘,k,’ слов кот’);

readln;

end.

program z40;

{ Определить является ли данное слово перевертышем. }

uses crt;

var a,b,c : string;

i : longint;

begin

clrscr;

write(‘Введите слово: ‘);readln(a);

b:=»;

for i:=1 to length(a) do b:=a[i]+b;{ переворачиваем слово }

if a=b then write(‘перевертыш’)

else write(‘не перевертыш’);

readln;

end.

program z41;

{Найти количество различных чисел в одномерной таблице}

(*МЕТОД:Каждый следующий элемент сравниваем со всеми

предыдущими и если равных ему среди предыдущих не будет

то flag оставляем неизменным и счетчик к увеличиваем*)

uses crt;

var a : array [1..10] of longint;

i,j,k,flag,n : integer;

begin

clrscr;

write(‘введите кол.эл.таб. а n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

k:=1;{Пусть разных чисел нет т.е.все одинак.}

for i:=2 to n do

begin

flag:=0;j:=i-1;{j -стоит перед i}

while (flag=0) and (j=1) do

begin

if a[i]=a[j] then flag:=1;{решение}

j:=j-1;

end;

if flag=0 then k:=k+1;

end;

write(‘Колич.различных чисел к=’,k);

readln;

end.

program z42;

{ Каждую букву слова A поместить в таблицу. }

uses crt;

var a : string;

n,i : longint;

b : array [1..10] of string;

begin

clrscr;

write(‘введите текст:’);readln(a);

n:=length(a);

for i:=1 to n do b[i]:=a[i];

for i:=1 to n do

begin

writeln(‘b[‘,i,’]=’,a[i]);

end;

readln;

end.

program z43;

{ Найти наименьшее однозначное число х удолв условию x*x*x-x*x=n. }

uses crt;

var x,n : longint;

ot : boolean;

begin

clrscr;

write(‘n = ‘);readln(n);

ot:=false;

x:=1;

while (x*x*x-x*xn) do

begin

inc(x);

if x*x*x-x*x=n then ot:=true;

end;

if ot=false then write(‘нет’)

else write(‘x=’,x);

readln;

end.

program z44;

{ Составить алгоритм нахождения суммы цифр числа. }

uses crt;

var i,n,k,s : longint;

b : array [1..10] of integer;

begin

clrscr;

write(‘введите число ‘);readln(n);

k:=1;

while n=1 do

begin

b[k]:=trunc(n) mod 10; {элм. таб}

n:=trunc(n)div 10;

k:=k+1;

end;

for i:=1 to k do s:=s+b[i];

write(‘s=’,s);

readln;

end.

program z45;

{ Найти двузначное число сумма кубов цифр которого равна n. }

uses crt;

var j,i : integer;

z,n : longint;

begin

clrscr;

write(‘n=’);readln(n);

for j:=1 to 9 do

for i:=1 to 9 do

if i*i*i+j*j*j=n then z:=10*i+j;

write(‘z=’,z);

readln;

end.

program z46;

{ Заданы 2 слова a и b. Можно ли получить из слова a,

вычеркивание некоторого кол-ва букв, слово b. }

uses crt;

var i,j,m,n : integer;

a,b,d,e : string;

begin

clrscr;

write(‘введите текст a=’);readln(a);

write(‘введите текст b=’);readln(b);

n:=length(a);m:=length(b);e:=b;

if n

for i:=1 to n do

for j:=1 to m do

if a[i]=b[j] then begin

d:=d+a[i];

delete(b,j,1);

end;

if d=e then write(‘Да’)

else write(‘Нет’);

readln;

end.

program z47;

{ Заданы 2 точки. Определить какой из отрезков

AO или BO образует больший угол с осью OX. }

uses crt;

var x1,x2,y1,y2 : longint;

a,b,a1,b1 : real;

begin

clrscr;

writeln(‘коорд. точки А’);

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

writeln(‘коорд. точки В’);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

a:=sqrt(x1*x1+y1*y1);

b:=sqrt(x2*x2+y2*y2);

a1:=y1/a;b1:=y2/b;

if a1b1

then write(‘отрезок OA обр. бол. угол ‘)

else write(‘отрезок OB обр. бол. угол’);

readln;

end.

program z48;

{ Дана таблица А. Записать ‘+’ элементы таблицы А в

таблицу В ‘-‘ элементы таблицы А в табл С. }

uses crt;

var a,b,c : array [1..10] of longint;

n,k,i,l : longint;

begin

clrscr;

write(‘n = ‘);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

for i:=1 to n do

if a[i]

inc(k);b[k]:=a[i];

end

else begin

inc(l);c[l]:=a[i];

end;

writeln(‘положительное:’);

for i:=1 to l do writeln(‘c[‘,i,’]=’,c[i]);

writeln(‘отрицательное:’);

for i:=1 to k do writeln(‘b[‘,i,’]=’,b[i]);

readln;

end.

program z49;

{ Яв-ся ли перевёртышем число. }

uses crt;

var a,b : string;

n,i : longint;

begin

clrscr;

write(‘введите число n=’);readln(n);

str(n,a);

b:=»;

for i:=1 to length(a) do b:=a[i]+b;

if a=b then write(‘перевёртыш’)

else write(‘не перевёртыш’);

readln;

end.

program z50;

{Даны таблицы А[1..n] ,В[1..m]. Построить таблицу С

в которой сначала размещаются все элм-ты А, затем

все элм-ты табл В. }

uses crt;

var a : array [1..5,1..2] of string;

m,j,i,g : longint;

b,c : array [1..5] of string;

begin

clrscr;

writeln(‘введ i-фамилии, j-пол’);

for i:=1 to 5 do

for j:=1 to 2 do

begin

write(‘a[‘,i,’,’,j,’]=’);readln(a[i,j]);

end;

for i:=1 to 5 do

begin

if a[i,2]=’м’ then begin

m:=m+1;

b[m]:=a[i,1];

end;

if a[i,2]=’ж’ then begin

g:=g+1;

c[g]:=a[i,1];

end;

end;

writeln(‘мальчики:’);

for i:=1 to m do writeln(b[m]);

writeln(‘девочки:’);

for i:=1 to g do writeln(c[g]);

readln;

end.

program z51;

{ Решить систему ур-ий {ax+by+c=0 и a1x+b1y+c1=0 }

uses crt;

var flag,a,a1,b,b1,c,c1,x,y,s,s1 : longint;

begin

clrscr;

flag:=0;

write(‘a=’);readln(a);

write(‘b=’);readln(b);

write(‘c=’);readln(c);

write(‘a1=’);readln(a1);

write(‘b1=’);readln(b1);

write(‘c1=’);readln(c1);

for x:=-10 to 10 do

for y:=-10 to 10 do

begin

s:=a*x+b*y+c;

s1:=a1*x+b1*y+c1;

if (s=0)and(s1=0)

then begin

flag:=1;

writeln(‘x=’,x,’ y=’,y);

end;

end;

if flag=0 then write(‘в заданной области реш. нет’);

readln;

end.

program z52;

{Даны 3 точки x1,y1,x2,y2,x3,y3 Составить программу для опред. площади и

периметра треуг. используя процедуру для опред расстояния между двумя

точками}

uses crt;

var x1,x2,x3,y1,y2,y3,s,p,

a,b,c : real;

procedure rasst( a1,b1,a2,b2 : real;var r : real );

begin

r:=sqrt(sqr(a1-a2)+sqr(b1-b2));

end;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

rasst(x1,y1,x2,y2,a);

rasst(x2,y2,x3,y3,b);

rasst(x3,y3,x1,y1,c);

p:=a+b+c;

p:=p/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

writeln(‘s=’,s);

readln;

end.

program z14;

{Дана лин. таб содерж. группы одинаковых подряд идущих положит. чисел.Вывести

на экран «число-кол-во чисел в группе,число-кол-во чисел в группе, … «}

uses crt;

var a : array [1..100] of longint; {кол.эл.не больше 100}

m,n,i : longint;

begin

clrscr;

write(‘введите кол-во элм. таб. a,n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

i:=1; m:=1;(*кол. одинак.эл.*)

while i

begin

if a[i]a[i+1]

then begin

(*если подряд идущие эл.разные то печать стоящий первым

и их кол. брать новое i для выполнения команды пока и счетчик m

опять взять =1 для подсчета других чисел*)

write(‘число: ‘,a[i]);

writeln(‘ кол-во ‘,m);

i:=i+1;

m:=1;

end {сдесь ; не ставить}

else

(*если подряд идущие эл.одинаковые то их считаем и берем

новое i для выполнения команды пока*)

begin

i:=i+1;

m:=m+1;

end;

end;

readln;

end.

program z54;

{Даны 4 точки x1,y1,x2,y2,x3,y3,x4,y4 Составить программу для опред.

площади четырёхугольника,используя процедуру нахождения площади}

uses crt;

var x1,x2,x3,x4,y1,y2,y3,y4 : real;

c1,c2,c : real;

procedure treyg(a1,b1,a2,b2,a3,b3:real;var s:real);

var a,b,c,p:real;

{исходные данные а1,в1,а2,в2,а3,в3-формальные.Перед

вып.процедуры им присваивается фактические параметры

Процедура вырабатывает значения а,в,с,р,s.Перед их

именами в описании стоит служебное слово var}

begin

a:=sqrt(sqr(a1-a2)+sqr(b1-b2));

b:=sqrt(sqr(a2-a3)+sqr(b2-b3));

c:=sqrt(sqr(a3-a1)+sqr(b3-b1));

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

end;

begin

clrscr;

write(‘x1=’);readln(x1);

write(‘y1=’);readln(y1);

write(‘x2=’);readln(x2);

write(‘y2=’);readln(y2);

write(‘x3=’);readln(x3);

write(‘y3=’);readln(y3);

write(‘x4=’);readln(x4);

write(‘y4=’);readln(y4);

treyg(x1,y1,x2,y2,x3,y3,c1);

treyg(x3,y3,x4,y4,x1,y1,c2);

c:=c1+c2;

writeln(‘ОТВЕТ:’,c);

readln;

end.

program z55;

{Выпуклый n-угольник(n3) задаётся коорд. своих вершин в порядке обхода.

Разбить его на треуг. диагоналями, не пересек.,так,чтобы сумма длин

диагоналей была минимальной}

uses crt;

const nmax=10;

var x,y:array [1..nmax] of longint;

s : array [1..nmax] of real;

n,i,a,j : integer;

min : real;

q : boolean;

function rast(n1,n2:integer):real;

begin

rast:=sqrt(sqr(x[n1]-x[n2])+sqr(y[n1]-y[n2]));

end;

begin

clrscr;

repeat;

q:=true;

write(‘кол-во углов n=’);readln(n);

if nnmax then

begin

writeln(‘слишком большое n (n

q:=false;

end;

if n

begin

if n3).’) else

writeln(‘В треугольнике нет диагоналей!!’);

q:=false;

end;

until q;

for i:=1 to n do

begin

write(‘x[‘,i,’]=’);readln(x[i]);

write(‘y[‘,i,’]=’);readln(y[i]);

writeln;

end;

for i:=1 to nmax do s[i]:=0;

for i:=1 to n do

begin

for j:=1 to n-3 do

begin

a:=i+j+1;

if an then a:=a-n;

s[i]:=s[i]+rast(i,a);

end;

end;

min:=s[1];

a:=1;

for i:=1 to n do

begin

if mins[i] then

begin

a:=i;

min:=s[i];

end;

end;

writeln(‘Ответ: из точки № ‘,a);

readln;

end.

program z56;

{Ввести текст телеграммы и стоимость одного слова.Опред. стоимость телеграммы

При вводе текста запятые обознач. словом ЗПТ,точки-словом Т,других знаков

припинания не исп.}

uses crt;

var a : string;

i,s,c : longint;

begin

clrscr;

write(‘Введите текст ‘);readln(a);

write(‘Стоимость одного слова ‘);readln(c);

s:=0;

repeat;

for i:=1 to length(a)do

if (a[i]=’ ‘) or (a[i]+a[i+1]+a[i+2]=’ЗПТ’)

then s:=s+c;

until a[i]=’Т’;

s:=s+c;

write(‘стоимость телеграммы: ‘,s);

readln;

end.

program z57;

{Дана лин. таб. a[1..n].Ввести табл. b[1..n] отбросив из а каждый второй элм}

uses crt;

var a,b : array [1..10] of longint;

k,i,j,n : integer;

begin

clrscr;

write(‘n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

k:=0; i:=1;

while i

begin

k:=k+1;

b[k]:=a[i];

i:=i+2;

end;

for j:=1 to k do writeln(‘ОТВЕТ: a[‘,j,’]=’,b[j]);

readln;

end.

program z58;

{Дана табл a[1..n] из целых чисел.Поставить сначала

четные,а потом нечетные элм }

uses crt;

var a,b : array [1..10] of longint;

m,i,j,n : longint;

begin

clrscr;

write(‘кол-во элм. таб. n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

j:=0;m:=0;

for i:=1 to n do

begin

if a[i]mod 2=0

then

begin

j:=j+1;

b[j]:=a[i];

end

else

begin

m:=m+1;

b[n+1-m]:=a[i];

end;

end;

for j:=1 to n do

writeln(‘a[‘,j,’]=’,b[j]);

readln;

end.

program z59;

{ Найти наибольшее кол-во одинаковых элементов. }

uses crt;

var a,b : array [1..10] of longint;

k,i,j,min,max,n,m,s : longint;

begin

clrscr;

write(‘кол-во элм. табл. n=’);readln(n);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

for i:=1 to n-1 do

begin

min:=a[i];k:=i;

for j:=i+1 to n do

if a[j]

begin

min:=a[j];

k:=j;

end;

a[k]:=a[i];

a[i]:=min;

end;

k:=0;s:=1;i:=1;

while i

if a[i]=a[i+1]

then

begin

s:=s+1;

i:=i+1;

end

else

begin

k:=k+1;

b[k]:=s;

i:=i+1;

s:=1;

end;

max:=b[1];

for i:=2 to k do

if b[i]max then max:=b[i];

write(‘наибольшее кол-во одинаковых элм.: ‘,max);

readln;

end.

program z60;

{ Дана точка. Лежит ли она в кольце. }

uses crt;

var x,y,r1,r2,a,b : real;

procedure haltpr;

begin

writeln(‘Неверные данные’);

write(‘r1

readln;halt;

end;

begin

clrscr;

write(‘координаты центра окр. a=’);readln(a);

write(‘координаты центра окр. b=’);readln(b);

write(‘x=’); readln( x);

write(‘y=’); readln( y);

write(‘r1=’);readln(r1);

write(‘r2=’);readln(r2);

if r1r2 then haltpr;

if (sqr(x-a)+sqr(y-b)sqr(r1))

then write(‘лежит’)

else write(‘не лежит’);

readln;

end.

program z61;

uses crt;

{Примеры типов величин}

var a : integer; { целый тип от -32768 до 32767 }

b,c : real; { вещественный }

d : longint; { длинное целое число от -2147483648 до 2147483647 }

e : byte; { целый тип длинной в один байт то есть от 0 до 255 }

s : string; { литерный тип длиной 255 символов }

f : char; { литерный тип длиной в один символ }

begin

a:=123;

b:=213.34534;

d:=12387273;

e:=123;

s:=’qgjhfghfgdfghdfjg’;

f:=s[1];{ в результате с f=’q’ }

writeln(a,’ ‘,b);

writeln(d);

writeln(e);

writeln(s);

writeln(f);

readln;

end.

program z62;

uses crt;

{Табличные величины. Однмерный массив.}

var a : array [1..100] of integer;{ массив 100 элементов типа integer }

n,i,max,sum : integer;

{ Задача: Дан целочисленный массив А имеющий n элементов (n

найти сумму элементов массива а так же максимальный элемент}

begin

clrscr;

write(‘n=’);

readln(n);

{ввод элементов массива}

for i:=1 to n do

begin

write(‘A[‘,i,’]=’);

readln(a[i]);

end;

{подсчёт суммы}

sum:=0;

for i:=1 to n do

sum:=sum+a[i];

{поиск максимального элемента}

max:=a[1];

for i:=2 to n do

if a[i]max then max:=a[i];

{вывод результатов}

writeln(‘сумма=’,sum);

writeln(‘максимальный элемент=’,max);

readln;

end.

program z63;

uses crt;

{Табличные величины. Двумерный массив.}

var a : array [1..100,1..100] of integer;{ квадратный массив 100х100 с

элементами типа integer}

b : array [1..100] of integer;{см. задачу №62}

i,j,n,m,min,max : integer;

{Задача: Дана целочисленная прямоугольная таблица размером MxN.

Найти среди максимальных элементов строк минимальный}

begin

clrscr;

write(‘Количество строк=’);

readln(m);

write(‘Количество столбцов в строке=’);

readln(n);

{Ввод таблицы}

for i:=1 to m do

begin

writeln(i,’-ая строка:’);

for j:=1 to n do

begin

write(‘ ‘,j,’-ый столбец = ‘);

readln(a[i,j]);

end;

end;

{поиск максимумов в строках}

for i:=1 to m do

begin

max:=a[i,1];

for j:=2 to n do if a[i,j]max then max:=a[i,j];

b[i]:=max;

end;

{поиск минимального в полученной таблице}

min:=b[1];

for i:=2 to m do if b[i]

{Вывод результатов}

writeln(‘Ответ=’,min);

readln;

end.

program z64;

{ На оси Оx заданы N точек с координатами x1,x2,…,xn.

Найти такую точку Z сумма расстояний от которой до

данных точек минимальная. }

uses crt;

var d,i,j,m : longint;

a : array [1..100] of longint;

begin

clrscr;

write(‘Введите кол-во точек:’);readln(D);

for i:=1 to D do

begin

write(‘x’,i,’=’);readln(a[i]);

end;

for i:=1 to D-1 do

for j:=i+1 to D do

if a[i]a[j] then begin

m:=a[i];

a[i]:=a[j];

a[j]:=m;

end;

if d mod 2=0

then write(‘Z между ‘,a[d div 2],’ и ‘,a[d div 2+1])

else write(‘Z=’,a[d div 2+1]);

readln;

end.

program z65;

{Имеется n банок с целочисленными объёмами v1,v2,v3…,vn литров,пустой сосуд

и кран с водой.Можно ли с помощью этих банок налить в сосуд ровно v литров

воды.

Решение:Обозначим s=nod(v1,v2…,vn)

Если v делится нацело на s,то в сосуд с помощью банок можно налить v

литров воды,иначе- нет}

uses crt;

var i,n,v,nod2:integer;

a:array[1..10]of integer;

procedure nod(a,b:integer;var nd:integer);

begin

while ab do

begin

if ab

then a:=a-b

else b:=b-a;

end;

nd:=a;

end;

begin

clrscr;

write(‘введите кол-во банок n=’);readln(n);

writeln(‘введите объёмы банок’);

for i:=1 to n do

begin

write(‘a[‘,i,’]=’);readln(a[i]);

end;

write(‘введите объём сосуда v=’);readln(v);

for i:=1 to n-1 do

nod(a[i],a[i+1],a[i+1]);

if v mod a[i+1]=0

then write(‘ДА’)

else write(‘НЕТ’);

readln;

end.

program z66;

{ Дана последовательность натуральных чисел

Найти наименьшее нат.число,которое отсутствует

в последовательности }

uses crt;

var n,n1,n2,ii,i,j:longint;

m,a:string;er:integer;

begin

clrscr;

write(‘Введите последовательность:’);readln(a);

n:=length(a);

for i:=1 to n-1 do

for j:=i+1 to n do

begin

val(a[i],n1,er);

val(a[j],n2,er);

if n1n2 then begin

m:=a[i];

a[i]:=a[j];

a[j]:=m[1];

end;

end;

for i:=1 to n do

begin

val(a[i],ii,er);

if iii then begin

write(i);

readln;halt;

end;

end;

write(‘НЕТ’);

readln;

end.

17 января 2018

В закладки

Обсудить

Жалоба

Сборник задач по программированию на Паскале

Сборник задач посвящен вопросам программирования на языке программирования Pascal 7.0. В нем подробно рассматриваются решения большого количества задач, от простых до достаточно сложных.

Задачи в сборнике классифицированы по основным разделам: линейные алгоритмы, разветвляющиеся алгоритмы, циклические алгоритмы, обработка массивов, обработка строк и создание графических изображений. После каждого раздела предлагаются задачи для самостоятельного решения. Внутри каждого раздела задачи по мере возможности расположены по возрастанию степени трудности.

sb-pascal.doc

УДК 6НI 106

I iini I представляет собой задачник по программированию на языке I urbo Pascal. Приведены как типовые задачи, т. е. ввод-вывод, использование циклов, работа с массивами, поиск и сортировка, так и задачи, которые, как правило, остаются за рамками традиционных курсов программирования: работа со строками и файлами, вывод на принтер, деловая графика, рекурсия Для многих задач приведены решения — хорошо документированные тем ты программ. Помимо задач и примеров книга содержит справочник по языку программирования Turbo Pascal (описание наиболее чает используемых процедур и функций) и

может использоваться н качестве 1адачника для учеников 8—11 классов, изучающих программирование в школе.

I in начинающих

программистов

Группа подготовки издания:

I 1.НШЫЙ редактор

Екатерина Кондукова

(но. редакцией

Наталья Таркова

Редактор

Татьяна Кручинина

Компьютерная верстка

Ольги Сергиенко

Корректор

Наталья Першакова

Дизайн обложки

Ангелины Лужиной

Зав. производством

Николай Тверских

Культин Н. Б.

Turbo Pascal в задачах и примерах. — СПб.: БХВ-Петербург, 2000. 256 е.: ил.

ISBN 5-8206-0061 4

© Н. Б. Культин, 2000 О Оформление, и жительство «БХВ — Санкт-Петербург», 2000

Лицензия ИД N» 02429 от 24.07.00. Подписано в печать 16.10.00. Формш 60-00’/,в. Печать офсетная. Усл. печ. л. 16.

Доп. тираж 5000 экз. Заказ 602

«БХВ-ПетербурГ, 198005, Санкт-Петербург, Измайловский пр., 29.

Гигиеническое включение на продукцию, товар, № 77.99.1.953.П.950.3.99 от 01.03.1900 I аыдано Департаментом ГСЭН Минздрава России.

Отпечатано с готовых диапозитивов и Ак.щемической типографии «Наука» РАН.

1(14034, Санкт-Петербург, 9-я линия, 12.

СОДЕРЖАНИЕ

Предисловие

7

Как работать с книгой

8

Оформление решений

8

Часть I. Задачи

9

Объявление переменных

9

Инструкция присваивания

10

Вывод

13

Ввод

15

Программы с линейной структурой

16

Выбор

24

I f .

24

Case

30

Циклы

31

For

31

Repeat

41

While

43

Символы и строки

44

Массивы

47

Функции

53

Процедуры

55

Графика

56

Файлы

64

Рекурсия

69

Часть II. Решения

73

Часть III. Справочник

209

Структура программы

209

Основные типы данных

209

Целые числа

210

4

Содержание

Действительные числа

210

Строки

210

Массивы

211

Записи

211

Выбор

212

Инструкция IF.

212

Инструкция CASE

212

Циклы

213

Инструкция FOR

213

Инструкция REPEAT

214

Инструкция WHILE.

215

Безусловный переход

215

Инструкция GoTo

215

Объявление функции

215

Объявление процедуры

216

Встроенные функции и процедуры

216

Зарезервированные слова

и директивы

218

Процедуры и функции

219

Математические функции

219

Abs

219

Arctan

219

Cos

219

Exp

220

Ln

220

Sin

220

Sqr

220

Sqrt

220

Random

221

Randomize

221

Функции и процедуры преобразования

221

Int

221

Round

222

Str

222

Trunc

222

Val

222

Функции и процедуры для работы со строками и символами

223

Chr

223

Concat

223

Copy

223

Delete

223

Length

224

Pos

224

Процедуры и функции

графического режима

224

Arc

224

Bar

225

6 Содержание

Bar3D

225

Circle

225

DetectGraph

226

Ellipse

226

GetX, GetY

226

GraphResult

226

InitGraph

227

Line

227

LineTo

227

MoveTo

228

MoveRel

228

OutText

228

OutTextXY

228

PieSlice

229

PutPixel

229

Rectangle

229

Sector

230

SetColor

230

SetFillStyle

231

SetLineStyle

232

SetTexStyle

233

Процедуры и функции для работы с файлами

234

Append

234

Assign

234

Close

234

EOF

234

Eras re

235

IOResult

235

Reset

235

Rewrite

236

Прочие функции

236

ClrEol

236

ClrScr

236

Delay

236

Dispose

237

Eoln

237

GotoXY

237

Halt

237

New

238

ParamCount

238

ParamStr

238

ReadKey

238

TextBackGround

239

TextColor

240

6

Содержание

WhereX.

240

WhereY.

241

Window

241

Приложение

243

Вывод иллюстраций

243

Таблица кодировки символов

247

Представление информации в компьютере

248

Десятичные, двоичные и шестнадцатеричные числа

248

Память компьютера

250

Список дополнительной литературы

253

Предметный указатель

254

ПРЕДИСЛОВИЕ

Чтобы научиться программировать, не достаточно прочитать книгу, посвященную языку программирования, надо писать программы, решать конкретные задачи. Но где их можно найти?

Вучебниках, как правило, приводятся типовые, стандартные задачи, в основе которых лежит расчет по формулам. Такие задачи, несомненно, полезны, но они не всегда интересны.

Вданной книге начинающему программисту предлагаются задачи, которые, с одной стороны ему по плечу, с другой — полезны и занимательны.

Книга состоит из трех частей и приложения.

Впервой части собраны задачи. Они сгруппированы по темам

иотносятся практически ко всем разделам программирования: от объявления переменных и программ с линейной структурой до работы с графикой и файлами.

Во второй части приведены решения, представленные в виде хорошо документированных текстов программ, изучение которых поможет начинающему программисту даже в том случае, если задача решена им самостоятельно.

Третья часть представляет собой справочник по языку программирования Turbo Pascal, содержащий описание большинства процедур и функций.

Если вы имеете компьютер с процессором типа Pentium (Celeron), то используйте Turbo Pascal версии 7.1. Программы, созданные при помощи Turbo Pascal 7.0 и использующие библиотеку ctr, на компьютерах с процессором типа Pentium (Celeron) не работают, при их запуске возникает ошибка «деление на ноль».

Еще раз хочется повторить, что научиться программировать можно только программируя, т. е. решая конкретные задачи.

8

Turbo Pascal в задачах и примерах

Поэтому, чтобы получить максимальную пользу от книги, вы должны работать с ней активно. Решайте задачи. Изучайте приведенные решения. Вводите их в свой компьютер. Не бойтесь экспериментировать — вносите изменения в программы. Чем большую работу вы проделаете самостоятельно, тем большему научитесь.

Как работать с книгой

Группы задач следуют в книге в том порядке, в котором традиционно изучаются соответствующие разделы в курсе программирования. Поэтому перед тем как приступить к решению задач нужно изучить соответствующую тему — прочитать раздел учебника. Если сразу решить задачу не получается, то можно посмотреть ее решение и затем еще раз попытаться решить задачу самостоятельно. Писать программу лучше сначала на бумаге, а уже затем вводить программу в компьютер.

Задача считается решенной, если программа работает так, как сказано в условии задачи.

Оформление решений

Важно, чтобы решенная задача была правильно оформлена, что предполагает использование:

осмысленных имен переменных, констант, функций и процедур;

отступов при записи инструкций;

комментариев.

Правильно оформленную программу легче отлаживать, кроме того, она производит хорошее впечатление.

Приведенные в книге примеры можно рассматривать как образцы оформления решений задач.

ЧАСТЬ I. ЗАДАЧИ

Объявление переменных

Приступая к решению задач этого раздела, следует помнить, что:

каждая переменная программы должна быть объявлена;

объявления переменных помещают в раздел, который начинается словом var;

инструкция объявления переменной выглядит так:

ИмяПеременной:Тип;

в имени переменной можно использовать буквы латинского алфавита и цифры (первым символом должна быть буква);

основными числовыми типами языка Turbo Pascal являются: integer (целый), real (дробный);

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

1.Объявите переменные, необходимые для вычисления значения функции у — X2.

2.Объявите переменные, необходимые для пересчета веса из фунтов в килограммы.

3.Объявите переменные, необходимые для вычисления объема параллелепипеда.

4.Объявите переменные, необходимые для вычисления площади круга.

5.Объявите переменные, необходимые для вычисления площади кольца.

Соседние файлы в папке для экзамена по инф Брэ

  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Задачи на экзамен по гражданскому праву
  • Задачи на экзамен по бухучету
  • Задачи на экзамен по административному праву
  • Задачи на щелочные металлы егэ
  • Задачи на штрих концы биология егэ