Это вопрос:
Логическая матрица - это матрица, в которой все элементы равны 0 или 1.
Мы определяем логическое умножение матриц A и B на операция, определенная ниже, где «·» - это логическая операция И, а «+» - это логическая операция ИЛИ.
В этом назначении вы создадите две логические матрицы 5x5 и найдете соответствующую матрицу, которая будет создается из "умножения" этих двух матриц
Определить глобальный РАЗМЕР, равный 5 (уже определен в шаблоне)
Напишите функцию, которая получает ссылка на матрицу и считывает ввод в матрицу от пользователя. Если ввод не равен нулю, замените его на 1. Если пользователь не ввел достаточно значений до конца строки, оставшиеся ячейки в матрице будут заполнены нулями. Также убедитесь, что если пользователь вводит слишком много символов, вы берете только то, что необходимо, и отбрасываете оставшийся ввод. (Например: 1509 - это матрица 2x2 со значениями 1101, и '1 5' также является матрицей 2x2 со значениями 1111, выделенный пробел принимается за 1, как описано выше.)
Сигнатура функции: void read_mat(int mat[][SIZE])
Напишите функцию, которая умножает, как определено выше, две матрицы и вводит результаты в третью матрицу с подходящими размерами.
Сигнатура функции: void mult_mat(int mat1[][SIZE],int mat2[][SIZE], int result_mat[][SIZE])
Напишите функцию, которая печатает матрицу на экране. Используйте «% 3d» для формата печати, чтобы он выглядел красиво, как показано ниже.
Сигнатура функции: void print_mat(int mat[][SIZE])
Напишите основную программу, которая использует функции выше. Программа считывает значения матриц от пользователя, умножает их и печатает матрицу результатов на экране.
Приведенные определения функций являются преднамеренными с операторами return как недействительными. Не меняйте их. Массивы передаются между функциями как ссылки, а не как примитивы, такие как переменные. Таким образом, определения функций абсолютно верны. Кроме того, нет ограничений на ввод данных пользователем. Вы можете прочитать только необходимые цифры, а затем прекратить чтение и отбросить оставшийся ввод.
Вот мой код:
#include <stdio.h>
#define SIZE 5
void read_mat(int mat[][SIZE],int size)
{
int i = 0, j = 0, k = 0;
char c;
c=getchar();
while(c!='\n' && k<size*size){
if(c!='0'){
mat[i][j]=1;
j++;
}
else{
mat[i][j]=0;
j++;
}
if (j >= size){
j = 0;
i++;
}
if (i >= size){
return;
}
c=getchar();
k++;
}
}
void mult_mat(int mat1[][SIZE], int mat2[][SIZE], int result_mat[][SIZE])
{
int i,j,k;
for (i = 0; i <SIZE; ++i){
for (j = 0; j <SIZE; ++j)
{
result_mat[i][j] = 0;
for (k = 0; k < SIZE; ++k)
result_mat[i][j] += mat1[i][k] * mat2[k][j];
if(result_mat[i][j]!=0){
result_mat[i][j]=1;
}
}
}
}
void print_mat(int mat[][SIZE],int size)
{
int i, j;
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++)
printf("%3d", mat[i][j]);
printf("\n");
}
//Please use the "%3d" format to print for uniformity.
}
int main()
{
int mat1[SIZE][SIZE]={ 0 }, mat2[SIZE][SIZE]={ 0 }, res_mat[SIZE][SIZE]={0};
printf("Please Enter Values For Matrix 1\n");
read_mat(mat1,SIZE);
printf("Please Enter Values For Matrix 2\n");
read_mat(mat2,SIZE);
mult_mat(mat1,mat2,res_mat);
printf("The First Matrix Is :- \n");
print_mat(mat1,SIZE);
printf("The Second Matrix Is :- \n");
print_mat(mat2,SIZE);
printf("The Resultant Matrix Is :- \n");
print_mat(res_mat,SIZE);
return 0;
}
Вход и выход должны быть такими :
Please Enter Values For Matrix 1
111000654987010
Please Enter Values For Matrix 2
11 53
The First Matrix Is :-
1 1 1 0 0
0 1 1 1 1
1 1 0 1 0
0 0 0 0 0
0 0 0 0 0
The Second Matrix Is :-
1 1 1 1 1
1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
The Resultant Matrix Is :-
1 1 1 1 1
1 0 0 0 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
Вопрос:
Когда я ввел в mat1 большую строку, она вычисляется напрямую, не позволяя мне вводить строку в mat2, как мне решить эту проблему?
Please Enter Values For Matrix 1
6475465176547650654605836574657625846071654047
Please Enter Values For Matrix 2
The First Matrix Is :-
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 1
0 1 1 1 1
The Second Matrix Is :-
1 1 1 1 1
1 1 1 1 1
1 0 1 1 1
1 1 0 1 1
0 0 0 0 0
The Resultant Matrix Is :-
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1