Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РИС Методические указания по лаб раб 1аГруздев...docx
Скачиваний:
3
Добавлен:
22.11.2019
Размер:
35.98 Кб
Скачать
  1. Приложение 2 (Практическая часть)

Далее приводится исходный код, который нужно дополнить

Каждый из трех классов реализующий поток по перемножению матриц должен выглядеть примерно так

package potokss;

public class first implements Runnable {

private int n[][];

private int m[][];

private int matr[][];

private int kolstrVAR;

private int kolstoln;

private int kolstolm;

public first(int n[][],int m[][],int kolstrVAR,int kolstoln,int kolstolm,int matr[][])//n-матрица множитель, m-матрица множимая, kolstrVAR- количество строк матрицы n, kolstoln-количество столбцов n kolstolm-количество столбцов m, matr[][]-матрица результат перемножения

{

this.n=n;

this.m=n;

this.matr=matr;

this.kolstrVAR=kolstrVAR;

this.kolstoln=kolstoln;

this.kolstolm=kolstolm; }

@Override

public void run() {

int sum;

sum=0;

// здесь нужно дописать реализацию умножения!!! используя спецификацию //конструктора first

}

}

приведем пример главного класса где идет вызов потоков из сторонних классов

package potokss;

import java.util.Random;

import java.util.RandomAccess;

import java.io.*;

public class glavniy implements Runnable {

private int n[][];

private int m[][];

private int matr[][];

private int kolstrVAR;

private int kolstoln;

private int kolstolm;

public glavniy(int n[][],int m[][],int kolstrVAR,int kolstoln,int kolstolm,int matr[][])//n-матрица множитель, m-матрица множимая, kolstrVAR- количество строк матрицы n, kolstoln-количество столбцов n kolstolm-количество столбцов m, matr[][]-матрица результат перемножения

{/*В каждом классе необходимо переопределить переменные и массивы поступающие из главного класса что бы использовать их во внутренних функциях */

this.n=n;

this.m=n;

this.matr=matr;

this.kolstrVAR=kolstrVAR;

this.kolstoln=kolstoln;

this.kolstolm=kolstolm; }

public glavniy() {

// TODO Auto-generated constructor stub

}

/**

* @param args

*/

@Override

public void run()//то что выполняется здесь и является потоком

{

int sum;

sum=0;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int kolstol;// количество

int kolstr;//количество строк исходной матрицы

int kolstrVAR;//количество строк матрицы m пересылаемых в один поток

Random rand =new Random();

int matr1[][];

matr1=new int[6][6];//матрица m

int matr2[][];

int matres[][];

matr2=new int[6][2];//матрицы n

//создание матрицы m (n*m)

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

{for(int j=0;j<=5;j++)

{matr1[i][j]=2;

}

}

//создание матрицы n (m*n)

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

{for(int j=0;j<=1;j++)

{matr2[i][j]=2;

}

}

int matrix[][] = new int[10][10];

int fds[][]=new int [10][10];

//vectormult(matr1,matr2,5,5,1,matrix);//matr1*matr2,kolvo strok matr1,kol stolb matr1,kol stolb matr2, pustaya result matrix

first pot = new first(matr1,matr2,2,5,1,fds);//заносим сформированные переменные в классе glavniy в класс(поток) который мы хотим использовать

Thread das = new Thread(pot); //объявляем поток

das.start();//выполнение умножения в одном из потоков

try {

das.join();

} catch (InterruptedException x) {}

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

{System.out.println("");

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

{System.out.print(fds[i][j]+" ");}

}

// в результате получим матрицу 24 24

// 24 24

// 24 24

// 0 0

// 0 0

// 0 0

//распределенный посыл

//ввод данных допустим kolstrvar kolstoln-строки и столбцы матрицы n(множителя), kolstolm - количество столбцов множимой матрицы m

//будем исходить из того что у нас в ресурсах три потока и входящие матрицы будем делить на 3 части

int kolstrvar=3;

int kolstoln=34;

int kolstoln1=0;//столбцы матрицы н1 как часть матрицы н

int kolstoln2=0;//столбцы матрицы н2 как часть матрицы н

int kolstoln3=0;//столбцы матрицы н3 как часть матрицы н

int kolstolm=10;

int intPart =(int) Math.floor(kolstoln/3);//целая часть от деления 10/3

//получаем остаток и используем его при формировании третьей матрицы получается 3 матрицы n две по 3 столбца и четвертая 4 столбца

kolstoln1=intPart;

kolstoln2=intPart;

kolstoln3=intPart+(kolstoln-3*intPart);

System.out.print(kolstoln1);

System.out.print(kolstoln2);

System.out.print(kolstoln3);

int matrixn[][]=new int [10][10];//здесь можно задать любой исходный массив в том числе и другой размерности

int matrixm[][]=new int[10][10];//здесь можно задать любой исходный массив в том числе и другой размерности

int matn1[][];//массивы разбиения matrixn

int matn2[][];//массивы разбиения matrixn

int matn3[][];//массивы разбиения matrixn

int matm1[][];//массивы разбиения matrixm

int matm2[][];//массивы разбиения matrixm

int matm3[][];//массивы разбиения matrixm

/*сформируем матрицы разбиения и умножим их друг на друга т.е. matn1*matm1 и т.д разбивка множимого производится по строкам а множителя по столбцам*/

matn1=new int[kolstrvar][kolstoln1];

matn2=new int[kolstrvar][kolstoln2];

matn3=new int[kolstrvar][kolstoln3];

matm1=new int[kolstoln1][kolstolm];

matm2=new int[kolstoln2][kolstolm];

matm3=new int[kolstoln3][kolstolm];

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

{

for(int j=0;j<=kolstoln1;j++){matn1[i][j]=matrixn[i][j];}

}

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

{

for(int j=0;j<=kolstoln1;j++){matn2[i][j]=matrixn[i][j+kolstoln1];}

}

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

{

for(int j=0;j<=kolstoln3;j++){matn3[i][j]=matrixn[i][j+2*kolstoln1];}

}

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

{

for(int j=0;j<=kolstolm;j++){matm1[i][j]=matrixm[kolstoln1][j];}

}

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

{

for(int j=0;j<=kolstolm;j++){matm2[i][j]=matrixm[kolstoln2+kolstoln2][j];}

}

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

{

for(int j=0;j<=kolstolm;j++){matm3[i][j]=matrixm[j+2*kolstoln][j];}

}

//теперь когда матрицы сформированы необходимо их отправить в три потока

//допишите отправку матриц в три заранее подготовленных потока

}}