Jump to content
Raquel.Cristina

Matriz

Recommended Posts

Olá!!

Estou com dificuldades para resolver um exercício de matriz. Segue abaixo o enunciado, e o código que desenvolvi.

Minha dificuldade é atribuir os valores da matriz A à primeira coluna da matriz C, assim como os valores da matriz B à segunda coluna da matriz B.

Alguém poderia me explicar por favor?!

Ler duas matrizes, A e B, cada uma com uma dimensão para sete elementos numéricos inteiros. Construir uma matriz C de sete linhas com duas dimensões. A primeira coluna deverá ser formada pelos elementos da matriz A e a segunda coluna deverá ser formada pelos elementos da matriz B. Apresentar os elementos da matriz C.

#include<stdio.h>

#include<stdlib.h>
int A[7][1], B[7][1], C[7][2];
int i,j;
int main()
{
Insere_MatrizA();
Mostra_MatrizA();
Insere_MatrizB();
Mostra_MatrizB();
Monta_matrizC();
Mostra_MatrizC();
return 0;
}
void Insere_MatrizA()
{
printf("Insira o valor da matriz A \n");
printf("\n");
for(i=0; i < 7; i++)
{
for(j=0; j < 1; j++)
{
printf("Digite o valor da posicao %i %i: ", i+1, j+1);
scanf("%i",&A[j]);
}
}
}
void Mostra_MatrizA()
{
printf("\n A matriz A e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 1; j++)
{
printf(" %i ",A[j]);
}
}
}
void Insere_MatrizB()
{
printf("\n Insira o valor da matriz B \n");
printf("\n");
for(i=0; i < 7; i++)
{
for(j=0; j < 1; j++)
{
printf("Digite o valor da posicao %i %i: ", i+1, j+1);
scanf("%i", &B[j]);
}
}
}
void Mostra_MatrizB()
{
printf("\n A matriz B e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 1; j++)
{
printf(" %i ",B[j]);
}
}
}
void Monta_matrizC()
{
C[1] = A[1];
C[2] = B[1];
}
void Mostra_MatrizC()
{
printf("\n");
printf(" A matriz C e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 2; j++)
{
printf(" %i ", C[j]);
}
}
}

Share this post


Link to post
Share on other sites

Olá bom dia!!

olhei seu código no compilador aqui e não rodou, pois você declarou o main no topo da pagina, sendo assim você deve colocá-lo no final para poder chamar todas as funções do programas que já estarão declaradas nas linha superiores.

A leitura e e exibição das matrizes esta beleza,

o problema de juntá-las foi o índice, você deve prestar mais atenção neles, quando você iniciou as matrizes

começou o for com int i =0 então sua matriz terá posição 0 e não posição 1.

for(int i=0;i<7;i++){
        C[i][0] = A[i][0];
        C[i][1] = B[i][0];
    }

onde criei o for para percorrer a matriz, depois bastava você colocar o índice correto, E pronto.

para colocar os valores de a na matriz c e de b na matriz c bastava fazer um for e trocar o índice.

Qualquer coisa estamos ai!!

Share this post


Link to post
Share on other sites
Em 27/10/2016 at 07:10, Eduardo_555 disse:

Olá bom dia!!

olhei seu código no compilador aqui e não rodou, pois você declarou o main no topo da pagina, sendo assim você deve colocá-lo no final para poder chamar todas as funções do programas que já estarão declaradas nas linha superiores.

É verdade. Se não for declarado os protótipos das funções de inserir, montar e mostrar as matrizes o programa não será compilado pois a função principal não sabe que funções são essas a não ser que sejam especificadas em seus protótipos antes mesmo de o programa chamar a função principal. 

As funções InsereMatrizA e InsereMatrizB não irão guardar os valores corretamente nas matrizes A e B por que durante a leitura e armazenamento dos valores lidos o programa está armazenando esses valores apenas na posição 0 de cada uma dessas duas matrizes. Ele irá ler 7 valores para cada uma das duas porém irá armazenar todos os 7 na primeira posição que é a 0 o que fará com que um valor sobrescreva o outro na matriz e no final dos 7 valores lidos para cada uma as matrizes ficarão cada uma apenas com 1. Dos 14 valores lidos que devem ser armazenados nas matrizes A e B apenas 2 serão por causa da sobrescrição. Isso vai fazer com que 6 dos valores de cada matriz fiquem faltando, totalizando 12 por ser duas. 
A matriz C está guardando em suas posições apenas 2 valores dos 14 que deve guardar. Todas as 3 matrizes A,B e C estão guardando nelas mesmas apenas 1/7 dos valores que devem. Nas funções de mostrar as matrizes A,B e C o erro é quase o mesmo porém ao invés de ser na leitura dos valores é ao mostrá-los pois será para cada uma das matrizes A e B mostrado 7 vezes o mesmo valor que é o da primeira posição de cada uma delas. No caso da matriz C será mostrado 7 vezes multiplicado por 2 o que totaliza 14. Então dos 14 valores de C aparecerá apenas dois e 7 vezes cada um desses dois. É uma repetição desnecessária ficar mostrando várias vezes os mesmos valores das mesmas posições do vetor.

Durante a leitura dos valores para as matrizes e também seu armazenamento está sendo usado apenas a primeira dimensão das matrizes como índice o que fará com que o programa compile, execute e leia os valores do teclado normalmente porém na hora de mostrar os valores lidos irá mostrar números completamente diferentes dos que estão sendo lidos. O compilador não acusa isso como sendo erro mas emite aviso pela falta do segundo índice de cada matriz. Os valores irão aparecer errados por que não está sendo especificado qual posição da segunda dimensão das matrizes é para eles serem armazenados e depois mostrados sendo que todas essas matrizes possuem duas dimensões e não apenas uma. Por isso o erro.

Por causa de todas essas coisas o programa está errado e deve ser reprogramado. Uma grande parte dele está feita da forma certa sem erros então esse código pode ser reaproveitado, seus erros corrigidos e ele funcionará perfeitamente fazendo exatamente o que pede o enunciado.

Você está fazendo a leitura dos valores a ser armazenados nos vetores A e B com o formatador %i nas funções o que mesmo não sendo reconhecido como erro pelo compilador e nem fazendo que esse mesmo emita aviso faz com que o programe trave durante a execução e o sistema operacional diga que é preciso fechá-lo por ter encontrado um problema nele. Então pelo fato de acontecer tudo isso quando se usa %i na função scanf isso pode muito bem ser considerado um erro de programação. Para ficar certo deve-se substituir o %i por %d nas funções de leitura dos valores. Usar %i nas funções printf nesse caso também não é recomendado pelo fato dos índices das matrizes ser números inteiros decimais e não hexadecimais. O formatador %i é usado para mostrar valores hexadecimais então como não está sendo usado esse tipo de valor no programa é bom substituir onde tem %i por %d pois %d significa valor inteiro decimal o que é exatamente os tipos dos índices das matrizes.

Abaixo está o programa refeito a partir desse mesmo código. Modificando-se apenas algumas poucas coisas e assim funcionando da forma correta e não devendo nada ao que pede o enunciado:

#include<stdio.h>
#include<stdlib.h>
int A[7][1], B[7][1], C[7][2];
int i,j;
void Insere_MatrizA();
void Mostra_MatrizA();
void Insere_MatrizB();
void Mostra_MatrizB();
void Monta_matrizC();
void Mostra_MatrizC();
int main()
{
Insere_MatrizA();
Mostra_MatrizA();
Insere_MatrizB();
Mostra_MatrizB();
Monta_matrizC();
Mostra_MatrizC();
system("pause");
return 0;
}
void Insere_MatrizA()
{
printf("Insira o valor da matriz A \n");
printf("\n");
for(i=0; i < 7; i++)
{
for(j=0; j < 1; j++)
{
printf("Digite o valor da posicao %d %d: ", i+1, j+1);
scanf("%d",&A [i][j]);
}
}
}
void Mostra_MatrizA()
{
printf("\n A matriz A e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 1; j++)
{
printf(" %d ",A[i][j]);
}
}
}
void Insere_MatrizB()
{
printf("\n Insira o valor da matriz B \n");
printf("\n");
for(i=0; i < 7; i++)
{
for(j=0; j < 1; j++)
{
printf("Digite o valor da posicao %d %d: ", i+1, j+1);
scanf("%d", &B[i][j]);
}
}
}
void Mostra_MatrizB()
{
printf("\n A matriz B e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 1; j++)
{
printf(" %d ",B[i][j]);
}
}
}
void Monta_matrizC()
{
C[0][0] = A[0][0];
C[1][0] = A[1][0];
C[2][0] = A[2][0];
C[3][0] = A[3][0];
C[4][0] = A[4][0];
C[5][0] = A[5][0];
C[6][0] = A[6][0];
C[0][1] = B[0][0];
C[1][1] = B[1][0];
C[2][1] = B[2][0];
C[3][1] = B[3][0];
C[4][1] = B[4][0];
C[5][1] = B[5][0];
C[6][1] = B[6][0];
}
void Mostra_MatrizC()
{
printf("\n");
printf(" A matriz C e: ");
printf("\n");
for(i=0; i < 7; i++)
{
printf("\n");
for(j=0; j < 2; j++)
{
printf(" %d ", C[i][j]);
}
}
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.