Codificar y decodificar
El procesamiento de texto, combinado con el Logo tradicional, permite codificar un mensaje con mucha facilidad. Uno de los ejemplos más simples es el código cifrado de Julio César. Para comunicarse con su ejército, Julio César utilizaba un alfabeto que consistía en correr las letras tres lugares a la derecha. Así, en el código cifrado, una A se transformaba en una D, una B en una E, una C en una F, y así sucesivamente.
Cada letra en una computadora tiene asociado un número que se llama código ASCII. Para este proyecto sólo utilizaremos letras mayúsculas. Logo devolverá el código ASCII de cada carácter. Los caracteres alfabéticos son estándares en todas las computadoras.
muestra ascii "A
65
El reportero car devuelve la letra asociada con el código ASCII.
muestra car 65
A
Los números del código ASCII para las letras mayúsculas tienen un rango entre 65 y 90.
muestra ascii "Z
90
Con.código es un procedimiento que toma un número de código ASCII y le agrega 3. Con.código también controla los extremos del rango utilizado. Si el resultado de con.código es un número mayor que 90, no es parte del alfabeto de letras mayúsculas. Por lo tanto, el procedimiento le resta 26 para volver al alfabeto.
para con.código :numletra
da " :numletra + 3
si :numletra > 90 [da "numletra :numletra - 26]
reporta :numletra
finmuestra con.código 65
68
Con.código es un procedimiento que usa el mando reporta, por lo que ha sido definido como un reportero. (Ver Procedimientos que Reportan.) muestra con.código 90
67
Con el procedimiento con.código, cada letra puede ser modificada. Veamos el siguiente procedimiento, llamado César:
![]()
Marca y cuad Marcan una letra:
principio
marca cuad
Se marca la letra "E".
muestra ascii marcado
69Marcado reporta la selección como una palabra.
muestra con.código ascii marcado
72
Esta instrucción reemplaza la selección (E) por la letra cambiada (H):
inserta car con.código ascii marcado
Logo lee la instrucción de la siguiente forma: Inserta busca su entrada. Car es la palabra siguiente.
Car busca su entrada. Con.código es la palabra siguiente.
Con.código busca su entrada. Ascii es la siguiente palabra.
Ascii busca su entrada. Marcado es la siguiente palabra.
Marcado reporta E a ascii.
Ascii marcado reporta 69 a con.código.
Con.código ascii marcado reporta 72 a car.
Car 72 reporta H a inserta.
Inserta pone una H en la posición del cursor.El procedimiento con.código utiliza esta instrucción para cambiar todas las letras de un texto por las letras que están tres lugares a la derecha en el alfabeto:
para codificar
si fdt? [alto]
marca cuad
inserta car con.código ascii marcado
codificar
fin
Observe la regla de detención: fdt? (fin de texto) controla si el cursor está al final del texto.
Este programa codificar no es perfecto. Los espacios y el "." también se codifican. No conviene codificar los signos de puntuación. Podemos buscar los códigos ASCII de los signos de puntuación para mejorar con.código. La siguiente versión utiliza miembro? para controlar los códigos ASCII de los siguientes signos de puntuación -- el espacio . , ; ¿? ¡!.
Nota de la traducción: dentro de este listado se incluye el código ASCII de la letra Ñ que, por razones de no complicar el programa con muchas excepciones, permanecerá igual cuando se codifique el mensaje. Por este mismo motivo, tampoco se considerarán las letras mayúsculas acentuadas.para con.código :numletra
si miembro? :numletra [32 33 44 46 58 63 161 191 209] [reporta :numletra]
da "numletra :numletra + 3
si :numletra > 90 [da "numletra :numletra - 26]
reporta :numletra
fin
Ahora podemos ejecutar con.código correctamente:
![]()
principio
codificar![]()
Los procedimientos para decodificar el texto desharán los efectos de codificar. Sin.código toma el código ASCII de la letra y le saca 3. Decodificar reemplaza la letra codificada por la letra original:
para sin.código :numletra
si miembro? :numletra [32 33 44 46 58 63 161 191 209] [reporta :numletra]
da "numletra :numletra - 3
si :numletra < 65 [da "numletra :numletra + 26]
reporta :numletra
finpara decodificar
si fdt? [alto]
marca cuad
inserta car sin.código ascii marcado
decodificar
finPara decodificar el mensaje, escriba :
principio
decodificar