DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Можливості використання паралельних алгоритмів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Паралельні та розподілені обчислення

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний Університет «Львівська Політехніка» Кафедра ЕОМ  Звіт до лабораторна робота № 4 з дисципліни : «Паралельні та розподілені обчислення» на тему: «Можливості використання паралельних алгоритмів» Варіант 20 Львів - 2011 Мета: Дослідити можливості розв’язання різноманітних задач за допомогою паралельних алгоритмів. Навчитися виділяти незалежні гілки обчислень та виконувати їх паралельно. Завдання. 8, 22 В полі 8*8 кліток зображено кілька прямокутників, кожен з яких складається з кліток, різні прямокутники не перетинаються і не доторкаються один до одного. Задана квадратна матриця порядку 8, в якій елемент рівний нулю, якщо відповідна клітина належить прямокутнику і відмінний від нуля, в іншому випадку. Визначити кількість прямокутників. Початковими даними вважати матрицю елементів, яка повинна вводитися під час виконання програми. Графічно відобразити вхідні дані.  Аналіз задачі та опис незалежних подій. В даній задачі можна виділити n незалежних гілок, які можна виконувати паралельно з основною програмою – це вибір квадрату та перевірка чи в ньому різні числа. Для цього на вхід функції, що визначає квадрат, йде структура даних, яка описує матрицю. Пошук прямокутників з різними числами йде послідовно. Текст програми. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; using System.Threading; namespace lab4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void randMATRIX(DataGridView d) { string[] mass = File.ReadAllLines("matrix.txt"); for (int p = 0; p < mass.Length; p++) { int[] m = mass[p].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => int.Parse(s)).ToArray(); for (int i = 0; i < m.Length; i++) { d[i, p].Value = m[i]; } } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.Enabled = true; } private void rect_bounds(DataGridView d, int a, int b, ref int[] A) { int i, j; i = a; j = b; int size = 8; while (j >= 0 && Convert.ToInt32(d[j, i].Value) == 0) j -= 1; j += 1; while (i >= 0 && Convert.ToInt32(d[j, i].Value) == 0) i -= 1; A[0] = i + 1; A[1] = j; i = a; j = b; while (j < size && Convert.ToInt32(d[j, i].Value) == 0) j += 1; j -= 1; while (i < size && Convert.ToInt32(d[j, i].Value) == 0) i += 1; A[2] = i - 1; A[3] = j; } private void erase_rect(DataGridView d, ref int[] A, ref int count, Color col) { for (int i = A[0]; i <= A[2]; i++) for (int j = A[1]; j <= A[3]; j++) d[j, i].Style.BackColor = col; count++; } private int calculate_rects(DataGridView d) { int[] A = new int[4]; Color[] col = new Color[]{Color.Lime,Color.Red,Color.Orange,Color.LightGreen,Color.Blue, Color.Brown,Color.Gray,Color.Green,Color.LightBlue,Color.Silver,Color.Yellow, Color.DarkRed,Color.Gold,Color.GreenYellow,Color.LightCyan}; int[] dopMas = new int[col.Length]; int size = 8; int count = 0; int j, node, l = 0; for (int i = 0; i < size; i++) { j = 0; while (j < size) { node = Convert.ToInt32(d[j, i].Value); if (node == 0) { rect_bounds(d, i, j, ref A); erase_rect(d, ref A, ref count, col[l]); j = A[3]; l++; } j += 1; } } for (int p = 0; p < col.Length; p++) dopMas[p] = 0; int k = 0; for (int i = 0; i < 8; i++) for (int m = 0; m < 8; m++) { if (d[i, m].Style.BackColor == Color.Lime && dopMas[0] == 0) { k++; dopMas[0] = 1; } if (d[i, m].Style.BackColor == Color.Red && dopMas[1] == 0) { k++; dopMas[1] = 1; } if (d[i, m].Style.BackColor == Color.Orange && dopMas[2] == 0) { k++; dopMas[2] = 1; } if (d[i, m].Style.BackColor == Color.LightGreen && dopMas[3] == 0) { k++; dopMas[3] = 1; } if (d[i, m].Style.BackColor == Color.Blue && dopMas[4] == 0) { k++; dopMas[4] = 1; } if (d[i, m].Style.BackColor == Color.Brown && dopMas[5] == 0) { k++; dopMas[5] = 1; } if (d[i, m].Style.BackColor == Color.Gray && dopMas[6] == 0) { k++; dopMas[6] = 1; } if (d[i, m].Style.BackColor == Color.Green && dopMas[7] == 0) { k++; dopMas[7] = 1; } if (d[i, m].Style.BackColor == Color.LightBlue && dopMas[8] == 0) { k++; dopMas[8] = 1; } if (d[i, m].Style.BackColor == Color.Silver && dopMas[9] == 0) { k++; dopMas[9] = 1; } if (d[i, m].Style.BackColor == Color.Yellow && dopMas[10] == 0) { k++; dopMas[10] = 1; } if (d[i, m].Style.BackColor == Color.DarkRed && dopMas[11] == 0) { k++; dopMas[11] = 1; } if (d[i, m].Style.BackColor == Color.Gold && dopMas[12] == 0) { k++; dopMas[12] = 1; } if (d[i, m].Style.BackColor == Color.GreenYellow && dopMas[13] == 0) { k++; dopMas[13] = 1; } if (d[i, m].Style.BackColor == Color.LightCyan && dopMas[14] == 0) { k++; dopMas[14] = 1; } } return k; } private void button1_Click_1(object sender, EventArgs e) { int calc = calculate_rects(dataGridView1); textBox1.Text = calc.ToString(); } private void Form1_Load_1(object sender, EventArgs e) { dataGridView1.Enabled = false; dataGridView1.Columns.Clear(); for (int i = 0; i != 8; i++) { dataGridView1.Columns.Add((i + 1).ToString(), (i + 1).ToString()); dataGridView1.Columns[i].Width = 30; } for (int i = 0; i != 8; i++) { dataGridView1.Rows.Add(); dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString(); } randMATRIX(dataGridView1); } } } Результат роботи програми:  Рис 1. Результат роботи програми Висновкок На лабораторній роботі я навчився виділяти незалежні гілки обчислень та виконувати їх паралельно. Під час виконання лабораторної роботи була розроблена програма для знаходження квадратів з різними числами. Оскільки алгоритм є паралельним, то виконання програми для різних розмірів матриці практично не впливає на швидкість виконання програми.
Антиботан аватар за замовчуванням

30.03.2013 22:21

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!