Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Se pueden hacer "diccionarios" o "catálogos" en Gambas3?
#1

Hola a todos:

Hace unos días Shell me instruyó sobre el uso de "diccionarios" para evitar una larga serie de if..then, elif...elif... pero para el caso de python.

Como su sugerencia me dio excelente resultado, estoy tratando de buscar su equivalente en Gambas3, pero no doy con la solución.

Actualmente tengo en mi proyecto lo siguiente (referido a Select Case):

GAMBAS
  1. Select Case letra[indx]
  2.       Case "A"
  3.         bait = A11
  4.       Case "B"
  5.         bait = B1
  6.       Case "C"
  7.         bait = C1
  8.       Case "D"
  9.         bait = D1
  10.       Case "E"
  11.         bait = E1
  12.       Case "F"
  13.         bait = F1
  14.       Case "G"
  15.         bait = G1
  16.       Case "H"
  17.         bait = H1
  18.       Case "I"
  19.         bait = I1
  20.       Case "J"
  21.         bait = J1
  22.       Case "K"
  23.         bait = K1
  24.       Case "L"
  25.         bait = L1
  26.       Case "M"
  27.         bait = M1
  28.       Case "N"
  29.         bait = N1
  30.       Case "O"
  31.         bait = O1
  32.       Case "P"
  33.         bait = P1
  34.       Case "Q"
  35.         bait = Q1
  36.       Case "R"
  37.         bait = R1
  38.       Case "S"
  39.         bait = S1
  40.       Case "T"
  41.         bait = T1
  42.       Case "U"
  43.         bait = U1
  44.       Case "V"
  45.         bait = V1
  46.       Case "W"
  47.         bait = W1
  48.       Case "X"
  49.         bait = X1
  50.       Case "Y"
  51.         bait = Y1
  52.       Case "Z"
  53.         bait = Z1
  54.       Case "0"
  55.         bait = A0
  56.       Case "1"
  57.         bait = A1
  58.       Case "2"
  59.         bait = A2
  60.       Case "3"
  61.         bait = A3
  62.       Case "4"
  63.         bait = A4
  64.       Case "5"
  65.         bait = A5
  66.       Case "6"
  67.       bait = A6
  68.       Case "7"
  69.         bait = A7
  70.       Case "8"
  71.         bait = A8
  72.       Case "9"
  73.         bait = A9
  74.       Case " "
  75.         bait = SP 
  76.       Case ":"
  77.         bait = SP 
  78.       



Generalmente así he dejado mis proyectos, lo cual no causa ningún problema, pero la idea es reducir el número de líneas de código y aumentar la eficiencia.

Alguna idea al respecto?.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!
#2

Usa colecciones y recorrerlas en un bucle. Es lo más claro.

Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • AlfredoSC
    ¡Gracias!
#3

(09-11-2021, 22:59)Shordi escribió:  Usa colecciones y recorrerlas en un bucle. Es lo más claro.
Muchas gracias Shordi: 
Finalmente hice lo siguiente, que funcionó muy bien:

GAMBAS
  1.  
  2. colletra = ["A": A11, "B": B1, "C": C1, "D": D1, "E": E1, "F": F1, "G": G1, "H": H1, "I": I1,
  3.  "J": J1, "K": K1, "L": L1, "M": M1, "N": N1, "O": O1, "P": P1, "Q": Q1, "R": R1, "S": S1,
  4.   "T": T1, "U": U1, "V": V1, "W": W1, "X": X1, "Y": Y1, "Z": Z1, "0": A0, "1": A1, "2": A2,
  5.    "3": A3, "4": A4, "5": A5, "6": A6, "7": A7, "8": A8, "9": A9, " ": SP, ":": SP]
  6.  
  7. For indx1 = 0 To 4
  8.   indx = indx1
  9.  
  10.   bait = colletra[letra[indx1]]
  11.   sumar()
  12.  



Saludos a todos....

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!
#4

En el caso de laletra "A" ¿Que tipo de variable es A11? ya que si declaro así la funcion me da error
si fuera tipo string
colletra = ["A": "A11", "B": "B1"...

Saludos.

1 Saludo.
    ¡Gracias!
#5

(10-11-2021, 14:11)tincho escribió:  En el caso de laletra "A" ¿Que tipo de variable es A11?

Es un array.

Ejemplo:

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   'Algunas de las representaciones
  4.   Dim A11 As Integer[] = [1, 1, 1, 0, 1, 1, 1]
  5.   Dim B1 As Integer[] = [0, 0, 1, 1, 1, 1, 1]
  6.   Dim C1 As Integer[] = [1, 0, 0, 1, 1, 1, 0]
  7.   Dim D1 As Integer[] = [0, 1, 1, 1, 1, 0, 1]
  8.   Dim E1 As Integer[] = [1, 0, 0, 1, 1, 1, 1]
  9.   Dim F1 As Integer[] = [1, 0, 0, 0, 1, 1, 1]
  10.   Dim G1 As Integer[] = [1, 1, 1, 1, 0, 1, 1]
  11.   Dim H1 As Integer[] = [0, 1, 1, 0, 1, 1, 1]
  12.   Dim I1 As Integer[] = [0, 1, 1, 0, 0, 0, 0]
  13.  
  14.   Dim diccioletras As Collection = ["A": A11, "B": B1, "C": C1, "D": D1, "E": F1, "G": G1, "H": H1, "I": I1]
  15.  
  16.   Dim letrasenviar As String[] = ["A", "G", "D", "E", "C", "H"]
  17.   Dim i As Integer 'Para recorrer el array de letras que queremos representar en un display de 8 segmentos
  18.   Dim j As Integer 'Para recorrer cada uno de los segmentos que pertenece una letra
  19.   Dim codigo As String
  20.  
  21.  
  22.   For i = 0 To letrasenviar.Max
  23.     'Vamos a recorrer las letras a enviar y a usar diccioletras como traductor
  24.     For j = 0 To diccioletras[letrasenviar[i]].Max
  25.       'Obtenemos los segmentos que se van encender
  26.       codigo &= diccioletras[letrasenviar[i]][j] & " "
  27.     Next
  28.     'Mostramos el código
  29.     Print codigo
  30.     'Limpiamos
  31.     codigo = ""
  32.   Next
  33.  



Salida:
Cita:1 1 1 0 1 1 1
1 1 1 1 0 1 1
0 1 1 1 1 0 1
1 0 0 0 1 1 1
1 0 0 1 1 1 0
0 1 1 0 1 1 1

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#6

Veamos..
Si la lista de números para "A" es [1, 1, 1, 0, 1, 1, 1] entonces se podría hacer una rutina de código mas simple si el código fuera binario seria algo así:

GAMBAS
  1. ' Gambas class file
  2.  
  3.  
  4. Public Sub Form_KeyRelease()
  5.  
  6.   sText &= Chr(Key.Code)
  7.  
  8.   Print Bin(Key.Code)
  9.   sBin &= Bin(Key.Code) & "\n"
  10.  
  11.   Label1.Text = sText
  12.   TextArea1.Text = sBin
  13.  



Evidentemente el código para las letras del puerto paralelo y el binario no es el mismo (según este tema) pero seguro hay una formula para obtenerlo.

Nota: Si el código binario de la letra "A" en el protocolo del puerto paralelo y el código binario de la misma letra, difieren se me ocurre que o bien el que invento el protocolo tenia ganas de romper las bolas o hay otra razón. Supongo que sera lo segundo. Big Grin

Dejo un programa para experimentar en el que no es necesario usar una Collection o diccionario para los pitonistas. En este se calcula el código binari de una tecla pulsada. Lo suyo seria dar con la formula que genere el código que usa el puerto paralelo.
[Imagen: 1L5wS7B.png]

1 Saludo.


Archivos adjuntos
.gz sample-parallel-port-0.0.1.tar.gz Tamaño: 12.07 KB  Descargas: 1

1 Saludo.
[-] Los siguientes 1 usuarios dice gracias a tincho por este post:
  • Shell
    ¡Gracias!
#7

(10-11-2021, 18:38)tincho escribió:  Nota: Si el código binario de la letra "A" en el protocolo del puerto paralelo y el código binario de la misma letra, difieren se me ocurre que o bien el que invento el protocolo tenia ganas de romper las bolas o hay otra razón. Supongo que sera lo segundo.

Lo segundo no es. Que no lo hicieron por fastidiar. Big Grin

Estamos hablando de una serie de segmentos que emiten luz (son diodos leds) distribuidos de una forma.

[Imagen: K3pKe7q.jpg]

En el caso de un solo display *BCD de siete segmentos. BCD =Decimal codificado en binario.
Como ves no coincide con el binario que va por un lado y si está activo o no algunos de los segmentos.

¿ Qué ocurre ?. Que nosotros tenemos un circuito decodificador conectado al display de 7 segmentos ( mediante resistencias limitadoras)
que este deco recibe a la entrada (si recibe el número en bcd) y a la salida va encendiendo los segmentos en función de esa entrada.

 
Cita:Lo suyo seria dar con la formula que genere el código que usa el puerto paralelo.

Si quieres hacer la tabla de la verdad por cada segmento, tomando las cuatro entradas en binario, liarte a reducir con tablas de Karnaugh.  Angel
Oye que como ejercicio está realmente interesante, pero es que no me sobra el paracetamol y este es un medicamento en lista de falta de suministro. ( no es coña )

Por algo las colecciones. Wink

Cof cof cof..¿ os había contado que después de los exámenes de electrónica digital ( que no digo la combinacional ) acabé viendo ceros y unos cada vez que cerraba los ojos ?.
Pastillote tipo ensaimada y para adentro! Rica, rica.

Referencia de la imagen:

Conectar display 7 segmentos cátodo común

Saludos

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
[-] Los siguientes 1 usuarios dice gracias a Shell por este post:
  • tincho
    ¡Gracias!
#8

(10-11-2021, 18:38)tincho escribió:  en el que no es necesario usar una Collection o diccionario

Luego de que Shell ha dado una excelente explicación del código para las letras mayúsculas convertidas a segmentos de led, que es lo que hace mi proyecto, no me queda mas que agradecerle lo bien explicado que ha quedado en su respuesta.

Por otro lado la sugerencia de Tincho, ya la he usado cuando hice el proyecto del YM2151, que es un sintetizador para producir música en videojuegos de antaño, pues a ese proyecto le puse un teclado de piano, con el uso de Key.Code, tal como se muestra en el proyecto que el mismo Tincho puso para que lo bajásemos. (Este último proyecto también lo subí a este Foro hace unos meses).

Gracias nuevamente....

(10-11-2021, 20:26)Shell escribió:  acabé viendo ceros y unos cada vez que cerraba los ojos

En la Universidad nos causaba hilaridad la materia de Circuitos Lógicos I, la cual traducíamos como "Palitos y Bolitas" como una clase de jardín de niños, siendo que estábamos en plena carrera a ser ingenieros....ja ja ja....

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!
#9

(10-11-2021, 22:37)AlfredoSC escribió:  En la Universidad nos causaba hilaridad la materia de Circuitos Lógicos I, la cual traducíamos como "Palitos y Bolitas" como una clase de jardín de niños, siendo que estábamos en plena carrera a ser ingenieros....ja ja ja....

Nunca mejor dicho, palitos y bolitas. Big Grin

"El lobo siempre será malo si sólo escuchamos a Caperucita.". El lobo.
    ¡Gracias!
#10

Veo que ustedes ven la matrix en texto Smile

1 Saludo.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)