Добавил:
okley
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2 семестр / sr17
.c#include <stdio.h>
#include <stdlib.h>
int Prandom(int range_min, int range_max){
int r = ((double)rand() / RAND_MAX) * (range_max - range_min) + range_min;
return(r);
}
void mRandom(int** a, int min, int max, int m, int n){
int i, j;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
a[i][j]=Prandom(min, max);
}
}
}
void mTrans(int** a, int** b, int m, int n){
int i, j;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
b[j][i]=a[i][j];
}
}
}
void mSum(int **a, int** b, int** c, int m, int n){
int i, j;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
c[i][j]=a[i][j]+b[i][j];
}
}
}
void mProduct(int** a, int** b, int** c, int strok1, int stolbcov2, int strok2){
int i, j, k, s;
for(i=0; i<strok1; i++){
for(k=0; k<stolbcov2; k++){
s=0;
for(j=0; j<strok2; j++){
s+=a[i][j]*b[j][k];
}
c[i][k]=s;
}
}
}
void mPower(int** a, int m, int pow){
int **body1, **body2;
int i, j, k, l, s;
body1 = (int**)malloc(m*sizeof(int*) + m*m*sizeof(int));
for (i=0; i<m; ++i){
body1[i] = (int*)(body1+m) + i*m;
}
body2 = (int**)malloc(m*sizeof(int*) + m*m*sizeof(int));
for (i=0; i<m; ++i){
body2[i] = (int*)(body2+m) + i*m;
}
for(i=0; i<m; i++){
for(j=0; j<m; j++){
body1[i][j]=a[i][j];
body2[i][j]=a[i][j];
}
}
for(k=1; k<pow; k++){
mProduct(a, body1, body2, m, m, m);
for(i=0; i<m; i++){
for(j=0; j<m; j++){
a[i][j]=body2[i][j];
}
}
}
}
void mPrint(int** a, int m, int n){
int i, j;
for(i=0; i<m; i++){
for(j=0; j<n; j++){
printf("%6d", a[i][j]);
}
printf("\n");
}
}
int K, columns, rows, mark=1;
int **c;
void output_mas_file(int **a, int r, int col){ // Функция для вывода матрицы в файл
FILE *fp;
char b[20];
if ( (fp = fopen("test.txt","w")) == NULL ) {
printf("Ошибка!\n");
exit(1);
}
int i, j;
for(i=0; i<r; i++){
for(j=0; j<col; j++){
sprintf(b, "%d", a[i][j]);
fputs(b, fp);
if(j+1-col) fputs(" ", fp);
else fputs("\n", fp);
}
}
fclose(fp);
}
void input_mas_file(int **a){ // Функция для вывода матрицы из файла
int A[100];
char b[100];
int ch;
int i=0, j=0;
FILE *fp;
fp = fopen("test2.txt","r");
ch = getc(fp);
while (ch != EOF) {
if(ch==' '){
b[i]='\0';
A[j]=atoi(b);
i=0;
j++;
}
if(ch=='\n'){
b[i]='\0';
A[j]=atoi(b);
i=0;
j++;
if(mark){columns=j; mark=0;}
}
b[i]=ch;
ch = getc(fp);
i++;
}
fclose(fp);
A[j]=atoi(b);
K=j+1;
rows = (j+1)/columns;
c = (int**)malloc(rows*sizeof(int*) + columns*rows*sizeof(int));
for (i=0; i<rows; ++i){
c[i] = (int*)(c+rows) + i*columns;
}
for(i=0; i<rows; i++){
for(j=0; j<columns; j++){
c[i][j]=A[i*columns+j];
}
}
}
int main(void)
{
int i, j, k, m, n, s;
int **A, **B, **product, **sum;
// int i, j; // Работа с файлами
// K=0;
// input_mas_file(&c);
// for(i=0; i<rows; i++){
// for(j=0; j<columns; j++){
// printf("%d ", c[i][j]);
// }
// printf("\n");
// }
// output_mas_file(c, rows, columns);
scanf("%d", &m);
scanf("%d", &n);
A = (int**)malloc(m*sizeof(int*) + n*m*sizeof(int));
for (i=0; i<m; ++i){
A[i] = (int*)(A+m) + i*n;
}
B = (int**)malloc(n*sizeof(int*) + m*n*sizeof(int));
for (i=0; i<n; ++i){
B[i] = (int*)(B+n) + i*m;
}
for(i=0; i<m; i++){
for(j=0; j<n; j++){scanf("%d", &A[i][j]);}
}
mPrint(A, m, n);
printf("\n");
// mRandom(A, 1, 100, m, n);
// mPrint(A, m, n);
// printf("\n");
mTrans(A, B, m, n);
// mPrint(B, n, m);
// printf("\n");
product = (int**)malloc(m*sizeof(int*) + m*m*sizeof(int));
for (i=0; i<m; ++i){
product[i] = (int*)(product+m) + i*m;
}
sum = (int**)malloc(m*sizeof(int*) + m*n*sizeof(int));
for (i=0; i<m; ++i){
sum[i] = (int*)(product+m) + i*n;
}
mProduct(A, B, product, m, m, n);
// mPrint(product, m, m);
// printf("\n");
// mSum(A, B, sum, m, n);
// mPrint(sum, m, n);
// printf("\n");
// mPower(A, m, 2);
// mPrint(A, m, n);
mPower(product, m, 2);
mPrint(product, m, n);
}
