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

Практикум по основам программирования. Массивы. Строки. Подпрограммы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
1 1 2 2 10 10
, , , , , ,x y x y x y
11
,xy
2 2 10 10
, , , ,x y x y
20 20
2
11
20
2
1
, при 0,
, иначе.
i i i
ii
i
i
x x y
U
y

 
  
 
min( ) max( )
, при min( ) max( ),
max( ) min( ) max( )min( ) , иначе.
ii
ii
i i i
i i i
bc
ab
a b c
T
b c c

 
7 В каждом случае получить наибольшую из длин рассматриваемых
отрезков. (Определить подпрограммы, позволяющие распознать полные квадраты, степени пятерки, простые числа).
8 Даны действительные числа
. Найти периметр десятиугольника, вершины которого имеют соответственно коор­динаты
,
. Определить подпрограмму
вычисления расстояния между двумя точками, заданными своими координатами.
9 По заданным 20-элементным целым последовательностям x и y вы-
числить
10 По заданным вещественным последовательностям a, b и c вычис-
лить
11 Даны вещественные векторы x, y и z. Вычислить величину (a,a)-
(b,c), где a обозначает тот из этих векторов, в котором самый
большой минимальный элемент (считать, что такой вектор единст­венный), b и c обозначают два других вектора, а (p,q) – скалярное произведение p и q.
12 Даны три вектора x, y, z размером n каждый (n не превышает 50).
Найти равные вектора.
13 Даны 6-элементные вещественные векторы x и y и квадратные мат-
рицы A, B и C 6-го порядка. Вычислить величину
(Ax, By) + (Cx, y) / (x, By).
81
14 Даны три вещественные квадратные матрицы 4-го порядка. Напе-
чатать ту из них, норма которой наименьшая (считать, что такая матрица одна). В качестве нормы матрицы взять максимум абсо­лютных величин ее элементов.
15 Даны две квадратные матрицы n-го порядка каждая (n не превыша-
ет 20). Напечатать квадрат той из них, в которой наименьший след (сумма элементов главной диагонали).
16 Напечатать в обратном порядке заданный во входном файле текст
(за текстом следует точка).
17 Дана последовательность ненулевых целых чисел, за которой сле-
дует 0. Напечатать сначала все отрицательные числа этой последо­вательности, а затем – все положительные (в любом порядке).
18 Комплексная матрица Z представляется парой (X, Y) вещественных
чисел так, что Z = X + i Y. Напишите программу вычисления про­изведения двух комплексных матриц (A, B) и (C, D), т. е.
X + i Y = (A + i B)  (C + i D).
Указания:
(A + i B) (C + i D) = (AC – BD) + i (AD + BC).
Получите три матрицы
R = A  D, S = B  C, T = (A + B)  (C – D),
а затем матрицы X = T + R – S и Y = R + S.
19 Определите число необходимых сложений и умножений (в зависи-
мости от размера матрицы n) и сравните с числом сложений и ум­ножений, если прямо пользоваться формулой.
20 Даны действительные числа x1, y1, x2, y2, ..., xn, yn. Выяснить, най-
дутся ли среди точек с координатами (x1, y1), (x2, y2), ... , (xn, yn) че- тыре таких, которые являются вершинами квадрата.
21 Пусть даны коэффициенты нескольких прямых: a1, b1, c1, a2, b2, c2,
... ,an, bn, cn.
а) определить, имеются ли среди этих прямых совпадающие или параллельные.
82
б) определить, имеются ли три прямые, пересекающиеся в одной точке. в) определить, находятся ли данные прямые в общем положении. (Прямые находятся в общем положении, если все они различны, ни­какие две из них не параллельны и никакие три не пересекаются в одной точке.)
Задачи для самостоятельной работы
20 Описать процедуру InvDigits(K), меняющую порядок следования
цифр целого положительного числа K на обратный (K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры поменять порядок следования цифр на обратный для каждого из пяти данных целых чисел.
21 Описать функцию IsPrime(N) логического типа, возвращающую
true, если целый параметр N (> 1) является простым числом, и false
в противном случае (число, большее 1, называется простым, если оно не имеет положительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе.
22 Описать функцию GCD2(A, B) целого типа, находящую наиболь-
ший общий делитель (НОД, greatest common divisor) двух целых
положительных чисел A и B, используя алгоритм Евклида:
НОД(A, B) = НОД(B, A mod B), если B ≠ 0; НОД(A, 0) = A,
где «mod» обозначает операцию взятия остатка от деления. С по­мощью GCD2 найти наибольшие общие делители пар (A, B), (A, C),
(A, D), если даны числа A, B, C, D.
23 Описать функцию IsLeapYear(Y) логического типа, которая воз-
вращает true, если год Y (целое положительное число) является ви­сокосным, и false в противном случае. Вывести значение функции IsLeapYear для пяти данных значений параметра Y. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400.
83
24 Описать процедуру NextDate(D, M, Y), которая по информации о
правильной дате, включающей день D, номер месяца M и год Y, оп­ределяет следующую дату (параметры целого типа D, M, Y являют­ся одновременно входными и выходными). Применить процедуру NextDate к трем исходным датам и вывести полученные значения следующих дат.
25 Описать процедуру Inv(A, N), меняющую порядок следования эле-
ментов вещественного массива A размера N на обратный (инверти- рование массива). Массив A является входным и выходным пара­метром. С помощью этой процедуры инвертировать массивы A, B,
C размера NA, NB, NC соответственно.
26 Описать процедуру RemoveX(A, N, X), удаляющую из целочислен-
ного массива A размера N элементы, равные целому числу X. Мас­сив A и число N являются входными и выходными параметрами. С помощью этой процедуры удалить числа XA, XB, XC из массивов A, B, C размера NA, NB, NC соответственно и вывести размер и содер­жимое полученных массивов.
27 Описать процедуру SortArray(A, N), выполняющую сортировку по
возрастанию вещественного массива A размера N. Массив A явля­ется входным и выходным параметром. С помощью этой процеду­ры отсортировать массивы A, B, C размера NA, NB, NC соответствен­но.
28 Описать процедуру Hill(A, N), меняющую порядок элементов ве-
щественного массива A размера N на следующий: наименьший элемент массива располагается на первом месте, наименьший из оставшихся элементов – на последнем, следующий по величине располагается на втором месте, следующий – на предпоследнем и т. д. (в результате график значений элементов будет напоминать холм). Массив A является входным и выходным параметром. С по- мощью этой процедуры преобразовать массивы A, B, C размера NA, NB, NC соответственно.
29 Описать процедуру Transp(A, M), выполняющую транспонирова-
ние (т. е. зеркальное отражение относительно главной диагонали)
квадратной вещественной матрицы A порядка M. Матрица A явля-
84
ется входным и выходным параметром. Используя эту процедуру, транспонировать данную матрицу A порядка M.
30 Описать функцию IsIdent(S) целого типа, проверяющую, является
ли строка S допустимым идентификатором, т. е. непустой стро- кой, которая содержит только латинские буквы, цифры и символ подчеркивания '_' и не начинается с цифры. Если S является допус­тимым идентификатором, то функция возвращает 0. Если S являет­ся пустой строкой, то возвращается -1, если S начинается с цифры, то возвращается -2. Если S содержит недопустимые символы, то возвращается номер первого недопустимого символа. Проверить с помощью функции IsIdent пять данных строк.
31 Описать функцию CompressStr(S) строкового типа, выполняющую
сжатие строки S по следующему правилу: каждая подстрока стро­ки S, состоящая из более чем четырех одинаковых символов C, за­меняется текстом вида «С{K}», где K — количество символов C (предполагается, что строка S не содержит фигурных скобок «{» и «}»). Например, для строки S = «bbbccccce» функция вернет строку «bbbc{5}e». С помощью функции CompressStr сжать пять данных строк.
32 Описать функцию DecompressStr(S) строкового типа, восстанавли-
вающую строку, сжатую функцией CompressStr (см. задание Param42). Параметр S содержит сжатую строку; восстановленная строка является возвращаемым значением функции. С помощью функции DecompressStr восстановить пять данных сжатых строк.
33 Описать функцию DecToBin(N) строкового типа, возвращающую
строковое представление целого неотрицательного числа N в дво­ичной системе счисления. Результирующая строка состоит из сим­волов «0»–«1» и не содержит ведущих нулей (за исключением представления числа 0). Используя эту функцию, получить двоич­ные представления пяти данных чисел.
34 Описать функцию DecToHex(N) строкового типа, возвращающую
строковое представление целого неотрицательного числа N в 16­ричной системе счисления. Результирующая строка состоит из символов «0»–«9», «A»–«F» и не содержит ведущих нулей (за ис-
85
ключением представления числа 0). Используя эту функцию, полу­чить 16-ричные представления пяти данных чисел.
35 Описать функцию BinToDec(S) целого типа, определяющую целое
неотрицательное число по его строковому представлению S в дво­ичной системе счисления. Параметр S имеет строковый тип, состо­ит из символов «0»–«1» и не содержит ведущих нулей (за исклю­чением значения «0»). Используя эту функцию, вывести пять чи­сел, для которых даны их двоичные представления.
36 Описать функцию HexToDec(S) целого типа, определяющую целое
неотрицательное число по его строковому представлению S в 16­ричной системе счисления. Параметр S имеет строковый тип, со­стоит из символов «0»–«9», «A»–«F» и не содержит ведущих нулей (за исключением значения «0»). Используя эту функцию, вывести пять чисел, для которых даны их 16-ричные представления.
37 Описать рекурсивную функцию Fact2(N) вещественного типа, вы-
числяющую значение двойного факториала
N!! = N·(N−2)·(N−4)·…
(N > 0 параметр целого типа; последний сомножитель в произ-
ведении равен 2, если N — четное число, и 1, если N — нечетное). С помощью этой функции вычислить двойные факториалы пяти данных чисел.
38 Описать рекурсивную функцию Fib1(N) целого типа, вычисляю-
щую N-й элемент последовательности чисел Фибоначчи (N — целое число):
F1 = F2 = 1, FK = F
K−2
+ F
, K = 3, 4, … .
K−1
39 С помощью этой функции найти пять чисел Фибоначчи с данными
номерами, и вывести эти числа вместе с количеством рекурсивных вызовов функции Fib1, потребовавшихся для их нахождения.
40 Описать рекурсивную функцию GCD(A, B) целого типа, находя-
щую наибольший общий делитель (НОД, greatest common divisor) двух целых положительных чисел A и B, используя алгоритм Евк-
лида:
86
НОД(A, B) = НОД(B, A mod B), B ≠ 0; НОД(A, 0) = A,
где «mod» обозначает операцию взятия остатка от деления. С по­мощью этой функции найти НОД(A, B), НОД(A, C), НОД(A, D), ес­ли даны числа A, B, C, D.
41 Описать рекурсивную функцию DigitSum(K) целого типа, которая
находит сумму цифр целого числа K, не используя оператор цикла. С помощью этой функции найти суммы цифр для пяти данных це­лых чисел.
42 Описать рекурсивную функцию MaxElem(A, N) целого типа, кото-
рая находит максимальный элемент целочисленного массива A размера N (1 N 10), не используя оператор цикла. С помощью этой функции найти максимальные элементы массивов A, B, C раз­мера NA, NB, NC соответственно.
43 Описать рекурсивную функцию DigitCount(S) целого типа, которая
находит количество цифр в строке S, не используя оператор цикла. С помощью этой функции найти количество цифр в каждой из пяти данных строк.
44 Описать рекурсивную функцию Palindrome(S) логического типа,
возвращающую true, если строка S является палиндромом (т. е. чи­тается одинаково слева направо и справа налево), и false в против­ном случае. Оператор цикла в теле функции не использовать.
Используя декомпозицию и механизм подпрограмм, решите сле­дующие задачи и ответьте на поставленные вопросы.
45 Пусть процедура сокр(a, b, p, q) от целых параметров (b 0) приво-
дит дробь a / b к несократимому виду p / q: а) Какие из параметров этой процедуры обозначают исходные дан-
ные для нее, а какие – результаты? Как следует задать (опреде­лить) эти параметры?
б) Допустимы ли обращения сокр (k+1, 14, n, 7) и сокр (k, sqrt(36),
k, n) к процедуре, где k и n – целые переменные?
87
в) Определите данную процедуру и используйте ее для приведения
дроби 1 + 1 / 2 + 1 / 3 + . . . + 1 / 20 к несократимому виду c / d;
46 Пусть процедура maxmin(x,y) присваивает параметру x большее из
вещественных чисел x и y , а параметру y – меньшее: а) Какие из параметров этой процедуры обозначают исходные дан-
ные для нее, а какие – результаты? Как следует задать (опреде­лить) эти параметры?
б) Допустимы ли обращения maxmin(5.2,y) и maxmin(s,k) к проце-
дуре, где s – вещественная переменная, а k – целая переменная?
в) Определите данную процедуру и используйте ее для перерас­пределения значений вещественных переменных a, b и c так, чтобы стало a ⩾ b ⩾ c;
47 Пусть функция scal(x, y) вычисляет скалярное произведение векто-
ров x и y : а) Какие из параметров этой процедуры обозначают исходные дан-
ные для нее, а какие – результаты? Как следует задать (опреде­лить) эти параметры?
б) Определите данную функцию и используйте ее для вычисления
c = (a , b) , где a и b – вектора;
48 Пусть процедура sum(x, y, z) присваивает вектору z сумму векторов
x и y (считать, что каждый вектор задан своими координатами в n пространстве):
а) Какие из параметров этой процедуры обозначают исходные дан-
ные для нее, а какие – результаты? Как следует задать (опреде­лить) эти параметры?
б) Определите данную процедуру и используйте ее для вычисления
d = a + b + c , где d, a, b, c – вектора;
В следующих задачах необходимо ответить на общие описанные ниже вопросы и выполнить рекомендуемые действия:
88
а) Какую подзадачу приходится решать в задаче несколько раз? б) Как следует описать решение этой подзадачи – как функцию или
процедуру? в) Каковы входные и выходные данные этой подпрограммы? г) Какой способ передачи данных в подпрограмму обеспечит ее
гибкость? д) Определите соответствующую подпрограмму и с ее помощью
решите задачу.
49 Если в первой половине строки s размером не более 60 символов
менее 12 цифр и если в последней четверти строки t (также разме­ром не более 60 символов) нет символов от aдо z, тогда вычис­лить k – количество символов ‗*‘, входящих в среднюю треть стро­ки s.
50 Переменной t присвоить значение «истина», если уравнения x2 +
6.2x + a2 = 0 и x2 + ax + b - 1 = 0 имеют вещественные корни и при
этом оба корня первого уравнения лежат между корнями второго, в остальных случаях присвоить t значение «ложь».
51 Вычислить значение u = Ax + By – Cz + Bx , где A, B, C – квадрат-
ные матрицы порядка n (n ⩽ 10), а x, y, z, u – вектора порядка n ка­ждый.
52 Если наибольший элемент последовательности X равен 10 и нахо-
дится в первой половине этой последовательности и, если в после­довательности Y нет положительных элементов, тогда все элемен­ты последовательности Z, предшествующие ее наибольшему эле­менту, заменить на их кубы, здесь X, Y, Z – последовательности це­лых чисел размерностью n (n ⩽ 50) каждая. Считать, что в каждой последовательности наибольший элемент один.
53 Даны отрезки a, b, c, d. Для каждой тройки этих отрезков, из кото-
рых можно построить треугольник, вычислить площадь треуголь­ника.
89
11 22
TT
A B B A
54 Вычислить значение u = (sign x + sign y) sign(x + y),
где sign a равно 1, если a > 0, равно -1, если a < 0, и равно 0, если a = 0.
55 Даны три натуральных числа, найти их наибольший общий дели-
тель.
56 Даны координаты трех точек плоскости, определить номер коорди-
натной четверти для каждой из трех точек (считать, что координа­ты точек не совпадают с началом координат).
57 Даны три целых числа, подсчитать, сколько среди них четных чи-
сел.
58 Дана квадратная матрица A порядка m (m < 50) и натуральное чис-
ло n (n < 15). Вычислить выражение E + A +A2 + . . . + An, где E – единичная матрица порядка m.
59 Даны квадратная матрица A порядка m (m < 50), натуральное число
n (n < 15) и последовательность чисел p0, p
1 , . . . , pn
. Вычислить вы-
ражение
pn An + p
n-1
A
+ . . . + p1 A + p0 E,
n-1
где E единичная матрица порядка m.
60 Даны натуральное число p (p < 15) и вещественные квадратные
матрицы A, B, C n-го порядка каждая (n ⩽ 50). Вычислить (ABC)p.
61 Даны две квадратные матрицы A и B порядка n (n ⩽ 50). Получить
матрицу
62 Дана действительная квадратная матрица A порядка n (n ⩽ 50) и
натуральное число m (m ⩽ 15). Вычислите следы матриц A , A2 , A3 , ... , Am . Следом матрицы называется сумма элементов главной диа-
гонали.
.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]