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
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;
}
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.
Perguntas interessantes
Matemática,
10 meses atrás
Química,
1 ano atrás
Português,
1 ano atrás
Química,
1 ano atrás
Biologia,
1 ano atrás