Ir ao conteúdo
  • Cadastre-se

Dúvida com matriz


Aluno Camões

Posts recomendados

#include <stdio.h>

/*Ler 20 elementos numéricos inteiros para uma matriz A do tipo vetor e construir uma matriz B de mesma dimensão com os mesmos elementos de A.

-Eles devem estar invertidos, ou seja, o primeiro elemento de A passa a ser o último elemento de B e assim por diante.

-Apresentar os elementos das duas matrizes. */

int main ()
{
int MatA[20], MatB[20];
int i, j;

/*Entrada de Dados*/
printf("\nInforme valores 20 matriz A\n");
for(i=0; i<=19; i++)
{
scanf("%d", &MatA[i]);
}
printf("\nInforme valores 20 matriz B\n");
for(j=0; j<=19; j++)
{
scanf("%d", &MatB[j]);
}

printf("\nApresentando os dados da matriz A:\n");
for(i=0; i<=19; i++)
{
printf("%d ", MatA[i]);
}
printf("\nApresentando os dados da matriz B:\n");
for(j=0; j<=19; j++)
{
printf("%d ", MatB[j]);

}
getch();

}

Ob.: Não consegui fazer com que o primeiro elemento de A passa a ser o último elemento de B e assim por diante. Apresentar os elementos das duas matrizes. Alguém pode me ajudar no restante do exercicio?

Desde já agradeço pela atenção. Aguardo resposta.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Cara, depois de declaradas as matrizes e a primeira já estar populada, você vai fazer isso:

for(i=0;i<20;i++)
{
for(j=20;j<0;j--)
{
MatB[i] = MatA[j-1];
}
}

Declara o i e j antes.

Pra mostrar elas você já sabe né?


for(i=0;i<20;i++)
{
printf("%d ", MatA[i]);
}

printf("\n);

for(i=0;i<20;i++)
{
printf("%d ", MatB[i]);
}

Link para o comentário
Compartilhar em outros sites

Para inverter o vetor há uma maneira bem simples, como a dimensão do vetor é 20, é só voce pegar o valor da ultima posição da MatrizA e colocar na primeira posição da MatrizB. Uma lógica simples seria:


...
for (i = 0; i < 20; i++)
MatrizB[i] = Matriz[19 - i];
...

Até mais.

Link para o comentário
Compartilhar em outros sites

Oi, eu por curiosidade ^_^. Peguei a dica dos dois e tentei fazer o programinha rodar certinho, e nos dois casos deram BUG. Acho que eu montei errado a ideia deles, em todo caso deu BUG aqui '-'. Segue abaixo:

// Esse era o do A.F.F.
#include <stdio.h>
#include <iostream>
int main()
{
int MatA[20], MatB[20];
int i = 20, j = 20;
// Inicio

printf("\nInforme os 20 elementos da matriz A:\n");
// Popular o vetor MatA
for(int x=0; x<20; x++)
{
scanf("%d", &MatA[i]);
}
printf("\n");

//Inversão (ESSA ERA A PARTE DO A.F.F.)
for (i = 0; i < 20; i++)
MatB[i] = MatA[19 - i];

// MOstrar o resultado
for(i=0;i<20;i++)
{
printf("Valor A: %d\n", MatA[i]);
}

printf("\n");

for(i=0;i<20;i++)
{
printf("Valor B: %d\n", MatB[i]);
}
system("PAUSE");
}

// Esse era o do silviorp
#include <stdio.h>
#include <iostream>
int main()
{
int MatA[20], MatB[20];
int i = 20, j = 20;
// Inicio

printf("\nInforme os 20 elementos da matriz A:\n");
// Popular o vetor MatA
for(int x=0; x<20; x++)
{
scanf("%d", &MatA[i]);
}
printf("\n");

//Inversão (ESSA ERA A PARTE DO silviorp)
for(i=0;i<20;i++)
{
for(j=20;j>0;j--)
{
MatB[i] = MatA[j-1];
}
}

// MOstrar o resultado
for(i=0;i<20;i++)
{
printf("Valor A: %d\n", MatA[i]);
}

printf("\n");

for(i=0;i<20;i++)
{
printf("Valor B: %d\n", MatB[i]);
}
system("PAUSE");
}

T++ Se alguém achar o BUG da uma dica to curioso ^_^

Link para o comentário
Compartilhar em outros sites

E ae Plastico Bolha, o problema em seu algoritmo, pelo que percebo, é no loop que voce faz a leitura da MatrizA, porque voce icializou i = 20, e na leitura voce só armazena na posição MatrizA, ou seja, sempre armazena na ultima posição o que é lido do teclado.

Até mais.

Link para o comentário
Compartilhar em outros sites

Oi AFF, eu inicializei a variável i = 0, agora, o BUG foi menor pois, agora pelo menos os valores de matA foram imprimidos corretamente, mas em matB só é imprimido o primeiro valor que eu digito em matA ...

#include <stdio.h>

#include <iostream>

int main()

{

int MatA[20], MatB[20];

int i = 0, j = 20;

// Inicio

printf("\nInforme os 20 elementos da matriz A:\n");

// Popular o vetor MatA

for(int i=0; i<20; i++)

{

scanf("%d", &MatA);

}

printf("\n");

//Inversão

for(i=0;i<20;i++)

{

for(j=20;j>0;j--)

{

MatB = MatA[j-1];

}

}

// MOstrar o resultado

for(i=0;i<20;i++)

{

printf("Valor A: %d\n", MatA);

}

printf("\n");

for(i=0;i<20;i++)

{

printf("Valor B: %d\n", MatB);

}

system("PAUSE");

}

Link para o comentário
Compartilhar em outros sites

Realmente, a estratégia do A.F.F. é mais interessante mesmo.

Taí o código com a estratégia que ele postou funcionando:


#include <stdio.h>

int main ()
{
int MatA[20], MatB[20];
int i, j;
// Inicio

printf("\nInforme os 20 elementos da matriz A:\n");
// Popular o vetor MatA
for(i=0; i<20; i++)
{
scanf("%d", &MatA[i]);
}

printf("\n");

for(i=0;i<20;i++)
{
MatB[i] = MatA[19-i];
}

// MOstrar o resultado
for(i=0;i<20;i++)
{
printf("Valor A: %d\n", MatA[i]);
}

printf("\n");

for(i=0;i<20;i++)
{
printf("Valor B: %d\n", MatB[i]);
}
system("PAUSE");
}

Link para o comentário
Compartilhar em outros sites

Achei boa a lógica de vocês. Tenho uma outra solução usando uma variável auxiliar para fazer a troca dos valores. Nesse caso a troca foi feita no mesmo vetor, sem a necessidade da criação de um vetor B.


for(i = 0, j = 19; i < j; i++, j--)
{
aux = MatA[i];
MatA[i] = MatA[j];
MatA[j] = aux;
}

Link para o comentário
Compartilhar em outros sites

E pra melhorar ainda mais esse topico interessante, apresento uma forma de troca que não usa variavel auxiliar, fazendo com que gaste menos memoria que seu primo que usa(o algoritmo acima)

supondo duas variaveis i e j(que significam uma variavel qualquer)

i=i+j;

j=i-j;

i=i-j;

Permuta os valores sem gastar mais memoria

Mas isso só funciona se os valores não estourarem o limite.

Se a soma dos valores numericos de dois int's, por exemplo, ultrapassar 4.294.967.295 ai não pode, e se a soma de dois char's ultrapassar 255, e tal, mas funciona de boa se não ultrapassar

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!