Publicado el 21 de Abril del 2018
525 visualizaciones desde el 21 de Abril del 2018
304,6 KB
12 paginas
Creado hace 14a (20/12/2010)
15.1. LAS PRIMITIVAS
153
--> /Capturas
--> /Escritorio
--> /Imagenes
Al iniciar xLogo, la ruta de trabajo será /home/alumno/. Para llegar al directorio Programas
podemos escribir alternativamente:
pondirectorio "/home/alumno/Documentos/xLogo/Programas
cambiadirectorio "Documentos/xLogo/Programas
Una vez en él, podemos ir hacia atrás de forma absoluta o relativa:
pondirectorio "/home/alumno/Documentos/xLogo
cambiadirectorio "..
y listar su contenido, que se mostrará en el Histórico de Comandos separando los directorios
de los archivos:
catalogo
--> Directorio(s):
Programas Capturas
Archivo(s):
manual.pdf prueba.lgo tortuga.png transfo.png xlogo.jar
Hay dos posibilidades de que esto no sea exactamente así:
cuando se abre un archivo .lgo desde el Menú Archivo, el directorio donde se encon-
traba éste queda establecido como directorio de trabajo. Por ejemplo, si abrimos el
fichero:
/home/alumno/Documentos/xLogo/rosa.lgo
el directorio de trabajo será
/home/alumno/Documentos/xLogo
Si no es la primera vez que se trabaja con xLogo. Al terminar una “sesión”, se guarda
la última ruta de trabajo y se mantiene para ejecuciones posteriores.
Todo lo anterior afecta al guardado en disco de procedimientos o la carga desde disco
duro de procedimientos e imágenes, NO a las capturas de pantalla que pueden hacerse
desde el Menú Archivo −→ Capturar la imagen.
154
CAPÍTULO 15. MANEJO DE ARCHIVOS
15.1.2. Carga y guardado de procedimientos
Finalizando el capítulo 5 te enseñamos a guardar en el disco duro usando las opciones
de Menú:
Menú Archivo −→ Guardar como . . . .
Menú Archivo −→ Guardar
que difieren en que uno te permite asignar un nombre, y el otro sobreescribe el archivo
abierto (si lo hay). Podemos también abrir procedimientos con:
Menú Archivo −→ Abrir
y disponemos de primitivas con las que conseguir lo mismo:
Primitivas
Argumentos
Uso
carga
guarda
palabra
palabra,
lista
guardatodo
palabra
Ejemplos:
Abre y lee el archivo indicado por palabra.
Guarda en el archivo indicado por palabra los
procedimientos especificados en lista, en el di-
rectorio actual. (Ver ejemplo)
Guarda en el archivo indicado por la palabra
todos los procedimientos definidos, en el direc-
torio actual. (Ver ejemplo)
carga "prueba.lgo carga un archivo llamado prueba.lgo del directorio
actual, SIN ABRIR el Editor de Comandos.
Difiere de la opción Abrir del Menú Archivo en que este sí abre el Editor
de Comandos.
guarda "trabajo.lgo [proc1 proc2 proc3] guarda en el directorio ac-
tual un archivo llamado trabajo.lgo que contiene los procedimientos
proc1, proc2 y proc3.
guardatodo "trabajo.lgo guarda en el directorio actual un archivo lla-
mado trabajo.lgo que contiene la totalidad de los procedimientos actual-
mente definidos.
Es equivalente a usar la opción Guardar del Menú Archivo.
En ambos casos, si no se indica la extensión .lgo, será añadida. La palabra es-
pecifica una ruta relativa a partir del directorio corriente. No funciona colocar
una ruta absoluta.
Para borrar todos los procedimientos definidos y cargar el archivo trabajo.lgo,
debes usar:
15.1. LAS PRIMITIVAS
155
borratodo carga "trabajo.lgo
La palabra especifica una ruta relativa a partir del directorio corriente. No
funciona colocar una ruta absoluta, es decir:
borratodo carga "/home/alumno/xLogo/trabajo.lgo
no producirá ningún efecto.
15.1.3. Modificando archivos
Primitivas
Argumentos
Uso
abreflujo
número nombre
cierraflujo
listaflujos
número
lista
leelineaflujo
número
leecarflujo
número
escribelineaflujo número lista
agregalineaflujo
número lista
finflujo?
número
Ejemplo:
Para poder leer o escribir en un fichero, es ne-
cesario crear un flujo hacia él. El argumento
nombre debe ser su nombre, que se refiere al
directorio de trabajo. El argumento n es el nú-
mero que identifica a ese flujo.
Cierra el flujo n.
Carga una lista con los flujos abiertos indicando
su identificador
Abre el flujo cuyo identificador es n, y lee una
línea del fichero
Abre el flujo cuyo identificador es n, después lee
un caracter del fichero. Esta primitiva devuelve
el número correspondiente al caracter unicode
(como leecar - sec. 12.2)
Escribe la línea de texto indicada en lista
al principio del fichero indicado por el flujo n.
Atención: la escritura no se hace efectiva hasta
que se ciera el fichero con cierraflujo.
Escribe la línea de texto indicada en lista al
final del fichero indicado por el flujo n. Atención:
la escritura no se hace efectiva hasta que se ciera
el fichero con cierraflujo.
Devuelve cierto si se ha llegado al final del
fichero, y falso en caso contrario.
El objetivo es crear el fichero ejemplo en el directorio personal: /home/tu_nombre, en
Linux, C:\, en Windows que contiene:
ABCDEFGHIJKLMÑNOPQRSTUVWXYZ
abcdefghijklmñnopqrstuvwxyz
0123456789
156
Para ello:
CAPÍTULO 15. MANEJO DE ARCHIVOS
# abre un flujo hacia el fichero indicado
# identificara el flujo con el numero 2
pondirectorio "/home/tu_nombre
abreflujo 2 "ejemplo
# escribe las lineas que quiero
escribelineaflujo 2 [ABCDEFGHIJKLMNÑOPQRSTUVWXYZ]
escribelineaflujo 2 [abcdefghijklmnñopqrstuvwxyz]
escribelineaflujo 2 [0123456789]
# cerramos el flujo para acabar la escritura
cierraflujo 2
Ahora, comprobamos que está bien escrito:
# abre un flujo hacia el fichero indicado
# identificara el flujo con el numero 0
pondirectorio "/home/tu_nombre
abreflujo 0 "ejemplo
# lee las lineas del fichero consecutivamente
escribe leelineaflujo 0
escribe leelineaflujo 0
escribe leelineaflujo 0
# cerramos el flujo
cierraflujo 0
Si queremos que nuestro fichero termine con la línea Formidable!:
pondirectorio "c:\\
abreflujo 1 "ejemplo
agregalineaflujo 1 [Formidable!]
cierraflujo 1
15.2. Ejecutando programas externos
Si quisiéramos ejecutar un program externo a xLogo, disponemos de la primitiva
comandoexterno. Su argumento debe ser una lista de sub–listas, que contienen en este
orden:
El comando que lanza el programa
Opcionalmente, las opciones del mismo
Por ejemplo:
comandoexterno [ [gedit] ]
15.2. EJECUTANDO PROGRAMAS EXTERNOS
157
Ejecuta el program gedit (en Linux) sin opciones.
comandoexterno [ [notepad] ]
Ejecuta el program block de botas (en Windows) sin opciones.
comandoexterno [ [gedit] [/home/xlogo/ejemplo.txt] ]
Abre el archivo ejemplo.txt con gedit (en Linux).
comandoexterno [ [notepad] [c:\ejemplo.txt]]
Abre el archivo ejemplo.txt con el block de notas (en Windows).
Esta sintaxis tan “especial” permite llamar al sistema con los espacios en blanco adecuados
para que no haya errores. Observa, también, que la ruta a los archivos debe ser absoluta.
15.2.1. Ejemplo: La tortuga . . . ¡Habla!
Si disponemos de un sintetizador de voz en nuestro sistema operativo, algo habitual si
nuestro sistema dispone de Herramientas de Accesibilidad, podemos oír hablar a la tortuga.
En este caso vamos a desarrollar un ejemplo sobre Festival, cuyo verdadero nombre
es Festival Speech Synthesis System, un sistema muy completo para convertir texto
en sonido y viceversa. Podemos encontrar más información en:
http://www.cstr.ed.ac.uk/projects/festival
Vamos a crear un archivo de texto con las órdenes para Festival, de momento un sen-
cillo saludo y la orden de salida, y después llamaremos al sistema con comandoexterno.
El problema no está en crear la secuencia de órdenes, sino en escribir la ruta completa al
archivo.
Usaremos directorio y la forma general de lista:
para habla
abreflujo 1 "habla
escribelineaflujo 1 [(SayText "Hola, amigo.] # Frases que vamos a escuchar
escribelineaflujo 1 [Como estas")]
escribelineaflujo 1 [(quit)]
cierraflujo 1
# Salimos de Festival
# Cerramos el archivo
# Abrimos el archivo de ordenes
#
# Creamos las ordenes como lista de listas y con la ruta completa al archivo
#
comandoexterno lista [festival] (lista palabra directorio "/habla)
fin
158
CAPÍTULO 15. MANEJO DE ARCHIVOS
Una segunda posibilidad consiste en utilizar las opciones de Festival. En el archivo
solo introducimos las frases que queremos escuchar y pasamos la opción --tts:
para habla2
abreflujo 1 "habla2
escribelineaflujo 1 [Hola, amigo.]
escribelineaflujo 1 [Como estas.]
cierraflujo 1
comandoexterno (lista [festival] [--tts] (lista palabra directorio "/habla2))
# Abrimos el archivo de ordenes
# Frases que vamos a escuchar
# Cerramos el archivo
fin
Como ves, mucho más fácil.
15.3. Obtención aproximada de π (2)
Un resultado conocido de teoría de los números pone de manifiesto que la probabilidad
2 ≃ 0,6079. Para
que dos números tomados aleatoriamente sean primos entre ellos es de 6
intentar encontrar este resultado, vamos a:
π
Tomar dos números al azar entre 0 y 1 000 000.
Calcular su m.c.d.
Si su m.c.d. vale 1, añadir 1 a una variable contador.
Repetir 1000 veces
La frecuencia de los pares de números primos entre ellos se obtendrá dividiendo la
variable contador por 1000 (el número de pruebas)
15.3.1. Noción de m.c.d. (máximo común divisor)
Dados dos números enteros, el máximo común divisor define al mayor divisor común
de ambos. Por ejemplo:
42 y 28 tienen como m.c.d. 14, ya que es el número más grande por el que es posible
dividir a la vez 28 y 42
el m.c.d. de 25 y 55 es 5
42 y 23 tienen m.c.d. igual a 1
Cuando dos números tienen m.c.d. 1, se dice que son primos entre sí. Así en el ejemplo
anterior, 42 y 23 son primos entre sí. Eso significa que no tienen ningún divisor común
excepto 1 (¡por supuesto, hablamos de división entera!).
15.3. OBTENCI ÓN APROXIMADA DE π (2)
159
15.3.2. Algoritmo de Euclides
Para determinar del m.c.d. de dos números, se puede utilizar un método llamado algo-
ritmo de Euclides: (Aquí no se demostrará la validez de este algoritmo, se admite que
funciona).
El mecanismo de este método es: “dados dos números naturales a y b, analizamos si b
es nulo.:
En caso afirmativo, entonces el m.c.d. es igual a a.
Si no, se calcula r, el resto de la división de a entre b.
Se su
Comentarios de: Curso XLogo - Capítulo 15 - Manejo de Archivos (0)
No hay comentarios