МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
ЗВІТ
До лабораторної роботи №11
з курсу: «Інформатика»
на тему: «Множення матриць за допомогою алгоритму Винограда»
ТЕКСТ ПРОГРАМИ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lab_inform_11
{
class Program
{
static void Main(string[] args)
{
Grape gr = new Grape();
gr.Initialization();
Console.WriteLine("\n Матриця G:");
for (int i = 0; i < gr.G.GetLength(0); i++)
{
Console.WriteLine();
for (int j = 0; j < gr.G.GetLength(1); j++)
Console.Write("\t" + gr.G[i, j]);
}
Console.WriteLine("\n \n Матриця H:");
for (int i = 0; i < gr.H.GetLength(0); i++)
{
Console.WriteLine();
for (int j = 0; j < gr.H.GetLength(1); j++)
Console.Write("\t" + gr.H[i, j]);
}
gr.RowFactor();
gr.CollumFactor();
gr.ResultCalculations();
Console.WriteLine("\n \n Результуюча матриця R = G * H:");
for (int i = 0; i < gr.R.GetLength(0); i++)
{
Console.WriteLine();
for (int j = 0; j < gr.R.GetLength(1); j++)
Console.Write("\t" + gr.R[i, j]);
}
Console.ReadKey();
}
}
class Grape
{
public int[,] G, H, R;
public int[] RF, CF;
public const int a = 4, b = 4, c = 4;
public int d;
public void Initialization()
{
G = new int[a, b]{{ 7, 12, 4, 1},
{ 3, 8, -1, 8},
{ 4, 1, 11, 0},
{ 2, 3, 1, 9}};
H = new int[b, c]{{ 3, 1, 14, 11},
{ 7, 2, -3, 0},
{ -4, 12, 15, -2},
{ 6, -12, 5, 19}};
R = new int[a, c];
d = b / 2;
}
public int[] RowFactor()
{
RF = new int[a];
for (int i = 0; i < a; i++)
{
RF[i] = G[i, 0] * G[i, 1];
for (int j = 1; j < d; j++)
{
RF[i] += G[i, 2 * j] * G[i, 2 * j + 1];
}
}
return RF;
}
public int[] CollumFactor()
{
CF = new int[c];
for (int i = 0; i < c; i++)
{
CF[i] = H[0, i] * H[1, i];
for (int j = 1; j < d; j++)
CF[i] += H[2 * j, i] * H[2 * j + 1, i];
}
return CF;
}
public int[,] ResultCalculations()
{
for (int i = 0; i < c; i++)
for (int j = 0; j < c; j++)
{
R[i, j] = -RF[i] - CF[j];
for (int k = 0; k < d; k++)
{
if (k == 0)
{
R[i, j] += ((G[i, 0] + H[1, j]) * (G[i, 1] + H[0, j]));
}
else R[i, j] += ((G[i, 2 * k] + H[2 * k + 1, j]) * (G[i, 2 * k + 1] + H[2 * k, j]));
}
}
return R;
}
}
}
РЕЗУЛЬТАТ РОБОТИ ПРОГРАМИ