[Resolvido]Display de LCD (Exercício)

Iniciado por Jordan_Q, 08 de Agosto de 2012, 10:30

tópico anterior - próximo tópico

Jordan_Q

Olá pessoal.
Esse exercício é o seguinte: Eu preciso imprimir números na tela, mas  esses números precisam estar com as formas dos números de calculadora.
O código já está feito, mas tem um problema: Eu preciso imprimir os números lado a lado, mas ao invés disso, os números são impressos um em baixo do outro.
Alguém aí tem uma dica?

Desde já eu agradeço =)

raidicar

Isso é em que amigo, shell? c? python? qual linguagem?
Posta o código, ou uma parte dele, ou ao menos de um exemplo para tentarmos entender.
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

irtigor

"\n", newline... a implementação é totalmente dependente da linguagem escolhida, por ex, se está usando echo em um script bash, tem que adicionar "-n" pra não ter.

Dr Schaum

Você pode escrever cada número em um array e aí imprimi-los num laço iterativo.

Veja este exemplo que eu escrevi rapidinho aqui em python da ideia:

#!/usr/bin/env python

a = [ ".&&.",
      "&..&",
      "&&&&",
      "&..&" ]

l = [ "&...",
      "&...",
      "&...",
      "&&&&" ]

for i in range(4):
    print l[i], a[i], l[i], a[i], l[i], a[i], l[i], a[i]

Jordan_Q

Opa, esqueci de falar a linguagem. Bem, eu estou usando C.
O que eu acho mais estranho é que normalmente quando algo é impresso na tela, o "cursor" do terminal vai automaticamente para baixo, aí eu fico me perguntando como eu vou fazer para imprimir esses números um do lado do outro.
Bem, eu estou imprimindo os números da seguinte maneira:
printf(" -------\n|       |\n|       |\n|       |\n|       |\n|       |\n -------\n");  <- Esse é o número 0.

O ruim desse código é que ficou muito grande, mas eu não consegui pensar em um modo melhor de faze-lo. Mas o que me preocupa mesmo é o fato de eu não está conseguindo imprimir os números um do lado do outro.

Aqui vai o código:

#include<stdio.h>

//Numeros (fonte 3)

int Printer_n9_f3(int numero); // n = número. f = fonte.
int Printer_n8_f3(int numero);
int Printer_n7_f3(int numero);
int Printer_n6_f3(int numero);
int Printer_n5_f3(int numero);
int Printer_n4_f3(int numero);
int Printer_n3_f3(int numero);
int Printer_n2_f3(int numero);
int Printer_n1_f3(int numero);
int Printer_n0_f3(int numero);

//Numeros (fonte 2)

int Printer_n9_f2(int numero);
int Printer_n8_f2(int numero);
int Printer_n7_f2(int numero);
int Printer_n6_f2(int numero);
int Printer_n5_f2(int numero);
int Printer_n4_f2(int numero);
int Printer_n3_f2(int numero);
int Printer_n2_f2(int numero);
int Printer_n1_f2(int numero);
int Printer_n0_f2(int numero);

//Numeros (fonte 1)

int Printer_n9_f1(int numero);
int Printer_n8_f1(int numero);
int Printer_n7_f1(int numero);
int Printer_n6_f1(int numero);
int Printer_n5_f1(int numero);
int Printer_n4_f1(int numero);
int Printer_n3_f1(int numero);
int Printer_n2_f1(int numero);
int Printer_n1_f1(int numero);
int Printer_n0_f2(int numero);

//Fonte

int Fonte_Numero_1(int numero);
int Fonte_Numero_2(int numero);
int Fonte_Numero_3(int numero);

//Variáveis globais

char valor[10];

int main(void)
{
int verificador, tamanho_fonte;

system("clear");

printf("Informe o tamanho da fonte\nTamanhos disponíveis: 1 (7 linhas), 2 (9 linhas) e 3 (11 linhas)\n");
scanf("%i", &tamanho_fonte);

switch(tamanho_fonte){
case 1:
verificador = Fonte_Numero_1(tamanho_fonte);
break;
case 2:
verificador = Fonte_Numero_2(tamanho_fonte);
break;
case 3:
verificador = Fonte_Numero_3(tamanho_fonte);
break;
default:
printf("Tamanho de fonte inválido! Por favor selecine os tamanhos disponíveis de 1 até 3: ");
scanf("%i", &tamanho_fonte);
}

return 0;

}

//As funções abaixo são funções do tamanho de fonte. Dentro delas, serão chamadas as funções que imprime os números.

int Fonte_Numero_1(int numero)
{
int x, verificador; // O x é usado apenas no for.

printf("Informe um valor para ser impresso: ");
scanf("%s", valor);

for(x = 0; x < 10; x++){
switch(valor[x]){
case '0':
verificador = Printer_n0_f1(valor[x]);
break;
case '1':
verificador = Printer_n1_f1(valor[x]);
break;
case '2':
verificador = Printer_n2_f1(valor[x]);
break;
case '3':
verificador = Printer_n3_f1(valor[x]);
break;
case '4':
verificador = Printer_n4_f1(valor[x]);
break;
case '5':
verificador = Printer_n5_f1(valor[x]);
break;
case '6':
verificador = Printer_n6_f1(valor[x]);
break;
case '7':
verificador = Printer_n7_f1(valor[x]);
break;
case '8':
verificador = Printer_n8_f1(valor[x]);
break;
case '9':
verificador = Printer_n9_f1(valor[x]);
break;
}
}

return 0;

}

int Fonte_Numero_2(int numero)
{
int x, verificador;

printf("Informe um valor para ser impresso: ");
scanf("%s", valor);

for(x = 0; x < 10; x++){
switch(valor[x]){
case '0':
verificador = Printer_n0_f2(valor[x]);
break;
case '1':
verificador = Printer_n1_f2(valor[x]);
break;
case '2':
verificador = Printer_n2_f2(valor[x]);
break;
case '3':
verificador = Printer_n3_f2(valor[x]);
break;
case '4':
verificador = Printer_n4_f2(valor[x]);
break;
case '5':
verificador = Printer_n5_f2(valor[x]);
break;
case '6':
verificador = Printer_n6_f2(valor[x]);
break;
case '7':
verificador = Printer_n7_f2(valor[x]);
break;
case '8':
verificador = Printer_n8_f2(valor[x]);
break;
case '9':
verificador = Printer_n9_f2(valor[x]);
break;
}
}

return 0;

}

int Fonte_Numero_3(int numero)
{
int x, verificador;

printf("Informe um valor para ser impresso: ");
scanf("%s", valor);

for(x = 0; x < 10; x++){
switch(valor[x]){
case '0':
verificador = Printer_n0_f3(valor[x]);
break;
case '1':
verificador = Printer_n1_f3(valor[x]);
break;
case '2':
verificador = Printer_n2_f3(valor[x]);
break;
case '3':
verificador = Printer_n3_f3(valor[x]);
break;
case '4':
verificador = Printer_n4_f3(valor[x]);
break;
case '5':
verificador = Printer_n5_f3(valor[x]);
break;
case '6':
verificador = Printer_n6_f3(valor[x]);
break;
case '7':
verificador = Printer_n7_f3(valor[x]);
break;
case '8':
verificador = Printer_n8_f3(valor[x]);
break;
case '9':
verificador = Printer_n9_f3(valor[x]);
break;
}
}

return 0;

}

//Fim das funções do tamanho de fonte.

//A partir dessa linha, seguem as funções responsáveis por imprimir os números em seu tamanho pedido pelo usuário.
//Funções com os números no tamanho 1 (7 linhas):

int Printer_n0_f1(int numero)
{
printf(" -------\n|       |\n|       |\n|       |\n|       |\n|       |\n -------\n");
printf("\n");

return 0;

}
int Printer_n1_f1(int numero)
{
printf("  |\n  |\n  |\n  |\n  |\n  |\n  |\n");
printf("\n");

return 0;

}

int Printer_n2_f1(int numero)
{
printf(" ----\n     |\n     |\n ----\n|\n|\n ----\n");
printf("\n");

return 0;

}

int Printer_n3_f1(int numero)
{
printf("----\n    |\n    |\n----\n    |\n    |\n----\n");
printf("\n");

return 0;

}

int Printer_n4_f1(int numero)
{
printf("|      |\n|      |\n|      |\n ------\n       |\n       |\n       |\n");
printf("\n");

return 0;

}

int Printer_n5_f1(int numero)
{
printf(" ----\n|\n|\n ----\n     |\n     |\n ----\n");
printf("\n");

return 0;

}

int Printer_n6_f1(int numero)
{
printf(" ----\n|\n|\n ----\n|    |\n|    |\n ----\n");
printf("\n");

return 0;

}

int Printer_n7_f1(int numero)
{
printf("------\n      |\n      |\n      |\n      |\n      |\n      |\n");
printf("\n");

return 0;

}

int Printer_n8_f1(int numero)
{
printf(" ------\n|      |\n|      |\n ------\n|      |\n|      |\n ------\n");
printf("\n");

return 0;

}

int Printer_n9_f1(int numero)
{
printf(" ------\n|      |\n|      |\n ------\n       |\n       |\n ------\n");
printf("\n");

return 0;

}

//Funções com os números no tamanho 2 (9 linhas):

int Printer_n0_f2(int numero)
{
printf(" ---------\n|         |\n|         |\n|         |\n|         |\n|         |\n|         |\n|         |\n ---------\n");
printf("\n");

return 0;

}

int Printer_n1_f2(int numero)
{
printf("  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n");
printf("\n");

return 0;

}

int Printer_n2_f2(int mumero)
{
printf(" ------\n       |\n       |\n       |\n ------\n|\n|\n|\n ------\n");
printf("\n");

return 0;

}

int Printer_n3_f2(int numero)
{
printf("------\n      |\n      |\n      |\n------\n      |\n      |\n      |\n------\n");
printf("\n");

return 0;

}

int Printer_n4_f2(int numero)
{
printf("|        |\n|        |\n|        |\n|        |\n --------\n         |\n         |\n         |\n         |\n");
printf("\n");

return 0;

}

int Printer_n5_f2(int numero)
{
printf(" ------\n|\n|\n|\n ------\n       |\n       |\n       |\n ------\n");
printf("\n");

return 0;

}

int Printer_n6_f2(int numero)
{
printf(" ------\n|\n|\n|\n ------\n|      |\n|      |\n|      |\n ------\n");
printf("\n");

return 0;

}

int Printer_n7_f2(int numero)
{
printf("-------\n       |\n       |\n       |\n       |\n       |\n       |\n       |\n       |\n");
printf("\n");

return 0;

}

int Printer_n8_f2(int numero)
{
printf(" --------\n|        |\n|        |\n|        |\n --------\n|        |\n|        |\n|        |\n --------\n");
printf("\n");

return 0;

}

int Printer_n9_f2(int numero)
{
printf(" --------\n|        |\n|        |\n|        |\n --------\n         |\n         |\n         |\n --------\n");
printf("\n");

return 0;

}

//Funções com os números no tamanho 3 (11 linhas):

int Printer_n0_f3(int numero)
{
printf(" ------------\n|            |\n|            |\n|            |\n|            |\n|            |\n|            |\n|            |           \n|            |\n|            |\n ------------\n");
printf("\n");

return 0;
}

int Printer_n1_f3(int numero)
{
printf("  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n  |\n");
printf("\n");

return 0;
}

int Printer_n2_f3(int numero)
{
printf(" --------\n         |\n         |\n         |\n         |\n --------\n|\n|\n|\n|\n ---------\n");
printf("\n");

return 0;
}

int Printer_n3_f3(int numero)
{
printf("---------\n         |\n         |\n         |\n         |\n---------\n         |\n         |\n         |\n         |\n---------         \n");
printf("\n");

return 0;
}

int Printer_n4_f3(int numero)
{
printf("|          |\n|          |\n|          |\n|          |\n|          |\n ----------\n           |\n           |        \n           |\n           |\n           |\n");
printf("\n");

return 0;
}

int Printer_n5_f3(int numero)
{
printf(" ---------\n|\n|\n|\n|\n ---------\n          |\n          |\n          |\n          |\n ---------\n");
printf("\n");

return 0;
}

int Printer_n6_f3(int numero)
{
printf(" ---------\n|\n|\n|\n|\n ---------\n|         |\n|         |\n|         |\n|         |\n ---------\n");
printf("\n");

return 0;
}

int Printer_n7_f3(int numero)
{
printf("---------\n         |\n         |\n         |\n         |\n         |\n         |\n         |\n         |\n         |\n         |       \n");
printf("\n");

return 0;
}

int Printer_n8_f3(int numero)
{
printf(" ---------\n|         |\n|         |\n|         |\n|         |\n ---------\n|         |\n|         |\n|         |\n|         |\n ---------");
printf("\n");

return 0;
}

int Printer_n9_f3(int numero)
{
printf(" ---------\n|         |\n|         |\n|         |\n|         |\n ---------\n          |\n          |\n          |\n    |\n ---------");
printf("\n");

return 0;
}

irtigor

O que você quer (desenha com deveria ficar)? Pra interfaces mais avançadas, use ncurses ou termcap/terminfo.

Darcamo

Rodando o seu programa vi que você primeiro pede o tamanho da fonte e depois o número a ser impresso.

Para imprimir mais de um número você vai passá-los todos de uma vez? Ex: 1345
Ou vai ter que passar de um em um? Ex: 1, exibe o número 1, 3, exibe o número 3 do lado do número 1, ...

No primeiro caso é fácil adaptar esse seu código. Basta ao invés de imprimir logo você sair concatenando as strings de cada número em uma variável (pode ser uma para cada linha, ou um vetor para armazenar a string) e imprimir só no final.

No segundo caso é que acho que precisaria do ncurses mesmo.

Jordan_Q

Sim, o número seria passado tudo de uma vez mesmo. Acho que assim pode ser mais simples, mas nesse caso seria melhor eu usar o gets porque o scanf pára de ler as coisas no primeiro espaço...

Citação de: irtigor online 08 de Agosto de 2012, 18:36
O que você quer (desenha com deveria ficar)? Pra interfaces mais avançadas, use ncurses ou termcap/terminfo.

Bem, no exemplo do 0, era para sair assim:

  -------
|          |      
|          |
|          |
  -------

Funciona, mas o ruim é que os números são impressos um em baixo do outro  :-\
Obrigado pela dica das bibliotecas, vou pesquisar mais.



Dr Schaum

Citação de: Darcamo online 08 de Agosto de 2012, 19:47
No primeiro caso é fácil adaptar esse seu código. Basta ao invés de imprimir logo você sair concatenando as strings de cada número em uma variável (pode ser uma para cada linha, ou um vetor para armazenar a string) e imprimir só no final.

Jordan, preste atenção nesse trecho sublinhado que é a ideia que está te emperrando no exercício. Você não precisa complicar e ir atrás das bibliotecas.

Refiz o mesmo código em C agora:

#include <stdio.h>

int main(void)
{
    char a[4][5] = { ".&&.",
                     "&..&",
                     "&&&&",
                     "&..&" };

    char l[4][5] = { "&...",
                     "&...",
                     "&...",
                     "&&&&" };
    int i;

    for (i = 0; i < 4; i++) {
        printf("%s %s %s %s %s %s %s %s \n", l[i], a[i], l[i], a[i], l[i], a[i], l[i], a[i]);
    }

    return 0;
}

Jordan_Q

Opa, agora eu entendi.
Obrigado pela ideia, me ajudou bastante
Agradeço à todos  :)