Ir ao conteúdo
  • Cadastre-se
Cibelly Cristina

C Problemas no resultado do exercício

Recommended Posts

Bom dia, gente!

Sou iniciante na linguagem C e estou com uma dúvida nesse exercício "Leia uma matriz 3x2 e outra 2x3 de números double. Imprima o produto destas duas
matrizes"

Tentei fazer o programa, mas o resultado final está saindo totalmente divergente da resposta correta, inclusive com lixo de memória.

Esse é o código:

#include <stdio.h>
#include <conio.h>

void preenche_matrizA(double matA [][2])
{
    int i,j;
    for (i=0;i < 3;i++)
    {

        for (j = 0;j < 2;j++)
        {
        printf ("Matriz[%d][%d]= ", i+1,j+1);
        scanf("%f", &matA[j]);
        }
    }
}
void preenche_matrizB(double matB [][3])
{
    int i,j;
    for (i=0;i< 2 ;i++)
    {

        for (j = 0;j< 3;j++)
        {
        printf ("Matriz[%d][%d]= ", i+1,j+1);
        scanf("%f", &matB[j]);
        }
    }
}
void produto(double matA[][2], double matB[][3], double matC[][3])
{
    int i,j,k;
    for(i=0;i< 3 ;i++)
    {

        for(j=0;j< 3;j++)
            {
                matC [j]=0;
                for(k=0;k<3;k++)
                    {
                        matC[j] = matC[j] + matA[k]*matB[k][j];
                    }
               }
    }
}
int main()
{

    double matrizA[3][2],matrizB[2][3],matrizC[3][3];
    int i,j;
    printf ("Digite os numeros da matriz A 3X2:\n\n");
    preenche_matrizA(matrizA);
    printf ("Digite os numeros da matriz B 2X3:\n\n");
    preenche_matrizB(matrizB);
    produto(matrizA,matrizB,matrizC);
    printf("\nMatriz resultante:\n\n");
    for (i=0;i< 3;i++)
    {
        for (j=0;j< 3;j++)
            {
                printf ("%.2f ", matrizC[j]);
            }
        printf ("\n");
    }
    getch();
    return 0;
}

Desde já, meus agradecimentos♥

adicionado 2 minutos depois
1 minuto atrás, Cibelly Cristina disse:

 matC[j] = matC[j] + matA[k]*matB[k][j];

Não sei qual o motivo que ao postar aqui essa linha saiu diferente, mas no programa original está:

matC[j] = matC[j] + matA[k]*matB[k][j];

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
30 minutos atrás, Cibelly Cristina disse:

Não sei qual o motivo que ao postar aqui essa linha saiu diferente, mas no programa original está:

matC[j] = matC[j] + matA[k]*matB[k][j];

 

Isso acontece porque para o fórum [ i ] sem espaços é a tag para deixar o texto em itálico, então eles somem, e o texto está em itálico a partir do primeiro lugar onde deveria estar um [ i ].

 

Leia minha assinatura abaixo para ver como postar código no fórum sem que este tipo de problema aconteça.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, isrnick disse:

 

Isso acontece porque para o fórum [ i ] sem espaços é a tag para deixar o texto em itálico, então eles somem, e o texto está em itálico a partir do primeiro lugar onde deveria estar um [ i ].

 

Leia minha assinatura abaixo para ver como postar código no fórum sem que este tipo de problema aconteça.

Muito obrigada!! Acredito que agora esteja certo rsrs

#include <stdio.h>
#include <conio.h>

void preenche_matrizA(double matA [][2])
{
    int i,j;
    for (i=0;i < 3;i++)
    {

        for (j = 0;j < 2;j++)
        {
        printf ("Matriz[%d][%d]= ", i+1,j+1);
        scanf("%f", &matA[i][j]);
        }
    }
}
void preenche_matrizB(double matB [][3])
{
    int i,j;
    for (i=0;i< 2 ;i++)
    {

        for (j = 0;j< 3;j++)
        {
        printf ("Matriz[%d][%d]= ", i+1,j+1);
        scanf("%f", &matB[i][j]);
        }
    }
}
void produto(double matA[][2], double matB[][3], double matC[][3])
{
    int i,j,k;
	for(i=0;i< 3 ;i++)
    {

        for(j=0;j< 3;j++)
    		{
        		matC [i][j]=0;
            	for(k=0;k<3;k++)
            		{
						matC[i][j] = matC[i][j] + matA[i][k]*matB[k][j];
            		}
   			}
    }
}
int main()
{

    double matrizA[3][2],matrizB[2][3],matrizC[3][3];
    int i,j;
    printf ("Digite os numeros da matriz A 3X2:\n\n");
    preenche_matrizA(matrizA);
    printf ("Digite os numeros da matriz B 2X3:\n\n");
    preenche_matrizB(matrizB);
    produto(matrizA,matrizB,matrizC);
    printf("\nMatriz resultante:\n\n");
    for (i=0;i< 3;i++)
    {
        for (j=0;j< 3;j++)
    		{
        		printf ("%.2f ", matrizC[i][j]);
    		}
    	printf ("\n");
    }
    getch();
    return 0;
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está no 3º ciclo for na função produto, pois a condição deveria ser k < 2.

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
25 minutos atrás, isrnick disse:

O problema está no 3º ciclo for na função produto, pois a condição deveria ser k < 2.

Obrigada!! Esse deve ser um dos problemas, mas ainda sim tem outro erro que não consigo identificar image.thumb.png.07ed5bd5083e88963af6358825c5f15f.png

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nos scanfs e printfs está usando o especificador %f (float), mas para double o especificador é %lf.

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, isrnick disse:

Nos scanfs e printfs está usando o especificador %f (float), mas para double o especificador é %lf.

Nem sei como agradecer! Muito obrigada mesmo, agora deu certo! Tentarei ficar mais atenta nesses pequenos detalhes.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×