Блок-схема
Начало |
Ввод n Ввод m |
n<0 |
m<0 |
m==0 |
n==0 |
Заполнение массива А |
Заполнение массива В |
Сортировка массива А |
Сортировка массива В |
Вывод массива А |
Вывод массива В |
A[n-1][0] ==B[m-1][0] = |
Конец |
Блок-схема для условия n<0 (для m<0 аналогично)
Блок схема для условия n==0 (для m==0 аналогично)
Блок-схема для заполнения массива А (заполнение массива В аналогично)
Функция сортировки.
Блок-схема условия A[n-1][0]==B[m-1][0]
Вывод массива.
Блок-схема функции square
Листинг программы
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<math.h>
void sorting(float **X, int *x);
void output(float **X, int *x);
void square(float **X,float **Y,int *x);
int main(){
int n,m;
srand(time(NULL));
SetConsoleOutputCP(1251);
printf("Введите размер квадратной матрицы A: ");
scanf("%i", &n);
printf("Введите размер квадратной матрицы B: ");
scanf("%i", &m);
if(n<0){
printf("Вы ввели отрицательное число. Будет взят модуль этого числа\n");
n=abs(n);
}
if(m<0){
printf("Вы ввели отрицательное число. Будет взят модуль этого числа\n");
m=abs(m);
}
if(n==0){
printf("Вы ввели размер массива A равный 0.\n Размер увеличен на 1\n");
n++;
}
if(m==0){
printf("Вы ввели размер массива B равный 0.\n Размер увеличен на 1\n");
m++;
}
float **A = new float *[n];
for(int i = 0; i < n; i++){
A[i] = new float [n];
for(int j = 0; j < n; j++) A[i][j] =rand() % 10;
}
float **B = new float *[m];
for( int i = 0; i < m; i++){
B[i] = new float [m];
for(int j = 0; j < m; j++) B[i][j] =rand() % 10;
}
sorting(A,&n);
sorting(B,&m);
printf("\nОтсортированная матрица A\n");
output(A,&n);
printf("Отсортированная матрица B\n");
output(B,&m);
if(A[n-1][0]==B[m-1][0]){
printf("\nA[%i][1]=B[%i][1]\n",n,m);
}
else{
if(A[n-1][0]<B[m-1][0]){
float **C = new float *[n];
for(int i = 0; i < n; i++){
C[i] = new float [n];
for(int j = 0; j < n; j++) C[i][j] = 0;
}
printf("\nA[%i][1]<B[%i][1]\nКвадрат матрицы A\n",n,m);
printf("------------------------------------------------------------\n");
square(A,C,&n);
output(C,&n);
printf("------------------------------------------------------------\n");
for(int i = 0; i < n; i++) delete [] C[i];
delete []C;
}
else{
printf("\nA[%i][1]>B[%i][1]\nКвадрат матрицы B\n",n,m);
float **C = new float *[m];
for(int i = 0; i < m; i++){
C[i] = new float [m];
for(int j = 0; j < m; j++) C[i][j] = 0;
}
printf("------------------------------------------------------------\n");
square(B,C,&m);
output(C,&m);
printf("------------------------------------------------------------\n");
for(int i = 0; i < m; i++) delete [] C[i];
delete []C;
}
}
for(int i = 0; i < n; i++) delete [] A[i];
delete []A;
for(int i = 0; i < m; i++) delete [] B[i];
delete []B;
system("pause");
return 0;
}
void sorting(float **X, int *x){
for(int k=0;k<*x;k++){
for(int j=0;j<*x;j++){
for(int i = 1; i < *x; i++){
if(X[i][j]>X[i-1][j]){
float q=X[i][j];
X[i][j]=X[i-1][j];
X[i-1][j]=q;
}
}
}
}
}
void output(float **X, int *x){
for( int i = 0; i < *x; i++){
for(int j = 0; j < *x; j++) printf(" %.1f ",X[i][j]);
printf("\n\n");
}
printf("\n");
}
void square(float **X,float **Y, int *x){
for(int i=0;i<*x;i++)
for(int j=0;j<*x; j++)
for(int k=0;k<*x; k++){
Y[i][j]+=X[i][k]*X[k][j];
}
}