Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

sábado, 3 de agosto de 2019

Residencia de Psicología CABA

Entrenador

El entrenador es simplemente un programa PHP que lee preguntas almacenadas en una base de datos y ofrece cuatro alternativas. Las preguntas almacenadas corresponden a las evaluaciones para las Residencias de Psicología de la Ciudad de Buenos Aires entre los años 2007 al 2013. Para la práctica, el usuario puede leer las preguntas en forma secuencial (hacia adelante o atrás), aleatoria, la primera y la última (ver Fig. 1). Las opciones se eligen al hacer clic con el ratón en el círculo correspondiente y para verificar la respuesta se hace clic sobre el botón "Respuesta". Las respuesta correctas muestran la leyenda OK en color verde mientras que los errores presentan una X en color rojo.

Fig. 1 Entrenador de Selección Múltiple.

El código es una adaptación de un programa que hice hace unos cuantos años para los exámenes de radioaficionado.

FIN

viernes, 26 de julio de 2019

Python en Cocalc Muestra el Trueno Naranja

Presentar imágenes

La librería de imágenes de Python (PIL), desarrollada por Fredrik Lundh y colaboradores, permite cargar imágenes estándar y realizar operaciones con ellas. Las siguientes líneas de código permiten cargar la imágen (Image.open() y luego se usa pyplot (plt.imshow()) para mostrar la imagen (ver Fig. 1).

Fig. 1 Plotear una imagen en pantalla.

Python en COCALC

CoCalc es una plataforma de administración de recursos, cursos y procesamiento en la nube basada (SaaS: Software as a Service) para matemáticas computacionales. forma parte del proyecto Sage, admite la edición de hojas de trabajo Sage, documentos LaTeX y cuadernos Jupyter. CoCalc ejecuta un entorno Ubuntu Linux con el que se puede interactuar a través de un terminal, y además brinda acceso a la mayoría de las capacidades de Linux.

Fig. 2 Pantalla de COCALC.

En este caso COCALC se utiliza con un interprete de Python y es una forma recomendable para aprender el lenguaje sin necesidad de recurrir a la instalación de los múltiples paquetes que se requieren para el cálculo científico. El entorno se emplea de manera interactiva, se ingresan las líneas de código y al hacer clic en el "botón de play" el intérprete los ejecuta (ver Fig. 2).

FIN

lunes, 24 de diciembre de 2018

Polaris: Matemáticas, Informática y Super-Héroes.

Polaris es la hija de Magneto y uno de los primeros reclutas de los X-MEN. Tiene habilidades para manipular metales que rivalizan con los de su padre. Polaris utiliza estos dones para combatir a los villanos junto a los X-Men y X-Factor.

Polisemia

La polisemia del griego poly, muchos, y séma, significado, alude a los signos linguísticos que tienen múltiples significados. Por ejemplo, la heroina de Marbel, los misiles balísticos que se lanzan desde submarinos y un tipo de velero de pequeño tamaño: todos se denominan Polaris.

En el siglo XVII René Descartes desarrolló la geometría análítica que combina la capacidad de la geometría para representar curvas con la abstracción del álgebra para analizar problemas por medio de ecuaciones. Este modelo cartesiano de coordenadas polares se utiliza mucho en la física en general, en electrónica, en el análisis de señales y en sistemas de localización, entre otros.

Fun With Math

Czes Kosniowski es un matemático británico dedicardo a la topología, la investigación y la informática, en 1983 publicó "Fun Mathematics on Your Microcomputer". Uno de los "entretenimiento" que proponía era "Polaris" un programa en BASIC que tomaba dos coordenadas polares (x,y) con valores entre 1 y 8 y generaba un gráfico asombroso (para esa época). La Revista Lúpin, publicó en el número 319 de 1992, una versión mínima de ese programa. Con la ayuda de JavaScript y HTML5, aquí va una versión completa del programa Polaris de Kosniowsky como un pequeño homenaje a su interés por la divulgación de las matemáticas en el "nuevo" campo de la informática.

Programa Polaris en HTML5

Valores X e Y (1-8)      X  Y 

Para usarlo, hacer clic en el botón "Generar". Para cambiar los valores, hacer clic en los botones "+" de las coordenadas X e Y.

TEXTOS

Fun Mathematics (Kosniowski, 1983)

Revista Lúpin N°319 (1992)

Mini Polaris en Lúpin N°319

FIN

lunes, 20 de marzo de 2017

Codigo de Barras en Canvas HTML5

NUEVO

Luego de numerosas consultas respecto del funcionamiento del sitio en el que se encontraba alojado el generador de códigos de barra en ASP.NET, finalmente decidí aprovechar los recursos gráficos que ofrece HTML5 a través de la etiqueta Canvas y modifiqué los programas. Estos están basados en una combinación de PHP y HTML5.

Code 39

El código Code 39 permite ingresar letras, números y algunos caracteres "extra", tales como: espacio en blanco, *, +, -, /, %, . y $

Para utilizar el generador de códigos, ingrese un texto y oprima el botón Generar. Si no dispone de scanner láser, para probar el código generado, puede guardarlo en un formato gráfico (jpg, por ejemplo) y emplear un lector online (requiere una breve búsqueda en google).

El artículo original se encuentra disponible en: Sistema Code 39 en ASP.NET

FIN

sábado, 31 de diciembre de 2016

Love formula in Excel

lunes, 26 de diciembre de 2016

Impresores Fiscales Homologados

RG (AFIP) 3561/13

Esta resolución general de la AFIP, define el régimen de emisión de comprobantes mediante la utilización de Controladores Fiscales. A partir de esta resolución, se definen ampliaciones y modificaciones que impactaron las definiciones técnicas de los controladores fiscales. En el caso de la impresora que presentamos en este artículo, la impresora fiscal HASAR SMH/PT-1000(ver Fig. 1), se introdujeron numerosos cambios en los modos de comunicación que son incompatibles con los controles ActiveX (ocx) anteriores. Para evitar problemas, hay que desinstalar todas las versiones anteriores (que tienen el mismo nombre) y emplear el programa de instalación de la última versión.

Fig. 1 Impresora fiscal

Impresora

La impresora viene configurada con la dirección IP 192.168.1.1 (usualmente destinada al router). Tal vez la idea es que el usuario la conecte con un cable RJ45 cruzado (crossover) directamente en la PC (ver Fig. 6). Existe la opción de conectarla por medio del puerto USB, para el cual viene provisto un cable; sin embargo, las herramientas de configuración y prueba, tales como el HFL_TEST.EXE sólo permiten las opciones de conexión "serial" y "ethernet". Esta limitación se resuelve por medio de un puerto USB virtual.

Fig. 2 Conectores USB y RJ45 de Ethernet

Fig. 3 Administrador de Dispositivos

Conexión USB y Ethernet

El pueto USB virtual está implementado a través del driver ELMO GMAS (COM3) que deriva los datos que se envían al puerto COM3 (puede ser otro, según el caso) hacia el puerto USB en el que está conectada la impresora. Para verificar qué puerto COM está asignado se puede consultar el Administrador de Dispositivos (puertos). A partir de allí, el trámite es bastante simple, se trata de ingresar a la ventana MS-DOS y aplicar el comando:

HFL_TEST serial 3

 

 

 

Fig. 4 Configuración

Fig. 5 Parámetros de red

Luego, se busca la sección 3 (configuración) y dentro de esta, se selecciona la opción 32 que permite cargar los parámetros de configuración de red (ver Fig. 4 y 5). Antes de asignarle una dirección IP, se utilizó el comando IPCONFIG.EXE para determinar que direcciones estaban en uso en la red local. En este caso, el router estaba configurado con la dirección IP: 192.168.0.1 por lo que se seleccionó la dirección 192.168.0.200 para la impresora. Se probó con ping para verificar su funcionamiento. A partir de este punto, se desconecta el cable USB, se conecta un cable directo a través del router (ver Fig. 6) y se aplica el comando:

HFL_TEST ethernet 192.168.0.200

 

 

 

Fig. 6 Cableado RJ45

Conclusión

Con el HFL_TEST se probaron operaciones de rutina, cierre X y Z y la emisión de algunos tiques y comprobantes. Luego se verificó el funcionamiento del driver HasarArgentina.ocx con VisualBasic y el funcionamiento en la plataforma NET. Todas las pruebas fueron satisfactorias por lo que se comenzó con el desarrollo de la aplicación.

viernes, 26 de diciembre de 2014

Miniaplicaciones ASP ***** AGREGADO *****

Finalmente están todas las mini aplicaciones operativas. Además de re-codificar las que estaban en ASP clásico en ASP.NET, tuve que ajustarlas a la versión MONO de ASP.NET que difiere en varios aspectos de la implementeción de Microsoft. Algunos sitios prometen varios lenguajes de script, incluyendo ASP.NET, PHP y Perl y bases datos MySql y Progress, entre otras. Sin embargo, a la hora de usarlos, resulta que no tienen los motores ASP.NET para manejar las bases de datos... Por esa razón tuve que re-codificar un par de aplicaciones en PHP, para así poder usar bases de datos MySql.

Al lenguaje Java tratan de desplazarlo. Ya hace tiempo que se interpone una botonera para poder usar las Applets. Se trata de una guerra comercial que ya sabemos quién va a ganar.

****************

El sitio que utilizaba habitualmente para almacenar pequeñas aplicaciones en ASP ya no presta ese servicio y solamente brinda su plataforma para aplicaciones en ASP.NET. Hace un tiempo que realizo los ejemplos en la plataforma .NET, sin embargo, quedaron algunas "miniaplicaciones" en ASP clásico y agradezco a los lectores que me lo hicieron saber.

Ya comencé a actualizar las "miniaplicaciones" y están disponibles dos de ellas: "Revista Lúpin" y "Revista Planeta". En breve actualizaré el resto.

¡MUCHAS FELICIDADES!

jueves, 27 de noviembre de 2014

Distribucion Binomial en ASP.NET

CAMBIOS

En un comienzo el código estaba en ASP.NET con señala el título, sin embargo, debido al cambio de servicio de la página que usaba como proveedora de los servicios .NET —que sin aviso previo los limitó a ASP Clásico-, ahora está programado en JavaScript. A pesar de esto, el funcionamiento es el mismo.

El término probabilidad, se refiere a un cálculo, una estimación matemática relativa a la posibilidad de un resultado particular entre un número de diferentes resultados posibles. Sabemos que en una situación determinada (por ejemplo, al arrojar un dado) hay un determinado número de resultados posibles (seis caras del dado son posibles), se puede calcular la probabilidad de un resultado determinado o de una secuencia particular de resultados si se repite el evento n veces.

Distribución Binomial
  n
 x
 %

Nota: Para probar esta aplicación es recomendable que obtenga una tabla binomial para contrastar los resultados.

Tabla 1

Ejemplos

Tomemos por ejemplo una cantidad de n=10 ensayos con un una cantidad de 3 éxitos y una probabilidad de p=0.25 (25%). La aplicación (ver Fig. 1) retorna el resultado:

= 0.250282287597656

Que es precisamente lo que encontramos al consultar la tabla 0.2503 (ver Tabla 1).

Fig. 1

Otro ejemplo: al arrojar una moneda n=10 veces, ¿cuál es la probabilidad de que se obtengan exactamente 6 caras?

Éxito = "La moneda muestra CARA"

p = 0.5

q = 0.5

n = 10

x = 6

R = 0.205078125

¿Qué Es?

En estadística, la distribución binomial es una distribución de probabilidad discreta que cuenta el número de éxitos en una secuencia de n ensayos de Bernoulli independientes entre sí, con una probabilidad fija p de ocurrencia del éxito entre los ensayos. Un experimento de Bernoulli se caracteriza por ser dicotómico, esto es, sólo son posibles dos resultados. A uno de estos se denomina éxito y tiene una probabilidad de ocurrencia p y al otro, fracaso, con una probabilidad q = 1 - p. En la distribución binomial el anterior experimento se repite n veces, de forma independiente, y se trata de calcular la probabilidad de un determinado número de éxitos. Para n = 1, la binomial se convierte, de hecho, en una distribución de Bernoulli.

Para representar que una variable aleatoria "x" sigue una distribución binomial de parámetros n y p, se escribe:

La distribución binomial es la base del test binomial de significación estadística.

Por ejemplo, con un dado balanceado, en una tirada, existe la posibilidad de 1 entre 6 de que un valor particular de los seis posibles aparezca en la parte superior (puesto que hay seis superficies en el cubo); en el juego de cara o cruz con una moneda correctamente balanceada hay una posibilidad de 1 entre 2 de que una cara aparezca en la parte superior, y la posibilidad de 1 entre 2 de que una cruz aparezca en la parte superior; asimismo, hay una posibilidad de 2 entre 2 de que una cara o una cruz aparezca en la parte superior.

FIN

viernes, 4 de abril de 2014

Sistema Cod39 en ASP.NET

Versión Canvas HTML5

Debido a cambios de la política del proveedor de servicios, el que ya no brinda servicios ASP.NET, tuve que modificar esta aplicación para que funcione a partir de PHP y Canvas HTML5. La funcionalidad es similar a la anterior.

Code 39

Si no dispone de un scanner laser para leer los códigos generados, un modo de probarlos consiste en guardar el código en un formato gráfico, por ejemplo, png y visitar un sitio que provea servicios de escaneo online (hay varios disponibles). También es posible bajar una aplicación lectora y, aún mas educativo, crear una aplicación propia.

Code 39 es un código de barras capaz de representar 26 letras mayúsculas, los números del 0 al 9 y algunos caracteres especiales, como el espacio y el asterisco que utiliza como encabezado y terminador.

El Origen de Cod39

En 1974, el Dr. Allais asociado con Ray Stevens de Intermec desarrollan el primer código alfanumérico que permitia representar caracteres ASCII y se dió a conocer como Código 39.

También conocido como "Código 3 de 9", es un formato muy popular utilizado en inventario y control así como también en aplicaciones militares y de salud. El formato consiste en tres elementos gruesos (barras o espacios) de un total de 9 elementos.

Juego de Carácteres: [A-Z, 0-9, + (mas), - (guión), . (punto), espacio, * (asterisco), $ (peso) / (barra) y % (porcentaje)]

La siguiente lista corresponde a caracteres aceptados por el código 39:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-*$/+%.

El asterisco * es utilizado como caracter de inicio/fin y no debe emplearse en el cuerpo del mensaje. Se puede agregar un dígito verificador para contribuir a garantizar la seguridad de la lectura del código. El dígito verificador del código 39 se basa en el cálculo módulo 43 de los caracteres codificados, pero debe tenerse en cuenta que el módulo está en relación directa con la cantidad de caracteres permitidos por el código.

El sistema Cod39 fue superado por el Código 128 que permite representar una mayor variedad de carácteres y dispone de un esquema de verificación.

 

 

En la parte superior, podemos observar un programa generador de códigos Cod39. Para usarlo, simplemente ingrese un texto de hasta 30 caracteres (incluirá automáticamente un asterisco al comienzo y otro al final). Cod39 no dispone de un dígito verificador debido a que opera por la interpretación de cada caracter en forma independiente.

EJEMPLO:

Si ingresamos el texto "REDELECTRONICA - 2014", el programa generará la etiqueta que se ve arriba. El programa le agregará dos carácteres * (asterisco) en ambos extremos del código.

FIN

martes, 18 de marzo de 2014

Biorritmo en ASP.NET

TEMPORALMENTE SUSPENDIDO

Debido a cambios de la política del proveedor de servicios, el que ya no brinda servicios ASP.NET sin cargo.

Mas abajo, observamos un programa en ASP.NET que genera el biorritmo correspondiente al mes actual, a partir de una fecha de nacimiento. Si bien el biorritmo no tiene bases científicas que lo sustenten, muchos sostienen que es útil como una referencia mas. Se dice que en Japon, grandes empresas de transporte usan el bioritmo para programar el recorrido de choferes de larga distancia.

Para usar el programa, simplemente seleccione su fecha de nacimiento, oprima el botón "Biorritmo" y saque sus propias conclusiones.

 

Ciclo Físico

Durante los días críticos negativos de este ciclo se deben evitar los riesgos innecesarios y se debe tener especial cuidado al practicar actividades deportivas o que requieran de esfuerzo físico y/o coordinación. Quienes adhieren a los bioritmos aconsejan evitar los viajes, las intervenciones quirúrgicas, e incluso las fiestas.

Ciclo Emocional

Se recomienda desconfiar mucho de los propios sentimientos y no actuar en función de ellos durante los días críticos negativos de la fase EMOCIONAL. Asimismo, se recomienda no tomar ninguna decisión importante en estos días. Para las actividades creativas, en cambio, los días críticos positivos de la fase emocional son especialmente auspiciosos, aunque también podrían tener efectos negativos.

Ciclo Intelectual

Durante los días críticos negativos del ciclo intelectual, se reduce el desempeño de las funciones lógicas y ejecutivas del cerebro, por lo que se recomienda no rendir exámenes durante esos días. Se recomiendan, en cambio, las actividades rutinarias en lugar del trabajo intelectual. En los días críticos positivos de fase positiva, el desempeño mental puede ser muy bueno o, en cambio, terriblemente malo.

Los ciclos son básicamente ondas senoidales que varían es su período:

Ciclo Físico - 23 días

Ciclo Emocional - 28 días

Ciclo Intelectual - 33 días

Podemos dividir a la senoide en dos semiciclos, uno positivo y otro negativo, ambos de la misma duración. Los ciclos se encuentran divididos en dos sectores, una parte positiva que inicia en cero, incrementa su valor positivo hasta alcanzar un pico y desciende nuevamente hasta cero, aquí encontramos un punto crítico de cambio, en donde comienza la fase negativa que incrementa sus valores con signo negativo hasta alcanzar el punto máximo y luego asciende nuevamente hasta cero. En este punto, encontramos otro punto crítico, con lo cual se completa un ciclo.

Fase Activa

Es la sección de la gráfica particular en la cual el rendimiento vinculado al rítmo en cuestión, se encuentra en su punto más alto. Podemos visualizar la FASE ACTIVA en la parte superior del eje horizontal, en el rango de 0% a 100%.

Fase Pasiva

Es la sección de la gráfica en la que el rendimiento vinculado al rítmo en cuestión, se encuentra en su punto más bajo. En la gráfica, visualizamos está fase por debajo del eje horizontal, en el rango de 0% a -100%.

Día Crítico

Es un punto de una o mas curvas en el que se cambia de la fase activa a la pasiva, es decir, cuando se cruza el eje horizontal de arriba abajo. Hay autores que señalan, sin embargo, que también inciden los cambios de la fase pasiva a la activa (se siente más calificado de lo que en realidad está). En ambos casos, el organismo intenta ajustarse al cambio de fases, el día crítico es el momento más vulnerable para un individuo, y las habilidades asociadas con ese ritmo en particular pueden estar en su rendimiento más bajo.

Otros puntos críticos de cambio tienen lugar en las crestas y valles de las curvas, cuando se alcanza un mínimo o un máximo. En los días en que, uno o mas indicadores, estén en un punto crítico, el rendimiento en las areas involucrads puede variar significativamente, desde muy altas a muy bajas. Por ejemplo, es posible tener grandes logros, o cometer serios errores durante los días críticos del ciclo intelectual; lo mismo se aplica a los ciclos emocional y físico.

Los puntos críticos de intersección son aquellos en los que un ciclo se cruza con otro. Durante estos días, se potencia la mejora del rendimiento, cuando el cruce se produce en el semiciclo positivo, y la disminución, si el cruce tiene lugar en el semiciclo negativo.

FIN

martes, 11 de marzo de 2014

Sistemas EAN-8 y EAN-13 en ASP.NET

TEMPORALMENTE SUSPENDIDO

Debido a cambios de la política del proveedor de servicios, el que ya no brinda servicios ASP.NET sin cargo.

EAN es un sistema de códigos de barra que se aplica a productos para la venta al público; es utilizado en más de 100 países, entre ellos, la Argentina. El código EAN, Número de Artículo Europeo, o European Article Number en inglés, es muy similar al UPC. Este último, Código Universal de Producto o Universal Product Code, en inglés es empleado en EE.UU., el Reino Unido y Canadá.

 

En la parte superior, podemos observar un programa generador de códigos EAN-8 y EAN-13. Para usarlo, simplemente ingrese un código EAN de 8/13 dígitos (incluye el último dígito verificador) o los 7/12 primeros dígitos. En ambos casos, el programa generará el último dígito para verificar la validez del código ingresado.

EJEMPLO:

Si ingresamos el código del Aceite Johnson: 7790010007054, el programa generará la etiqueta que se ve arriba. Si omitimos el último dígito, 779001000705, igualmente generará la misma etiqueta. Finalmente, si equivocamos el último dígito, 7790010007058, generará la misma etiqueta pero señalará el error. Lo mismo se aplica a los códigos EAN-8

FIN

viernes, 21 de febrero de 2014

Palíndromos en Código Morse

Un palíndromo (del griego palin dromein, otra vez, nuevamente o de nuevo) es una palabra, número o frase que se lee igual hacia adelante que hacia atrás. Si se trata de un número, se denomina capicúa. En el caso de las frases palindrómicas, a medida que se hacen mas extensas, se complejiza su comprensión, sin embargo, según demuestran los linguistas, conservan su valor sintáctico.


En la Gráfica y el Arte

Existen numerosos ejemplos de la aplicación de la simetría reversible, en el arte, la escultura y los grafismos.

Un Palíndromo Gráfico

Las palabras EARTH, AIR, FIRE, y WATER, además de representar los 4 elementos primordiales de la antigüedad, y hoy, los 4 estados de la materia, están delineadas con una tipografía especial y dispuestas de modo tal que pueden leerse en forma simétrica.


Combina texto y gráfica

En las figuras anteriores encontramos la simetría, exclusivamente en la forma gráfica, en la primera y en ambos, textos y gráfica, en la segunda.


Palíndromos y Belleza

De acuerdo con los más recientes estudios científicos, realizados por Anthony Little de la Universidad de Stirling, Escocia y Annika Paukner del Instituto Nacional de la Salud en EE.UU, existe una correlación entre la simetría facial y el estado de salud.


El rostro simétrico de Scarlet Johannson


Números y Letras

Números como el 6123216 son capicúa, y consecuentemente, son palíndromos. ABATATABA, es un ejemplo de una palabra palindrómica, como también lo es la palabra SOMETEMOS.

La más clásica frase palindrómica del español es "dabale arroz a la zorra el abad". En inglés, también existe una frase palindrómica muy famosa "A man, a plan, a canal: Panama". Y de la serie de dibujos animados Los Simpson, se extrajo el sigüiente palíndromo: "Rise to vote, sir".


¿Palíndromos Musicales?

Menos conocidas son las expresiones palindrómicas musicales, pero las hay. Por ejemplo, la sinfonía Nº47 de Joseph Haydn tiene el sobrenombre "el palíndromo" por cuanto su tercer movimiento forma un palíndromo, en el que la segunda mitad del movimiento está compuesta con la repetición de la primera mitad, pero a la inversa.

Si bien hay mucho ejemplos de partituras palindrómicas, el Cánon del Cangrejo de Johann Sebastian Bach es emblemático, y lo pueden ver ejemplificado en el siguiente video:

El Cánon del Cangrejo


Palíndromos en Código Morse

En este artículo, les presento la posibilidad de encontrar palíndromos en sistemas de código, tales como, la escritura, la música y el arte, entre otras.

Una forma de codificar el texto que se usaba ampliamente a principios del siglo XX, con el auge de las radiocomunicaciones, es el Código Morse. La idea es presentar el tema y proponer un pequeño programa en JavaScript que pueden utilizar en esta misma página para probar palabras y detectar si son o no palíndromos.


Detector de Palíndromos Morse
Palabra:
Resultado:

Lista de Palíndromos (Morse) en Inglés

A continuación les presento una breve lista de palabras que responden a una codificación Morse palindrómica y pueden probar con el "detector".

Palíndromos en Inglés
INTEND POOPCHEEK
HERBS ACETATECOHORT
USED TAINTSTARTS
WEEP ALIKEAFTER
FAMINE VISITSETCHING
QUEENLY GOATSKIRTS
HISSES SCENTSSLEEVES


En Castellano, como palíndromo morse, les propongo la palabra VILLAS, y espero que aquellos que les interese el tema encuentren muchas mas.

Piensen también que este principio se puede aplicar a otras formas de codificación, como por ejemplo, el binario.

En una próxima entrega, publicaré el programa fuente del "detector" en JavaScript, sin embargo, es bastante sencillo de realizar, para cualquier programador novato. Se trata simplemente de una matríz que contiene el Código Morse dentro de una función que recibe una cadena de texto y devuelve una cadena de puntos y rayas. Luego se le quitan los espacios entre puntos y rayas y se compara la cadena al original con la invertida.

¡FIN!

Sergio Otaño

martes, 11 de diciembre de 2012

Torres de Hanoi en RPG-II

Torres de Hanoi en COBOL

Torres de Hanoi en Excel

Torres de Hanoi en ET-3400

Torres de Hanoi en Strawberry Prolog

miércoles, 31 de octubre de 2012

Programming the MEK-6800

domingo, 14 de octubre de 2012

Lenguaje de Maquina

Desde el nacimiento de la "Ciencia del Computador", que ha  dado paso a la "Informática" como se la conoce en la actualidad en todo el mundo, se desarrollaron una miríada de lenguajes de programación. No cabe duda que aguellos "programadores" que implementaban sus cálculos en la ENIAC interconectando enormes cables entre los paneles tuvieron la motivación suficiente para buscar un mecanismo mas simple y eficiente.

Fig. 1 Codificadoras "cargando" un Programa.

Pero primero tuvo que desarrollarse en la computadora la capacidad de almacenar un programa, el modelo de Von Newman cubrió esa necesidad. A partir de allí ya hizo su aparición el primer lenguaje: el Lenguaje de Máquina.

Programa en 8086

El siguiente es el código completo, en lenguaje de máquina 8086 del algoritmo "Torre de Hanoi".

       0000000000000000B81100B91200BA13
00BB0400E80500B84C00CD2183FB0074
52525150534B8916060189CA8B0E0601
E8E9FF5B58595AA30201890E04018916
0601E82F004B891E00018B1E0201E823
008B1E0601E81C008B1E0001A102018B
0E04018B160601A3020189C88B0E0201
E8A9FFC3B40289DA83C230CD21BA2000
CD21C3

El código fuente puede verse aquí

El lenguaje de máquina se programa por medio de señales eléctricas, a través de interruptores o botones diréctamente en posiciones de memoria de la computadora. Aún hoy se programa en este lenguaje, en proyectos con microcontroladores o microprocesadores.   

Programación en MS-DOS Debug (Video)

Programación de Mircrocontrolador (Video)

sábado, 13 de octubre de 2012

Hanoi en Assembler A86

El punto de partida del peregrinaje de Hanoi fue la implementación del algoritmo de las Torres de Hanoi en lenguaje de máquina del microprocesador 6800 de Motorola. Para "programarlo", tuve que escribir un pseudo código, pasarlo a lenguaje ensamblador de 6800, posteriormente “ensamblarlo” en el papel, instrucción por instrucción, para luego ingresarlo por medio de un teclado hexadecimal, directamente en la memoria del MEK-6800.

Fig. 1 Teclado del MEK-6800

En memoria de ese acontecimiento, hace unos años repetí la experiencia, pero en esa ocasión, con una PC y por medio del Debug de DOS. Hoy, tanto el código fuente de la versión "light" como la versión "de Luxe" se perdieron en alguna de las tantas migraciones de PC. Pero, el artículo que publiqué en este blog aun permanece, de manera que es lo que usaré como punto de partida para la realizar esta nueva versión en A86.

Vean el Proceso Completo

El video muestra el código fuente en A86, el proceso de compilación y su puesta en funcionamiento.

El A86 es un Macroassembler, de manera que el código que usé para ensamblar con Debug requerirá varias modificaciones para que el A86 lo acepte y me genere un ejecutable.

El Código Original

El siguiente listado corresponde al código tal como está publicado en este blog: Reursion and Machine Language.

            

Listado 1

Si observamos en detalle el Listado 1, notaremos la aparente ausencia de "variables", tampoco se observan "procedimientos" o "subrutinas". En realidad, tanto las variables como las subrutinas están ahí, solo que no tienen nombre, son solo posiciones en la memoria.

La primera tarea consiste en asignar nombres "simbólicos" a esas posiciones de memoria, para convencer al A86 de que se trata de un programa en lenguaje ensamblador y no de una lista de compras. Para eso, primero vamos a ensamblar el código (con Debug), para determinar donde están las posiciones de memoria a las que hacemos referencia.

Compilación con Debug

E:\TC\A86>debug <hanoi.txt

El Debug genera un archivo ejecutable .COM

Pruebo el Funcionamiento

E:\TC\A86>hanoi
1 A B 2 A C 1 B C 3 A B 1 C A 2 C B 1 A B 4 A C 1 B C 2 B A 1 C A 3 B C 1 A B 2 A C 1 B C

Funciona!

Para ahorrar tiempo

  • Genero un listado con el debug
  • E:\TC\A86>debug hanoi.com >prog.txt
  • Luego escribo cinco veces u y luego q.

Obtengo el siguiente listado

            

Listado 2

Procesamiento con Excel

Esta es una de las aplicaciones prácticas de Excel, nos permite trabajar con texto en forma tabular y aplicar funciones para agregarle o quitarle elementos (también es muy útil para trabajar con páginas web).

  • Separamos las direcciones de las instrucciones (B y D).
  • Insertamos una columna (C).
  • Asignamos Nombres a las direcciones representativas.
  • Copiamos las columas C y D en un archivo de texto con la extensión .8 que es la extensión de los programas fuentes en A86.

Listado A86 Coompleto

            

Listado 3 Programa Completo en A86

Compilación y Prueba

E:\TC\A86>A86 HANOI.8
A86 macro assembler, V3.72 Copyright 1994 Eric Isaacson
Source:
HANOI.8
Object: HANOI.COM
Symbols: HANOI.SYM

E:\TC\A86>HANOI
1 A C
2 A B
1 C B
3 A C
1 B A
2 B C
1 A C

El código funciona perfectamente e incluye la generación del carácter "\n" o (0D0A) provisto por la subrutina NL, para mejorar la salida por pantalla. El A86 genera un archivo .COM y no requiere enlazarlo. Este A86 en particular lo bajé del sitio de su autor. Cuando vivía en USA, yo había comprado un A86 (shareware) que generaba .OBJ además de .COM, pero es posible que su autor haya modificado su esquema de distribución.

¡Que tengan un gran día!

Sergio Otaño