Imprimir en pantalla un número estilo 7 segmentos

G

Hola comunidad.
Sucede que tengo que realizar un programa en C donde al usuario le pido un número entre 0 y 999, seguidamente debe imprimir en pantalla ese mismo número pero con un estilo de 7 segmentos. (adjunto imagen explicativa del problema).
El asunto es: No se como guardar los digitos del 0 al 9 u otra forma con ese estilo para crear las posibles combinaciones y poder mostrarlas en pantalla. Agradezco quien pueda ayudarme.

Gracias

https://drive.google.com/open?id=1ZXz6hejYcMKYayORELTKrrqMJCk8bCyg

plokker

Así a bote pronto, un array de 16 enteros para cada numero, donde el 0 es espacio, el 1 es _ y el 2 es |

G

Pero no quedarian en linea las rayas? Para visualizarlo no habria como dividirlo o si?

1 respuesta
Hexar

Para empezar , simplifica problemas , analiza, objetivo final , representar a 7 segmentos. Todo apunta a array bidimensional, aka una matriz.
Segundo, delimitar primer numero y segundo.
Vas a necesitar una funcion para representar cualquier numero en forma de '7 segmentos' como dices , y despues basicamente representar 2 juntos.
Si te fijas la imagen son 2 numeros de 4 de ancho por 7 de alto con un espacio en medio asi queeee, tu resultado final será una matriz de 4+4+1(el espacio) de largo por 7 de alto ,ya tienes un array[9]][7] que será lo que vas a printear en pantalla , ahora solo falta parsear los numeros a huecos en esa preciosa matriz.
A lo facil y largo seria hardcodear cada numero con su representacion y tirar de memsets si te atreves con un bonito array si pilotas de direcciones de memoria, allá tu. Anims. Es la solucion que mas sencilla se me ha ocurrido sin pensar una puta mierda por que es sabado porla noche y no deberia estar aqui

plokker

#3 mete un salto de linea cada 4 caracteres

G

Segun el comentario anterior entendi que debia hacer esto pero primero.. Intente realizar la reseva de memoria con calloc para el arreglo bidimensional y me arroja error de conversion a entero cosa que no se porque.. Segundo, estuve leyendo y podria posiblemente usar strcat para concatenar arreglos y asi podria idealmente pegarlos pero no se si es viable ya que me parece ilogico hacer 999 numeros.. O una forma optima para hacer eso
Gracias

char arreglo[7][4];
arreglo[0][0]= " ";
arreglo[0][1]= "-";
arreglo[0][2]= "-";
arreglo[0][3]= " ";
arreglo[1][0]= "|";
arreglo[1][1]= " ";
arreglo[1][2]= " ";
arreglo[1][3]= "|";
arreglo[2][0]= "|";
arreglo[2][1]= " ";
arreglo[2][2]= " ";
arreglo[2][3]= "|";
arreglo[3][0]= " ";
arreglo[3][1]= "-";
arreglo[3][2]= "-";
arreglo[3][3]= " ";
arreglo[4][0]= "|";
arreglo[4][1]= " ";
arreglo[4][2]= " ";
arreglo[4][3]= "|";
arreglo[5][0]= "|";
arreglo[5][1]= " ";
arreglo[5][2]= " ";
arreglo[5][3]= "|";
arreglo[6][0]= " ";
arreglo[6][1]= "-";
arreglo[6][2]= "-";
arreglo[6][3]= " ";

JuAn4k4

Solo necesitas guardar los 3 digitos que te pasan, y luego pintar linea a linea, cada numero ocupa 4 caracteres en cada linea (y los espacios en blanco a cada lado que quieras)
Y luego tienes que pintar 4 lineas.

Primera linea:
  Primer digito (6chars)
  Segundo digito (6chars)
  Tercer digito (6chars)
Segunda linea:
  Primer digito (6 chars)
  ..
..

A mi me suena a dos loops para pintar, de 1 a 4 (lineas) y dentro de primer digito a ultimo digito.

El cómo pintar cada linea de cáda digito, si lo puedes guardar en una constante, que puede ser un array de strings, en c, sería una matriz de chars como te han comentado vaya.

Lo que ocupe cada numero en segmento 8 (ancho y alto) de chars, dependera de lo bien que quieres que quede en la pantalla.

1 respuesta
_Rpv

Veo que ya te han dado la solución.
Me parece una gilipollez que manden ejercicios así

1 respuesta
Camp1

#8

G

#7 Pero el programa cuando voy a realizar el guardado en matriz como mencione arriba me da error de conversion y no entiendo como hacer.. Podrá ser tonto el programa para algunas personas pero yo no

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

int numero;

int main()
{
do{
printf("digite un numero entre 0 -9: \n");
scanf("%d",&numero);
printf(">>%i \n",numero);
switch (numero){
case 0 :
printf(" -- \n| |\n| |\n \n| |\n| |\n -- \n");
break;
case 1 :
printf(" \n |\n |\n \n |\n |\n \n");
break;
case 2 :
printf(" -- \n |\n |\n -- \n| \n| \n -- \n");
break;
case 3 :
printf(" -- \n |\n |\n -- \n |\n |\n -- \n");
break;
case 4 :
printf(" \n| |\n| |\n -- \n |\n |\n \n");
break;
case 5 :
printf(" -- \n| \n| \n -- \n |\n |\n -- \n");
break;
case 6 :
printf(" -- \n| \n| \n -- \n| |\n| |\n -- \n");
break;
case 7 :
printf(" -- \n |\n |\n \n |\n |\n \n");
break;
case 8 :
printf(" -- \n| |\n| |\n -- \n| |\n| |\n -- \n");
break;
case 9 :
printf(" -- \n| |\n| |\n -- \n |\n |\n -- \n");
break;
default:
if (numero >9){
printf("Numero fuera de rango....\n");
break;
}
}

}while (0<=numero);

return numero;

}

tengo esta idea pero solo de 0 a 9

1 respuesta
JuAn4k4

Primero tienes que capturar el numero de 3 digitos.
Despues pintarlo linea a linea.

Te lo voy a poner en pseudo-codigo en castellano para no liarte mucho:

integer numero = leerNumero();
integer[] digitos = numeroADigitos(numero);

desde i=0; i<4: i++ {
   desde j=0; j<digitos.length;j++ {
      pintarLinea(j, digitos[i]);
   }
}

leerNumero() -> Lee un numero de 3 cifras
numeroADigitos(numero) -> Transforma el numero en un array de integers de 0 a 9
pintarLine(numeroLinea, digito) -> pinta la linea "i" del digito "x"

Mewtwo

#10 que error te da exactamente ? Y para pone codigo usa el comando [ code]

Usuarios habituales