Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи №3
з дисципліни: “Паралельні та розподілені обчислення”
на тему: “ МОЖЛИВОСТІ ВИКОРИСТАННЯ ПАРАЛЕЛЬНИХ АЛГОРИТМІВ ”
Мета: Дослідити можливості розв’язання різноманітних задач за допомогою паралельних алгоритмів. Навчитися виділяти незалежні гілки обчислень та виконувати їх паралельно.
Завдання
В полі 8*8 кліток зображено кілька прямокутників, кожен з яких складається з кліток, різні прямокутники не перетинаються і не доторкаються один до одного. Задана квадратна матриця порядку 8, в якій елемент рівний нулю, якщо відповідна клітина належить прямокутнику і відмінний від нуля, в іншому випадку. Визначити кількість прямокутників. Початковими даними вважати матрицю елементів, яка повинна вводитися під час виконання програми. Графічно відобразити вхідні дані.
Текст програмної реалізації
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <conio.h>
#include <stdio.h>
#include "iostream"
#include "fstream"
#include <time.h>
#include "iomanip"
#include <stdlib.h>
#include <iterator>
#include <list>
using namespace std;
char i, j, matrix[8][8];
void printmatrix()
{
int i, j;
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
cout << matrix[i][j];
cout << " ";
}
cout <<" "<< endl;
}
cout << " " ;
}
int main()
{
for (i = 0; i < 8; i++)
{
for (j = 0; j < 8; j++)
{
cin >> matrix[i][j];
}
}
printmatrix();
int GlobalX, GlobalY, counter = 0, cx, cy;
while (1)
{
for (GlobalY = 0; GlobalY < 8; GlobalY++)
{
for (GlobalX = 0; GlobalX < 8; GlobalX++)
{
if (matrix[GlobalY][GlobalX] == 0x31)break;
}
if (matrix[GlobalY][GlobalX] == 0x31)break;
}
if (matrix[GlobalY][GlobalX] != 0x31)exit(0);
while ((GlobalX != 0) && (matrix[GlobalY][GlobalX - 1] != 0x30))GlobalX--;
while ((GlobalY != 0) && (matrix[GlobalY - 1][GlobalX] != 0x30))GlobalY--;
j = GlobalX;
i = GlobalY;
cx = 0;
cy = 0;
while (matrix[i][j] == 0x31)
{
cx++;
j++;
}
j = GlobalX;
while (matrix[i][j] == 0x31)
{
cy++;
i++;
}
for (i = 0; i < cy; i++)
{
for (j = 0; j < cx; j++)
{
matrix[GlobalY + i][GlobalX + j] = 0x30;
}
}
counter++;
printmatrix();
printf("\n\ncount=%d\n\n", counter);
_getch();
}
}
Результат виконання програми
///
Рис. 1 Результат виконання програми
Висновок. На даній лабараторній роботі я навчився розв’язувати задачі за допомогою паралельних алгоритмів. Програма може пряцювати з кожним прямокутником як незалежним об’єктом і рахувати їх немовби паралельно.