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

1

I have recently been given a 'matrix multiplication' project, where I have two functions: one 'main' , and another a main, will read the different values of the elements of the two arrays a multiply defined and write the result of the product of the two matrices. And the output of two arrays, will receive values from the main function will return the result of the product of the two arrays to the function main that will write that result on the screen and a file created to serve as future memory of the various executions of the program.

I do not understand how you pass the values from one function to another. Can someone explain me? '

define _CRT_SECURE_NO_WARNINGS

include

include

include

int rowsA, columnsA, rowsB, columnsB; int l, c;

void main () {     char method;

/*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");
    }
}
    
asked by anonymous 21.05.2017 / 18:50

1 answer

0

Francisco, this passing of values, in C, can be through the command return or pointer manipulation. In your case, I think return is 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 also get the result of this function 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 do not remember how to calculate the product of two arrays, so I did not put the code for you, but if it is not working that way I told you, post your code here and I'll help you manipulate the values between functions.

    
21.05.2017 / 20:58