Ir ao conteúdo
  • Cadastre-se

C Exercicio Matriz em C


Ir à solução Resolvido por devair1010,

Posts recomendados

#include <stdio.h>
#define MAX 6
int main()
{
    int MAT[MAX][MAX];
    int i, j;
    i=0;
    for (i=0; i<MAX; i++)
    {
     for (j=0; j<MAX; j++)
     {
        scanf ("%d", MAT[i][j]);
    MAT [0][0]= 1;
    MAT [0][1]= 1;
    MAT [0][2]= 1;
    MAT [0][3]= 1;
    MAT [0][4]= 1;
    MAT [0][5]= 1; 
    MAT [1][0]= 1;
    MAT [1][1]= 2;
    MAT [1][2]= 2;
    MAT [1][3]= 2;
    MAT [1][4]= 2;
    MAT [1][5]= 1;
    MAT [2][0]= 1;
    MAT [2][1]= 2;
    MAT [2][2]= 3;
    MAT [2][3]= 3;
    MAT [2][4]= 2;
    MAT [2][5]= 1;
    MAT [3][0]= 1;
    MAT [3][1]= 2;
    MAT [3][2]= 3;
    MAT [3][3]= 3;
    MAT [3][4]= 2;
    MAT [3][5]= 1;
    MAT [4][0]= 1;
    MAT [4][1]= 2;
    MAT [4][2]= 2;
    MAT [4][3]= 2;
    MAT [4][4]= 2;
    MAT [4][5]= 1;
    MAT [5][0]= 1;
    MAT [5][1]= 1;
    MAT [5][2]= 1;
    MAT [5][3]= 1;
    MAT [5][4]= 1;
    MAT [5][5]= 1;
        printf ("%d", MAT[i][j]);
     }
    }
    return 0;
}

Olá pessoal, estou com duvida em relaçao ao exercicio a seguir no qual deveria imprimir uma matriz 6x6 com espaços e enter separando as linhas e as colunas (o problema está na saida).

 

image.png.7d6d9bded2c341d614454167dfd8337c.png

 

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Gustavo Tavares Isobe Poste o código usando o botão code:

image.png.cfd9ffbdf719a5dfdb818b86e2164a85.png

// Fica assim

Não recomendo postar arquivos para baixar, é inconveniente...

 

2 minutos atrás, Gustavo Tavares Isobe disse:

deveria imprimir uma matriz 6x6 com espaços e enter separando as linhas e as colunas

Se tem o enunciado exemplificando, poste também.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Solução

@Gustavo Tavares Isobe   existem muitos modos de se fazer esse exercício ,  e você está preenchendo a matriz manualmente ,  e assim também vai funcionar , mas não é o que pede o enunciado ,  que diz para gerar a matriz , e então uma outra solução poderia ser assim :

#include <stdio.h>
#include <Windows.h>
#define MAX 6
#define h GetStdHandle(STD_OUTPUT_HANDLE)
void cor( int,int ); // 16 cores de zero até 15;
gotoxy(int,int);     // move o cursor para a coluna e linha espevificadas
int main()
{
    int antes, antis;
    CONSOLE_SCREEN_BUFFER_INFO c;
    if(GetConsoleScreenBufferInfo(h, &c))
    {
        antes = ( c.wAttributes & 0xFF) & 0x0F;
        antis = ((c.wAttributes & 0xFF) >> 4) & 0x0F;
    }
    printf("Cor dAs letras AntEs --= %d\n\\
          \rCoR dO  fUndo  AntiS --= %d\n",
           antes,antis                   );
    int i, j;
    int MAT[MAX][MAX]={0};
    int num;
    int coluna = 35,
        linha  =  5;
    printf("\n\n\n");
    for(i=0; i<MAX; i++)
    {
        gotoxy(coluna, linha);
        linha++;
        for(j=0; j<MAX; j++)
        {
            num = 1;
            cor(12,14);
            if( (i>0 && i<MAX-1)&& (j>0 && j<MAX-1 )){cor( 0,11);num = 2;}
            if((i>1 && i<MAX-2) && (j>1 && j<MAX-2) ){cor(15,12);num = 3;}
            MAT[i][j] = num;
            Sleep(400);
            printf("%d ",MAT[i][j]);
        }
        printf("\n");
    }
    printf("\n\n\n Tecle Enter . . . ! \n");
    cor(antes,antis);
    getchar();
    return 0;
}
void cor(int letras,int fundo )
{
    SetConsoleTextAttribute(h,letras + (fundo << 4));
}
gotoxy(int coluna,int linha)
{
    COORD c;
    c.X = coluna;
    c.Y = linha;
    SetConsoleCursorPosition(h,c);
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

for (i=0; i<MAX; i++)
    {
     for (j=0; j<MAX; j++)
     {
        scanf ("%d", MAT[i][j]);
    MAT [0][0]= 1;
    MAT [0][1]= 1;
       // ...

 

Que está fazendo? Dentro do loop, além de tentar ler um valor MAT[i][j] também atribui j vezes um mesmo valor aos mesmos elementos da matriz inteira? Qual o sentido?

 

image.png.7a83b6f244f739e29f99c8444434655f.png

Pois é. Não precisa e não deve. Vai ficar com a lista na mão para entrar co os 36 valores certinhos? Não, não precisa porque depois atribui os valores certos de todo modo...

 

 

Escreva em torno dos dados. É o simples: Os valores já são conhecidos. Vai imprimir linha a linha com as colunas certinhas. Só isso.

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@arfneto@devair1010

#include <stdio.h>
#define MAX 6
int main ()
{
    int matriz[MAX][MAX];
    int i, j;
        for(i = 0; i < MAX; i++)
        {
            for(j = 0; j < MAX; j++)
        {
             matriz [0][0]= 1;
             matriz [0][1]= 1;
             matriz [0][2]= 1;
             matriz [0][3]= 1;
             matriz [0][4]= 1;
             matriz [0][5]= 1; 
             matriz [1][0]= 1;
             matriz [1][1]= 2;
             matriz [1][2]= 2;
             matriz [1][3]= 2;
             matriz [1][4]= 2;
             matriz [1][5]= 1;
             matriz [2][0]= 1;
             matriz [2][1]= 2;
             matriz [2][2]= 3;
             matriz [2][3]= 3;
             matriz [2][4]= 2;
             matriz [2][5]= 1;
             matriz [3][0]= 1;
             matriz [3][1]= 2;
             matriz [3][2]= 3;
             matriz [3][3]= 3;
             matriz [3][4]= 2;
             matriz [3][5]= 1;
             matriz [4][0]= 1;
             matriz [4][1]= 2;
             matriz [4][2]= 2;
             matriz [4][3]= 2;
             matriz [4][4]= 2;
             matriz [4][5]= 1;
             matriz [5][0]= 1;
             matriz [5][1]= 1;
             matriz [5][2]= 1;
             matriz [5][3]= 1;
             matriz [5][4]= 1;
             matriz [5][5]= 1;
              printf("%d ", matriz[i][j]);
        }
            printf("\n");
        }
    return 0;
}

 

Consegui resolver pessoal, muito obrigado !! 

image.png.c704398578d01edf14450951597d9815.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, Gustavo Tavares Isobe disse:
int matriz[MAX][MAX];
    int i, j;
        for(i = 0; i < MAX; i++)
        {
            for(j = 0; j < MAX; j++)
        {
             

 

Se está atribuindo todos os valores, 1 a 1, pra que fazer isso 36 vezes igualzinho dentro do loop? 

 

Tire isso daí. Vai perder boa parte de sua nota.

 

Entenda que isso que escreveu equivale a
 

    #define MAX 6
    int matriz[][MAX] = {
        {1, 1, 1, 1, 1, 1},
        {1, 2, 2, 2, 2, 1},
        {1, 2, 3, 3, 2, 1},
        {1, 2, 3, 3, 2, 1},
        {1, 2, 2, 2, 2, 1},
        {1, 1, 1, 1, 1, 1},
    };

 

Que é muito mais fácil de ler.

 

Como @devair1010 te disse, provavelmente deve calcular esses valores e não preencher simplesmente, mas se vai preencher não precisa fazer 36 vezes...

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, Gustavo Tavares Isobe disse:
for(j = 0; j < MAX; j++)
        {
             matriz [0][0]= 1;
             matriz [0][1]= 1;

Essa não parece ser a forma correta de resolver. Acho que devia tentar fazer como @devair1010 e gerar a matriz de forma mais lógica sem atribuir os valores a cada posição. Você teve que fazer 36 atribuições, mas o enunciado poderia ter pedido uma matriz 10x10 ou para entrar com o tamanho durante a execução.

 

Para simplificar poderia considerar os números como bordas de quadrados, com um dentro do outro diminuindo até o centro. Com uma matriz 10x10 p.ex fica assim,

 

#include <stdio.h>

#define MAX 10

void numeros(int matriz[MAX][MAX]){
    for(int i = 0; i < MAX/2; i += 1){
        int m = MAX - i - 1;
        for(int j = i; j <= m; j += 1){
            matriz[j][i] = i + 1;
            matriz[i][j] = i + 1;
            matriz[m][j] = i + 1;
            matriz[j][m] = i + 1;
        }
    }
}

void imprime(int matriz[MAX][MAX]){
    for(int i = 0; i < MAX; i += 1){
        for(int j = 0; j < MAX; j += 1){
            printf(" %d", matriz[i][j]);
        }
        putchar('\n');
    }
}

int main(void){
    int matriz[MAX][MAX] = {0};
    numeros(matriz);
    imprime(matriz);
    return 0;
}

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

37 minutos atrás, Midori disse:

Você teve que fazer 36 atribuições, mas o enunciado poderia ter pedido uma matriz 10x10 ou para entrar com o tamanho durante a execução

 Não, @Midori... Como eu disse ele fez 1296 atribuições porque deixou todas dentro dos dois loops do programa original, que tinha também uma chamada a scanf() dentro...

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!