Multiplication of two matrices in C. Transfer of values between functions

Asked

Viewed 568 times

0

Recently I was given a project of`multiplication of matrices, where I have two functions: a "main", and another "product of two matrices"; a main, will read the different values of the elements of the two matrices a multiply defined by the user and write the product result of the two matrices. And the product_de_twomatrices, will receive values from the main function will return the output of the two matrices to the main function that will write this result on the screen and in a file created to serve as future memory of the various program executions.

I don’t understand what it’s like to pass the values from one function to the other. Can anyone explain it to me?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int linhasA, colunasA, linhasB, colunasB;
int l, c;

void main()
{
    char metodo;

    /*Título do Programa / Apresentação */
    printf("\t\t\t\t\t\tPRODUTO DE DUAS MATRIZES \n \n");
    printf("Trabalho realizado por:\n");
    printf("Francisco Pinto, n%c 43487\n", 248);
    printf("Turno pr%ctico\n", 160);
    printf("Turma 22D\n \n \n");

    /*Menu onde o utlizador poderá escolher como irá importar os dados relativos às matrizes*/
    printf("MENU PRINCIPAL \n");
    printf("============ \n");
    printf("Selecione, por favor o m%ctodo desejado para a importa%c%co dos dados:\n", 130, 135, 198);
    printf("==================================================\n");
    printf("\tA) Atrav%cs do TECLADO\n", 130);
    printf("\tB) Importando um FICHEIRO\n\n");
    printf("\tC) Se desejar sair do programa");
    scanf(" %c", &metodo);


    do
    {
        scanf(" %c", &metodo);
        metodo = toupper(metodo); /*Converte todas as letras inseridas pelo utilizador para maiúsclas*/
    } while ((metodo != 'A') && (metodo != 'B') && (metodo != 'C')); /*Caso o utilizador tenha escolhido letras diferentes a A), B) ou C), o menu aparece até que o utilizador escolha a letra certa */

    switch (metodo) /*Escohe o caso */
    {
    case 'A': /*Se o utilizador escolher a opção A)*/
        printf("\n\n");

        /*Dados da matriz A, preenhidos pelo utilizador*/
        printf("Qual o n%cmero de linhas da Matriz A?\n", 163);
        scanf(" %d", &linhasA);
        printf("Qual o n%cmero de colunas da Matriz A?\n", 163);
        scanf(" %d", &colunasA);
        printf("\n\n");

        /*Dados da matriz B, preenhidos pelo utilizador*/
        printf("Qual o n%cmero de colunas da Matriz B?\n", 163);
        scanf(" %d", &linhasB);
        printf("Qual o n%cmero de colunas da Matriz B ?\n", 163);
        scanf(" %d", &colunasB);

        float A[linhasA][colunasA], B[linhasB][colunasB];

        do
        {
            scanf(" %d", linhasA);
            scanf(" %d", colunasA);
            scanf(" %d", linhasB);
            scanf(" %d", colunasB);

            if (colunasA != linhasB);

            printf("\t***ERRO***");
            printf("Como o n%cmero de colunas da matriz A %c diferente do n%cmero de linhas da matriz B, n%co %c poss%cvel fazer a multiplica%c%co \n\n", 163, 130, 163, 198, 130, 141, 135, 198);
        } while (colunasA != linhasB);

        if (colunasA = linhasB)

            /*Carregamento da matriz A*/
            printf("\tDados da matriz A: \n");

        for (l = 0; l <= linhasA - 1; l++)
        {
            for (c = 0; c <= colunasA - 1; l++);
            printf("A[%d][%d] = ", l + 1, c + 1);
            scanf("%f", &A[l][c]);
        }

        /*Carregamento da matriz B*/
        printf("\tDados da matriz B: \n");

        for (l = 0; l <= linhasB - 1; l++)
        {
            for (c = 0; c <= colunasB - 1; l++);
            printf("B[%d][%d] = ", l + 1, c + 1);
            scanf("%f", &B[l][c]);
        }
        {

    case 'B':  /*Se o utilizador escolher a opção B)*/
    {

    }

    case 'C':  /*Se o utilizador escolher a opção C)*/
    {

    }




    system("pause");
    }
}
  • 1

    This excerpt: from { scanf(" %d", lineA); scanf(" %d", colunasA); scanf(" %d", lineB); scanf(" %d", colunasB); has no sense, you have already read these variables.

  • Possible duplicate of Return local function variables

1 answer

-1

Francis, this passage of values, in C, can be through the commandreturn or pointer manipulation. In your case, I believe that the return be better. It would look something like this:

int* produto_de_duas_matrizes(int *matriz1, int *matriz2, int tamanho){

    int matriz_resultado[tamanho]

    //Aqui você insere o código responsável pela multiplicação de matrizes
    //Você pode manipular ela como vetores: matriz1[posicao]
    //Ou como ponteiro: *(matriz1 + (posicao * sizeof(int)))

    return matriz_resultado
}

And in the main function, you should receive the result of this function also on a pointer:

int main(){

    //tamanho deve ser substituído pelo tamanho que você precisa
    int matriz1[<tamanho>], matriz2[<tamanho>];
    int *matriz_resultado;
    int aux;
    //Trecho de código para popular as duas matrizes

    matriz_resultado = produto_de_duas_matrizes(matriz1, matriz2);

    for(aux = 0; aux < tamanho; aux++){
        printf("%d\n", *(matriz_resultado + (aux * sizeof(int))))
    }
}

I don’t quite remember how to calculate the product of two matrices, so I didn’t put the code of that for you, but if it’s not working that way I told you, post your code here and I’ll help you manipulate the values between the functions.

  • What I have so far is this:

  • @Franciscowaitfor-itPinto, did it work? If it didn’t work, put your code in the question so we can help you.

  • already there. Thank you very much for the help

  • matriz_resultado is a local variable of the function produto_de_duas_matrizes. Returning a pointer to it that way shouldn’t work.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.