227 Commits

Author SHA1 Message Date
56d907d957 lab7 2024-01-07 00:04:25 +04:00
a067214d8d Удалить 'tasks/Mikhailov-ys' 2023-12-31 11:22:40 +04:00
7058348456 Создал(а) 'tasks/Mikhailov-ys/.' 2023-12-31 11:22:15 +04:00
052f52b268 Удалить 'tasks/Mikhailov-ys' 2023-12-31 11:15:16 +04:00
f95685bb7a Создал(а) 'tasks/Mikhailov-ys' 2023-12-31 11:14:47 +04:00
223f79fc9f revert 4a5b51c2e6
revert Создал(а) 'tasks/Mikhailov-ys/lab7/Readme.md'
2023-12-31 11:13:13 +04:00
4a5b51c2e6 Создал(а) 'tasks/Mikhailov-ys/lab7/Readme.md' 2023-12-31 11:11:09 +04:00
d87aa78fb3 revert 3b66993f66
revert Создал(а) 'Mikhailov-ys/lab7/readme.md'
2023-12-31 11:08:07 +04:00
3b66993f66 Создал(а) 'Mikhailov-ys/lab7/readme.md' 2023-12-31 11:06:33 +04:00
f87d7fba81 Удалить 'distributed-computing.sln' 2023-12-21 10:21:28 +04:00
55c73ab799 Merge pull request '[Л/Р 8] Мельников Кирилл' (#174) from KirillMelnikov/distributed-computing:melnikov-ky-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/174
2023-12-21 10:21:19 +04:00
d04136dc25 Merge pull request '[Л/Р 4] Юденичева Дарья' (#173) from d.yudenicheva/distributed-computing:yudenicheva-ds-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/173
2023-12-21 10:18:25 +04:00
7efc7959b1 Merge pull request '[Л/Р 3] Юденичева Дарья' (#170) from d.yudenicheva/distributed-computing:yudenicheva-ds-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/170
2023-12-21 10:18:06 +04:00
767dbee88c Merge pull request '[Л/Р 2] Юденичева Дарья' (#167) from d.yudenicheva/distributed-computing:yudencheva-ds-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/167
2023-12-21 10:17:29 +04:00
1fb8619498 commit1 2023-12-21 00:29:54 +04:00
a97eb424bd Merge pull request 'л/р 8 Юденичева Дарья' (#172) from d.yudenicheva/distributed-computing:yudenicheva-ds-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/172
2023-12-21 00:20:24 +04:00
af99c16b2f Merge pull request 'л/р 7 Юденичева Дарья' (#171) from d.yudenicheva/distributed-computing:yudenicheva-ds-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/171
2023-12-21 00:20:08 +04:00
8b48766625 Merge pull request '[Л/Р 3] Воронкова Лиза' (#162) from Liza_Voronkova/distributed-computing:voronkova-es-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/162
2023-12-21 00:17:51 +04:00
6232ec914f Merge pull request '[Л/Р 4] Воронкова Лиза' (#163) from Liza_Voronkova/distributed-computing:voronkova-es-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/163
2023-12-21 00:17:32 +04:00
a977d0cba4 Merge pull request '[Л/Р 7] Воронкова Лиза' (#164) from Liza_Voronkova/distributed-computing:voronkova-es-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/164
2023-12-21 00:17:17 +04:00
0c812871e6 Merge pull request '[Л/Р 8] Воронкова Лиза' (#165) from Liza_Voronkova/distributed-computing:voronkova-es-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/165
2023-12-21 00:17:04 +04:00
7474189c6c Merge pull request '[Л/Р 5] Воронкова Лиза' (#168) from Liza_Voronkova/distributed-computing:voronkova-es-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/168
2023-12-21 00:16:46 +04:00
520ebf8937 Merge pull request '[Л/Р 6] Воронкова Лиза' (#169) from Liza_Voronkova/distributed-computing:voronkova-es-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/169
2023-12-21 00:16:13 +04:00
2afd01bf31 Merge pull request '[Л/Р 8] Зиновьева Анна' (#161) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/161
2023-12-21 00:15:50 +04:00
9ce1a55a3b Merge pull request '[Л/Р 7] Зиновьева Анна' (#160) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/160
2023-12-21 00:15:35 +04:00
7bbde195b2 Merge pull request '[Л/Р 7] Мельников Кирилл' (#159) from KirillMelnikov/distributed-computing:melnikov-ky-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/159
2023-12-21 00:15:19 +04:00
1e5b7f5d25 Merge pull request '[Л/Р 8] Лямзина Мария' (#158) from 2510maria2002/distributed-computing:lyamzina-ma-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/158
2023-12-21 00:15:07 +04:00
68f0c9a72c Merge pull request '[Л/Р 6] Зиновьева Анна' (#157) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/157
2023-12-21 00:14:55 +04:00
a7a1bb622a Merge pull request '[Л/Р 7] Лямзина Мария' (#155) from 2510maria2002/distributed-computing:lyamzina-ma-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/155
2023-12-21 00:13:50 +04:00
053e1997cd Merge pull request '[Л/Р 8] Гренадерова Анастасия' (#153) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/153
2023-12-21 00:07:03 +04:00
7d6ae151fc Merge pull request '[Л/Р 7] Гренадерова Анастасия' (#152) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/152
2023-12-21 00:06:40 +04:00
512000debd Merge pull request '[Л/Р 7] Дунаев Олег' (#151) from oleggitea/distributed-computing:dunaev-oi-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/151
2023-12-21 00:06:27 +04:00
56ce8f9d1f Merge pull request '[Л/Р 5] Зиновьева Анна' (#150) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/150
2023-12-21 00:05:44 +04:00
1e6012288a Merge pull request '[Л/Р 6] Дунаев Олег' (#149) from oleggitea/distributed-computing:dunaev-oi-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/149
2023-12-21 00:05:22 +04:00
f7d3ba2caf Merge pull request '[Л/Р 6] Мельников Кирилл' (#148) from KirillMelnikov/distributed-computing:melnikov-ky-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/148
2023-12-21 00:04:34 +04:00
11724ac955 Merge pull request '[Л/Р 3] Никифорова Татьяна' (#145) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/145
2023-12-20 23:57:38 +04:00
786b5a0a1d Merge pull request '[Л/Р 6] Лямзина Мария' (#147) from 2510maria2002/distributed-computing:lyamzina-ma-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/147
2023-12-20 23:48:57 +04:00
1651f8cf81 Merge pull request '[Л/Р 8] Халитова Ангелина' (#143) from angelina/distributed-computing:khalitova-am-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/143
2023-12-20 23:48:38 +04:00
197273b91d Merge pull request '[Л/Р 6] Гренадерова Анастасия' (#146) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/146
2023-12-20 23:47:49 +04:00
65475bebd9 Merge pull request '[Л/Р 4] Никифорова Татьяна' (#144) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/144
2023-12-20 23:47:32 +04:00
f1e0a666f9 Merge pull request '[Л/Р 5] Никифорова Татьяна' (#142) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/142
2023-12-20 23:47:13 +04:00
5bda987e73 Merge pull request '[Л/Р 6] Никифорова Татьяна' (#141) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/141
2023-12-20 23:46:25 +04:00
2f451b0ca0 Merge pull request '[Л/Р 5] Дунаев Олег' (#140) from oleggitea/distributed-computing:dunaev-oi-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/140
2023-12-20 23:46:10 +04:00
621a6f948d Merge pull request '[Л/Р 7] Никифорова Татьяна' (#139) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/139
2023-12-20 23:45:48 +04:00
4c6fd5082e Merge pull request '[Л/Р 8] Никифорова Татьяна' (#138) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/138
2023-12-20 23:45:10 +04:00
5e6687666b Merge pull request '[Л/Р 5] Лямзина Мария' (#137) from 2510maria2002/distributed-computing:lyamzina-ma-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/137
2023-12-20 23:44:55 +04:00
23a6a111df Merge pull request '[Л/Р 5] Мельников Кирилл' (#136) from KirillMelnikov/distributed-computing:melnikov-ky-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/136
2023-12-20 23:44:04 +04:00
93ea084b31 Merge pull request '[Л/Р 4] Лямзина Мария' (#134) from 2510maria2002/distributed-computing:lyamzina-ma-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/134
2023-12-20 23:41:53 +04:00
122a27af02 Merge pull request '[Л/Р 5] Гренадерова Анастасия' (#133) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/133
2023-12-20 23:41:36 +04:00
2285ead933 Merge pull request '[Л/Р 4] Гренадерова Анастасия' (#132) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/132
2023-12-20 23:41:20 +04:00
0f304ab81f Merge pull request '[Л/Р 3] Гренадерова Анастасия' (#131) from Grenaderova_Anastasia/distributed-computing:grenaderova-aa-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/131
2023-12-20 23:17:22 +04:00
28c518c07d Merge pull request '[Л/Р 4] Мельников Кирилл' (#130) from KirillMelnikov/distributed-computing:melnikov-ky-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/130
2023-12-20 23:16:46 +04:00
2545fe13e8 Merge pull request '[Л/Р 3] Лямзина Мария' (#129) from 2510maria2002/distributed-computing:lyamzina-ma-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/129
2023-12-20 23:16:30 +04:00
160382688b Merge pull request '[Л/Р 3] Мельников Кирилл' (#126) from KirillMelnikov/distributed-computing:melnikov-ky-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/126
2023-12-20 23:15:42 +04:00
a594ca3222 Merge pull request '[Л/Р 8] Казаков Евгений' (#124) from EugeneKazakov/distributed-computing:kazakov-ev-lab8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/124
2023-12-20 23:14:54 +04:00
025f0a93eb Merge pull request '[Л/Р 7] Казаков Евгений' (#123) from EugeneKazakov/distributed-computing:kazakov-ev-lab_7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/123
2023-12-20 23:14:40 +04:00
a2abab3fc2 Merge pull request '[Л/Р 6] Казаков Евгений' (#122) from EugeneKazakov/distributed-computing:kazakov-ev-lab6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/122
2023-12-20 23:14:28 +04:00
ae70c8ddb5 Merge pull request '[Л/Р 5] Казаков Евгений' (#121) from EugeneKazakov/distributed-computing:kavakov-ev-lab_5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/121
2023-12-20 23:14:02 +04:00
ee1836ba9a Merge pull request '[Л/Р 4] Казаков Евгений' (#120) from EugeneKazakov/distributed-computing:kazakov-ev-lab_4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/120
2023-12-20 23:13:21 +04:00
678e641b10 Merge pull request '[Л/Р 3] Казаков Евгений' (#119) from EugeneKazakov/distributed-computing:kazakov-ev-lab_3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/119
2023-12-20 23:13:00 +04:00
7ff232fe5a Merge pull request '[Л/Р 7] Халитова Ангелина' (#118) from angelina/distributed-computing:khalitova-am-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/118
2023-12-20 23:12:38 +04:00
54deb90655 Merge pull request '[Л/Р 6] Халитова Ангелина' (#117) from angelina/distributed-computing:khalitova-am-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/117
2023-12-20 23:12:15 +04:00
85cd6991da Merge pull request '[Л/Р 4] Халитова Ангелина' (#115) from angelina/distributed-computing:khalitova-am-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/115
2023-12-20 23:11:42 +04:00
e8fb644580 Merge pull request '[Л/Р 3] Халитова Ангелина' (#114) from angelina/distributed-computing:khalitova-am-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/114
2023-12-20 23:10:59 +04:00
f789f9a6d7 Merge pull request '[Л/Р 8] Плаксина Александра' (#113) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/113
2023-12-20 23:10:04 +04:00
d0f2541ff0 Merge pull request '[Л/Р 7 ] Плаксина Александра' (#112) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/112
2023-12-20 23:09:33 +04:00
9d4e31cae6 л/р 4 Юденичева Дарья 2023-12-20 19:57:51 +03:00
d54fbc4713 л/р 8 Юденичева Дарья 2023-12-20 17:24:28 +03:00
fe74497e2b л/р 7 Юденичева Дарья 2023-12-20 16:55:06 +03:00
4217fe2468 л/р 3 Юденичева Дарья 2023-12-20 01:37:59 +03:00
Liza275
ffe9fda6d1 Удалила лишние матрицы 2023-12-19 09:11:54 +04:00
Liza275
52f98ec0b4 Лабораторная работа 6 2023-12-19 09:10:09 +04:00
Liza275
dc3ceeb5f4 Лабораторная работа 5 2023-12-19 03:48:01 +04:00
af9f959de1 л/р 2 2023-12-19 02:38:18 +03:00
Liza275
5419906828 Лабораторная работа 8 2023-12-19 01:58:09 +04:00
Liza275
75cf02b26c Лабораторная работа 7 2023-12-19 01:56:54 +04:00
Liza275
d1b9cf8e5e Лабораторная работа 4 2023-12-19 01:54:03 +04:00
Liza275
2e2fb95cff Лабораторная работа 3 2023-12-18 23:14:17 +04:00
344ae488f6 laba done 2023-12-18 22:11:32 +04:00
f7032a55fc laba done 2023-12-18 21:52:01 +04:00
2510m
26f6db9951 commitLab8 2023-12-18 21:23:59 +04:00
aa78b7859b laba done 2023-12-18 21:12:13 +04:00
2510m
5c5b9d4453 commitLab7 2023-12-18 18:48:23 +04:00
d5cf7065ef laba 8 2023-12-18 18:44:16 +04:00
8c4bcc03c7 commit11 2023-12-18 18:37:41 +04:00
b53d74691a 7 laba 2023-12-18 18:35:46 +04:00
aa55fa96a1 commit1 2023-12-18 18:34:33 +04:00
e650548ca6 laba done 2023-12-18 18:15:41 +04:00
2510m
96890e4dca commitLaba6 2023-12-18 18:10:49 +04:00
b9af3a3cb2 commit1 2023-12-18 18:10:32 +04:00
6b86c45ff1 commit 2023-12-18 18:10:11 +04:00
Khalitova Angelina
b21fcd2faa upd report 2023-12-18 18:01:15 +04:00
944e82ce84 6 laba 2023-12-18 17:57:57 +04:00
8a9f881151 Lab_3 2023-12-18 17:56:15 +04:00
d14694390c Lab_4 2023-12-18 17:52:08 +04:00
Khalitova Angelina
f6f2364157 add report 2023-12-18 17:51:19 +04:00
73a33347fe Lab_5 2023-12-18 17:45:19 +04:00
25f5a7f4fa Lab_6 2023-12-18 17:42:12 +04:00
c117a58277 commit1 2023-12-18 17:38:52 +04:00
de4b5875d7 Lab_7 2023-12-18 17:38:27 +04:00
0e8a8d4e92 aa 2023-12-18 17:37:09 +04:00
60cc7dc5de Lab-8 2023-12-18 17:32:00 +04:00
ee67442f96 aa 2023-12-18 17:30:42 +04:00
2510m
f4d6a8b23c commitLaba5 2023-12-18 16:49:43 +04:00
b924bffbc0 commit1 2023-12-18 16:46:40 +04:00
2510m
36815227e1 commitLaba4 2023-12-18 16:41:19 +04:00
4a7abe77e3 5 laba 2023-12-18 16:34:36 +04:00
044d78e382 4 laba 2023-12-18 16:32:53 +04:00
e94714ed8f commit1 2023-12-18 16:21:58 +04:00
2510m
cddc864fe2 commitLABA3 2023-12-18 16:15:17 +04:00
77387845a5 commit lab 3 2023-12-18 16:09:13 +04:00
e6e89afa88 commit1 2023-12-18 16:06:00 +04:00
b269c252b6 lab8 2023-12-18 12:25:26 +03:00
e8b7c46d06 lab6 2023-12-18 12:24:48 +03:00
04fddac710 lab6 2023-12-18 12:24:13 +03:00
507761bc7a lab_5 2023-12-18 12:23:21 +03:00
b2f3e95aeb lab_4 2023-12-18 12:22:22 +03:00
342f04c02f lab_3 2023-12-18 12:17:09 +03:00
Khalitova Angelina
998f8ce03c num lab 2023-12-18 12:43:31 +04:00
Khalitova Angelina
4f4dfc2086 add report 2023-12-18 12:43:04 +04:00
Khalitova Angelina
9aa9ec7bd6 upd 2023-12-18 12:39:27 +04:00
Khalitova Angelina
eb3226406f add 2023-12-18 12:35:33 +04:00
Khalitova Angelina
5bca7da18d add 2023-12-18 12:25:15 +04:00
efd9d1bd47 Merge pull request '[Л/Р 5] Халитова Ангелина' (#116) from angelina/distributed-computing:khalitova-am-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/116
2023-12-18 11:25:57 +04:00
Khalitova Angelina
d04e2f8c23 rep 2023-12-18 10:39:35 +04:00
Khalitova Angelina
e64bed2d07 add 2023-12-18 10:38:04 +04:00
Khalitova Angelina
7481362080 Пересоздала ветку от main 2023-12-18 09:52:45 +04:00
Khalitova Angelina
6cb7ae26b8 Пересоздала ветку от main 2023-12-18 09:47:42 +04:00
6f6cbac2a3 lab8_done 2023-12-18 02:37:30 +04:00
9855bb264a lab8_done 2023-12-18 02:36:54 +04:00
d15b374999 lab7_done 2023-12-18 01:35:05 +04:00
a21123fbd8 Merge pull request '[Л/Р 8] Островская Софья' (#98) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/98
2023-12-17 23:50:45 +04:00
274f304374 Merge pull request '[Л/Р 7] Островская Софья' (#97) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/97
2023-12-17 23:45:48 +04:00
5844b9b63c Merge pull request '[Л/Р 6] Островская Софья' (#96) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/96
2023-12-17 23:45:07 +04:00
4769eadfec Merge pull request '[Л/Р 5] Островская Софья' (#95) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/95
2023-12-17 23:43:35 +04:00
eff4d671f3 Merge pull request '[Л/Р 6] Плаксина Александра' (#94) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/94
2023-12-17 23:42:26 +04:00
21bb9f5e7b Merge pull request '[Л/Р 5] Плаксина Александра' (#93) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/93
2023-12-17 23:39:50 +04:00
bcbaf031e9 Merge pull request '[Л/Р 4] Зиновьева Анна' (#92) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/92
2023-12-17 23:38:36 +04:00
b4272099f1 Merge pull request '[Л/Р 3] Зиновьева Анна' (#91) from Sentimental_anna/distributed-computing:zinoveva-ad-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/91
2023-12-17 23:38:07 +04:00
45618a1799 Merge pull request '[Л/Р 8] Савицкий Александр' (#90) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/90
2023-12-17 23:37:44 +04:00
e6c80fd353 Merge pull request '[Л/Р 7] Савицкий Александр' (#89) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/89
2023-12-17 23:33:07 +04:00
9b6eb0794c Merge pull request '[Л/Р 6] Савицкий Александр' (#88) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/88
2023-12-17 23:28:36 +04:00
faa5f5206a Merge pull request '[Л/Р 8] Миронов Евгений' (#85) from MironovEvgeniy/distributed-computing:mironov-eo-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/85
2023-12-17 23:26:09 +04:00
3e23cc1880 Merge pull request '[Л/Р 7] Миронов Евгений' (#84) from MironovEvgeniy/distributed-computing:mironov-eo-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/84
2023-12-17 23:18:20 +04:00
fcb6fb0e4e Merge pull request '[Л/Р 8] Клементьева Жанна' (#83) from klementeva/distributed-computing:klementeva-ja-lab-8 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/83
2023-12-17 23:17:02 +04:00
cc2092323d Merge pull request '[Л/Р 7] Клементьева Жанна' (#82) from klementeva/distributed-computing:klementeva-ja-lab-7 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/82
2023-12-17 23:16:22 +04:00
8313a92d16 Merge pull request '[Л/Р 6] Клементьева Жанна' (#81) from klementeva/distributed-computing:klementeva-ja-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/81
2023-12-17 23:15:28 +04:00
961c8885f5 Merge pull request '[Л/Р 4] Плаксина Александра' (#80) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/80
2023-12-17 23:14:58 +04:00
8e69835321 Merge pull request '[Л/Р 3] Плаксина Александра' (#79) from Sanechka_Plaksina/distributed-computing:plaksina-av-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/79
2023-12-17 23:07:41 +04:00
196d2d2a1b Merge pull request '[Л/Р 5] Савицкий Александр' (#78) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/78
2023-12-17 23:05:30 +04:00
915b8bb68c Merge pull request '[Л/Р 4] Островская Софья' (#77) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/77
2023-12-17 23:05:11 +04:00
8ad85b8049 Merge pull request '[Л/Р 4] Савицкий Александр' (#75) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/75
2023-12-17 23:03:46 +04:00
ed7d0467c3 Merge pull request '[Л/Р 3] Савицкий Александр' (#74) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/74
2023-12-17 23:00:30 +04:00
4b7ceb94c1 Merge pull request '[Л/Р 5] Клементьева Жанна' (#73) from klementeva/distributed-computing:klementeva-ja-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/73
2023-12-17 23:00:12 +04:00
210a7480ed Merge pull request '[Л/Р 4] Клементьева Жанна' (#72) from klementeva/distributed-computing:klementeva-ja-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/72
2023-12-17 22:58:36 +04:00
1f6f04f1af Merge pull request '[Л/Р 3] Островская Софья' (#70) from ostrovsofa/distributed-computing:ostrovskaya-sf-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/70
2023-12-17 22:55:15 +04:00
9c060b9fbf Merge pull request '[Л/Р 3] Клементьева Жанна' (#67) from klementeva/distributed-computing:klementeva-ja-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/67
2023-12-17 22:51:22 +04:00
a92812b322 Merge pull request '[Л/Р 2,3] Горбылева Антонина' (#66) from antonina_gorbyleva/distributed-computing:gorbyleva-ai-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/66
2023-12-17 22:50:44 +04:00
7020bd0de9 Merge pull request '[Л/Р 6] Миронов Евгений' (#60) from MironovEvgeniy/distributed-computing:mironov-eo-lab-6 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/60
2023-12-17 22:47:11 +04:00
3da11c8b28 Merge pull request '[Л/Р 2] Савицкий Александр' (#55) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab_2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/55
2023-12-17 22:42:56 +04:00
4c75073793 Merge pull request '[Л/Р 5] Миронов Евгений' (#53) from MironovEvgeniy/distributed-computing:mironov-eo-lab-5 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/53
2023-12-17 22:38:52 +04:00
ca99bd565c Merge pull request '[Л/Р 4] Миронов Евгений' (#52) from MironovEvgeniy/distributed-computing:mironoveo-lab-4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/52
2023-12-17 22:38:15 +04:00
ae0ecc8743 Merge pull request '[Л/Р 3] Миронов Евгений' (#49) from MironovEvgeniy/distributed-computing:mironov-eo-lab-3 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/49
2023-12-17 22:14:57 +04:00
fd35de8f4f Merge pull request '[Л/Р 2] Горбылева Антонина' (#47) from antonina_gorbyleva/distributed-computing:gorbyleva-ai-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/47
2023-12-17 22:11:43 +04:00
40105e274e Merge pull request '[Л/Р 1] Савицкий Александр' (#45) from Savitskiy_ISEbd-41/distributed-computing:savitskiy_av_lab_1 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/45
2023-12-17 22:10:12 +04:00
d5b14449e3 Merge pull request '[Л/Р 1] Костенко Карина' (#41) from karinakostenko/distributed-computing:lab1-kostenko-kd into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/41
2023-12-17 22:05:08 +04:00
a16e0f20c5 Merge pull request '[Л/Р 1,2] Клементьева Жанна' (#38) from klementeva/distributed-computing:klementeva-ja-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/38
2023-12-17 22:03:59 +04:00
986d9359e6 Merge pull request '[Л/Р 2] Миронов Евгений' (#36) from MironovEvgeniy/distributed-computing:mironov-eo-lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/36
2023-12-17 22:02:36 +04:00
ab129e6d5e Merge pull request '[Л/Р 2] Никифорова Татьяна' (#28) from tanya_nik16/distributed-computing:Nikiforova-TS-Lab-2 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/28
2023-12-17 22:01:51 +04:00
Софья Островская
9a5dca9616 laba done 2023-12-17 16:11:55 +04:00
Софья Островская
7c9f835e1e laba done 2023-12-17 15:48:27 +04:00
Софья Островская
f75432d5f7 fix readme 2023-12-17 15:31:55 +04:00
Софья Островская
6dc434cbf3 . 2023-12-17 15:30:42 +04:00
Софья Островская
267ba3b73c laba done 2023-12-17 14:35:09 +04:00
Софья Островская
bc1845c05d . 2023-12-17 14:10:19 +04:00
Софья Островская
3ab942f78a gitignore 2023-12-17 13:50:01 +04:00
Софья Островская
40ce78dc39 . 2023-12-17 13:48:12 +04:00
Софья Островская
9afb8e93d6 . 2023-12-17 13:45:21 +04:00
Софья Островская
a308ede4ad laba done 2023-12-17 13:37:17 +04:00
e6cb8bd420 lab6_done 2023-12-17 00:55:54 +04:00
1627b65411 lab5_done 2023-12-16 23:31:32 +04:00
6bcfec3c0f fix 2023-12-16 21:04:41 +04:00
07a0377cbb laba done 2023-12-16 20:09:40 +04:00
0c1493a9d9 laba done 2023-12-16 16:41:40 +04:00
cedaaa513f lab 8 2023-12-16 16:14:20 +04:00
abd3959270 lab 7 2023-12-16 16:09:46 +04:00
3afd35140d lab6 2023-12-16 15:58:30 +04:00
Софья Островская
8679c69ca6 . 2023-12-16 14:54:30 +04:00
a9933fb842 mironov-eo-lab-8 2023-12-16 12:02:18 +03:00
615783c819 mironov-eo-lab-7 2023-12-16 11:12:30 +03:00
873c3cab34 Lab 8 Ready 2023-12-16 11:48:57 +04:00
a88ad333ab Lab 7 Ready 2023-12-16 11:47:24 +04:00
f52723e603 Lab 6 Ready 2023-12-16 11:45:24 +04:00
ab801f7c01 fix_lab4 2023-12-16 02:07:00 +04:00
918816654a lab4_done 2023-12-16 01:46:18 +04:00
083170f861 lab3_done 2023-12-15 22:14:31 +04:00
f269126281 lab 5 2023-12-15 21:02:23 +04:00
Софья Островская
7ea3ef3097 laba done 2023-12-15 19:09:53 +04:00
2415d60373 lab 4 2023-12-15 14:24:54 +04:00
d2143a8034 lab 3 2023-12-15 14:17:16 +04:00
0a02071d52 Lab 5 ready 2023-12-15 14:03:54 +04:00
8fb52539f0 Lab 4 ready 2023-12-15 13:58:35 +04:00
Софья Островская
32a64d3455 . 2023-12-15 03:06:09 +04:00
Софья Островская
6ecf75ae4e laba done 2023-12-15 03:04:47 +04:00
Софья Островская
8badb568b7 check 2023-12-15 02:50:10 +04:00
c7730ffee2 Lab 3 Ready 2023-12-14 13:53:47 +04:00
824ea4bf47 [Л/Р 3] Горбылева Антонина 2023-12-13 23:35:57 +04:00
19eebbbd5d Add other lws 2023-12-13 10:55:00 +04:00
b36b4f8587 mironov-eo-lab-6 2023-12-12 22:45:59 +03:00
7103a914a5 Merge pull request 'lr 3' (#2) from v.moiseev/distributed-computing:main into main
Reviewed-on: http://student.git.athene.tech/angelina/distributed-computing/pulls/2
2023-12-07 18:07:14 +04:00
a1a2cd75c8 lab_2 2023-12-07 00:34:42 +04:00
774069d984 mironov-eo-lab-5 2023-12-06 13:58:56 +03:00
67d9a7be51 mironov-eo-lab-4 2023-12-06 00:12:01 +03:00
993d701ee6 mironor-eo-lab-3 2023-12-04 23:02:10 +03:00
04436abf69 [Л/Р 2] Горбылева Антонина 2023-12-03 21:12:57 +04:00
fd8b56ad1e fix 2023-12-03 20:11:27 +03:00
458057c4ea Merge branch 'Nikiforova-TS-lab-1' into Nikiforova-TS-Lab-2 2023-12-02 11:00:12 +04:00
cf0e532652 иСПРАВ 2023-12-02 10:45:25 +04:00
4aef01c1bf add_lab_1 2023-11-30 20:25:59 +04:00
39090162a2 Merge pull request 'Добавление работы 4' (#42) from lw4 into main
Reviewed-on: http://student.git.athene.tech/v.moiseev/distributed-computing/pulls/42
2023-11-30 18:01:33 +04:00
Софья Островская
930c316a5d create folder 2023-11-29 12:53:21 +04:00
6c7ee0909b fixes 2023-11-22 20:57:32 +04:00
befd5915f6 lab1 2023-11-10 15:46:28 +03:00
953738c4d7 Created Lab 2 2023-11-03 22:22:15 +04:00
1cdac31a5d lab-2 2023-10-30 23:41:47 +03:00
6a5999478a Перенос в tasks 2023-10-18 22:29:14 +04:00
ca857e1581 Готовый отчет/удалила ветвь1 2023-10-18 10:45:47 +04:00
1408 changed files with 62785 additions and 4 deletions

View File

@@ -9,7 +9,7 @@
2. [Разработка простейшего распределённого приложения](labs/lab_2/README.md) 2. [Разработка простейшего распределённого приложения](labs/lab_2/README.md)
3. [REST API, Gateway и синхронный обмен между микросервисами](labs/lab_3/README.md) 3. [REST API, Gateway и синхронный обмен между микросервисами](labs/lab_3/README.md)
4. [Работа с брокером сообщений](labs/lab_4/README.md) 4. [Работа с брокером сообщений](labs/lab_4/README.md)
5. TBA 5. [Параллельное умножение матриц](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_5.md)
6. TBA 6. [Параллельный поиск значения детерминанта матрицы](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_6.md)
7. TBA 7. [Балансировка нагрузки в распределённых системах](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_7.md)
8. TBA 8. [Про устройство распределенных систем](http://student.git.athene.tech/Alexey/DAS_2023_1/src/branch/main/labs/lab_8.md)

23
tasks/dunaev-oi/README.md Normal file
View File

@@ -0,0 +1,23 @@
# Отчет по лабораторной работе №7
Выполнил студент гр. ИСЭбд-41 Дунаев О.И.
## Задачи
Написать небольшое эссе (буквально несколько абзацев) своими словами. А помогут Вам в этом вопросы из списка:
1. Какие алгоритмы и методы используются для балансировки нагрузки?
2. Какие открытые технологии существуют для балансировки нагрузки?
3. Как осуществляется балансировка нагрузки на базах данных?
4. Реверс-прокси как один из элементов балансировки нагрузки.
## Эссе
Балансировка нагрузки это важный процесс в сфере информационных технологий, который позволяет равномерно распределять нагрузку между компьютерами, серверами или другими ресурсами для обеспечения оптимальной производительности системы. В данном эссе я рассмотрю несколько вопросов, связанных с алгоритмами и методами балансировки нагрузки, открытыми технологиями, а также балансировкой нагрузки на базах данных и использованием реверс-прокси.
Первый вопрос касается алгоритмов и методов, используемых для балансировки нагрузки. Существует несколько подходов, таких как раунд-робин, весовая нагрузка, наименьшее количество соединений и IP хэширование. Раунд-робин распределяет запросы по всем доступным серверам одинаковым образом. Весовая нагрузка позволяет приоритезировать определенные серверы и передавать им больше запросов. Наименьшее количество соединений выбирает сервер с наименьшим количеством активных соединений. IP хэширование использует IP-адрес клиента для определения сервера, который будет обрабатывать его запросы.
Второй вопрос касается открытых технологий для балансировки нагрузки. Среди них можно выделить HAProxy, NGINX, Apache HTTP Server и AWS Elastic Load Balancer. HAProxy является высокопроизводительным реверс-прокси, который поддерживает различные алгоритмы балансировки нагрузки. NGINX также является реверс-прокси и обладает возможностями балансировки нагрузки. Apache HTTP Server предоставляет модуль mod_proxy_balancer для балансировки нагрузки. AWS Elastic Load Balancer предоставляет гибкую и масштабируемую балансировку нагрузки в облачной среде.
Третий вопрос касается балансировки нагрузки на базах данных. Для балансировки нагрузки на базах данных используются различные методы, такие как горизонтальное шардирование, репликация и кэширование. Горизонтальное шардирование разделяет данные на несколько фрагментов и распределяет их по разным серверам. Репликация создает копии базы данных на разных серверах для обработки запросов. Кэширование позволяет хранить результаты часто используемых запросов для улучшения производительности.
Реверс-прокси является важным элементом балансировки нагрузки. Он работает на стороне сервера и перенаправляет запросы с клиента на разные серверы в зависимости от текущей нагрузки. Реверс-прокси предоставляет централизованную точку контроля над серверами, обеспечивает отказоустойчивость и улучшает производительность системы.

View File

@@ -0,0 +1,38 @@
# Отчет по лабораторной работе №5
Выполнил студент гр. ИСЭбд-41 Дунаев О.И.
## Создание приложения
Выбрал язык C#, Windows Forms.
Приложение имеет три текстовых поля, в которых можно через пробел вносить элементы матрицы. В матрицы-множители значения можно сгенерировать внутри программы. Размерность можно регулировать от 2 до 1000 в специальном поле. При необходимости можно очистить все матрицы. Также есть флажок выключения вывода значений матриц в текстовые поля, т.к. это занимает слишком много времени. Количество потоков в параллельном алгоритме регулируется в соответствующем поле.
Попробуем запустить обычный и паралелльный алгоритмы на матрицах 10х10 и зафиксировать результат выполнения по времени.
![](pic/1.png)
![](pic/2.png)
## Бенчмарки
Протестируем обычный и параллельный алгоритм матрицах 100х100, 300х300 и 500х500.
Сверху отображен результат обычного алгоритма, снизу паралелльного.
Матрицы 100х100
![](pic/3.png)
![](pic/4.png)
Матрицы 300х300
![](pic/5.png)
![](pic/6.png)
Матрицы 500х500
![](pic/7.png)
![](pic/8.png)
Вывод: Параллельный алгоритм работает быстрее только при наличии большого количества операций и данных. Если элементов не так много, то обычный алгоритм справляется быстрее. Также была обнаружено оптимальное количество потоков для лучшей работы обработки матриц 500х500 - 4 потока.

View File

@@ -0,0 +1,484 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from `dotnet new gitignore`
# dotenv files
.env
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Vim temporary swap files
*.swp

View File

@@ -0,0 +1,34 @@
namespace RVIP_Lab5
{
public class Alg1
{
static int[,] MultiplyMatrices(int[,] matrix1, int[,] matrix2)
{
int rows1 = matrix1.GetLength(0);
int cols1 = matrix1.GetLength(1);
int cols2 = matrix2.GetLength(1);
int[,] result = new int[rows1, cols2];
for (int i = 0; i < rows1; i++)
{
for (int j = 0; j < cols2; j++)
{
for (int k = 0; k < cols1; k++)
{
result[i, j] += matrix1[i, k] * matrix2[k, j];
}
}
}
return result;
}
public int[,] Begin(int[,] matrix1, int[,] matrix2)
{
int[,] result = MultiplyMatrices(matrix1, matrix2);
return result;
}
}
}

View File

@@ -0,0 +1,50 @@
namespace RVIP_Lab5
{
public class Alg2
{
public int[,] Begin(int[,] matrix1, int[,] matrix2, int numThreads)
{
int rowsA = matrix1.GetLength(0);
int columnsA = matrix1.GetLength(1);
int rowsB = matrix2.GetLength(0);
int columnsB = matrix2.GetLength(1);
int[,] resultMatrix = new int[rowsA, columnsB];
int rowsPerThread = rowsA / numThreads;
Thread[] threads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++)
{
int startRow = i * rowsPerThread;
int endRow = (i == numThreads - 1) ? rowsA : startRow + rowsPerThread;
threads[i] = new Thread(() => MultiplyRows(startRow, endRow, matrix1, matrix2, resultMatrix));
threads[i].Start();
}
foreach (Thread thread in threads)
{
thread.Join();
}
return resultMatrix;
}
static void MultiplyRows(int startRow, int endRow, int[,] matrixA, int[,] matrixB, int[,] resultMatrix)
{
for (int i = startRow; i < endRow; i++)
{
for (int j = 0; j < matrixB.GetLength(1); j++)
{
int sum = 0;
for (int k = 0; k < matrixA.GetLength(1); k++)
{
sum += matrixA[i, k] * matrixB[k, j];
}
resultMatrix[i, j] = sum;
}
}
}
}
}

View File

@@ -0,0 +1,77 @@
using System.Drawing;
namespace RVIP_Lab5
{
public class Controller
{
public string PrintResultMatrix(int[,] result)
{
string resultString = "";
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
resultString += result[i, j];
if (j != result.GetLength(1) - 1)
{
resultString += " ";
}
}
resultString += Environment.NewLine;
}
return resultString;
}
public int[,] GetMatrixFromTextbox(string inputText)
{
string[] lines = inputText.Split(Environment.NewLine);
int numRows = lines.Length;
int numCol = lines[0].Split(' ').Length;
int[,] matrix = new int[numRows, numCol];
for (int i = 0; i < numRows; i++)
{
string[] elements = lines[i].Split(' ');
for (int j = 0; j < numCol; j++)
{
matrix[i, j] = int.Parse(elements[j]);
}
}
return matrix;
}
public string GetTextFromFile(string filePath)
{
string text = "";
using (StreamReader sr = new StreamReader(filePath))
{
text = sr.ReadToEnd();
}
return text;
}
public int[,] GenerateNewMatrix(int count)
{
Random random = new Random();
int[,] matrix = new int[count, count];
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count; j++)
{
matrix[i, j] = random.Next(1, 26);
}
}
return matrix;
}
}
}

View File

@@ -0,0 +1,262 @@
namespace RVIP_Lab5
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
textBoxMatrix1 = new TextBox();
textBoxResult = new TextBox();
buttonAlg1 = new Button();
label1 = new Label();
textBoxMatrix2 = new TextBox();
label2 = new Label();
buttonAlg2 = new Button();
openFileDialog1 = new OpenFileDialog();
label3 = new Label();
labelResultTime = new Label();
label4 = new Label();
countStream = new NumericUpDown();
label5 = new Label();
genCountRowCol = new NumericUpDown();
button1 = new Button();
buttonGenerateMatrix2 = new Button();
buttonGenerateMatrix1 = new Button();
((System.ComponentModel.ISupportInitialize)countStream).BeginInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).BeginInit();
SuspendLayout();
//
// textBoxMatrix1
//
textBoxMatrix1.Location = new Point(12, 50);
textBoxMatrix1.Multiline = true;
textBoxMatrix1.Name = "textBoxMatrix1";
textBoxMatrix1.Size = new Size(258, 258);
textBoxMatrix1.TabIndex = 0;
//
// textBoxResult
//
textBoxResult.Location = new Point(768, 50);
textBoxResult.Multiline = true;
textBoxResult.Name = "textBoxResult";
textBoxResult.Size = new Size(258, 258);
textBoxResult.TabIndex = 1;
//
// buttonAlg1
//
buttonAlg1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg1.Location = new Point(1080, 60);
buttonAlg1.Name = "buttonAlg1";
buttonAlg1.Size = new Size(258, 40);
buttonAlg1.TabIndex = 2;
buttonAlg1.Text = "Обычный алгоритм";
buttonAlg1.UseVisualStyleBackColor = true;
buttonAlg1.Click += buttonAlg1_Click;
//
// label1
//
label1.AutoSize = true;
label1.BackColor = Color.Transparent;
label1.Font = new Font("Segoe UI", 72F, FontStyle.Regular, GraphicsUnit.Point);
label1.Location = new Point(276, 117);
label1.Name = "label1";
label1.Size = new Size(111, 128);
label1.TabIndex = 3;
label1.Text = "X";
//
// textBoxMatrix2
//
textBoxMatrix2.Location = new Point(378, 50);
textBoxMatrix2.Multiline = true;
textBoxMatrix2.Name = "textBoxMatrix2";
textBoxMatrix2.Size = new Size(258, 258);
textBoxMatrix2.TabIndex = 4;
//
// label2
//
label2.AutoSize = true;
label2.BackColor = Color.Transparent;
label2.Font = new Font("Segoe UI", 72F, FontStyle.Regular, GraphicsUnit.Point);
label2.Location = new Point(642, 117);
label2.Name = "label2";
label2.Size = new Size(120, 128);
label2.TabIndex = 5;
label2.Text = "=";
//
// buttonAlg2
//
buttonAlg2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg2.Location = new Point(1080, 117);
buttonAlg2.Name = "buttonAlg2";
buttonAlg2.Size = new Size(258, 39);
buttonAlg2.TabIndex = 8;
buttonAlg2.Text = "Паралелльный алгоритм";
buttonAlg2.UseVisualStyleBackColor = true;
buttonAlg2.Click += buttonAlg2_Click;
//
// openFileDialog1
//
openFileDialog1.FileName = "openFileDialog1";
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
label3.Location = new Point(574, 349);
label3.Name = "label3";
label3.Size = new Size(111, 30);
label3.TabIndex = 9;
label3.Text = "Результат:";
//
// labelResultTime
//
labelResultTime.AutoSize = true;
labelResultTime.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
labelResultTime.Location = new Point(719, 349);
labelResultTime.Name = "labelResultTime";
labelResultTime.Size = new Size(0, 30);
labelResultTime.TabIndex = 10;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(15, 394);
label4.Name = "label4";
label4.Size = new Size(123, 15);
label4.TabIndex = 12;
label4.Text = "Количество потоков:";
//
// countStream
//
countStream.Location = new Point(144, 392);
countStream.Maximum = new decimal(new int[] { 10, 0, 0, 0 });
countStream.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
countStream.Name = "countStream";
countStream.Size = new Size(66, 23);
countStream.TabIndex = 13;
countStream.Value = new decimal(new int[] { 4, 0, 0, 0 });
//
// label5
//
label5.AutoSize = true;
label5.Location = new Point(15, 349);
label5.Name = "label5";
label5.Size = new Size(166, 15);
label5.TabIndex = 16;
label5.Text = "Размерность при генерации:";
//
// genCountRowCol
//
genCountRowCol.Location = new Point(187, 347);
genCountRowCol.Maximum = new decimal(new int[] { 1000, 0, 0, 0 });
genCountRowCol.Minimum = new decimal(new int[] { 2, 0, 0, 0 });
genCountRowCol.Name = "genCountRowCol";
genCountRowCol.Size = new Size(66, 23);
genCountRowCol.TabIndex = 17;
genCountRowCol.Value = new decimal(new int[] { 10, 0, 0, 0 });
//
// button1
//
button1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
button1.Location = new Point(1080, 171);
button1.Name = "button1";
button1.Size = new Size(258, 46);
button1.TabIndex = 22;
button1.Text = "Очистить матрицы";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// buttonGenerateMatrix2
//
buttonGenerateMatrix2.Location = new Point(447, 12);
buttonGenerateMatrix2.Name = "buttonGenerateMatrix2";
buttonGenerateMatrix2.Size = new Size(122, 32);
buttonGenerateMatrix2.TabIndex = 15;
buttonGenerateMatrix2.Text = "Сгенерировать";
buttonGenerateMatrix2.UseVisualStyleBackColor = true;
buttonGenerateMatrix2.Click += buttonGenerateMatrix2_Click;
//
// buttonGenerateMatrix1
//
buttonGenerateMatrix1.Location = new Point(75, 12);
buttonGenerateMatrix1.Name = "buttonGenerateMatrix1";
buttonGenerateMatrix1.Size = new Size(122, 32);
buttonGenerateMatrix1.TabIndex = 14;
buttonGenerateMatrix1.Text = "Сгенерировать";
buttonGenerateMatrix1.UseVisualStyleBackColor = true;
buttonGenerateMatrix1.Click += buttonGenerateMatrix1_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1507, 446);
Controls.Add(button1);
Controls.Add(genCountRowCol);
Controls.Add(label5);
Controls.Add(buttonGenerateMatrix2);
Controls.Add(buttonGenerateMatrix1);
Controls.Add(countStream);
Controls.Add(label4);
Controls.Add(labelResultTime);
Controls.Add(label3);
Controls.Add(buttonAlg2);
Controls.Add(label2);
Controls.Add(textBoxMatrix2);
Controls.Add(label1);
Controls.Add(buttonAlg1);
Controls.Add(textBoxResult);
Controls.Add(textBoxMatrix1);
Name = "Form1";
Text = "Перемножение матриц: Дунаев О.И. ИСЭбд-41";
((System.ComponentModel.ISupportInitialize)countStream).EndInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private TextBox textBoxMatrix1;
private TextBox textBoxResult;
private Button buttonAlg1;
private Label label1;
private TextBox textBoxMatrix2;
private Label label2;
private Button buttonAlg2;
private OpenFileDialog openFileDialog1;
private Label label3;
private Label labelResultTime;
private Label label4;
private NumericUpDown countStream;
private Label label5;
private NumericUpDown genCountRowCol;
private Button button1;
private Button buttonGenerateMatrix2;
private Button buttonGenerateMatrix1;
}
}

View File

@@ -0,0 +1,121 @@
using System.Diagnostics;
namespace RVIP_Lab5
{
public partial class Form1 : Form
{
public Controller service;
public Alg1 Alg1;
public Alg2 Alg2;
public Stopwatch stopwatch;
public int[,] matrixA;
public int[,] matrixB;
public Form1()
{
InitializeComponent();
this.service = new Controller();
this.Alg1 = new Alg1();
this.Alg2 = new Alg2();
this.stopwatch = new Stopwatch();
}
private void buttonAlg1_Click(object sender, EventArgs e)
{
try
{
stopwatch.Start();
int[,] matrixResult = Alg1.Begin(matrixA, matrixB);
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
textBoxResult.Text = service.PrintResultMatrix(matrixResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonAlg2_Click(object sender, EventArgs e)
{
try
{
stopwatch.Start();
int[,] matrixResult = Alg2.Begin(matrixA, matrixB, (int)countStream.Value);
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
textBoxResult.Text = service.PrintResultMatrix(matrixResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonLoadMatrix1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;
string result = service.GetTextFromFile(filePath);
textBoxMatrix1.Text = result;
matrixA = service.GetMatrixFromTextbox(result);
}
private void buttonLoadMatrix2_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;
string result = service.GetTextFromFile(filePath);
textBoxMatrix2.Text = result;
matrixB = service.GetMatrixFromTextbox(result);
}
private void buttonGenerateMatrix1_Click(object sender, EventArgs e)
{
matrixA = service.GenerateNewMatrix((int)genCountRowCol.Value);
textBoxMatrix1.Text = service.PrintResultMatrix(matrixA);
}
private void buttonGenerateMatrix2_Click(object sender, EventArgs e)
{
matrixB = service.GenerateNewMatrix((int)genCountRowCol.Value);
textBoxMatrix2.Text = service.PrintResultMatrix(matrixB);
}
private void button1_Click(object sender, EventArgs e)
{
textBoxMatrix1.Text = "";
textBoxMatrix2.Text = "";
textBoxResult.Text = "";
matrixA = null;
matrixB = null;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>7, 19</value>
</metadata>
</root>

View File

@@ -0,0 +1,17 @@
namespace RVIP_Lab5
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RVIP_Lab5", "RVIP_Lab5.csproj", "{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DB0461C-8F6E-4BE5-B697-09C4F10570BF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7B6008C5-2210-4BAA-B61A-F6C7D82930FA}
EndGlobalSection
EndGlobal

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

484
tasks/dunaev-oi/lab_6/Lab6/.gitignore vendored Normal file
View File

@@ -0,0 +1,484 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from `dotnet new gitignore`
# dotenv files
.env
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Vim temporary swap files
*.swp

View File

@@ -0,0 +1,46 @@
namespace Lab6
{
public class Alg1
{
public int Begin(int[,] matrix)
{
return CalculateDeterminant(matrix);
}
static int CalculateDeterminant(int[,] matrix)
{
int n = matrix.GetLength(0);
if (n == 1)
{
return matrix[0, 0];
}
int determinant = 0;
for (int j = 0; j < n; j++)
{
int[,] submatrix = new int[n - 1, n - 1];
for (int i = 1; i < n; i++)
{
for (int k = 0; k < n; k++)
{
if (k < j)
{
submatrix[i - 1, k] = matrix[i, k];
}
else if (k > j)
{
submatrix[i - 1, k - 1] = matrix[i, k];
}
}
}
determinant += (int)Math.Pow(-1, j) * matrix[0, j] * CalculateDeterminant(submatrix);
}
return determinant;
}
}
}

View File

@@ -0,0 +1,90 @@
using System.Diagnostics.CodeAnalysis;
using System.Drawing.Drawing2D;
namespace Lab6
{
public class Alg2
{
public double Begin(double[,] matrixA, int threadCount)
{
int size = matrixA.GetLength(0);
if (size == 1)
{
return matrixA[0, 0];
}
else if (size == 2)
{
return matrixA[0, 0] * matrixA[1, 1] - matrixA[0, 1] * matrixA[1, 0];
}
else
{
double determinant = 0;
object lockObject = new object();
Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, i =>
{
double[,] subMatrix = GetSubMatrix(matrixA, i);
double subDeterminant = matrixA[0, i] * Determinant(subMatrix);
lock (lockObject)
{
determinant += Math.Pow(-1, i) * subDeterminant;
}
});
return determinant;
}
}
static double[,] GetSubMatrix(double[,] matrix, int columnIndex)
{
int size = matrix.GetLength(0);
double[,] subMatrix = new double[size - 1, size - 1];
for (int i = 1; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (j < columnIndex)
{
subMatrix[i - 1, j] = matrix[i, j];
}
else if (j > columnIndex)
{
subMatrix[i - 1, j - 1] = matrix[i, j];
}
}
}
return subMatrix;
}
static double Determinant(double[,] matrix)
{
int size = matrix.GetLength(0);
if (size == 1)
{
return matrix[0, 0];
}
else if (size == 2)
{
return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
}
else
{
double determinant = 0;
for (int i = 0; i < size; i++)
{
double[,] subMatrix = GetSubMatrix(matrix, i);
determinant += Math.Pow(-1, i) * matrix[0, i] * Determinant(subMatrix);
}
return determinant;
}
}
}
}

View File

@@ -0,0 +1,95 @@
using System.Drawing;
namespace Lab6
{
public class Controller
{
public double[,] ConvertArray(int[,] intArray)
{
int rows = intArray.GetLength(0);
int cols = intArray.GetLength(1);
double[,] doubleArray = new double[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
doubleArray[i, j] = (double)intArray[i, j];
}
}
return doubleArray;
}
public string PrintResultMatrix(int[,] result)
{
string resultString = "";
for (int i = 0; i < result.GetLength(0); i++)
{
for (int j = 0; j < result.GetLength(1); j++)
{
resultString += result[i, j];
if (j != result.GetLength(1) - 1)
{
resultString += " ";
}
}
resultString += Environment.NewLine;
}
return resultString;
}
public int[,] GetMatrixFromTextbox(string inputText)
{
string[] lines = inputText.Split(Environment.NewLine);
int numRows = lines.Length;
int numCol = lines[0].Split(' ').Length;
int[,] matrix = new int[numRows, numCol];
for (int i = 0; i < numRows; i++)
{
string[] elements = lines[i].Split(' ');
for (int j = 0; j < numCol; j++)
{
matrix[i, j] = int.Parse(elements[j]);
}
}
return matrix;
}
public string GetTextFromFile(string filePath)
{
string text = "";
using (StreamReader sr = new StreamReader(filePath))
{
text = sr.ReadToEnd();
}
return text;
}
public int[,] GenerateNewMatrix(int count)
{
Random random = new Random();
int[,] matrix = new int[count, count];
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count; j++)
{
matrix[i, j] = random.Next(1, 5);
}
}
return matrix;
}
}
}

View File

@@ -0,0 +1,222 @@
namespace Lab6
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
textBoxMatrix1 = new TextBox();
textBoxResult = new TextBox();
buttonAlg1 = new Button();
buttonAlg2 = new Button();
openFileDialog1 = new OpenFileDialog();
label3 = new Label();
labelResultTime = new Label();
label4 = new Label();
countStream = new NumericUpDown();
buttonGenerateMatrix1 = new Button();
label5 = new Label();
genCountRowCol = new NumericUpDown();
button1 = new Button();
label1 = new Label();
((System.ComponentModel.ISupportInitialize)countStream).BeginInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).BeginInit();
SuspendLayout();
//
// textBoxMatrix1
//
textBoxMatrix1.Location = new Point(58, 48);
textBoxMatrix1.Multiline = true;
textBoxMatrix1.Name = "textBoxMatrix1";
textBoxMatrix1.Size = new Size(565, 274);
textBoxMatrix1.TabIndex = 0;
//
// textBoxResult
//
textBoxResult.Location = new Point(833, 48);
textBoxResult.Multiline = true;
textBoxResult.Name = "textBoxResult";
textBoxResult.Size = new Size(258, 40);
textBoxResult.TabIndex = 1;
//
// buttonAlg1
//
buttonAlg1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg1.Location = new Point(833, 186);
buttonAlg1.Name = "buttonAlg1";
buttonAlg1.Size = new Size(258, 40);
buttonAlg1.TabIndex = 2;
buttonAlg1.Text = "Обычный алгоритм";
buttonAlg1.UseVisualStyleBackColor = true;
buttonAlg1.Click += buttonAlg1_Click;
//
// buttonAlg2
//
buttonAlg2.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
buttonAlg2.Location = new Point(833, 232);
buttonAlg2.Name = "buttonAlg2";
buttonAlg2.Size = new Size(258, 39);
buttonAlg2.TabIndex = 8;
buttonAlg2.Text = "Паралелльный алгоритм";
buttonAlg2.UseVisualStyleBackColor = true;
buttonAlg2.Click += buttonAlg2_Click;
//
// openFileDialog1
//
openFileDialog1.FileName = "openFileDialog1";
//
// label3
//
label3.AutoSize = true;
label3.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
label3.Location = new Point(23, 370);
label3.Name = "label3";
label3.Size = new Size(111, 30);
label3.TabIndex = 9;
label3.Text = "Результат:";
//
// labelResultTime
//
labelResultTime.AutoSize = true;
labelResultTime.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
labelResultTime.Location = new Point(165, 370);
labelResultTime.Name = "labelResultTime";
labelResultTime.Size = new Size(0, 30);
labelResultTime.TabIndex = 10;
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(833, 129);
label4.Name = "label4";
label4.Size = new Size(123, 15);
label4.TabIndex = 12;
label4.Text = "Количество потоков:";
//
// countStream
//
countStream.Location = new Point(1007, 127);
countStream.Maximum = new decimal(new int[] { 10, 0, 0, 0 });
countStream.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
countStream.Name = "countStream";
countStream.Size = new Size(66, 23);
countStream.TabIndex = 13;
countStream.Value = new decimal(new int[] { 4, 0, 0, 0 });
//
// buttonGenerateMatrix1
//
buttonGenerateMatrix1.Location = new Point(268, 10);
buttonGenerateMatrix1.Name = "buttonGenerateMatrix1";
buttonGenerateMatrix1.Size = new Size(122, 32);
buttonGenerateMatrix1.TabIndex = 14;
buttonGenerateMatrix1.Text = "Сгенерировать";
buttonGenerateMatrix1.UseVisualStyleBackColor = true;
buttonGenerateMatrix1.Click += buttonGenerateMatrix1_Click;
//
// label5
//
label5.AutoSize = true;
label5.Location = new Point(833, 100);
label5.Name = "label5";
label5.Size = new Size(166, 15);
label5.TabIndex = 16;
label5.Text = "Размерность при генерации:";
//
// genCountRowCol
//
genCountRowCol.Location = new Point(1007, 98);
genCountRowCol.Maximum = new decimal(new int[] { 500, 0, 0, 0 });
genCountRowCol.Minimum = new decimal(new int[] { 2, 0, 0, 0 });
genCountRowCol.Name = "genCountRowCol";
genCountRowCol.Size = new Size(66, 23);
genCountRowCol.TabIndex = 17;
genCountRowCol.Value = new decimal(new int[] { 3, 0, 0, 0 });
//
// button1
//
button1.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
button1.Location = new Point(833, 295);
button1.Name = "button1";
button1.Size = new Size(258, 46);
button1.TabIndex = 22;
button1.Text = "Очистить матрицы";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// label1
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 15.75F, FontStyle.Regular, GraphicsUnit.Point);
label1.Location = new Point(833, 12);
label1.Name = "label1";
label1.Size = new Size(240, 30);
label1.TabIndex = 23;
label1.Text = "Детерминант матрицы:";
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1132, 534);
Controls.Add(label1);
Controls.Add(button1);
Controls.Add(genCountRowCol);
Controls.Add(label5);
Controls.Add(buttonGenerateMatrix1);
Controls.Add(countStream);
Controls.Add(label4);
Controls.Add(labelResultTime);
Controls.Add(label3);
Controls.Add(buttonAlg2);
Controls.Add(buttonAlg1);
Controls.Add(textBoxResult);
Controls.Add(textBoxMatrix1);
Name = "Form1";
Text = "Перемножение матриц: Дунаев О.И. ИСЭбд-41";
((System.ComponentModel.ISupportInitialize)countStream).EndInit();
((System.ComponentModel.ISupportInitialize)genCountRowCol).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private TextBox textBoxMatrix1;
private TextBox textBoxResult;
private Button buttonAlg1;
private Button buttonAlg2;
private OpenFileDialog openFileDialog1;
private Label label3;
private Label labelResultTime;
private Label label4;
private NumericUpDown countStream;
private Button buttonGenerateMatrix1;
private Label label5;
private NumericUpDown genCountRowCol;
private Button button1;
private Label label1;
}
}

View File

@@ -0,0 +1,90 @@
using System.Diagnostics;
namespace Lab6
{
public partial class Form1 : Form
{
public Controller service;
public Alg1 Alg1;
public Alg2 Alg2;
public Stopwatch stopwatch;
public int[,] matrixA;
public Form1()
{
InitializeComponent();
this.service = new Controller();
this.Alg1 = new Alg1();
this.Alg2 = new Alg2();
this.stopwatch = new Stopwatch();
}
private void buttonAlg1_Click(object sender, EventArgs e)
{
try
{
stopwatch.Start();
int result = Alg1.Begin(matrixA);
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
textBoxResult.Text = Convert.ToString(result);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonAlg2_Click(object sender, EventArgs e)
{
try
{
double[,] doubleMatrix = service.ConvertArray(matrixA);
stopwatch.Start();
textBoxResult.Text = Convert.ToString(Alg2.Begin(doubleMatrix, (int)countStream.Value));
stopwatch.Stop();
labelResultTime.Text = "" + stopwatch.Elapsed;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
stopwatch.Reset();
}
private void buttonLoadMatrix1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
string filePath = openFileDialog1.FileName;
string result = service.GetTextFromFile(filePath);
textBoxMatrix1.Text = result;
matrixA = service.GetMatrixFromTextbox(result);
}
private void buttonGenerateMatrix1_Click(object sender, EventArgs e)
{
matrixA = service.GenerateNewMatrix((int)genCountRowCol.Value);
textBoxMatrix1.Text = service.PrintResultMatrix(matrixA);
}
private void button1_Click(object sender, EventArgs e)
{
textBoxMatrix1.Text = "";
textBoxResult.Text = "";
matrixA = null;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>7, 19</value>
</metadata>
</root>

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lab6", "Lab6.csproj", "{5E467820-7298-4466-AD82-CEDEB780CA68}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5E467820-7298-4466-AD82-CEDEB780CA68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5E467820-7298-4466-AD82-CEDEB780CA68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E467820-7298-4466-AD82-CEDEB780CA68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E467820-7298-4466-AD82-CEDEB780CA68}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7933D480-E7B1-4658-8726-83CCD3BED00D}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,17 @@
namespace Lab6
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@@ -0,0 +1,42 @@
# Отчет по лабораторной работе №6
Выполнил студент гр. ИСЭбд-41 Дунаев О.И.
## Создание приложения
Выбрал язык C#, Windows Forms.
Приложение имеет поле ввода матрицы, в которое можно через пробел вносить элементы матрицы. При необходимости можно сгенерировать матрицу указав её размерность . При необходимости можно очистить матрицу и определитель. Количество потоков в параллельном алгоритме регулируется в соответствующем поле.
Попробуем запустить обычный и паралелльный алгоритмы на матрицах 3х3 и зафиксировать результат выполнения по времени.
![](pic/1.png)
![](pic/2.png)
## Бенчмарки
Протестируем обычный и параллельный алгоритм определение детерминанта на различной размерности матрицы.
В ходе экспериментов было установлено, что обработка матрицы размеров больше 12х12 занимает слишком много времени в обычном алгоритме, поэтому для тестирования возьмем матрицы 5х5, 8х8 и 11х11.
Сверху отображен результат обычного алгоритма, снизу паралелльного.
Матрица 5х5
![](pic/5x5№1.png)
![](pic/5x5№2.png)
Матрицы 8x8
![](pic/8x8№1.png)
![](pic/8x8№2.png)
Матрицы 12х12
![](pic/12x12№1.png)
![](pic/12x12№2.png)
Вывод: Параллельный алгоритм работает быстрее только при наличии большого количества операций. Если операций не так много, то обычный алгоритм справляется быстрее.

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

477
tasks/gorbyleva-ai/lab_2/.gitignore vendored Normal file
View File

@@ -0,0 +1,477 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk

View File

@@ -0,0 +1,69 @@
# Отчёт по лабораторной работе №2
Выполнил: студентка гр. ИСЭбд-41 Горбылева Антонина
Вариант программы 1 (вариант 4): Формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data.
Вариант программы 2 (вариант 2): Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
## Создание приложений
Создадим 2 приложения.
Был выбран язык C# и технология .NET 7.
Для создания обычных консольных приложений воспользуемся командами:
dotnet new console -o worker-1
dotnet new console -o worker-2
Согласно варианту программа 1 должна брать все файлы из папки `/var/data`, и записывать длины имен файлов в `/var/result/data.txt`.
[Исходный текст программы worker-1](worker-1/Program.cs)
Согласно варианту программа 2 должна найти наименьшее число из файла `/var/data/data.txt` и сохранить его третью степень в `/var/result/result.txt`.
[Исходный текст программы worker-2](worker-2/Program.cs)
Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего.
## Настройка окружения
Для связи двух приложений воспользуемся следующей схемой:
1. Каталог ./data должен быть примонтирован в каталог /var/data для программы 1.
Оттуда будут браться исходные данные.
2. Каталог ./result-1 должен быть примонтирован в каталог /var/result для программы 2.
Туда будут складываться промежуточные данные.
3. Каталог ./result-1 также должен быть примонтирован в каталог /var/data для программы 2.
Оттуда будут браться промежуточные результаты.
4. Каталог ./result должен быть примонтирован в каталог /var/result для программы 2.
Туда будут складывать результаты финальной обработки.
Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки.
Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения.
Дополнительно был создан файл [.dockerignore](.dockerignore) и дополнен [.gitignore](.gitignore), чтобы исключить для сборки и коммита всё лишнее.
## Сборка и запуск
В каталог ./data помещены 3 файла.
3 файла с общим количеством символов в названии 12
Для запуска приложения необходимо ввести команду docker compose up ---build.
Результат запуска после сборки:
[+] Running 2/0
- Container lab_2-worker-1-1 Created
- Container lab_2-worker-2-1 Created
Attaching to lab_2-worker-1-1, lab_2-worker-2-1
lab_2-worker-1-1 | Начало обработки файла /var/data/another data.txt
lab_2-worker-1-1 | Начало обработки файла /var/data/data.txt
lab_2-worker-1-1 exited with code 0
lab_2-worker-2-1 | Чисел для обработки: 8
lab_2-worker-2-1 exited with code 0
В результате в каталоге ./result создался файл result.txt с содержимым 12, что соответствует входным данным.
В результате в каталоге `./result` создался файл `result.txt` с содержимым `1728`, что соответствует входным данным, так как наименьшим числом в нашем случае является `12`.

View File

@@ -0,0 +1,13 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
volumes:
- ./data:/var/data
- ./result:/var/result
worker-2:
build: ./worker-2
volumes:
- ./result:/var/result
depends_on:
- worker-1

View File

@@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{EBC8C06D-600B-4767-944D-108047DEDCDC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{70B6ABE2-A602-4881-931E-65DC63DC03D0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBC8C06D-600B-4767-944D-108047DEDCDC}.Release|Any CPU.Build.0 = Release|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70B6ABE2-A602-4881-931E-65DC63DC03D0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,15 @@
#указываем образ из которого будем брать все слои
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
#наша папка, с которой будем работать
WORKDIR /App
#копируем файл в рабочую дерикторию
COPY . ./
#запускаем команду
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,34 @@
using System;
using System.IO;
using System.Net.Http;
var dir = new DirectoryInfo("/var/data");
var files = dir.GetFiles();
string resultFilePath = "/var/result/data.txt";
try
{
int[] mass = new int[files.Length];
int i = 0;
// Создаем новый файл или перезаписываем существующий
using (StreamWriter writer = new StreamWriter(resultFilePath, false))
{
foreach (var file in files)
{
// Записываем в файл количество символов в имени каждого файла
writer.WriteLine(file.Name.Length);
mass[i] = file.Name.Length;
i++;
}
}
Console.WriteLine("Успешно! Результат: ");
foreach (var item in mass)
{
Console.WriteLine(item);
}
}
catch (Exception ex)
{
Console.WriteLine("Ошибка: " + ex.Message);
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>worker_1</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,15 @@
#указываем образ из которого будем брать все слои
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env
#наша папка, с которой будем работать
WORKDIR /App
#копируем файл в рабочую дерикторию
COPY . ./
#запускаем команду
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /App
#копирует не из файловой системы хоста, а из того, что собрали на прерыдущей стадии
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,34 @@
using System.ComponentModel.DataAnnotations;
using System;
using System.IO;
string inputFile = "/var/data/data.txt";
string resultFilePath = "/var/result/result.txt";
using (StreamWriter writer = new StreamWriter(resultFilePath, false))
{
int min = int.MaxValue;
using (StreamReader sr = new StreamReader(inputFile))
{
string line;
int i = 0;
while ((line = sr.ReadLine()) != null)
{
i++;
if (int.TryParse(line, out int value))
{
if (value < min)
{
min = value;
}
}
}
Console.WriteLine("Наименьшее число: " + min.ToString());
}
double triplemin = Math.Pow(min, 3);
writer.WriteLine(triplemin.ToString());
Console.WriteLine("Файл успешно создан: " + resultFilePath);
}

View File

@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>worker_2</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

477
tasks/gorbyleva-ai/lab_3/.gitignore vendored Normal file
View File

@@ -0,0 +1,477 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk

View File

@@ -0,0 +1,85 @@
# Отчёт по лабораторной работе №3
Выполнила: студентка группы ИСЭбд-41 Горбылева Антонина Игоревна
Используемые сущности: Автомобили - Car, марка автомобиля - Marka, модель - model, номер - number
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
Команда `dotnet new web -n worker-1` создает в терминале микросервис worker-1.
Команда `dotnet new sln`для создания решения для проекта.
Команда `dotnet sln worker-1.sln add worker-1.csproj`связывает созданное решение с проектом.
Аналогично, создаем второй микросервис и добавляем оба проекта в единое решение.
Команда `dotnet run` для запуска проекта.
Скриншоты API приложений:
![](picture/sworker-1.png)
![](picture/sworker-2.png)
## Реализация синхронного обмена
Реализован механизм синхронного обмена сообщениями между микросервисами.
```cs
app.MapGet("/Company/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetRequests")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Шлюз на основе прозрачного прокси-сервера nginx
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результаты, после вызова команды `docker-compose up`:
Docker Desktop:
![](picture/docker.png)
index.html на gateway-1:
![](picture/test.png)
worker-1:
![](picture/lworker-1.png)
worker-2:
![](picture/lworker-2.png)

View File

@@ -0,0 +1,15 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
worker-2:
build: ./worker-2
depends_on:
- worker-1
gateway:
image: nginx:latest
ports:
- 8080:8080
volumes:
- ./static:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

View File

@@ -0,0 +1,14 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,26 @@
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Лабараторная работа №3</title>
</head>
<body>
<p>Горбылева Антонина студентка ИСЭбд-41</p>
<p><a href="/worker-1/">Запрос к "worker-1"</a></p>
<p><a href="/worker-2/">Запрос к "worker-2"</a></p>
</body>
</html>

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,118 @@
List<Cars > Cars = new()
{
new Cars () { Uuid= Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd"), Model = "Programming Basics", GosNumber = "Programming" },
new Cars () { Uuid= Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e"), Model = "Advanced Algorithms", GosNumber = "Programming" },
new Cars () { Uuid= Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9"), Model = "Romantic Journey", GosNumber = "Romance" },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return Cars.Select(r => new CarEntityDto()
{
Uuid = r.Uuid,
Model = r.Model,
GosNumber = r.GosNumber,
});
})
.WithMarka("GetCars")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("GetCarByGUID")
.WithOpenApi();
app.MapPost("/{Model}/{GosNumber}", (string Model, string GosNumber) =>
{
Guid NewGuid = Guid.NewGuid();
Cars.Add(new Cars() { Uuid = NewGuid, Model = (string)Model, GosNumber = (string)GosNumber});
var Car = Cars.FirstOrDefault(r => r.Uuid == NewGuid);
if (Car == null)
return Results.NotFound();
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("PostCar")
.WithOpenApi();
app.MapPatch("/{uuid}/{Model}/{GosNumber}", (Guid uuid, string ?Model, string ?GosNumber) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
if (Model != null) Car.Model = Model;
if (GosNumber != ",") Car.GosNumber = GosNumber;
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("UpdateCar")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var Car = Cars.FirstOrDefault(r => r.Uuid == uuid);
if (Car == null)
return Results.NotFound();
Cars.Remove(Car);
return Results.Json(new CarEntityDto()
{
Uuid = Car.Uuid,
Model = Car.Model,
GosNumber = Car.GosNumber,
});
})
.WithMarka("DeleteCarByGUID")
.WithOpenApi();
app.Run();
public class Cars
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string GosNumber { get; set; } = string.Empty;
}
public class CarEntityDto : Cars { }

View File

@@ -0,0 +1,37 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:28800",
"sslPort": 44397
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5108",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7126;http://localhost:5108",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_1</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1.csproj", "{AEF383BD-8E80-4FF5-A579-1B601B7D1464}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEF383BD-8E80-4FF5-A579-1B601B7D1464}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,139 @@
List<Authors> authors = new()
{
new Authors() { Uuid= Guid.NewGuid(), Number = "1", Name = "Programming Basics", IdBook = Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd") },
new Authors() { Uuid= Guid.NewGuid(), Number = "2", Name = "Advanced Algorithms", IdBook = Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9") },
new Authors() { Uuid= Guid.NewGuid(), Number = "3", Name = "Romantic Journey", IdBook = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
new Authors() { Uuid= Guid.NewGuid(), Number = "3А", Name = "Mystery Island", IdBook = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return authors.Select(r => new AuthorEntityDto()
{
Uuid = r.Uuid,
Number = r.Number,
Name = r.Name,
IdBook = r.IdBook,
});
})
.WithName("GetAuthors")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("GetAuthorByGUID")
.WithOpenApi();
app.MapPost("/{number}/{name}/{IdBook}", (string? Number, string Name, Guid IdBook) =>
{
Guid NewGuid = Guid.NewGuid();
authors.Add(new Authors() { Uuid = NewGuid, Number = (string)Number, Name = (string)Name, IdBook = (Guid)IdBook });
var author = authors.FirstOrDefault(r => r.Uuid == NewGuid);
if (author == null)
return Results.NotFound();
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("PostAuthor")
.WithOpenApi();
app.MapPatch("/{uuid}/{number}/{name}/{IdBook}", (Guid uuid, string ?number, string name, Guid IdBook) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
if (number != ",") author.Number = number;
if (name != author.Name) author.Name = name;
if (IdBook != author.IdBook) author.IdBook = IdBook;
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("UpdateAuthor")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var author = authors.FirstOrDefault(r => r.Uuid == uuid);
if (author == null)
return Results.NotFound();
authors.Remove(author);
return Results.Json(new AuthorEntityDto()
{
Uuid = author.Uuid,
Number = author.Number,
Name = author.Name,
IdBook = author.IdBook,
});
})
.WithName("DeleteAuthor")
.WithOpenApi();
app.MapGet("/Authors/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetBooks")
.WithOpenApi();
app.Run();
public class Authors
{
public Guid Uuid { get; set; }
public string Number { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public Guid IdBook { get; set; }
}
public class AuthorEntityDto : Authors { }
public class Books
{
public Guid Uuid { get; set; }
public string Title { get; set; } = string.Empty;
public string Genre { get; set; } = string.Empty;
}
public class BookEntityDto : Books { }

View File

@@ -0,0 +1,37 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:24157",
"sslPort": 44320
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5082",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7130;http://localhost:5082",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,83 @@
# Отчёт по лабораторной работе №3
Выполнила: студентка гр. ИСЭбд-41 Никифорова Татьяна Сергеевна.
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
Использовала команду `dotnet new web -n worker-1` в терминале для создания моего первого микросервиса.
Далее, с помощью команды `dotnet new sln`, создала решение для проекта. Затем использовала команду `dotnet sln worker-1.sln add worker-1.csproj`, чтобы связать созданное решение с проектом.
Повторила те же действия для второго микросервиса, добавила оба проекта в единое решение.
Добавил библиотеку Swagger и OpenAi в проекты и запустил с помощью команды `dotnet run`".
Скриншоты API приложений:
![](picture/sworker-1.png)
![](picture/sworker-2.png)
## Реализация синхронного обмена
Реализовала механизм синхронного обмена сообщениями между микросервисами.
```cs
app.MapGet("/Authors/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetRequests")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Реализовала шлюз на основе прозрачного прокси-сервера nginx.
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результаты, после вызова команды `docker-compose up`:
Docker Desktop:
![](picture/docker.png)
index.html на gateway-1:
![](picture/test.png)
worker-1:
![](picture/lworker-1.png)
worker-2:
![](picture/lworker-2.png)

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_2</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2.csproj", "{46EE043B-ED4D-44D1-82AF-3A180AD32532}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46EE043B-ED4D-44D1-82AF-3A180AD32532}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

484
tasks/grenaderova-aa/lab_3/.gitignore vendored Normal file
View File

@@ -0,0 +1,484 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from `dotnet new gitignore`
# dotenv files
.env
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
.idea
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# Vim temporary swap files
*.swp

View File

@@ -0,0 +1,85 @@
# Отчет по лабораторной работе №3
Выполнила студентка гр. ИСЭбд-41 Гренадерова А.А.
## REST API, Gateway и синхронный обмен между микросервисами
## Создание микросервисов
1. С помощью команды `dotnet new web -n worker-1` в терминале создала первый микросервис
2. Добавила решение командой `dotnet new sln`
3. Связала решение и проект командой `dotnet sln worker-1.sln add worker-1.csproj`
4. Повторила действие для второго микросервиса
5. Добавила библиотеку Swagger и OpenAi в проекты и запустила с помощью команды `dotnet run`
Скриншот протестированного микросервиса:
![](screens/1.png)
## Реализация синхронного обмена
Реализовала код, который вызывает сихронно данные из соседнего микросервиса.
```cs
//worker-2
app.MapGet("/Houses/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetStreets")
.WithOpenApi();
```
## Реализация gateway при помощи nginx
Добавила nginx.conf:
```conf
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}
```
Результат, после выполнения команды `docker-compose up`:
Docker:
![](screens/2.png)
index.html на gateway-1:
![](screens/3.png)
worker-1:
![](screens/4.png)
worker-2:
![](screens/5.png)

View File

@@ -0,0 +1,15 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
worker-2:
build: ./worker-2
depends_on:
- worker-1
gateway:
image: nginx:latest
ports:
- 8080:8080
volumes:
- ./static:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro

View File

@@ -0,0 +1,26 @@
server {
listen 8080;
listen [::]:8080;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /worker-1/ {
proxy_pass http://worker-1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-1;
}
location /worker-2/ {
proxy_pass http://worker-2:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /worker-2;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Тестовое приложение для л/р 3</title>
</head>
<body>
<p>Гренадерова А.А. ИСЭбд-41.</p>
<p><a href="/worker-1/">Отправить запрос к worker-1</a></p>
<p><a href="/worker-2/">Отправить запрос к worker-2</a></p>
</body>
</html>

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -0,0 +1,111 @@
List<Phones> phones = new()
{
new Phones() { Uuid= Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd"), Model = "Galaxy A", Brand = "Samsung"},
new Phones() { Uuid= Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e"), Model = "XS", Brand = "Apple"},
new Phones() { Uuid= Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9"), Model = "Redmi Note 10", Brand = "Xiaomi"},
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return phones.Select(r => new PhoneEntityDto()
{
Uuid = r.Uuid,
Model = r.Model,
Brand = r.Brand,
});
})
.WithName("GetPhones")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("GetPhoneByGUID")
.WithOpenApi();
app.MapPost("/{model}/{brand}", (string Model, string Brand) =>
{
Guid NewGuid = Guid.NewGuid();
phones.Add(new Phones() { Uuid = NewGuid, Model = (string)Model, Brand = (string)Brand});
var phone = phones.FirstOrDefault(r => r.Uuid == NewGuid);
if (phone == null)
return Results.NotFound();
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("PostPhone")
.WithOpenApi();
app.MapPatch("/{uuid}/{model}/{brand}", (Guid uuid, string ?model, string ?brand) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
if (model != null) phone.Model = model;
if (brand != null) phone.Brand = brand;
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("UpdatePhone")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var phone = phones.FirstOrDefault(r => r.Uuid == uuid);
if (phone == null)
return Results.NotFound();
phones.Remove(phone);
return Results.Json(new PhoneEntityDto()
{
Uuid = phone.Uuid,
Model = phone.Model,
Brand = phone.Brand,
});
})
.WithName("DeletePhoneByGUID")
.WithOpenApi();
app.Run();
public class Phones
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string Brand { get; set; } = string.Empty;
}
public class PhoneEntityDto : Phones { }

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51956",
"sslPort": 44303
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5197",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7027;http://localhost:5197",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_1</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1.csproj", "{90F6C7BD-78E2-47C8-A702-DD47E74D3865}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90F6C7BD-78E2-47C8-A702-DD47E74D3865}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,11 @@
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -0,0 +1,139 @@
List<SpareParts> spareParts = new()
{
new SpareParts() { Uuid= Guid.NewGuid(), Name = "battery", IsSingleSparePart = true, IdPhone = Guid.Parse("6a1b4a72-5669-41fe-8d5b-106dc86f58bd") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "microphone", IsSingleSparePart = false, IdPhone = Guid.Parse("f8692bea-b7e6-4164-b564-a921f16c35c9") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "camera", IsSingleSparePart = false, IdPhone = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
new SpareParts() { Uuid= Guid.NewGuid(), Name = "cable", IsSingleSparePart = true, IdPhone = Guid.Parse("464bbdb8-39c0-4644-b9c0-3df1c484ea7e") },
};
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/", () =>
{
return spareParts.Select(r => new SparePartEntityDto()
{
Uuid = r.Uuid,
Name = r.Name,
IsSingleSparePart = r.IsSingleSparePart,
IdPhone = r.IdPhone,
});
})
.WithName("GetSpareParts")
.WithOpenApi();
app.MapGet("/{uuid}", (Guid uuid) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("GetSparePartByGUID")
.WithOpenApi();
app.MapPost("/{name}/{isSingleSparePart}/{idPhone}", (string? Name, bool IsSingleSparePart, Guid IdPhone) =>
{
Guid NewGuid = Guid.NewGuid();
spareParts.Add(new SpareParts() { Uuid = NewGuid, Name = (string)Name, IsSingleSparePart = (bool)IsSingleSparePart, IdPhone = (Guid)IdPhone });
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == NewGuid);
if (sparePart == null)
return Results.NotFound();
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("PostSparePart")
.WithOpenApi();
app.MapPatch("/{uuid}/{name}/{isSingleSparePart}/{idPhone}", (Guid uuid, string ?name, bool isSingleSparePart, Guid idPhone) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
if (name != ",") sparePart.Name = name;
if (isSingleSparePart != sparePart.IsSingleSparePart) sparePart.IsSingleSparePart = isSingleSparePart;
if (idPhone != sparePart.IdPhone) sparePart.IdPhone = idPhone;
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("UpdateSparePart")
.WithOpenApi();
app.MapDelete("/{uuid}", (Guid uuid) =>
{
var sparePart = spareParts.FirstOrDefault(r => r.Uuid == uuid);
if (sparePart == null)
return Results.NotFound();
spareParts.Remove(sparePart);
return Results.Json(new SparePartEntityDto()
{
Uuid = sparePart.Uuid,
Name = sparePart.Name,
IsSingleSparePart = sparePart.IsSingleSparePart,
IdPhone = sparePart.IdPhone,
});
})
.WithName("DeleteSparePart")
.WithOpenApi();
app.MapGet("/SpareParts/", async () =>
{
var httpClient = new HttpClient();
var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8080/");
return secondWorkerResponse.ToArray();
})
.WithName("GetPhones")
.WithOpenApi();
app.Run();
public class SpareParts
{
public Guid Uuid { get; set; }
public string Name { get; set; } = string.Empty;
public bool IsSingleSparePart { get; set; }
public Guid IdPhone { get; set; }
}
public class SparePartEntityDto : SpareParts { }
public class Phones
{
public Guid Uuid { get; set; }
public string Model { get; set; } = string.Empty;
public string Brand { get; set; } = string.Empty;
}
public class PhoneEntityDto : Phones { }

View File

@@ -0,0 +1,38 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:36404",
"sslPort": 44384
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5101",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7125;http://localhost:5101",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>worker_2</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More