Ir ao conteúdo

C Exercicio Matriz em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado
#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
Postado

@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
  • Solução
Postado

@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
Postado
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
Postado

@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
Postado
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
Postado
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
Postado
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
  • mês depois...
Postado

@Midori Seu programa serviu para um exercício meu, a única diferença é que o número que aparece no meio deveria ser 2

 1 1 1
 1 2 1
 1 1 1

 

 e no seu aparece  o zero.

 

 1 1 1
 1 0 1
 1 1 1

 

Nas especificações do meu trabalho deve ser  3 ≤ N < 100, N sendo a dimensão (int m[N][N];),  e cheguei a mudar uma parte do código para ver se funcionava

int matriz[N][N] = {0};

 retirei o {0}, e a matriz ficou 

 1 1 1
 1 -2 1
 1 1 1

 

Poderia me ajudar a resolver?

  • Curtir 1
Postado

@nagatonie O centro fica com zero quando a matriz recebe o tamanho ímpar e quando fiz só considerei par. Na condição do loop mais externo da função numeros é só acrescentar o igual para ficar menor ou igual (i <= MAX/2).

 

  • Obrigado 2

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...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!