Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Практикум по основам программирования. Массивы. Строки. Подпрограммы. Учебное пособие
.pdf
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
