Ir ao conteúdo
  • Cadastre-se
Lucas Assunção de Sousa

Preenchimento de Matriz automático e Soma de Matriz com Vetor

Recommended Posts

Olá à todos! Eu estou começando a estudar matrizes em C e atualmente estou com problemas em dois exercícios (resolvi postar os dois num só tópico para evitar dois tópicos, sou novo no fórum e li as regras de maneira muito superficial ainda, peço desculpas inicialmente). 

 

Pois bem, basicamente o primeiro exercício exige que um faça uma Matriz desse tipo: 

 

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

 

Basicamente preciso fazer uma matriz igual a essa de maneira automática, esse é o meu código:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>

main ()
{
  setlocale(LC_ALL,"portuguese");

  int m[6][6], l, c;

  for (l = 0; l < 6; l = l + 1)
  {
    for(c = 0; c < 6; c = c + 1)
    {
    if(l == 0 && c == 5)
    {
      m[l][c] = 2;
    } else if (l == 1 && c == 4)
    {
      m[l][c] = 2;
    } else if (l == 2 && c == 3)
    {
      m[l][c] = 2;
    } else if (l == 3 && c == 2)
    {
      m[l][c] = 2;
    }  else
    {
      m[l][c] = 3;
    }
    }

  }

    for (l = 0; l < 6; l = l + 1)
  {
    for(c = 0; c < 6; c = c + 1)
    {
      if(l == c)
      {
        m[l][c] = 1;
      }
    }

  }
  for (l = 0; l < 6; l = l + 1)
  {
    printf("\n");
    for(c = 0; c < 6; c = c + 1)
    {
    printf("%d",m[l][c]);
    }
  }
  getch();
  return 0;
}

Basicamente o resultado está só imprimindo 1 e nada do que fiz adiantou, tentei usar outros métodos, mas o programa dava crash ou o resultado não mostrava o que era esperado. Já o segundo o problema é mais simples, quero simplesmente imprimir o resultado da soma de uma linha de matriz com um vetor, porém apenas o resultado certo não está sendo mostrado:

 

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>

main ()
{
  int m[1][4];
  int v[1];
  int v2[1];
  int l, c, result;

  printf("Matriz (4x4) :\n");
  for (l = 0; l < 1; l = l + 1)
  {
    for(c = 0; c < 4; c = c + 1)
    {
      scanf("%d", &m[l][c]);
      result = result + m[l][c];
    }
    printf("\n");
  }

  printf("\nVetor:\n");
  for (l = 0; l < 1; l = l + 1)
  {
    scanf("%d", &v[l]);
  }


  printf("\nResultado: ");
  for (l = 0; l < 1; l = l + 1)
  {
    v2[l] = v[l] + result;
    printf("%d", v2[l]);
  }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro exercício o valor de cada casa da matriz é igual a distância para a borda mais próxima (mais 1).

 

Para calcular as distâncias de uma casa até as bordas basta obter o valor absoluto/modulo da subtração entre coordenada da linha ou da coluna e a posição das 2 bordas em sua respectiva dimensão.

 

Digamos que temos uma matriz de dimensão M x N, as distâncias até as bordas de uma casa da matriz com coordenadas i e j (com índices indo de 0 até M-1 e N-1 respectivamente), serão:

 

Distancia até a borda esquerda: | 0 - i | = i

Distancia até a borda direita: | M - 1 - i | = M - 1 - i

Distancia até a borda superior: | 0 - j | = j

Distancia até a borda inferior: | N - 1 - j | = N - 1 - j

 

Mas queremos obter a menor distancia (e somar +1) para guardar na respectiva posição da matriz, logo a lógica será algo do tipo:

Matriz[i][j] = (valor minimo entre i, M-1-i, j e N-1-j) + 1

ou 

Matriz[i][j] = valor minimo entre i+1, M-i, j+1 e N-j

 

Editado por isrnick

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×