Informática, perguntado por thallescedro, 1 ano atrás

Construa um programa que leia uma matriz A (6x3) do tipo inteiro e construa uma
matriz B de mesmo tipo e dimensão. Sendo que B deve ser formada do seguinte modo: a cada elemento par da matriz A deve ser somado 5 e de cada elemento ímpar da matriz A deve ser subtraído 4. No final mostrar as matrizes A e B.


Onde eu errei aqui?


#include
#include

int main() {
int mat1[6][3],mat2[6][3],i,j;
printf("digite o valor da matriz\n");
for(i=0;i<6;i++)
for(j=0;j<3;j++){
scanf("%d",&mat1[6][3]);
if(mat1[i][j]%2==0){
mat2[i][j]=mat1[i][j]+5;
}
else {
mat2[i][j]=mat1[i][j]-4;

}
}
printf("%3d", mat1[i][j]);
printf("\n");
printf("%3d", mat2[i][j]);
return 0;
}

Soluções para a tarefa

Respondido por AllysonD
1
Houve vários erros.

Vamos analisar cada linha errada e corrigir:

Você escreveu:
#include 
#include 
Explicação:
O #include serve para importação de pacotes com funções que não são nativas da linguagem C. Portanto, deve-se especificar qual pacote você deseja importar. No problema, é solicitada a leitura e escrita de dados, e os comandos mais utilizados que fazem isso são o scanf e printf. Estes são comandos não nativos e o pacote que inclui-os é o <stdio.h>. Portanto ficará assim:
#include <stdio.h>

Você escreveu:
printf("digite o valor da matriz\n");
for(i=0;i<6;i++)
for(j=0;j<3;j++){ 
Explicação:
Na segunda linha, faltou abrir chaves. Fica assim:
printf("digite o valor da matriz\n");
for(i=0;i<6;i++){
for(j=0;j<3;j++){ 

Em seguida você escreveu:
scanf("%d",&mat1[6][3]);
Esse comando vai gravar dados na posição [6][3] da matriz. Somente nessa posição. 
Uma matriz 6 * 3 contém 6 linhas e 3 colunas de dados do tipo int. Ou seja, cabem 6 * 3 = 18 números inteiros nessa matriz. Com aquele comando, você só grava dados em uma das posições.
Para gravar dados em todas, você precisa usar as variáveis i e j dos seus loops. Para cada i e j, existe uma posição que deverá ser preenchida. Fica assim:
scanf("%d",&mat1[i][j]);

Você escreveu:
else {
mat2[i][j]=mat1[i][j]-4;

}
}
Explicação:
Aqui falta uma sinal de fecha chaves. Lembra daquela abre chaves que faltou no FOR lá em cima? Faltou aqui também. fica assim:
else {
mat2[i][j]=mat1[i][j]-4;
} //esse sinal pertence ao ELSE

} //esse sinal pertence ao segundo FOR
} //esse sinal pertence ao primeiro FOR

Você escreveu:
printf("%3d", mat1[i][j]);
printf("\n");
printf("%3d", mat2[i][j]);
Explicação:
Da mesma maneira que você usou dois FOR para percorrer todos os 6*3 = 18 elementos da matriz para preenchê-los, você precisa percorrer para mostrar cada um deles. Ficará assim:
for(i=0;i<6;i++) {
  for(j=0;j<3;j++) {
     printf("%3d", mat1[i][j]);
  }
  printf("\n");
}

printf("\n"); //pula uma linha entre as matrizes.

for(i=0;i<6;i++) {
  for(j=0;j<3;j++) {
     printf("%3d", mat2[i][j]);
  }
  printf("\n");
}

Solução completa:

#include <stdio.h>

int main() {
int mat1[6][3],mat2[6][3],i,j;
printf("digite o valor da matriz\n");
for(i=0;i<6;i++){
for(j=0;j<3;j++){ 
scanf("%d",&mat1[i][j]);
if(mat1[i][j]%2==0){
mat2[i][j]=mat1[i][j]+5;
}
else {
mat2[i][j]=mat1[i][j]-4;
}

}
}
for(i=0;i<6;i++) {
  for(j=0;j<3;j++) {
     printf("%3d", mat1[i][j]);
  }
  printf("\n");
}

printf("\n"); //pula uma linha entre as matrizes.

for(i=0;i<6;i++) {
  for(j=0;j<3;j++) {
     printf("%3d", mat2[i][j]);
  }
  printf("\n");
}

return 0;
}

thallescedro: Já tinha conseguido, na verdade não precisei abrir a primeira chave do for (não sei o motivo funciona sem ela), e a parte do #include não apareceu o <stdi.o> e o <std.lib> depois que copiei do DEV.
AllysonD: Dentro do bloco de IF/loop não precisa de chaves se só haver um comando dentro. Ou seja, um FOR com apenas um comando dentro: outro FOR.
Perguntas interessantes