Это вопрос:
Логическая матрица - это матрица, в которой все ее элементы равны 0 или 1.
Мы определяем логическое умножение матриц A и B следующим образом: операция, определенная ниже, где «·» - логическая операция И, а «+» - логическая операция ИЛИ.
В этом назначении вы создадите две логические матрицы 5x5 и найдете соответствующую матрицу, которая будет созданный из "умножения" этих 2 матриц
Определить глобальный размер равен 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])
Напишите основную программу, которая использует функции над. Программа считывает значения матриц от пользователя, умножает их и выводит матрицу результатов на экран.
Приведенные определения функций являются преднамеренными, а операторы возврата - пустыми. Не меняйте их. Массивы передаются между функциями как ссылки, а не как примитивы, подобные переменным. Таким образом, определения функций совершенно верны. Кроме того, нет ограничений на ввод от пользователя. Вы можете прочитать только необходимые цифры, а затем прекратить чтение и отбросить оставшиеся данные.
Вот мой код:
#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]={ 0 }, mat2[][SIZE]={ 0 }, res_mat[][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
Но когда я запускаю программу, появляется это сообщение:
Возникла исключительная ситуация: Ошибка проверки времени выполнения # 2 - стек вокруг переменной 'mat2' поврежден .
и вывод не правильный, и я получаю некоторые элементы имеют значения барахла:
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 1 1 1
1 1-858993460-858993460-858993460
-858993460-858993460-858993460-858993460 1
The Second Matrix Is :-
1 1 1 1 1
-858993460-858993460-858993460-858993460-858993460
-858993460-858993460 1 1 1
1 1 1 1 1
1 1 1 1 1
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
Другой вопрос:
, если я вошел в mat1 большая строка, она рассчитывается напрямую, не давая мне ввести строку в mat2, как мне решить эту проблему?