Как бы мне было убедиться, что эти две матрицы имеют ненулевые положительные значения строк и столбцов? - PullRequest
0 голосов
/ 01 марта 2012

Я установил свой код, не считая, что этот факт необходимо обнаружить, и в результате я не могу понять, как его реализовать сейчас. Это простой матричный множитель.

По сути, он должен обнаружить два условия.

  1. Если столбцы в матрице 1 не равны строкам в матрице 2, выйдите из программы с сообщением об ошибке. Я сделал это.

  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");
        }
    }
}

1 Ответ

1 голос
/ 01 марта 2012

Казалось бы, вы можете просто проверить, что рассматриваемые значения больше нуля, используя оператор if, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...