-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathsection4_4.tex
More file actions
97 lines (97 loc) · 7.29 KB
/
section4_4.tex
File metadata and controls
97 lines (97 loc) · 7.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{ %section4_4
\subsection{Варианты заданий}
\parВариант задания выбирается в соответствии с приведёнными ниже описанием этапов, учитывая, что число А = Ф*И*О, где Ф, И, О означают количество букв в фамилии, имени и отчестве студента. Номер варианта в соответствующих таблицах выбирается по формуле X = 1 + ((A mod 47) mod B), где В – количество элементов в соответствующей таблице, а операция mod означает остаток от деления. Например, при А = 476 и В = 5, получим \textbf{Х = 1 + ((470+6) mod 47) mod 5) = 1 + (6 mod 5) = 2}. Порядок вычислений должен быть следующим:
\begin{enumerate}
\item\textbf{Этап Generate.} Сформировать массив М1 размерностью N, заполнив его с помощью функции rand\textunderscore r (нельзя использовать rand) случайными вещественными числами, имеющими равномерный закон распределения в диапазоне от 1 до A (включительно). Аналогично сформировать массив М2 размерностью N/2 со случайными вещественными числами в диапазоне от А до 10*А.
\item\textbf{Этап Map.} В массиве М1 к каждому элементу применить операцию из таблицы:
\begin{center}
\begin{tabular}{|c|c|}
\hline
\specialcell{\textbf{Номер}\\ \textbf{варианта}} & \textbf{Операция} \\
\hline
1 & \specialcell{Гиперболический синус с последующим\\ возведением в квадрат} \\
\hline
2 & \specialcell{Гиперболический косинус с последующим\\ увеличением на 1} \\
\hline
3 & \specialcell{Гиперболический тангенс с последующим\\ уменьшением на 1} \\
\hline
4 & \specialcell{Гиперболический котангенс\\ корня числа} \\
\hline
5 & \specialcell{Деление на Пи с последующим возведением\\ в третью степень} \\
\hline
6 & \specialcell{Кубический корень после деления\\ на число e} \\
\hline
7 & \specialcell{Экспонента квадратного корня\\ (т.е. M1[i] = exp(sqrt(M1[i])))} \\
\hline
\end{tabular}
\end{center}
Затем в массиве М2 каждый элемент поочерёдно сложить с предыдущим (для этого вам понадобится копия массива М2, из которого нужно будет брать операнды), а к результату сложения применить операцию из таблицы (считать, что для начального элемента массива предыдущий элемент равен нулю):
\begin{center}
\begin{tabular}{|c|c|}
\hline
\specialcell{\textbf{Номер}\\ \textbf{варианта}} & \textbf{Операция} \\
\hline
1 & Модуль синуса (т.е. M2[i] = |sin(M2[i] + M2[i-1])|) \\
\hline
2 & Модуль косинуса \\
\hline
3 & Модуль тангенса \\
\hline
4 & Модуль котангенса \\
\hline
5 & Натуральный логарифм модуля тангенса \\
\hline
6 & Десятичный логарифм, возведенный в степень e \\
\hline
7 & Кубический корень после умножения на число Пи \\
\hline
8 & Квадратный корень после умножения на e \\
\hline
\end{tabular}
\end{center}
\item\textbf{Этап Merge.} В массивах М1 и М2 ко всем элементами с одинаковыми индексами попарно применить операцию из таблицы (результат записать в М2):
\begin{center}
\begin{tabular}{|c|c|}
\hline
\specialcell{\textbf{Номер}\\ \textbf{варианта}} & \textbf{Операция} \\
\hline
1 & Возведение в степень (т.е. M2[i] = M1[i]\verb+^+M2[i]) \\
\hline
2 & Деление (т.е. M2[i] = M1[i]/M2[i]) \\
\hline
3 & Умножение \\
\hline
4 & Выбор большего (т.е. M2[i] = max(M1[i],M2[i]))) \\
\hline
5 & Выбор меньшего \\
\hline
6 & Модуль разности \\
\hline
\end{tabular}
\end{center}
\item\textbf{Этап Sort.} Полученный массив необходимо отсортировать методом, указанным в таблице (для этого нельзя использовать библиотечные функции; можно взять реализацию в виде свободно доступного исходного кода):
\begin{center}
\begin{tabular}{|c|c|}
\hline
\specialcell{\textbf{Номер}\\ \textbf{варианта}} & \textbf{Операция} \\
\hline
1 & Сортировка выбором (Selection sort). \\
\hline
2 & Сортировка расчёской (Comb sort). \\
\hline
3 & \specialcell{Пирамидальная сортировка (сортировка кучи,\\ Heapsort).} \\
\hline
4 & Глупая сортировка (Stupid sort). \\
\hline
5 & Гномья сортировка (Gnome sort).\\
\hline
6 & Сортировка вставками (Insertion sort). \\
\hline
7 & Сортировка выбором (Selection sort). \\
\hline
\end{tabular}
\end{center}
\item\textbf{Этап Reduce.} Рассчитать сумму синусов тех элементов массива М2, которые при делении на минимальный ненулевой элемент массива М2 дают чётное число (при определении чётности учитывать только целую часть числа). Результатом работы программы по окончании пятого этапа должно стать одно число X, которое следует использовать для верификации программы после внесения в неё изменений (например, до и после распараллеливания итоговое число X не должно измениться в пределах погрешности). Данное число необходимо выводить на каждой итерации на этапе верификации. Значение числа X следует привести в отчёте для различных значений N.
\par
\end{enumerate}
}