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

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

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

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

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

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

Міністерство освіти і науки, молоді та спорту України Національний Університет «Львівська Політехніка» Кафедра ЕОМ  Звіт до лабораторна робота № 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:03-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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