Ir ao conteúdo
  • Cadastre-se

Imprimir uma Matriz - AJUDA !


Ir à solução Resolvido por isrnick,

Posts recomendados

Ajuda para concluir.

Um amigo do fórum me ajudou a chegar até aqui.

Certo, está perfeito, só que eu não entendo a lógica para fazer uma matriz imprimir na tela conforme o anexo.

To querendo muito esse meio ponto pra prova de amanhã.

Quem puder me dar uma luz aé.

 

 
#include <stdio.h>#define DIM 7  int main (){    int matriz [DIM][DIM];    int linha,coluna;     for(linha=0; linha<DIM; linha++)      {        for (coluna=0; coluna<DIM; coluna++)        {            if(coluna<=linha)                  matriz[linha][coluna]=1;                else                matriz[linha][coluna]=0;                                          printf("%d", matriz[linha][coluna]);        }     printf("\n");     }

post-719046-0-56988700-1402944573_thumb.

Link para o comentário
Compartilhar em outros sites

Calcule qual é a menor distância para a borda da matriz...

 

No caso dessa imagem trata-se de uma matriz quadrada 7 x 7. Então pra obter a menor distância até a borda você vai precisar verificar qual é o menor valor entre estes quatro valores (note que desejamos o valor absoluto da subtração, não um valor negativo):

  • | linha - 0 | (= linha)
  • | linha - 6 | (= 6 - linha)
  • | coluna - 0 | (= coluna)
  • | coluna - 6 | (= 6 - coluna)

E o menor valor é atribuído à posição atual da matriz...

 

 

Exemplo:

Para (linha, coluna) = (3, 4), temos que:

  • linha = 3
  • 6 - linha = 6 -3 = 3
  • coluna = 4
  • 6 - coluna = 6 - 4 = 2

Logo, como 2 é o menor resultado este é o valor que posição (3, 4) da matriz receberá.

 

 

 

Agora se desejarmos generalizar isso para matrizes quadradas de vários tamanhos (N x N), as fórmulas ficam assim:

  • linha
  • N - 1 - linha
  • coluna
  • N - 1 - coluna

Onde desejamos obter o valor mínimo entre essas quatro operações e atribuir a posição atual da matriz.

 

 

Agora tente implementar isso...

Link para o comentário
Compartilhar em outros sites

@Guilherme Santana.... basta inicialmente atribuir o valor da linha à posição atual da matriz, e depois comparar o valor guardado na matriz aos outros 3 em sequencia, e a cada comparação se for menor, o programa substitui o valor guardado na matriz pelo menor, senão não for menor o programa não muda nada, apenas mantém o que já está lá.

 

Mais que isso eu eu vou estar te dando o código pronto, e além disso ser contra a filosofia do fórum, isso certamente não te ajudaria na prova.

Link para o comentário
Compartilhar em outros sites

Então ficaria assim ?


#include <stdio.h>

#define DIM 7 

 

int main () 

{

    int matriz [DIM][DIM];

    int linha,coluna,atribui;

 

    for(linha=0; linha<DIM; linha++)  

    {

        for (coluna=0; coluna<DIM; coluna++)

        {

        if(coluna==0|| coluna==6||linha==0 || linha==6)

          atribui=0;

else   

        if(coluna==1||coluna==5||linha==1||linha==5)

           atribui=1;

         

        if(coluna==2|| coluna==4||linha==2 || linha==2)

          atribui=2;

else   

        if(coluna==3||coluna==3||linha==3||linha==3)

           atribui=3;   

          

            printf("%d", matriz[linha][coluna]);

        }

     printf("\n"); 

    }

}

 

Ficaria assim então ? @isrnick ?

Link para o comentário
Compartilhar em outros sites

  • Solução

Dei uma organizada no seu código, e corrigi algumas coisas: Estava faltando um else, e não tem porque ter a variável atribui ("atribuir" quer dizer "igualar a...", ou "armazenar o valor em..."), adicionei um espaço no "%d" do printf pra separar os números, e coloquei o "return 0;" no final do programa. Aqui está:

#include <stdio.h>#define DIM 7  int main () {    int matriz [DIM][DIM];    int linha,coluna;     for(linha=0; linha<DIM; linha++)      {        for (coluna=0; coluna<DIM; coluna++)        {            if(coluna==0|| coluna==6||linha==0 || linha==6)                matriz[linha][coluna]=0;            else if(coluna==1||coluna==5||linha==1||linha==5)                matriz[linha][coluna]=1;            else if(coluna==2|| coluna==4||linha==2 || linha==2)                matriz[linha][coluna]=2;            else if(coluna==3||coluna==3||linha==3||linha==3)                matriz[linha][coluna]=3;               printf("%d ", matriz[linha][coluna]);        }        printf("\n");     }    return 0;}

Mas não era isso que eu estava sugerindo. Este método só funciona para o caso específico em que a matriz é 7 x 7... Isso seria praticamente equivalente a fazer isso:

#include <stdio.h>#define DIM 7int main() {   int linha, coluna,       matriz[DIM][DIM] = {{0, 0, 0, 0, 0, 0, 0},                           {0, 1, 1, 1, 1, 1, 0},                           {0, 1, 2, 2, 2, 1, 0},                           {0, 1, 2, 3, 2, 1, 0},                           {0, 1, 2, 2, 2, 1, 0},                           {0, 1, 1, 1, 1, 1, 0},                           {0, 0, 0, 0, 0, 0, 0}};        for (linha=0;linha<7;linha++){        for (coluna=0;coluna<7;coluna++){            printf ("%d ", matriz[linha][coluna]);        }        printf ("\n");    }    return 0;}

E isso seria algo sem propósito pra um exercício, já que o objetivo é você aprender a raciocinar e desenvolver lógicas de programação...

 

 

Entretanto, o que eu sugeri serviria para qualquer dimensão de matriz (seria possível inclusive extrapolar para matrizes não quadradas), ou seja, eu observei que o valor de cada posição da matriz será igual a menor distância até uma das quatro bordas da matriz quadrada, por exemplo note que para todos os locais onde a a matriz tem valor 2 a posição está a uma distância de duas casas da borda mais próxima, e aí eu sugeri usar essa propriedade pra determinar qual é o valor que deve ser guardado em cada posição da matriz.

 

Logo, se usássemos esta lógica para uma matriz 5 x 5 teríamos como resultado isto:

0 0 0 0 00 1 1 1 00 1 2 1 00 1 1 1 00 0 0 0 0

E para uma matriz 6 x 6:

0 0 0 0 0 00 1 1 1 1 00 1 2 2 1 00 1 2 2 1 00 1 1 1 1 00 0 0 0 0 0

E assim por diante...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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