You are on page 1of 4

Виконав студент групи КН-21 Коваленко Ігор

Лабораторна робота №4

Мета роботи: Вироблення навичок реалізації обчислювальних алгоритмів з


використанням засобів багатопотокового програмування.
Завдання: Вироблення навичок реалізації обчислювальних алгоритмів з
використанням засобів багатопотокового програмування.

Хід роботи

Варіант 1
Побудувати граф. Задана прямокутна числова матриця m*n. Написати
паралельну програму знаходження добутків парних рядків 4-ма процесорами, де
m>10.

Ми починаємо зі створення матриці з випадковими числами. Розмір


матриці визначений «m» рядками і «n» стовпцями. Ми використовуємо об'єкт
«Random», щоб заповнити кожен елемент матриці випадковим числом в
діапазоні від 1 до 10.
Потім ми використовуємо «Parallel.For», щоб паралельно обчислити
добутки рядків матриці. За допомогою умови «if (i % 2 == 0)», ми обчислюємо
тільки добутки парних рядків. Кожен обчислений добуток зберігається в масиві
«rowProducts».
Є окрема функція «CalculateRowProduct», яка приймає матрицю та номер
рядка і обчислює добуток всіх елементів у цьому рядку.
Після завершення обчислень ми виводимо початкову матрицю та
обчислені добутки парних рядків на екран. Також, кожен добуток парного рядка
представлений у вигляді "Рядок і: Добуток".

Рис. 1 – Результат виконання програми

Висновок: Цей код використовує паралельні обчислення для ефективного


знаходження добутків парних рядків у прямокутній числовій матриці. Він
генерує випадкову матрицю, обчислює добутки парних рядків, та виводить
результати. Паралельне програмування дозволяє використовувати більше
ресурсів процесора, щоб прискорити виконання завдань.
ДОДАТКИ
using System;
using System.Threading.Tasks;

class Program
{
static void Main()
{
// Задаємо розмір матриці
int m = 12; // кількість рядків
int n = 8; // кількість стовпців

// Задаємо матрицю m*n


int[,] matrix = new int[m, n];

// Заповнюємо матрицю випадковими числами для прикладу


Random random = new Random();
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
matrix[i, j] = random.Next(1, 10);
}
}

// Виводимо початкову матрицю


Console.WriteLine("Початкова матриця:");
PrintMatrix(matrix);

// Знаходимо добутки парних рядків за допомогою паралельної обробки


int[] rowProducts = new int[m];
Parallel.For(0, m, i =>
{
if (i % 2 == 0)
{
rowProducts[i] = CalculateRowProduct(matrix, i);
}
});

// Виводимо результат
Console.WriteLine("\nДобутки парних рядкiв:");
for (int i = 0; i < m; i += 2)
{
Console.WriteLine($"Рядок {i}: {rowProducts[i]}");
}
}

static int CalculateRowProduct(int[,] matrix, int rowIndex)


{
int product = 1;
int n = matrix.GetLength(1); // Кількість стовпців

for (int j = 0; j < n; j++)


{
product *= matrix[rowIndex, j];
}

return product;
}
static void PrintMatrix(int[,] matrix)
{
int m = matrix.GetLength(0); // Кількість рядків
int n = matrix.GetLength(1); // Кількість стовпців

for (int i = 0; i < m; i++)


{
for (int j = 0; j < n; j++)
{
Console.Write($"{matrix[i, j]} ");
}
Console.WriteLine();
}
}
}

You might also like