Я установил свой код, не считая, что этот факт необходимо обнаружить, и в результате я не могу понять, как его реализовать сейчас. Это простой матричный множитель.
По сути, он должен обнаружить два условия.
Если столбцы в матрице 1 не равны строкам в матрице 2, выйдите из программы с сообщением об ошибке. Я сделал это.
Если значение, которое пользователь вводит для значений строки и столбца для matrix1 и matrix2, ненулевые, положительные значения. У меня проблемы с этим.
Способ, который настраивает наш проф, состоит в том, что мы копируем и вставляем набор значений, и он делает это. Но если мы скопируем и вставим его во входные данные, я запутался, как он должен обнаруживать ошибку по строкам и столбцам, когда для того, чтобы принять оставшиеся данные, которые я использую для циклов, для сканирования всех значений в и длина цикла for зависит от ввода строк и столбцов для matrix1 и matrix2. Если они отрицательны, цикл for все равно не будет работать.
Действительно, любая помощь была бы признательна, я закончил все остальные части, кроме этой мелкой детали. Большое спасибо.
#include <stdio.h>
int main(int argc, char *argv[]) {
int rows1 = 1, columns1 = 1, rows2 = 1, columns2 = 1; // variables for number of rows and columns in each matrix
int i, j, k; // loop variables
// These will affect the loop's length
scanf("%d %d", &rows1, &columns1);
int matrix1[rows1][columns1];
for (i = 0; i < rows1; i++) {
for (j = 0; j < columns1; j++) {
scanf("%d", &matrix1[i][j]);
}
}
scanf("%d %d", &rows2, &columns2);
int matrix2[rows2][columns2];
for (i = 0; i < rows2; i++) {
for (j = 0; j < columns2; j++) {
scanf("%d", &matrix2[i][j]);
}
}
int resultMatrix[rows1][columns2]; // Initialization of resultMatrix, that holds the result of the multiplication
int matrix1RowIndex = 0, matrix1ColIndex = 0, matrix2ColIndex = 0;
if (columns1 != rows2) {
printf("Sorry, the amount of columns in the first matrix must equal the amount of rows in the second matrix.\n");
}
else {
// Loop to set the values of resultMatrix's indices
for (i = 0; i < rows1; i++) { // rows
for (j = 0; j < columns2; j++) { // columns
resultMatrix[i][j] = 0;
for (k = 0; k < columns1; k++) { // for each individual index to be summed for the resultMatrix's value
resultMatrix[i][j] += (matrix1[matrix1RowIndex][matrix1ColIndex + k] * matrix2[matrix1ColIndex + k][matrix2ColIndex]);
}
matrix2ColIndex++;
}
matrix1RowIndex++;
matrix2ColIndex = 0;
}
//prints resultMatrix
for (i = 0; i < rows1; i++) { // rows
for (j = 0; j < columns2; j++) { // columns
printf("%6d", resultMatrix[i][j]);
}
printf("\n");
}
}
}