Ir para o conteúdo
gaspar1423

[Resolvido] Print de matriz

Mensagens Recomendadas

gaspar1423

Boas.

Tenho uma matriz de inteiros que queria imprimir para a linha de comandos com o seguinte formato:

Matriz em memoria:

0|1|2|65|6|66|9|67|12...

Matriz como tem de aparecer na linha de comandos:

0|1|2|A|6|B|9|C|12...

como é que garanto que a partir da 3ª posição ele imprime o caracter?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

A questão não me parece ser a de garantir que a partir da 3ª posição imprime o caracter.

65 é a ordem ASCII de 'A', 66 a de 'B', e etc.

Se eu te der a matriz 17|70|12|0|67|..., qual é o output esperado?


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gaspar1423

Da maneira que tenho imprime esses numeros. O que quero mesmo é garantir que os 3 primeiros caracteres sejam inteiros e que a partir da 3ª coluna da matriz e de 2 em 2 converta o número no seu caracter correspondente na tabela ascii de modo a ficar 0|1|2|A|6|B|9|C|12...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg
int values[] = {0, 1, 2, 65, 6, 66, 9, 67, 12, 90};
printf("%d %d", values[0], values[1]);
for (k = 2; k < sizeof values / sizeof *values; k += 2) printf(" %d %c", values[k], values[k + 1]);

Editado por pmg
esqueci-me do segundo valor no printf

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gaspar1423

isso resuta para um array unidimensional, mas para uma matriz não tenho d fazer 3 ciclos for?

É que ká tentei fazer uma coisa destas mas n deu:

for(i=0;i<MAX;i++){
 for(j=0;j<3;j++){
   printf("%d ",mat[i][j]);
   for(k=3;k<MAX;k++){
     printf("%c %d", mat[i][k],mat[i][k+1];
   }
 }
}

Editado por Rui Carlos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

int values[][] = {{0, 1, 2, 65, 6, 66, 9, 67, 12, 90},
                 {0, 1, 2, 65, 6, 66, 9, 67, 12, 90},
                 {0, 1, 2, 65, 6, 66, 9, 67, 12, 90}};
for (i = 0; i < 3; i++)
 for (k = 0; k < 10; k++)
   (!(k % 2) && k > 2) ? printf("%c|", values[i][k]) : printf("%d|", values[i][k]);

uma segunda solução

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

isso resuta para um array unidimensional, mas para uma matriz não tenho d fazer 3 ciclos for?

Exactamente para que queres 3 ciclos para uma array unidimensional?


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gaspar1423

O que quis dizer é que a solução do pmg estava para um array unidimensional e eu quero para uma array bidimensional. e pensei que tinha da fazer 3 ciclos, 1 para percorrer as linhas, outro para percorrer ate à 3ª coluna, e outro para as restantes.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

desculpa pelo código anterior, estava a ver uma cena na net e tens uns bugs

o seguinte foi testado

#include <stdio.h>

int main()
{
 int i, k;
/*
 int values[3][10] = {{0, 1, 2, 65, 6, 66, 9, 67, 12, 90},
                      {0, 1, 2, 65, 6, 66, 9, 67, 12, 90},
                      {0, 1, 2, 65, 6, 66, 9, 67, 12, 90}};
*/
/* ou assim == */
  int values[3][10] = {{0, 1, 2, 'A', 6, 'B', 9, 'C', 12, 'Z'},
                       {0, 1, 2, 'A', 6, 'B', 9, 'C', 12, 'Z'},
                       {0, 1, 2, 'A', 6, 'B', 9, 'C', 12, 'Z'}};
 for (i = 0; i < 3; i++) {
   for (k = 0; k < 10; k++)
     (k % 2 && k > 2) ? printf("%c|", values[i][k]) : printf("%d|", values[i][k]);
   printf("\n");
 }

 return 0;
}

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

O que quis dizer é que a solução do pmg estava para um array unidimensional e eu quero para uma array bidimensional. e pensei que tinha da fazer 3 ciclos, 1 para percorrer as linhas, outro para percorrer ate à 3ª coluna, e outro para as restantes.

Já tens aqui 2 soluções para imprimir os valores das colunas 1 e 2. Se são sempre estas 2 colunas, para que queres um ciclo? Não é necessário, torna-se menos eficiente do que um printf directo.

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Eu já vi as soluções e cheguei a uma mais simples depois de ver estas. Obrigado a todos :thumbsup: :thumbsup:

Nao queres publicar a tua solucao?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
gaspar1423

Desculpem esqueci-me :P

Aqui está:

for (i=0;i<10;i++){
 for (int j=0; j<10; j++) {
   if (matriz_int[i][j]>65) {
     printf("%c|",matriz_int[i][j]);
   }else{
     printf("%d|",matriz_int[i][j]);
   }
 }
 printf("\n");
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Desculpem esqueci-me :P

Aqui está:

for (i=0;i<10;i++){
 for (int j=0; j<10; j++) {
   if (matriz_int[i][j]>65) {
     printf("%c|",matriz_int[i][j]);
   }else{
     printf("%d|",matriz_int[i][j]);
   }
 }
 printf("\n");
}

isso não faz o que especificaste :

O que quero mesmo é garantir que os 3 primeiros caracteres sejam inteiros e que a partir da 3ª coluna da matriz e de 2 em 2 converta o número no seu caracter correspondente na tabela ascii

contra exemplo:

 int values[3][10] = {{66, 67, 68, 69, 70, 71, 72, 73, 74, 75},
                      {66, 67, 68, 69, 70, 71, 72, 73, 74, 75},
                      {66, 67, 68, 69, 70, 71, 72, 73, 74, 75}};


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.