|
Error! Bookmark not defined. |
Error! Bookmark not defined. |
|
|
1 |
Error! Bookmark not defined.Introducción |
|
Error! Bookmark not defined. |
. Arranque de la computadora . Qué es y como funciona un compilador . El primer programa |
|
1) Arranque de la computadora con diskettes
Para poder encender la computadora, es necesario el diskette del Sistema Operativo.
Si la computadora está apagada:
1. encender el monitor
2. poner en la diskettera el DOS con la etiqueta hacia arriba, y las ranuras hacia adentro. Cerrar la puerta poniendo la perilla en posición vertical.
3. encender la CPU.
4. la luz roja de la diskettera se encenderá luego de algunos segundos. Esperar a que aparezca el mensaje:
Current date is 1-01-1980.
Enter new date:
5. en este punto puede ingresarse la fecha del día al sistema. Recordar que la fecha debe ser escrita en el orden mes-día-año; si se desea, se puede presionar <ENTER> para saltear esta etapa.
6. esperar hasta que aparezca el mensaje:
Current time is 0:00:47.89.
Enter new time:
7. en este punto puede ingresarse la hora al sistema o bien, presionar <ENTER>.
8. aparecerá entonces el PROMPT del DOS:
A>
9. el PROMPT indica que el sistema operativo está listo para recibir órdenes.
A veces, es necesario apagar la computadora para poder retomar el control de la misma. En vez de repetir todo el proceso (1..9) de nuevo, podemos 'resetear' la computadora, es decir:
1. presionar las teclas Ctrl-Alt-Del (todas al mismo tiempo), y repetir los pasos del 4 en adelante.
O bien:
1. presionar el botón Reset de la computadora, y repetir los pasos del 4 en adelante.
2) ¿Cómo funciona un compilador?
Antes de saber cómo funciona un compilador, necesitamos saber qué es un compilador.
Supongamos la siguiente situación:
Juan Pérez (un español) quiere comunicarse con Chan Pi Res (nacido en Pekín). Pero, ni Juan habla chino, ni Chan habla español. Para poder hablar, deciden contratar a Lola Chin, que comprende los dos idiomas.
Cada vez que Juan quiere hablar con Chan, le habla a Lola en español, y Lola le habla a Chan en chino. Es decir, Lola es una intérprete.
Ahora supongamos que Juan va a dar una serie de conferencias por toda China. Podría contratar los servicios de Lola como intérprete. Pero, si hiciera esto, tendría que llevar a Lola a la China, y pagarle todos los gastos, además de su trabajo.
Hay otra opción. Como Juan sabe pronunciar chino (lo que no puede hacer es entender lo que lee) decide pedirle a Lola que traduzca su discurso, y él va a leerlo en cada una de sus conferencias.
¿Cuál es la ventaja y la desventaja de cada uno de estos métodos?
Error! Bookmark not defined. |
Traductor |
Intérprete |
Costo |
Hay que traducir una sola vez. |
Es necesario interpretar cada vez. |
Tiempo |
Al leer la traducción, no hace falta hacer pausas para que hable la intérprete. |
Hay que hacer una pausa entre frase y frase, para dar tiempo al intérprete a que hable. |
Flexibilidad |
Si estoy dando el discurso, y me hacen una pregunta, no puedo responderla, pues no puedo traducir mi respuesta (no esta conmigo Lola). |
Puede haber preguntas y respuestas en mi discurso. |
En computación pasa algo parecido. Los seres humanos hablamos en cierto lenguaje, y las computadoras hablan en el suyo. Y para poder entendernos, hace falta algún tipo de traductor. Y también hay dos tipos de traductores: los intérpretes y los compiladores.
Un intérprete tiene las ventajas que mencionamos recién. Y también las desventajas. Al igual que los compiladores.
Un programa compilado, es más rápido. Pero corregir un error, implica compilar de nuevo. Un intérprete es más flexible. Y mucho más lento.
3) Probando como funciona un compilador
Vamos a compilar un programa en pascal para ver qué es lo que hace. Pero antes de seguir adelante, es necesario tener el compilador disponible. *********Lee el apéndice A para saber como instalarlo.
Pedile al ayudante una copia del programa DEMO1.SEU; vamos a compilarlo.
Primero mostrá por pantalla el archivo (por si no te acordás, eso se hace con el comando del sistema operativo TYPE demo1.seu). No importa si no entendés el programa que aparece en pantalla. El resto de la guía te explicará cada una de las instrucciones.
Ahora escribí
CPP DEMO1.SEU (El nonmbre CPP es por Compilador de Pseudo-Pascal)
Una vez que se apague la luz de la disketera mirá el contenido del diskette en A: nuevamente. Apareció un nuevo programa que antes no existía. Es el programa DEMO1.EXE.
Mostrá por pantalla éste archivo (usando el comando TYPE del sistema operativo). ¡¡Qué diferente se ve, si lo comparás con el TYPE anterior!!
Lo que sucede es que DEMO1.EXE ya fue traducido a código máquina (observa que la extensión EXE indica que es un ejecutable). El compilador CPP realizó la tarea. Para ver qué hace el programa sólo falta ejecutarlo. Tipeá DEMO1 y presioná la tecla ENTER, para ver el programa en funcionamiento.
Si deseás volver a verlo funcionar no necesitás volver a repetir todo el proceso. Alcanza con que le pidas al sistema operativo que ejecute el programa DEMO1.EXE nuevamente, ya que la traducción del programa DEMO1.SEU ya fue hecha y guardada en DEMO1.EXE.
4)¡Error! Marcador no definido. Escribiendo un programa fácil
Vamos a escribir un programa fácil en Pascal, lo compilaremos y veremos como funciona.
Cargá el PW (o cualquier otro editor de texto que sepas usar) y copiá las siguientes instrucciones:
programa facil;
comenzar escribir('Hola, yo soy tu primer programa en CPP'); fin.
|
¿Qué hará este programa?
Prestá especial atención a la sintaxis del programa, es decir, cómo está escrito. No te olvides de ningún signo de puntuación, ya que si no los escribís el compilador no podrá realizar la traducción correctamente.
Una vez que lo hayas escrito y revisado, grabálo en formato ASCII con el nombre FACIL.SEU (si estás usando el PW esto se realiza indicando en la pantalla de grabado F2-2 File Type A).
Compilá el programa que acabás de escribir, tipeando
CPP FACIL.SEU
Si se produjo algún error, volvé a revisar la sintaxis del programa (utilizando el procesador de texto) y compilá nuevamente el programa.
Observá que ahora en el diskette hay dos programas más: FACIL.SEU y FACIL.EXE.
Pedile al sistema operativo que ejecute el programa escribiendo FACIL y presionando <Enter>.
¿Qué hizo el programa? ¿Era lo que esperabas?
Ejecutálo varias veces, y releé el programa fuente (el que está escrito en PSEUDO PASCAL) para tratar de entender como funciona.
¡Error! Marcador no definido. |
Eeeee ¡Error! Marcador no definido.EJERCITACION |
|
|
EJERCICIO 1 |
|
1.1 Modificá el programa fuente FACIL.SEU para que muestre por pantalla el nombre de cada uno de los integrantes de tu grupo de trabajo, recompilá y ejecutá. No olvides cambiar el nombre al grabar si no deseas perder el programa original. 1.2 Hacé una lista explicando que significan las palabras compilador, intérprete, lenguaje de máquina, lenguaje fuente, formato ASCII, la extensión .SEU, la extensión .EXE, sintaxis. |
5) Corrigiendo errores del programa
La mayoría de las veces que escribas un programa, cometerás errores de sintaxis que tendrás que corregir para poder obtener la traducción y poder ejecutarlo. El PSEUDO-PASCAL comienza la traducción del programa y cuando encuentra algo que no comprende detiene el proceso y te informa en que línea se detuvo y el motivo de su detención, dándote una pista para encontrar el error.
Veamoslo con un ejemplo.
Tratá de compilar el programa DEMO2.SEU escribiendo:
CPP DEMO2.SEU
El compilador tratará de realizar la traducción pero al llegar la línea número 4 encontrará un error.
En pantalla aparecerá el siguiente mensaje:
Error: Identificador desconocido
En la linea 5 del archivo DEMO2.SEU
ESCRIBAR(' tiene ');
^
Veamos a que se debió el error.
Edita el programa DEMO2.SEU utilizando un procesador de texto.
El programa debe verse así:
programa error;
comienzo escribir('Este programa'); escribar(' tiene '); <<---- línea 5 escribir(' un error. '); fin.
|
Sin ser demasiado observador, es fácil adivinar cuál fue el error. El encargado de escribirlo tipeó mal la instrucción "escribir" poniendo en su lugar la instrucción "escribar" que no existe dentro del conjunto de instrucciones válidas que reconoce el PSEUDO-PASCAL.
Corregí el error, grabá y recompilá hasta lograr obtener el archivo traducido (DEMO2.EXE) y por último ejecutalo.
En el Apéndice B: Errores de compilación, hay una lista completa de los errores que se producen durante la compilación con una explicación breve de la causa que lo motivó. Consultala cuando la necesites.
¡Error! Marcador no definido. |
¡Error! Marcador no definido.EJERCITACION |
|
|
|
|
Los siguientes son los errores que se producen con mayor regularidad. Identifica cada uno de los mensajes del compilador y la manera de corregir el programa en cada caso: 1.3 Probá que sucede si no colocás un punto y coma al final de una instrucción 1.4 Probá que sucede si no colocás una de las comillas dentro de la instrucción escribir(' un error.'). 1.5 Probá que sucede si no colocás el punto luego de la instrucción FIN |
¡Error! Marcador no definido. |
¡Error! Marcador no definido. |
|
|
2 |
¡Error! Marcador no definido.Dándole órdenes a la computadora |
|
¡Error! Marcador no definido. |
. Forma de trabajo . Formato de los programas . Las primeras instrucciones |
|
0) Un comentario antes de empezar
A lo largo de la guía, vas a encontrar numerosos ejemplos; escribí esos ejemplos en la computadora y fijate qué es lo que hacen, tratá de ver cómo funcionan, y tratá de hacerles algunas modificaciones para ver qué pasa.
Además vas a encontrar muchos ejercicios. Hacelos todos, y preguntá todo lo que no entiendas.
1) Forma de un programa
¿Qué es un programa? Un programa es un algoritmo escrito en un lenguaje de programación. ¿Y qué es un algoritmo? Un algoritmo es una secuencia de pasos que resuelve determinado problema.
Tratemos de entender la diferencia. Supongamos que quiero resolver el siguiente problema:
'averiguar el resultado de la cuenta 4*10+50+2*5'.
Un algoritmo que resolviera este problema podría ser:
Calcular el valor de la cuenta 4*10+50+2*5
Imprimir el resultado
Programa <nombre_del_programa>;
{Zona de declaración de bibliotecas} {Zona de declaración de constantes} {Zona de declaración de tipos} {Zona de declaración de variables} {Zona de declaración de subrutinas}
comienzo {Ordenes del programa principal} fin.
|
Sin embargo, no puedo pedirle esto tal cual a una computadora, pues, como ya dijimos, las computadoras hablan un lenguaje muy distinto al nuestro, y por ello, necesito usar un traductor (compilador).
Pero tampoco puedo pedirle a un compilador que sepa traducir esta secuencia de órdenes tal cual la hemos escrito. Cada compilador necesita que escribamos con cierta sintaxis en particular.
Nuestro compilador (el CPP) necesita que lo que escribamos se vea más o menos así:
En este esquema vemos que hay que decir cual es el nombre del programa, luego hay de declarar (si hace falta) bibliotecas, constantes, tipos, variables y subrutinas (por ahora no va a hacer falta; mas adelante veremos qué son cada una de estas cosas, no nos ocuparemos de ellas ahora), y luego viene el programa propiamente dicho.
Un programa que resuelva nuestro problema podría verse así:
Programa cuentas;
comienzo escribir(4*10+50+2*5); fin.
|
Observa atentamente el uso del punto y coma(;) y el punto(.).
2) Escribiendo en la pantalla
Recién vimos una instrucción de pseudo-pascal: la instrucción escribir.
Esta instrucción sirve para escribir en la pantalla de la computadora lo que le pidamos. La forma de usar esta instrucción es:
escribir( <elementos_a_escribir> );
Programa escritor;
comienzo escribir('Ahora estoy escribiendo un mensaje'); escribir('Abajo voy a escribir un numero'); escribir(5); escribir('Abajo va una cuenta'); escribir(1234+8765); escribir('Ahora va todo junto'); escribir('dos por tres es ', 2*3); fin.
|
En el lugar que dice <elementos_a_escribir> pondremos, justamente, todo lo que querramos escribir. Observa el uso de los paréntesis y del punto y coma.
En el ejemplo, podemos ver el uso de las comillas simples (') para identificar los mensajes que deben ir a la pantalla.
|
EJERCITACION |
|
|
|
|
2.1 Hacé un programa que escriba los nombres de los integrantes del grupo con sus edades, y luego que escriba la suma de las edades. ¿Se podrá escribir el promedio? ¿Cómo? 2.2 ¿Cuál es la diferencia entre las dos instrucciones siguientes? Probalo. escribir('10+5'); escribir(10+5); |
3) Un poco de prolijidad: borrando la pantalla
Hasta ahora escribimos en la pantalla sin preocuparnos por lo que había en ella. Pero queda muy desprolijo.
Debería haber una forma de poder borrar la pantalla...
También debería haber una forma de dibujar...
O de hacer sonidos con la computadora...
En realidad, hay muchas instrucciones que serían necesarias. Pero no todas son necesarias en todo momento, y sería molesto tenerlas todas (¡TODAS!) disponibles todo el tiempo. Es por esto que las instrucciones están agrupadas en 'bibliotecas' de instrucciones: si quiero usar una determinada instrucción, tengo que decir en qué 'biblioteca' está.
Hay una biblioteca llamada pantalla, que agrupa muchas instrucciones que están referidas al uso de la pantalla. Hagamos un programa mejor presentado:
Programa prolijo;
usar pantalla;
comienzo borrarpantalla; escribir('Mucho mejor, no?'); fin.
|
Observa la línea que dice 'usar pantalla'. Esta línea está declarando que quiero usar la biblioteca pantalla. La instrucción borrarpantalla pertenece a dicha biblioteca.
Nosotros usaremos tres bibliotecas distintas, llamadas pantalla, graficos y DOS.
|
EJERCITACION |
|
|
|
|
2.3 ¿Qué pasaría en el programa anterior si no pedimos usar la biblioteca pantalla? Probá compilar el programa luego de haber borrado dicha línea. 2.4 ¿Y qué pasará si pedimos usar la biblioteca pantalla, pero luego no usamos ninguna instrucción de esa biblioteca? Probá compilar dos programas iguales salvo que uno diga usar pantalla y el otro no. Observá el tamaño de los programas generados (.EXE). ¿Por qué es mejor tener que declarar las bibliotecas que vamos a usar? 2.5 Ahora podés mejorar el programa de los nombres y las edades que hiciste en la ejercitación anterior. |
|
|
|
|
3 |
Introducción a los gráficos |
|
|
. El modo gráfico . Coordenadas en pantalla . Primeras instrucciones gráficas |
|
1) El modo gráfico
Hasta ahora sólo usamos la computadora para hacer cuentas y escribir. Todo el tiempo usamos la pantalla para escribir. Estuvimos usando lo que se llama el modo texto de la pantalla.
Para poder dibujar, es necesario pasar al llamado modo gráfico.
No es tan extraño como parece. Si te fijás en las carpetas de las materias del colegio, es muy probable que uses hojas rayadas para escribir, cuadriculadas para hacer cuentas, mapas para geografía, hojas blancas lisas para dibujos y hojas milimetradas para climogramas. Cada uno de estos tipos de hoja, hace el papel de un modo en tu carpeta: el modo hoja rayada para escribir, el modo hoja blanca lisa para dibujar, etc.
El pseudo-pascal tiene instrucciones que le dicen que queremos usar el modo gráfico, instrucciones que le dicen que queremos usar el modo texto, e instrucciones propias de cada uno de los modos (para dibujar, escribir, etc).
Todas la instrucciones del modo gráfico están agrupadas en la biblioteca llamada graficos. Entonces, cualquier programa que quiera usar el modo gráfico, deberá decir:
usar graficos;
como antes decíamos usar pantalla.
2) Entrando y saliendo del modo gráfico
Para poder hacer gráficos, hace falta entrar al modo gráfico. Para ello, existe la siguiente instrucción:
modografico;
Para volver al modo texto, está la instrucción:
modotexto;
Programa flash;
usar graficos;
comienzo modografico; modotexto; fin.
|
Analicemos este ejemplo.
¿Qué es lo que hace este programa?
Nada, sólo pasa al modo gráfico e inmediatamente vuelve al modo texto. Sería mejor que se quedara algunos segundos en modo gráfico, para poder así ver lo que hubiéramos dibujado.
Programa bimodo;
usar graficos,pantalla;
comienzo modografico; esperar(2000); modotexto; fin.
|
Corrijamos ese error.
¿Viste la instrucción nueva? Esperar(t) es una instrucción que hace que la computadora espere t milésimas de segundo.
Está definida en la biblioteca pantalla.
|
EJERCITACION |
|
|
|
|
3.1 ¿Te parece que se podrá usar más de una biblioteca simultáneamente? ¿Cuál de las siguientes formas te parece correctas? ¿Por qué las demás son incorrectas? a) usar graficos,pantalla; b) usar graficos; usar pantalla; c) usar pantalla y graficos; d) usar graficos, pantalla e) usar graficos, pantalla; |
3) Haciendo algunos dibujos: coordenadas
Entrar al modo gráfico no tiene sentido si no lo usamos para dibujar. La instrucción
punto(X,Y); dibuja un punto en la pantalla en modo gráfico en las coordenadas X,Y.
¿Qué es esto de las coordenadas? Cada lugar en la pantalla del modo gráfico (pixel) tiene una ubicación. Algo así como la latitud y longititud de cada ciudad sobre la superficie de la Tierra.
Un pixel está ubicado a cierta distancia del borde izquierdo de la pantalla (a esta distancia se la llama X) y a cierta distancia del borde superior de la pantalla (llamada Y).
(0,0) (719,0)
(319,0) (719,319)
|
Veamos como se llaman las coordenadas de las cuatro esquinas de la pantalla:
Las esquinas tienen estas coordenadas porque la pantalla mide 720 pixels de ancho y 320 pixels de alto.
|
EJERCITACION |
|
|
|
|
3.2 ¿Cuáles serán las coordenadas del centro de la pantalla? ¿Y las del medio de cada borde? 3.3 Hacé un programa que ponga un punto en el medio de la pantalla. |
4) Otras instrucciones de gráficos
Veamos ahora nuevas instrucciones para dibujar:
linea(X1,Y1,X2,Y2); dibuja una línea que une el punto de coordenadas (X1,Y1) con el de coordenadas (X2,Y2).
circulo(Xc,Yc,R); dibuja un circulo con centro en el punto (Xc,Yc) y radio R.
Recuerda que para poder usar estas instrucciones hay que pasar al modo gráfico.
Programa demostracion;
usar pantalla, graficos;
comienzo borrarpantalla; escribir('Ahora estamos en modo texto'); esperar(1000); modografico; linea(0,0,719,319); linea(0,319,729,0); circulo(360,160,40); circulo(360,160,80); esperar(1000); modotexto; escribir('Ahora tambien'); esperar(1000); fin.
|
Hagamos un programa que use todo junto.
Observa que siempre después de usar el modo gráfico es necesario volver al modo texto.
|
EJERCITACION |
|
|
|
|
3.4 Hacer un programa que dibuje un cuadrado de 50 pixels de lado en el centro de la pantalla. 3.5 Hacer un programa que dibuje un triángulo en el centro de la pantalla. 3.6 Es muy común olvidarse de volver al modo texto antes del fin de un programa. Al finalizar la ejecución de un programa así, la computadora continúa trabajando normalmente, y podemos seguir usando el sistema operativo. El único inconveniente es que no podemos ver lo que estamos escribiendo. Una solución a este problema sería tener un programa que lo único que hiciera fuera volver a modo texto. Entonces, cuando nos quedemos sin poder ver lo que escribimos, sólo hay que ejecutar este programa (escribiendo sin ver) y listo. Escribí y compilá dicho programa. |
5) Pintando lo dibujos
Los dibujos que hicimos hasta ahora sólo estaban hechos de líneas. Veamos como pintarlos.
La instrucción
pinta(x,y,color_limite); sirve para pintar una región delimitada con trazos hechos en el color_limite (los colores blanco y negro se llaman 1 y 0 en un monitor monocromático).
Veamos un ejemplo:
Programa permitido_e; usar graficos,pantalla;
comienzo modografico; circulo(350,175,200); circulo(350,175,180); pinta(155,175,1); linea(260,100,440,100); linea(440,100,440,130); linea(440,130,320,130); linea(320,130,320,160); linea(320,160,380,160); linea(380,160,380,190); linea(380,190,320,190); linea(320,190,320,220); linea(320,220,440,220); linea(440,220,440,250); linea(440,250,260,250); linea(260,250,260,100); pinta(350,175,1); esperar(3000); modotexto; fin.
|
¿Te das cuenta qué es lo que dibuja este programa? Probalo. (Este programa funciona bien en un monitor Hércules, pero no en un monitor color)
Para entender cómo funciona la instrucción pinta, podemos pensar que internamente la computadora usa un lápiz para pintar. Primero, apoya la punta del lápiz en las coordenadas (x,y) que le indicamos en la instrucción pinta. Luego, empieza a mover el lápiz hacia la derecha, y sigue hasta que encuentra una línea del color color_límite, donde baja un poquito el lápiz y empieza todo de nuevo, pero hacia la izquierda.
Los dos errores más comunes al usar la instrucción pinta son decirle que empiece a pintar en un punto que ya es del color del límite, o pedirle que pinte un área que no está completamente cerrada, y entonces el 'lápiz' se 'escapa' y termina pintando toda la pantalla.
Hay muchas otras instrucciones de gráficos. Para aprender sus detalles, así como los códigos de los colores y otras cosas, lee el apéndice C: Gráficos.
|
|
|
|
3 |
Programas, programas, progamas... |
|
|
. Analizando programas más complicados . Un buen estilo de programación . Procedimientos |
|
1) Un programa más complicado
Nuestros programas, hasta ahora, fueron bastante sencillos. Ni bien nos planteábamos un problema, podíamos escribir el programa que lo resolvía. Esto no siempre sucede así.
Tratemos de analizar el siguiente programa (no es necesario que lo tipees en la computadora; pedile al ayudante que te dé una copia).
Programa ferroviario;
usar pantalla;
procedimiento durmiente;
comienzo
escribir('▄▒▄▄▄▄▄▒▄');
esperar(500);
escribir(' ▒ ▒');
esperar(500);
fin;
procedimiento tramo;
comienzo
durmiente;
durmiente;
durmiente;
durmiente;
fin;
procedimiento via;
comienzo
tramo;
tramo;
tramo;
fin;
procedimiento locomotora;
comienzo
escribir('▒//^\\▒');
esperar(500);
escribir(' ░░░░░ ');
esperar(500);
escribir('░█ Q █░');
esperar(500);
escribir('░ ░');
esperar(500);
escribir('░ █▀█ ░');
esperar(500);
escribir('░ ▀▀▀*****');
esperar(500);
escribir('░ ****');
esperar(500);
escribir('░ █▀█ ░ **** *');
esperar(500);
escribir('░ ▀▀**░ ******');
esperar(500);
escribir('░ *** *****');
esperar(500);
escribir('░ ░*** ****');
esperar(500);
escribir('░ ███ ░ ** ***');
esperar(500);
escribir('░█████░ *** *');
esperar(500);
escribir('░█████░ ***');
esperar(500);
escribir(' ░░░░░ ***');
esperar(500);
fin;
procedimiento medio_vagon;
comienzo
escribir('░░░░░░░');
esperar(500);
escribir('░░░ ░░░');
esperar(500);
escribir('░░░░░░░');
esperar(500);
escribir('░░░░░░░');
esperar(500);
fin;
procedimiento vagon;
comienzo
medio_vagon;
medio_vagon;
fin;
procedimiento tren;
comienzo
locomotora;
durmiente;
vagon;
durmiente;
vagon;
durmiente;
vagon;
durmiente;
vagon;
fin;
comienzo {del programa ppal}
borrarpantalla;
via;
tren;
via;
fin.
¿Qué es lo que hay de nuevo en este programa? Habrás observado la siguiente palabra:
procedimiento
Un procedimiento es una espacie de programa más pequeño. El objetivo de usar procedimientos es el de evitar repetir más de una vez la misma secuencia de instrucciones (para evitar trabajo y para disminuir la cantidad de errores que pudieran cometerse), y también el de hacer los programas más legibles.
Al igual que un programa, un procedimiento tiene que tener un formato específico que es como el siguiente:
Procedimiento <nombre_del_procedimiento>;
{Zona de declaración de constantes} {Zona de declaración de tipos} {Zona de declaración de variables} {Zona de declaración de subrutinas}
comienzo {Ordenes del procedimiento} fin;
|
También habrás observado la siguiente línea:
comienzo {del programa ppal}
Lo que está entre llaves es un comentario, y es completamente ignorado por el compilador. Usaremos todos los comentarios que sean necesarios para que la lectura del programa sea clara.
Recordá siempre que los comentarios están destinados a la persona que lee el programa y no al compilador.
|
EJERCITACION |
|
|
|
|
4.1 Compara esta estructura con la del programa principal (dada al principio del capítulo dos). ¿Cuáles son las semejanzas? ¿Cuáles las diferencias? |
2) Analizando el programa
Habrás observado que el programa anterior está dividido en dos grandes partes, que llamaremos el programa principal (desde el último comienzo hasta el fin) y los procedimientos, que están antes.
Cada uno de los procedimientos se encarga de hacer tareas pequeñas y sencillas.
El programa principal es quien se encarga de unir todos estos procedimientos, indicando en qué momento debe actuar cada uno.
Veamos qué hace cada uno de los procedimientos del programa ferroviario.
El procedimiento durmiente simplemente hace algunos escribir en la pantalla. Luego de cada escribir, hace una pausa. Hasta ahora, la única novedad es la de llamar procedimiento a algo que antes llamábamos programa.
El procedimiento tramo es más innovador. Este procedimiento llama cinco veces al procedimiento durmiente. ¿Qué significa "llama"? Hacer un procedimiento es equivalente a definir una nueva instrucción del lenguaje. Entonces, tramo está invocando cinco veces esa nueva instrucción que acabamos de definir llamada durmiente.
De la misma forma, via sólo llama a la nueva instrucción tramo.
|
EJERCITACION |
|
|
|
|
4.2 ¿Qué es lo que hacen los procedimientos locomotora, medio_vagon, vagon y tren? 4.3 ¿Será importante el orden en que se declaran (escriben) los distintos procedimientos? Probá escribir el procedimiento tramo después del procedimiento via. Y luego via despues de locomotora. ¿Qué sucede? ¿Por qué? 4.4 ¿Será importante el orden en qué se llaman los procedimentos desde el programa principal? Hacé dos programas para demostrar tu respuesta. |
3) Poniendo las cosas en claro
En el programa anterior definimos varios procedimientos llamados durmiente, tramo, via, locomotora, medio_vagon, vagon y tren.
Nadie nos obliga a ponerles esos nombres. Sin embargo, queda mucho más clara cuál es la función que cumple cada procedimiento si elegimos nombres declarativos en vez de nombres como X1, NACHO, AA, o mucho peor, si llamamos tren a un procedimiento que dibuja una via, y via a uno que dibuja un avión.
Siempre que tengas que elegir el nombre de un procedimiento, elegilo para que quede claro qué es lo que realiza sin tener que analizar detalladamente el mismo.
Nosotros ya habíamos usado algunos procedimientos sin saberlo. Las instrucciones borrarpantalla, modografico, modotexto, linea, etc. son todos procedimientos que están declarados en las bibliotecas llamadas pantalla y graficos. Más adelante aprenderemos cómo guardar nuestros procedimiento en bibliotecas.
4) Forma de programar
En el punto uno hablamos de que podíamos resolver programas más complicados. Existe una técnica para resolver problemas llamada programación TOP-DOWN, que puede traducirse libremente como programación GENERAL-ESPECIFICA. Más adelante volveremos a hablar de esta técnica, pero por ahora tratemos de ver un ejemplo de cómo pensar un programa usándola.
¿Cómo es que resolvimos el problema de hacer que un tren apareciera por la pantalla?
Primero pensamos que el programa debía verse más o menos así:
Dibujar una via
Dibujar un tren
Dibujar una via
Y entonces escribimos el programa siguiente:
comienzo
via;
tren;
via;
fin.
Por supuesto que todavia no podíamos ejecutar este programa, pues no estaba aún definido qué eran via y tren. Sin embargo, este programa resolvía el problema que teníamos dejandonos planteados dos problemas menores: dibujar una via y dibujar un tren.
El siguiente paso fue olvidarse momentáneamente del problema original, y preocuparse solamente por cómo dibujar una vía. Para esto, pensamos:
Para dibujar una vía, voy a
dibujar un tramo,
y otro tramo,
y otro
Por lo tanto, escribimos un procedimiento que resolvía el problema:
procedimiento vía;
comienzo
tramo;
tramo;
tramo;
fin;
Nuevamente achicamos el problema de dibujar una vía al de dibujar un tramo de vía. Así continuamos con todo el programa.
La programación top-down es una técnica que permite resolver problemas complejos tratándolos como conjuntos de problemas más pequeños.
5) Como funcionan los procedimientos
{1} Programa inutil; {13} procedimiento AB; {2} usar pantalla; {14} comienzo {3} procedimiento A; {15} A; {4} comienzo {16} B; {5} escribir('A1'); {17} fin; {6} escribir('A2'); {18} comienzo {7} fin; {19} borrarpantalla; {8} procedimiento B; {20} B; {9} comienzo {21} AB; {10} escribir('B1'); {22} A; {11} escribir('B2'); {23} fin. {12} fin;
|
Aclaremos ahora qué es lo que pasa cuando ejecutamos un programa que tiene procedimientos.
El resultado de su ejecución de este programa sería lo siguiente escrito en la pantalla:
B1
B2
A1
A2
B1
B2
A1
A2
En el programa agregamos números entre llaves para poder identificar cada línea en la siguiente explicación (recordá que lo que está entre llaves es un comentario).
El comienzo del programa está en la línea 18. Cuando empieza la ejecución del programa, primero se borra la pantalla (línea 19); luego se encuentra una llamada al procedimiento B (línea 20). Entonces le ejecución se traslada a las líneas que indican como realizar el procedimiento B, es decir, las líneas 9, 10, 11 y 12. Al llegar a la línea 12, donde dice fin, termina la ejecución del procedimiento B, y se debe continuar con lo que se estaba haciendo antes.
Entonces, la siguiente línea que se ejecuta es la número 21. Esta dice que hay que realizar el procedimiento AB. Para ello, se comienza a ejecutar la línea que dice cómo realizar dicho procedimiento: 14, 15. En este punto es necesario realizar el procedimiento A, por lo que se ejecutarán las líneas 4, 5, 6 y 7; sigue la ejecución del procedimiento AB en la línea 16 (que hace que se ejecuten las líneas 9, 10, 11 y 12 del procedimiento B), y termina en la línea 17 con la palabra fin.
Todo esto se realizó para ejecutar el procedimiento AB, que fue llamado en la línea 21. Entonces hay que seguir por la 22 (que hace que se ejecuten las líneas 4, 5, 6 y 7 del procedimiento A) y ,por ultimo, por la línea 23 que dice fin.
Habrás notado que cada vez que ejecutamos un procedimiento definido por nosotros, éste estaba escrito antes de ser llamado. Antes significa que si yo leo todo el programa de principio a fin, primero encuentro la declaración del procedimiento, y luego puedo usarlo.
Esto es algo estrictamente necesario; si no fuera así, el compilador nos daría un error antes de poder terminar su trabajo.
6) Una nueva instrucción antes de la ejercitación
Antes de realizar la ejercitación que viene a continuación, sería bueno aprender a usar la instrucción
irxy(coordenadaX,coordenadaY); que sirve para ubicar el cursor en la pantalla antes de escribir algo en modo texto.
Es decir, el siguiente programa escribe en la pantalla algo más o menos parecido al recuadro de la derecha.
programa demo_de_irxy; usar pantalla; comienzo borrarpantalla; irxy(1,1); escribir('Hola'); irxy(6,6); escribir('Hola'); irxy(11,11); escribir('Hola); irxy(16,16); escribir('Hola'); irxy(21,11); escribir('Hola'); irxy(26,6); escribir('Hola'); irxy(31,1); escribir('Hola'); fin.
|
(1,1) (80,1)
(25,1) (25,80)
|
Hola Hola
Hola Hola
Hola Hola
Hola
|
En el capítulo tres hablamos de las coordenadas del modo gráfico. Las coordenadas del modo texto son similares, sólo que varían entre 1 y 80 para X y entre 1 y 25 para Y. Las coordenadas de las cuatro esquinas en modo texto son:
Observa que la instrucción irxy está definida en la biblioteca pantalla ( y por lo tanto, para usarla habrá que decir usar pantalla; al principio del programa).
|
EJERCITACION |
|
|
|
|
4.5 Realizar un procedimiento que sirva como presentación del grupo. Para ello pueden usar instrucciones del modo gráfico o del modo texto. 4.6 Agregar el procedimiento de recién a todos los programas anteriormente hechos. 4.7 Probar y analizar qué tipo de error indica el compilador en cada uno de los siguientes casos. ¿Es correcto el mensaje de error? - No escribir fin. al final del programa principal - No escribir fin; al final de un procedimiento cualquiera - No escribir fin; al final de un procedimiento definido justo antes de que empiece el programa principal. - Usar un procedimiento no definido. - No usar un procedimiento previamente definido. |
|
|
|
|
5 |
Programación Top-Down |
|
|
. Estructura de un programa . Diseño Top-Down |
|
1) La estructura de un programa bien escrito
Existen algunas reglas que hacen que tu programa sea fácil de escribir, leer y modificar:
- Las primeras líneas de un programa deben explicar de que se trata.
- Cada idea importante debe estar en un procedimiento aparte.
- Cada procedimiento debe contener una o más líneas de comentarios que indiquen cuál es el objetivo del mismo (utilizando { }).
- Los procedimientos deben llamarse con un nombre que denote claramente al lector para qué sirven.
- El programa principal debe indicar qué hará todo el programa.
Esta es la estructura que debe tener cualquier programa que use procedimientos:
programa nombre_del_programa;
usar nombre_de_librerias_a_usar;
procedimiento nombre_de_procedimiento_1;
{descripción del procediminto 1}
comienzo
:
{instrucciones del procedimiento 1}
:
fin;
procedimiento nombre_de_procedimiento_2;
{descripción del procedimiento 2}
comienzo
:
{instrucciones del procedimiento 2}
:
fin;
:
{declaración de otros procedimientos}
:
comienzo {descripción del programa principal}
:
{instrucciones del programa -> varias llamadas a procedimientos}
:
fin.
En un programa que contiene procedimientos, lo primero es analizar y escribir la rutina principal. Aquí se da un panorama general del programa, evitando los detalles.
Para cualquier programa, la rutina principal debe estar estructurada de la misma manera.
comienzo {descripción del programa}
:
:
{cuerpo de la rutina principal (mayormente llamadas a procedimientos)}
:
:
fin.
La primera sentencia de la rutina principal debe ser un comienzo y un comentario con la descripción del programa, y la última un fin (apertura y cierre del programa principal).
El cuerpo de la rutina principal indica qué procedimientos se van a ejecutar y en qué orden, mientras que los detalles del programa aparecen en los procedimientos. Todos los procedimientos tienen la misma forma, no importa lo que hagan.
procedimiento nombre-del-procedimiento ;
{descripción del procedimiento}
comienzo
:
:
{cuerpo del procedimiento (la mayor parte no son llamadas a procedimientos)}
:
:
fin;
Todas los procedimientos deben comenzar con un comentario que defina la acción del mismo y la palabra reservada comienzo, y deben terminar con un fin; (apertura y cierre del procedimiento).
Recuerda qué símbolos de puntuación deben utilizarse después de fin, segün si sea un procedimiento o el programa principal:
; (punto y coma) al finalizar el procedimiento
. (punto) al finalizar el programa principal
El cuerpo del procedimiento puede contener llamadas a otros procedimientos.
Es buena idea destacar el cuerpo de la rutina principal y de los procedimientos espaciándolas adecuadamente. De esta forma se ve con mayor claridad cuál es el comienzo y el final de cada uno de ellos. Los blancos entre los procedimientos también aclaran este aspecto.
Algunas de estas reglas son requeridas por el computador: el fin al final de la rutina principal y de los procedimientos.
Otras reglas son indistintas para la computadora como los comentarios, los espacios para destacar el cuerpo de las rutinas y las líneas en blanco. Estas se usan sólo para hacer más clara la lectura del programa.
|
EJERCITACION |
|
|
|
|
5.1 ¿Qué va al principio de la rutina principal? 5.2 ¿Qué va al final de la rutina principal? 5.3 ¿Cuál es el propósito del fin? 5.4 ¿Cuál es el propósito de los comentarios en blanco en el programa? |
2) Diseño Top‑Down de un programa
Supongamos que tenés tres amigas ANA, NAN y ANN y decidís realizar un programa para que sus nombres se vean escritos en pantalla en forma vertical.
El programa tendrá una procedimiento que muestre por pantalla una gran N y otra procedimiento que muestre una gran A. Así se pueden mostrar los tres nombres.
Seguramente te estarás preguntando cómo se muestra por pantalla una gran N o una gran A. Es fácil perderse en estos detalles cuando se trata de resolver un problema.
Es mejor ignorar los detalles al principio y comenzar con la rutina principal. Imaginá qué deberá ésta indicarle a la computadora que haga.
Puede no haber sentencias PSEUDO-PASCAL para realizarlas. En ese caso, usá un procedimiento.
Veamos este ejemplo escrito informalmente (aunque esté en castellano, no está en PSEUDO-PASCAL):
programa nombres comienzo limpiar la pantalla mostrar una gran A mostrar una gran N mostrar una gran A fin
|
Le podemos decir a la computadora que ejecute la primera línea con una instrucción simple: borrarpantalla.
Además, tendremos que agregar el uso de la biblioteca pantalla.
Para ejecutar la segunda línea la computadora necesita varios escribir, que juntos mostrarán una letra como ésta
XXX XX
XXXX XX
XX XX XX
XX XXXX
XX XXX
También tendremos que dejar una o más líneas en blanco para dejar espacios entre las letras.
No nos preocupamos de los detalles del escribir ahora. Lo pensamos como un procedimiento GRAN-N.
programa nombres; comienzo usar patalla; : fin; procedimiento gran_n; comienzo {muestra una n grande} {escribe en letras grandes con n y a} comienzo borrarpantalla; : gran_a; fin; gran_n; procedimiento gran_a; gran_a; {muestra una gran a} fin.
|
Podrás escribirla luego, después de finalizar la rutina principal. Esta es la rutina principal completa y la estructura general del programa:
Después podrás completar los detalles en los EJERCICIOS al final del capítulo (y los procedimientos GRAN-A y GRAN-N).
El método que hemos utilizado para resolver este problema se llama programación top‑down.
Reglas para la programación Top‑Down
1‑ Escribir una versión INFORMAL en castellano de la rutina principal
2‑ Convertir a PSEUDO-PASCAL cada frase en castellano que se puede traducir a una o dos sentencias
3‑ Si no se pueden convertir en una o dos sentencias PSEUDO-PASCAL, convertir en una llamada a un procedimiento
4‑ Realizar el mismo proceso para cada procedimiento definido en el paso 3
Este método tiene dos ventajas. Primero te hace pensar sobre lo que se supone que haga todo el programa. Segundo, te evita perderte y confundirte en los detalles.
|
EJERCITACION |
|
|
|
|
5.5 En tus propias palabras, ¿qué significa programación top‑down? 5.6 ¿Porqué es útil este tipo de programación? 5.7 Utiliza el método top‑down para completar la planificación del programa NOMBRES. Ingresalo en la computadora y compilalo. El programa mostraría el nombre a la izquierda de la pantalla y hacia abajo. Ejecútalo y corrige los errores. Podés grabarlo si lo deseas. 5.8 Cambia la rutina principal de NOMBRES para mostrar el nombre ANN. Cámbialo de nuevo para mostrar NAN. Cámbialo nuevamente para mostrar NANA y luego ANANA. Puedes grabar alguna de estas versiones si lo deseas. 5.9 Planteá algún problema cotidiano, y resolvelo usando el método top-down (no necesariamente usando la computadora) |
|
|
|
|
6 |
Variables |
|
|
. Definiciones . Uso de variables y constantes |
|
1) ¿Qué es una constante?
Esta es un pregunta fácil de responder: una constante es un valor que no varía. Por ejemplo, la cantidad de días que tiene una semana es constante, así como la cantidad de meses que tiene el año. Otros ejemplos de constantes podrían ser la distancia de Capital Federal a Mar del plata, el valor de p, la cantidad de lados que tiene un cuadrado, la hora en que los ingleses toman el té, el nombre del país en que vivimos, etc.
2) ¿Qué es una variable?
Podemos responder esta pregunta de forma parecida a la anterior: una variable es un valor que varía. Veamos algunos ejemplos: la cantidad de días que tiene el mes es variable, pues depende del mes del que se esté hablando, la distancia de Capital Federal a una auto que está viajando hacia Mar del Plata, la proporción entre varones y mujeres en el país, la cantidad de lados que tiene un polígono, la hora en que me levanto, el nombre del país sede del mundial de fútbol, etc.
3) ¿Qué es un tipo?
Tanto la constantes como las variables que mencionamos en los dos puntos anteriores tienen cada una determinado tipo. Por ejemplo una semana tiene días, un auto puede estar a determinados kilómetros de capital federal, p es un número real, un polígono tiene una cantidad entera de lados, el té se toma a determindads horas, el nombre de un país es una cadena de caracteres.
Todas estas cosas (días, kilómetros, reales, enteros, horas, cadena de caracteres) son tipos distintos.
Los tipos son muy importantes, porque si los uso correctamente no voy a hacer frases incoherentes. Está mal decir:
'Voy a tardar 10 kilómetros'
'Está a 5000 caracteres de distancia'
'La proporcion entre hombres y mujeres es de 1.23 dias'
4) ¿Qué es un valor?
Cuando hablamos de valor nos referimos al 'contenido' de una variable o de una constante. El tipo se aplica tanto a la variable o constante como a su valor.
Veamos ejemplos de valores: p vale 3.1415926, la cantidad de lados de un polígono podría valer 8 o 4, la distancia al auto puede ser 384.5 kilómetros, y los sábados me levanto a las 11 horas.
5) Rangos de valores
Una constante o variable no puede tomar cualquier valor. Generalmente, los valores que puede tomar está determinado por el tipo. Por ejemplo, una hora puede valer entre 0 y 23; una cantidad de kilómetros tiene que valer más que 0, la cantidad de días que tiene un mes varía entre 28 y 31, según el mes, etc.
Se llama rango de valores a todos los valores que puede tomar determinado tipo.
6) Usando variables
Bueno, llegó el momento de usar todo esto.
En pseudo-pascal, como en casi todo lenguaje de programación, hay una forma de representar a las variables y a las constantes.
¿Por qué necesitamos hacerlo? Porqué generalmente el objetivo de un programa es manejar información (datos de entrada) para poder producir un resultado (dato de salida). Y necesitamos alguna forma de referirnos a información que no conocemos en el momento de escribir el programa (pero que si conoceremos al usarlo).
Al principio de la guía hicimos un programa que calculaba e imprimía el resultado de sumar dos números determinados (1234+ 8765). En realidad, este era un programa bastante tonto, pues es muy incomodo tener que usarlo para saber que 1234+ 8765= 9999, ya que ese programa no nos dice nada acerca de 1233+1, ni de 1+1. Lo que necesitamos es un programa más general, que permita calcular la suma de dos números cualesquiera.
Una parte de un programa que hiciera eso podría ser:
A:=10;
B:=20;
escribir('La suma da como resultado :', A+B);
¿Qué hay de nuevo en estas líneas?
Primero, veamos el uso de A y B.
A y B son los nombres de dos variables, que representan los números que quiero sumar.
Los nombres de las variables pueden ser de cualquier longitud, y deben estar formados por letras, números o algunos caracteres especiales como el subrayado ('_'), pero nunca deben empezar con un número.
Recordemos (y completemos) la definición de variable:
Una variable es un elemento que está identificado por su nombre y su tipo. En todo momento, una variable tiene un valor, que puede variar dentro del rango de valores que corresponde a su tipo.
Siempre que quiera usar una variable para hacer un programa en pseudo-pascal, necesito decir como se llama y cual es su tipo, antes usarla por primera vez. Esto se llama declarar una variable.
Veamos entonces como declarar variables.
En la zona de declaración de variables del programa principal o de un procedimiento (ver capítulos 2.1 y 4.1), es decir, antes del comienzo de las instrucciones, debo colocar:
variables
<nombre_variable_1> : <tipo_variable_1> ;
...
<nombre_variable_n> : <tipo_variable_n> ;
poniendo donde dice <nombre_variable_i> el nombre de la variable que quiero declarar, y colocando a continuación su tipo (donde dice <tipo_variable_i>);
Como ya dijimos, el nombre de una variable puede ser de cualquier longitud, y contener letras y números (y no empezar con números).
Con respecto a los tipos de las variables, el pseudo-pascal provee los tipos de datos más comunmente usados. Algunos de estos tipos son (más adelante veremos otros):
entero
real
cadena
El tipo entero se usa para representar valores enteros, es decir, 0, 1, 10, -104, 1432, etc.
El tipo real sirve para valores como 0.34, 10.343, 3.14159, 10.0 (observa que se usa punto en lugar de coma, y que 10 puede ser representado como entero o como real).
El tipo cadena sirve para cosas como 'Argentina', 'hola', 'ABCE', etc., que son cadenas de caracteres.
Nuestro programa completo quedaría entonces:
Programa sumador;
Variables A:entero; b:entero;
Comienzo A:=10; B:=20; Escribir('La suma da como resultado :', A+B); Fin.
|
Nos falta ahora entender qué es lo que hace la línea que dice A:=10.
Simplemente lo que estamos diciendole a la computadora que haga es que guarde un 10 en la variable A.
¿Que hará el siguiente programa?
Programa que_hace; usar pantalla;
variables num:entero; calle:cadena;
comienzo borrarpantalla; num:=302; calle:='Santa Fe ' writeln('Tengo que ir a ',calle,num); num:=1200; writeln('Y luego a ',calle,num); calle:='Sarmiento '; writeln('Y por ultimo a ',calle,num); fin.
|
Observa atentamente cómo varía el valor de las variables a lo largo del programa.
|
EJERCITACION |
|
|
|
|
6.1 Dar cinco ejemplos de variables de la vida diaria, especificando en cada caso cual es el nombre, tipo y rango de valores de cada una. 6.2 Hacer un programa restador y un programa multiplicador, parecidos al programa sumador que hicimos como ejemplo. 6.3 Decir cuáles de los siguientes nombres para variables o constantes son incorrectos y por qué: XX X* *X X2 2X SOLO UNA 332 MAYUS minus MeZcLa _R SOLO_UNA 6.4 ¿Cuál será la ventaja de elegir correctamente el nombre de las variables? Por elegir correctamente se entiende, por ejemplo, no llamar PLATA a una variable que representa cierta cantidad de tiempo. 6.5 ¿Habrá alguna diferencia si escribimos el nombre de una variable en mayúsculas o en minúsculas? Verificarlo. |
7) Usando constantes
Al igual que para las variables, las constantes deben ser declaradas antes de poder ser usadas.
Definamos primero qué es una constante.
Una constante es un elemento que está identificado por su nombre y su tipo. En todo momento, una constante tiene el mismo valor, que puede debe pertenecer al rango de valores que corresponde al tipo de la constante.
Para declarar las constantes, la forma es la siguiente:
Constantes
<nombre_de_constante_1> = <valor_constante_1> ;
...
<nombre_de_constante_n> = <valor_constante_n> ;
donde <nombre_de_constante_i> es un nombre de cualquier longitud, formado por letras, numeros o el caracter subrayado, y <valor_constante_i> es el valor de la constante.
El tipo de la constante queda determinado por el valor que tiene. Por ejemplo, si declaro:
Constantes
impuesto=3.5;
distancia=4000;
nombre='Andres';
la constante impuesto será de tipo real, la constante distancia será de tipo entero, y la constante nombre de tipo cadena.
Más adelante veremos cuándo y por qué usar constantes.
|
EJERCITACION |
|
|
|
|
6.6 Dar cinco ejemplos de constantes de la vida diaria, especificando en cada caso cual es el nombre, tipo y rango de valores de cada una. 6.7 ¿Para qué te parece que pueden servir las constantes dentro de un programa? Dar algún ejemplo. |
|
|
|
|
7 |
Entrada y salida |
|
|
. Mejorando la presentación . Escribiendo en la pantalla |
|
1)Introducción
En el punto 6 reescribimos el programa sumador. La nueva versión usa variables en vez de las constantes que usábamos al principio. Sin embargo, todavía este programa no nos es muy útil, pues si queremos saber cuanto da la suma de dos números, tenemos que modificar el código fuente del programa, compilarlo y ejecutarlo para ver el resultado. Si las variables se usaran sólo asi, no servirían para mucho.
Varias veces dijimos que el objetivo de un programa es obtener datos, procesarlos y emitir los resultados. Ya vimos algunas formas de emitir resultados (realizando gráficos o con la instrucción escribir), y también de procesar datos (al hacer cuentas, por ejemplo). Este es el momento de que aprendamos cómo puede hacer un programa para obtener datos.
Para realizar la lectura de la información, necesitamos una nueva instrucción, la instrucción leer. Leer es el tercer componente del ciclo entrada-proceso-salida que mencionábamos recién.
¿De dónde obtendrá el programa la información que necesite? Probablemente, de alguna persona que esté sentada frente a la computadora usando el teclado, o bien de algún tipo de computadora a través de otro periférico de entrada.
Cuando poníamos
escribir("hola");
nombre:="Eduardo";
escribir(nombre);
lo que hacia el programa era escribir la constante "hola" en la pantalla, o bien, escribir el valor de la variable nombre en la pantalla.
Cuando usamos leer NO podemos usar constantes (ver la ejercitación). Pero sí podemos modificar el valor de una variable. Veamos algún ejemplo.
Programa QuienSos;
variables nombre:cadena;
comienzo escribir("Como te llamas?"); leer(nombre); escribir("Hola ",nombre); fin.
|
¿Qué hace este programa? Probalo.
La primera instrucción (como ya deberías saber) muestra una frase en la pantalla.
La segunda instrucción hace que la computadora se quede esperando hasta que alguien escriba algo en el teclado y luego presione <ENTER>.
Mientras la computadora espera, aparece un cursor en la pantalla indicando dónde se verá lo que escribas.
Luego, asigna a la variable nombre lo que escribiste y por último, la tercera instrucción escribe un mensaje con el nombre recién escrito.
La instrucción leer también funciona con variables enteras o reales. Con esto, podemos hacer una nueva versión del programa sumador:
Programa ReSumador;
variables s1,s2:enteras;
comienzo escribir("Ingrese los dos números a sumar"); leer(s1,s2); escribir("El resultado es: ",s1+s2); fin.
|
Finalmente, tenemos un buen programa sumador.
Una vez compilado, podemos usarlo una y otra vez para calcular el resultado de distintas sumas sin tener que recompilar.
2) Mejorando la presentación
Hagamos una pequeña modificación en el programa ReSumador. Al declarar las variables pongamos:
variables s1,s2:reales;
Recompilá y probá el programa. ¿Qué significan esos números que da como respuesta?
Cuando la computadora necesita escribir números muy grandes (o muy pequeños) usa una notación llamada notación científica. En este sistema de notación, los números se representan escribiendo el dígito más significativo (el primero desde la izquierda que no es cero), un punto y el resto de los dígitos, seguidos de una indicación de cuantos lugares hay que mover el punto para obtener el número original.
Por ejemplo, el número 145 se representa 1.45E02, donde E02 significa mover el punto dos lugares a la derecha; el 0.0145 se representa 1.45E-02, donde E-02 indica mover el punto a la izquierda dos lugares.
Veamos una lista con otros números
1 1E00
10 1E01 0.1 1E-01
100 1E02 0.01 1E-02
1000 1E03 0.001 1E-03
10000 1E04 0.0001 1E-04
Un problema que tiene esta representación es que redondea los números. Por ejemplo, el número 1234567890 se representa 1.2346E09, que también es la representación del 12345600000.
La notación científica es cómoda para números grandes o pequeños, pero para números 'comunes' no hace falta usarla. La instrucción escribir con variables de tipo real, siempre usará esta notación, a menos que le indiquemos con cuantos dígitos queremos ver el resultado en la pantalla.
Las instrucciones
num:=445.3;
escribir(num);
mostrarían en pantalla: 4.4530000000E+02
En cambio, si usáramos
escribir(num:3:1);
veríamos: 445.3
Al poner num:3:1 estamos pidiéndo que escriba el valor de la variable num con tres dígitos a la izquierda del punto y uno a la derecha.
Otros ejemplos:
num:=1234.04
escribir(num); -> 1.2340400000E+03
escribir(num:4:2); -> 1234.04
escribir(num:7:4); -> 1234.0400
escribir(num:4:0); -> 1234
Observa que en último ejemplo no escribió los decimales. Si el número de dígitos que está antes del punto no alcanza para llenar el espacio solicitado, se agregan espacios; si el número de dígitos que está después del punto no alcanza, se agregan ceros (ver el cuarto ejemplo recién mencionado).
También es posible mejorar la presentación de enteros y cadenas, para hacer que estén alineados. Por ejemplo,
escribir('Hola'); -> Hola
escribir('Hola':6); -> Hola
escribir(4); -> 4
escribir(4:4) -> 4
|
EJERCITACION |
|
|
|
|
7.1 Explicar por qué no es posible usar constantes con la instrucción leer. 7.2 Realizar nuevas versiones de los programas para multiplicar y restar hechos en el ejercicio 6.2. 7.3 ¿Cuál es el número más grande que puede almacenarse en una variable de tipoentero? ¿Y real? Hacer un programa para verificarlo. |
|
|
|
|
8 |
Tomando decisiones |
|
|
. La estructura de una condición . Condiciones compuestas |
|
1) Repaso
Pensemos en el tipo de programas que hicimos hasta ahora.
Nuestros primeros programas eran sólo secuencias de instrucciones. Siempre hacían lo mismo, sin importar ni como ni cuantas veces los usáramos.
Luego aprendimos a usar procedimientos, que nos ayudaban a escribir menos y a cometer menos errores, pero todavía nuestros programas seguían haciendo siempre lo mismo.
Sin embargo en la vida diaria es muy común que optemos por hacer una cosa u otra según se cumpla o no alguna condición. Por ejemplo, es común usar frases como:
"Si baja el dólar, entonces compro mi computadora, si no, uso las del colegio".
Es decir, necesitamos alguna forma de hacer programas que realicen cosas distintas según alguna condición sea verdadera o falsa.
2) La instrucción si
Para poder tomar decisiones, necesitaremos usar la instrucción siguiente:
si condición entonces
acción1
sino
acción2;
donde acción1 y acción2 son cualesquiera de las instrucciones que ya conocemos, y condición es algo de la forma
operando1 operador_de_relación operando2
y los operandos pueden ser variables o constantes, y el operador_de_relación puede ser uno de los siguientes:
= (igual) < (menor)
> (mayor) <= (menor o igual)
>= (mayor o igual) <> (distinto).
Veamos algunos ejemplos de condiciones:
precio=5 (Operandos: precio y 5; operador: =)
dolar<peso (Operandos: dolar y peso; operador: >)
4=4
'abcdefg'<'bcdefg'
784<>7+8+4
Una condición puede tomar alguno de los dos valores de verdad VERDADERO o FALSO. Por ejemplo, todas las condiciones anteriores son (o pueden ser) verdaderas.
Algunas condiciones con valor de verdad falso pueden ser:
4=7 'aaaaa'>'bbbbb'
676<>7 estudio=buena_nota
|
EJERCITACION |
|
|
|
|
8.1 Determinar en los siguientes casos si la expresión es correcta o incorrecta, y si es corecta, si es verdadera o falsa: 47>4 'l'<'eme' 123<'letras' -47>-4 'minúsculas'<'MAYUSCULAS' |
3) Usando el si
Vamos a repasar algo sobre variables. ¿Cómo sería un programa que calcule el promedio entre tres notas?
Programa promedio;
variables nota1,nota2,nota3:enteras;
comienzo escribir('Ingrese tres notas separadas por espacios: '); leer(nota1,nota2,nota3); escribir('El promedio es: ',(nota1+nota2+nota3) / 3); fin.
|
¿Como modificarías este programa para poder ver el resultado sin usar notación científica?
Antes de seguir adelante, asegurate de entender bien qué es lo que hace este programa.
La instrucción leer le pide al usuario que ingrese tres notas, y luego escribir calcula y escribe el promedio.
¿Cómo sería un programa que nos diga si el promedio de las tres notas alcanza para aprobar?
Programa promedio;
variables nota1,nota2,nota3:enteras; promedio:real;
comienzo escribir('Ingrese tres notas separadas por espacios: '); leer(nota1,nota2,nota3); promedio:=(nota1+nota2+nota3) / 3; si promedio < 7 entonces escribir('No aprobo'); sino escribir('Aprobo'); fin.
|
Observa las diferencias entre este programa y el anterior. Ahora, en vez de escribir el promedio lo guarda en una variable. Podemos ver que la variable promedio fue declarada de tipo real.
Veamos otro ejemplo donde se pueda usar la instrucción si.
Hagamos un programa para un club, que decida si una persona debe asociarse como menor (hasta 8 años), cadete (de 8 a 18) o mayor (más de 18).
Programa club;
variables edad:entera;
comienzo escribir('Ingrese la edad del futuro socio: '); leer(edad); si edad < 8 entonces escribir('Asociarlo como menor') sino si edad < 18 entonces escribir('Asociarlo como cadete') sino escribir('Asociarlo como mayor'); fin.
|
Hay dos comentarios que hacer sobre este programa.
Primero, repasa como era la estructura del si vista en el punto 2. Allí hablamos de acciones. Una acción puede ser cualquiera de las instrucciones que estamos viendo, inclusive, la instrucción si. Cuando tenemos varios si uno dentro del otro, decimos que tenemos varios si anidados.
Para ver como funciona el programa, intentemos seguirlo paso a paso. Supongamos que la edad ingresada es 22. La primera comparación es entonces: ¿22 < 8?. Como esto es falso, el programa sigue por la acción2, que en este caso es otro si.
En este si, la condición queda: ¿22 < 18?. Como esto también es falso, seguimos por la instrucción que dice escribir('Asociarlo como mayor').
Además, observa que en cada ramra del si se repite siempre una misma instrucción con alguans variaciones (siempre dice escribir...).
Una forma de solucionar esto es modificar el programa para que se vea:
Programa club-bis; variables edad:entera; categoria:cadena;
comienzo escribir('Ingrese la edad del futuro socio: '); leer(edad); si edad < 8 entonces cadena:='menor' sino si edad < 18 entonces cadena:='cadete' sino cadena:='mayor'; escribir('Asociarlo como ',categoria); fin.
|
La ventaja de esta versión sobre la anterior es que en cada rama del si se pone unicamente lo que cambia en cada una de las opciones (en este caso la categoría), mientras que la acción que es común a las tres se ejecuta a continuación (en este caso, escribir).
|
EJERCITACION |
|
|
|
|
8.2 Hacer un programa que dado el número de un mes (entre 1 y 12) diga cuántos días tiene ese mes (ignorar los años bisiestos). 8.3 ¿Es posible poner más de una instrucción en la rama del entonces o en la del sino? Observa los siguientes programas y anota las diferencias. ¿Compilan? ¿Qué imprimen?
Programa uno; Programa dos; Programa tres; comienzo comienzo comienzo si 1=1 entonces si 1=2 entonces si 1=1 entonces escribir('Linea uno'); escribir('Linea 1') escribir('Linea 1') escribir('Linea dos') sino sino sino escribir('Linea 2'); escribir('Linea 2'); escribir('Linea 3'); escribir('Linea 3'); escribir('Linea 3'); fin. fin. fin.
8.4 ¿Se te ocurre alguna soución para poder escribir más de una instrucción en cada rama del si? 8.5 Escribí un programa para que parezca que la computadora puede mantener un diálogo con una persona. El programa hará preguntas, y según las respuestas obtenidas, hará comentarios o nuevas preguntas. |
4) Combinando condiciones
No siempre alcanzan las condiciones vistas hasta ahora para poder tomar decisiones correctas. En la vida real, a veces decimos: 'voy a comprar algo si me gusta y me alcanza la plata'. Otras veces decimos: 'voy a comprar algo si es bueno o si es muy barato'.
En un programa podemos decir exacamente lo mismo. Veamos un programa que simule estas dos situaciones:
Programa compras; variables precio:entera; calidad,gusta:cadena;
comienzo escribir('Cual es el precio?); leer(precio); escribir('Es de buena calidad?); leer(calidad); escribir('Me gusta?); leer(gusta) si (gusta='si') yy (precio<100) entonces escribir('Lo compro') sino si (calidad='si') oo (precio<5) entonces escribir('Lo compro') sino escribir('No lo compro'); fin.
|
¿Que hay de nuevo en este programa? Aparecen dos nuevos operadores llamados yy y oo.
¿Como funciona ese programa? Luego de pregunar los valores de las variables, decude si compre o no con el mismo criterio que dijimos en el ejemplo.
Una condición que usa yy ó oo se llama condicón compuesta, mientras que las condiciones que conocíamos hasta ahora se llaman condiciones simples. Una condición compuesta formada por yy es verdadera cuando todas las condiciones simples que la forman son verdaderas. Una condición compuesta formada por oo es verdadera cuando por lo menos una de las condicioes simples que la componen es verdadera.
Es muy común usar los siguientes cuadros para explicar cómo funcionan los operadores yy, oo, y uno nuevo llamado no:
YY |
V |
F |
|
OO |
V |
F |
|
|
NO |
V |
V |
F |
|
V |
V |
V |
|
V |
F |
F |
F |
F |
|
F |
V |
F |
|
F |
V |
Al leer la parte sombreada de la primera tabla, podemos decir:
'algo Verdadero yy algo Falso dan como resultado algo Falso'
|
EJERCITACION |
|
|
|
|
8.6 ¿Qué significa el operador no? 8.7 Evaluar (calcular si son verdaderas o falsas) las siguientes expresiones:
(1=1) yy (2=1) (1=0) yy (2=2) (1=1) oo (2=1) (1=0) oo (2>2) (1=1) yy (2=1) oo (2=2) (1=1) oo (2=1) yy (2=2) no(1=1) oo (2=1) no((1=1) oo (2=1))
8.8 ¿Cómo se puede reemplazar el uso de los operadores yy, oo y no usando instrucciones si anidadas? 8.9 Mejorar el programa del ejercicio 8.5, para que el diálogo sea un poco más inteligente. |
|
|
|
|
9 |
Repitiendo |
|
|
. Estructura de repetición |
|
Introducción
Muchas personas dicen que las computadoras son capaces de hacer las cosas una y otra vez sin cansarse, repitiendo muchas veces la misma operación sin equivocarse. Pero hasta ahora, cuando queríamos hacer dos veces algo, teníamos que escribirlo dos veces (recordar el programa de los nombres del capítulo 5).
El Principito repetía sus preguntas hasta que se las respondían. En general, cuando repetimos algo, no lo hacemos para siempre, sino que en algún momento terminamos. Terminamos cuando se cumple alguna condición (por ejemplo, la pregunta fue respondida).
Programa clave; variables clave:cadena;
comienzo repetir escribir('Ingrese la clave'); leer(clave); hastaque clave='sesamo'; escribir('Ud. tiene acceso al programa'); fin.
|
Tratá de pensar que es lo que hace el siguiente programa:
Cuando ejecutás el programa, éste se queda preguntando una clave hasta que se coloca la clave correcta.
Esto podría hacer falta en un programa que manejara información importante, por ejemplo, cuentas bancarias.
Veamos esta nueva estructura:
repetir
:
{instrucciones}
:
hastaque <condición>;
Lo que estamos pidiendo es que repita las instrucciones hasta que la condición sea verdadera (para repasar sobre condiciones, releer el capítulo 8).
Esta instrucción que estamos viendo es muy poderosa. ¿Cómo podemos hacer un programa que imprima la tabla de multiplicar del 9?
Programa tabla1; comienzo escribir('9 por 1 es ',9*1); escribir('9 por 2 es ',9*2); escribir('9 por 3 es ',9*3); escribir('9 por 4 es ',9*4); escribir('9 por 5 es ',9*5); escribir('9 por 6 es ',9*6); escribir('9 por 7 es ',9*7); escribir('9 por 8 es ',9*8); escribir('9 por 9 es ',9*9); escribir('9 por 10 es',9*10); fin.
|
Por supuesto, esta forma no es muy cómoda, sobre todo si queremos que la tabla llege hasta 9 por 100.
Orta forma, un poco más corta puede ser:
Programa tabla2; variables i:entera; comienzo i:=0; repetir i:=1+1; escribir('9 por ',i,' es ',9*i); hastaque i=10; fin.
|
¿Cuál es la función de la variable i? Comparemos el lugar que ocupa i en este programa con la versión anterior. Para que funcionen igual, i debería tomar todos los valores entre 1 y 10. Y esto es justamente lo que logramos usando el repetir. Vamos a verlo paso a paso.
Cuando decimos i:=1 estamos inicializando a la variable i en 0. Luego, cuando decimos i:=i+1 estamos incrementando el valor de i en 1.
Es importante no leer el signo := como un igual en matemática. En matemática, es incorrecto decir que 5 es igual a 6, o que 1 es igual a 2, o, en general, decir que i es igual a i+1. Cuando usamos el signo := (de asignación), tenemos que leerlo no como un signo igual, sino diciendo: 'calcular el valor de lo que está a la derecha del signo y después guardarlo en la variable que está a la izquierda'.
Visto de esta forma, i:=i+1 se lee: calcular cuánto vale i+1; luego guardar este nuevo valor en la variable i. A veces, cuando usemos variables de esta forma, le daremos el nombre de contadores.
|
EJERCITACION |
|
|
|
|
9.1 Hacer un programa que muestre los 100 primeros números naturales. 9.2 Hacer un programa que calcule la suma de los primeros 100 números naturales. 9.3 Hacer un programa que muestre los primeros 50 números pares. 9.4 Un comerciante compró un mismo artículo a distintos mayoristas, cada uno a un precio distino. Necesita un programa que le permita calcular el promedio de los precios, para poder vender el producto. El programa deberá preguntar los precios uno por uno, y calcular el promedio. Para indicar que se acabaron los precios a ingresar, se ingresará un cero como precio. 9.5 Para colocar un piso, un albañil tarda 1 hora por metro cuadrado. Un arquitecto está planeando construir una casa, y desea saber si la colocación del piso puede realizarse en menos de 100 horas. La única información con que cuenta son las medidas de los cuartos de la casa. Hacer un programa que permita ingresar el largo y el ancho de cada cuarto (no se sabe de antemano el número de cuartos, se indicará poniendo 0 para el largo o 0 para el ancho), que calcule la superficie total, y decida si se termina en el plazo planeado. |
|
|
|
|
B |
Mensajes y códigos de error |
|
|
A continuación se detallan los posibles errores que pueden aparecer durante la compilación de un programa. Cuando sea posible, el compilador agregará información explicativa, como por ejemplo el nombre de un archivo o de un identificador, así como el número de línea donde se encontró el error.
Sin embargo, cuando un error es detectado, el compilador sitúa el cursor en la palabra siguiente al mismo, y entonces, el error debe buscarse hacia la izquierda del cursor.
1 No hay suficiente memoria
2 Identificador esperado
En ese lugar debería ir un identificador; probablemente estés tratando de redefinir una palabra reservada.
3 Identificador desconocido
Este identificador no fue declarado.
4 Identificador duplicado
El identificador ya fue usado en el bloque actual.
5 Error de sintaxis
Un carácter ilegal fue encontrado en el texto. Puede haberse olvidado las comillas alrededor de una cadena de caracteres.
6 Error en constante de tipo real
Ver la sintaxis correspondiente.
7 Error en constante de tipo entera
Ver la sintaxis correspondiente. Note que todos los números reales fuera del rango máximo de los reales, de cadena de texto, de estructura y de puntero no están permitidos aquí.
30 Constante entera esperada
31 Constante esperada
32 Constante entera o real esperada
33 Identificador de tipo esperado
El identificador no denota un tipo como debería.
34 Tipo de función no válido
Los tipos de función válidos son todos tipos simples, de cadena de texto y de puntero.
35 Rótulo esperado
El identificador no denota un rótulo como debería.
36 <<COMENZAR>> esperado
37 <<FIN>> esperado
38 Expresión entera esperada
La expresión precedente debe ser de tipo entero.
39 Expresión ordinal esperada
La expresión precedente debe ser de tipo ordinal.
40 Expresión lógica esperada
La expresión precedente debe ser de tipo lógico.
41 El tipo de operando no concuerda con el operador
El operador no puede ser aplicado a operandos de este tipo, por ejemplo, 'A' div '2'.
42 Error en la expresión
Este símbolo no puede participar en una expresión de la manera en que lo hace. Usted debe haberse olvidado de escribir un operador entre los operandos.
43 Asignación ilegal
-Archivos y variables no tipadas no pueden ser valores asignados.
-Un identificador de función sólo puede haber asignado valores dentro de la parte de sentencia de la función.
44 Identificador de campo esperado
El identificador no denota un campo en la variable de registro precedente.
73 <<IMPLEMENTACION>> esperada
75 Variable tipo <<REGISTRO>>
La variable precedente debe ser de tipo registro.
76 Constante fuera de rango
-Usted está intentando incrementar un vector con una constante fuera de rango.
-Usted está asignando una constante fuera de rango a una variable.
-Usted está transmitiendo una constante fuera de rango como parámetro de un procedimiento o función.
77 Variable de tipo archivo esperada
La variable precedente debe ser de tipo archivo.
78 Expresión de tipo puntero esperada
La expresión precedente debe ser de tipo puntero.
79 Expresión entera o real esperada
La expresión precedente debe ser de tipo entero o real.
81 Etiqueta redefinida
La etiqueta ya marca una sentencia.
83 Inválido uso de @
Los argumentos válidos son las referencias a variables y los identificadores de los procedimientos o funciones.
84 <<UNIDAD>> esperada
85 << ; >> esperada
86 << : >> esperada
87 << , >> esperada
88 << ( >> esperado
89 << ) >> esperado
90 << = >> esperado
91 << := >> esperado
92 << [ >> o << (. >> esperados
93 << ] >> o << .) >> esperados
94 << . >> esperado
95 << .. >> esperado
96 Demasiadas variables
-El tamaño total de las variables globales declaradas en un programa o unidad no puede exceder 64 K.
-El tamaño total de las variables locales de archivo. Los parámetros de tipo de archivo deben ser pasados por referencia.
131 El encabezamiento no concuerda con la definición anterior
-El encabezamiento del procedimiento o función especificado en la parte de interfase no coincide con este encabezamiento.
-El encabezamiento del procedimiento o función especificado en la declaración 'forward' no coincide con este encabezamiento.
132 Error crítico de disco
Un error crítico ocurrió durante la compilación (por ejemplo, la unidad de discos no está lista).
133 Imposible evaluar esta expresión
134 Expresión terminada incorrectamente
135 Especificador de formato no válido
136 Referencia indirecta no válida
137 No se permiten variables estructuradas aquí
138 Imposible evaluar sin la UNIDAD de Sistema
139 Imposible acceder a este símbolo
140 Operación de punto flotante no válida
143 Referencia a procedimiento o función no válida
150 Disco protegido contra escritura
151 UNIDAD desconocida
152 El drive no está listo
153 Comando desconocido
|
|
|
|
C |
Gráficos |
|
|
PROCEDIMIENTOS
En la primera sección se da una breve descripción de las funciones y prodecimientos que provee la unidad gráficos. A continuación repiten los nombres de los procedimientos y funciones, clasificados por la operación que realizan.
AlineaTexto
Sintaxis: AlineaTexto(horizontal, vertical: Naturales);
Uso: Alinea el texto con respecto al cursor de acuerdo con lo especificado. La alineación se determia de acuerdo con los siguientes valores:
Horizontal:
Izq=0
Centro=1
Derecha=2
Vertical
Abajo=0
Centro=1
Arriba=2
Arco
Sintaxis: Arco(x, y: Enteras; ang1, ang2, radio: Naturales);
Uso: Dibuja un arco con centro en (X,Y) teniendo un radio RADIO, comenzando en el ANG1 y finalizando en ANG2.
Barra
Sintaxis: Barra(x1, y1, x2, y2: Enteras);
Uso: Dibuja un rectágulo lleno(como los usados en gráficos de barras). Usa la textura y el color definidos por DefEstiloLleno y DefTexturaRelleno.
Barra3d
Sintaxis: Barra3D(x1, y1, x2, y2: Enteras; Prof: Naturales; Tope: Logica);
Uso: Dibuja una barra llena tridimensional. Usa la textura y el color definidos por DefEstiloLleno y DefTexturaRelleno. El borde de la Barra3D sera dibujado con el color y el estilo seleccionados con DefEstiloLinea y DefColor. PROF es el número de puntos que indican la profundidad de la barra. Si TOPE es verdadero, se dibuja un techo sobre la barra, sino, se omite permitiendo colocar varias barras una sobre otra.
Borrapant
Sintaxis: BorraPant;
Uso: BORRAPANT mueve el cursor a la posición (0,0) de la pantalla y la limpia usando el color de fondo seleccionado con DefColorFondo y la prepara para su uso.
Borraventana
Sintaxis: BorraVentana;
Uso: Asigna el color con que llena al color de fondo y coloca el puntero en la posición (0,0).
Circulo
Sintaxis: Circulo(x, y: Enteras; Radio: Natural);
Uso: Dibuja un circulo con centro en el punto x,y; el círculo es dibujado con el color seleccionado con DefColor.
Defcolor
Sintaxis: DefColor(color: Natural);
Uso: Define el color a usar, teniendo en cuenta los colores definidos en DefPaleta.
Los colores son:
0=negro 1=azul 2=verde 3=cyan
4=rojo 5=magenta 6=marrón 7=gris claro
8=gris oscuro 9=celeste 10=verde claro 11=cyan claro
12=rosa 13=magenta claro 14=amarillo 15=blanco
DefColorFondo
Sintaxis: DefColorFondo(color: Natural);
Uso: Define el color de fondo teniendo en cuenta los colores definidos en DefPaleta.
DefEstiloLleno
Sintaxis: DefEstiloLLeno(Trama, color: Naturales);
Uso: Permite elegir una de las tramas pre-definidas para ser usadas por LlenaPoli, pinta, Barra, Barra3D y PartePastel.
Las tramas predefinidas son:
0= Vacia 1= Llena
2= Lineas 3= Diagonales finas
4= Diagonales 5= Diagonales al reves
6= Diagonales al reves finas 7= Cruces finas
8= Cruces 9= Linea punteada
10= Puntos separados 11= Puntos próximos
DefEstiloLinea
Sintaxis: DefEstiloLinea(estilo,trama,grosor: Naturales);
Uso: Afecta todos los dibujos realizados por Linea, LineaA, Rectangulo, DRAWPOLY, Arco, etc. Las estilos son
0= Solida 1= Punteada
2= Centrada 3= De guiones
Y el Grosor:
1= Normal 3= Gruesa
DefEstiloTexto
Sintaxis: DefEstiloTexto(letra,direc,tamano: Naturales);
Uso: Afecta todas las salidas de texto realizadas con Text y TextoXY.
Los tipos de letra son:
1= Triplex 2= Small
3= SansSerif 4= Gothic
Y las direcciones
0= Horizontal 1= Vertical
DefPagVisual
Sintaxis: DefPagVisual(pagina: Natural);
Uso: Hace visible la página PAGINA.
DefPaleta
Sintaxis: DefPaleta(colornum: Natural; color: Entera);
Uso: Define el color de la posición COLORNUM de la paleta. Su uso es muy similar a DefTodaPaleta. La diferencia radica en que este procedimiento sólo redefine un color de la paleta.
DefTamCar
Sintaxis: DefTamCar(multx, divx, multy, divy: Naturales);
Uso: MULTX:DIVX es la proporción multiplicada por el ancho del tipo de letra activo, siendo MULTY:DIVY la proporción multiplicada por el alto. Por ejemplo para usar un tamaño de caracter del doble de ancho usar MULTX=2 y DIVX=1.
DefTrama
Sintaxis: DefTrama(trama: TipoTrama; color: Natural);
Uso: Describe la trama y el color para llenar figuras usados por LlenaPoli, Pinta, Barra, Barra3D y PartePastel. TipoTrama se define como sigue:
Tipo
TipoTrama=arreglo[1..8]de byte;
DefVentana
Sintaxis: DefVentana(x1, y1, x2, y2: Enteras; clip: Logica);
Uso: El punto (X1,Y1) define la coordenada superior izquierda y (X2,Y2) define la inferior derecha de la VENTANA. La variable lógica decidirá si los gráficos serán cortados o no dentro de la VENTANA definida. Todos los comandos gráficos tienen sus coordenadas relativas a la VENTANA.
Elipse
Sintaxis: Elipse(x,y: Enteras; ang1,ang2: Naturales; radiox,radioy: Naturales);
Uso: Dibuja un arco elíptico desde el ANG1 hasta ANG2 usando (X,Y) como centro y RADIOX y RADIOY como ejes horizontal y vertical respectivamente. El procedimiento Elipse dibuja desde ANG1 hasta ANG2 con el color elegido. Los ángulos son medidos en grados. Si el ANG1 es 0 y el ANG2 es 360 entonces se dibujará una elipse entera.
LlenaElipse
Sintaxis: LlenaElipse(x, y: Enteras; radiox, radioy: Naturales);
Uso: Dibuja una elipse llena. Los parámetros tienen el mismo significado que en Elipse. La elipse se llena con el estilo de relleno y la textura de relleno seleccionados.
LlenaPoli
Sintaxis: LlenaPoli(NumPuntos: Natural;VAR coord);
Uso: Dibuja un poligono lleno. Los parámetros tienen el mismo significado que en Poligono. EL polígono se llena con el estilo de relleno y la textura de relleno seleccionados. El perímetro se dibuja con el estilo de línea elegido con DefEstiloLinea.
LeeDeformPant
Sintaxis: LeeDeformPant(VAR X, Y: Naturales);
Uso: La deformación de la pantalla se puede calcular llamando a éste procedimiento y dividiendo X por Y. Esta información generalmente se usa en el dibujo de círculos, arcos, porciones de pastel.
LeeImagen
Sintaxis: LeeImagen(x1, y1, x2, y2: Enteras; VAR Mapabits);
Uso: Guarda la imagen en una determinada área de memoria. Los primeros cuatro parámetros indican la región retangular a guardar, y MAPABITS es un parámetro sin ningún tipo que debe ser mayor o igual que 4 más el área definida en la región. Use la función TamanioImagen que determina los requerimientos de MAPABITS.
ModoGrafico
Sintaxis: ModoGrafico;
Uso: Inicializa el sistema gráfico y pasa el hardware a dicho modo.
ModoTexto
Sintaxis: ModoTexto;
Uso: ModoTexto restaura el modo original de la pantalla antes de que fueran usados los gráficos.
Linea
Sintaxis: Linea(x1, y1, x2, y2: Enteras);
Uso: Dibuja una línea desde el punto (X1,Y1) hasta el (X2,Y2), con el estilo y el grosor definidos por DefSetLinea y usa el color elegido con DefColor.
Linearel
Sintaxis: LineaRel(dx, dy: Enteras);
Uso: Dibuja una línea hacia el punto que se encuentra a una distancia relativa del puntero actual.
Lineaa
Sintaxis: LineaA(x, y: Enteras);
Uso: Dibuja una línea desde el puntero actual hacia el punto (X,Y).
Mueverel
Sintaxis: MueveRel(Dx, Dy: Enteras);
Uso: Mueve el cursor a una posición relativa a la actual que dista (DX,DY).
Muevea
Sintaxis: MueveA(x, y: Enteras);
Uso: Mueve el cursor a la posición (X,Y). Aclaración: el cursor en la pantalla gráfica no es visible.
Omitegraf
Sintaxis: OmiteGraf;
Uso: Resetea la definición de gráficos. Afecta a los siguientes puntos:
‑ Viewport
‑ Paleta
‑ Colores de fondo y para dibujar
‑ Estilo y textura de línea
‑ EstiloRelleno, ColorRelleno, TexturaRelleno
‑ Tipo de letra activo, estilo de texto, justificación y tamaño de caracter.
PagActiva
Sintaxis: PagActiva(pagina: Natural);
Uso: Define la página activa, en la que se dibujará a partir de ese momento. Un programa puede tener en uso varias páginas visuales y dibujar en cualquiera que no sea la activa. Luego se cambia la página activa a la que tiene el dibujo y de esta manera aparece inmediatamente. Esta técnica es muy usada en animación.
Partepastel
Sintaxis: PartePastel(x, y: Enteras; ang1, ang2, radio: Naturales);
Uso: Dibuja y pinta una porción de gráfico de pastel, con centro en (X,Y) y RADIO, comenzando en ANG1 y terminando en ANG2.
Pinta
Sintaxis: Pinta(x, y: Enteras; Borde: Natural);
Uso: Pinta una figura cerrada, siendo (X,Y) un punto interior de dicha figura. La trama con que pinta es seleccionada por medio de DefEstiloLleno o DefTramaRelleno. Este procedimiento se usa para pintar hasta que encuentre el color que se indica en BORDE.
Poligono
Sintaxis: Poligono(NumPuntos: Natural; VAR coord);
Uso: COORD es un parámetro sin tipo definido que contiene las coordenadas de cada vértice. NUMPUNTOS especifica el número de coordenadas de COORD. Cada coordenada consiste de un indicador X y otro Y. Usa el estilo de línea y el color seleccionados. Para dibujar una figura cerrada de n lados se deben pasar n+1 coordenadas siendo la coordenada n+1 igual a la primera.
Poneimagen
Sintaxis: PoneImagen(x, y: Enteras;VAR mapabits; bit: Natural);
Uso: El punto (X,Y) es la esquina superior izquierda de la región rectangular de la pantalla donde se colocará la imagen contenida por MAPABITS. El BIT indica como se colocará la imagen con respecto al fondo:
0= Coloca la imagen sobre el fondo.
1= Se utiliza para la animación.
2= Enciende los pixels que están encendidos en la pantalla y en la imagen.
3= Enciende los pixels encendidos en la imagen y ademas en la pantalla.
4= Coloca la imagen inversa de MAPABITS.
Ponepixel
Sintaxis: PonePixel(x, y: Enteras; color: Natural);
Uso: Enciende en pantalla el pixel en (X,Y), con el color definido por COLOR.
Rectangulo
Sintaxis: Rectangulo(x1, y1, x2, y2: Enteras);
Uso: Dibuja un rectángulo, siendo (X1,Y1) la esquina superior izquierda y (X2,Y2) la inferior derecha.
Sector
Sintaxis: Sector(x, y: Enteras; ang1, ang2, radiox, radioy: Naturales);
Uso: Siendo (X,Y) el punto central y RADIOX y RADIOY los indicadores de los radios horizontal y vertical respectivamente, el procedimiento SECTOR dibuja y llena el sector que comienza en ANG1 y termina en ANG2.
Texto
Sintaxis: Texto(frase: Cadena);
Uso: Escribe la cadena de caracteres en la posición actual del cursor.
Textoxy
Sintaxis: TextoXY(x, y: Enteras; frase: Cadena);
Uso: Escribe la cadena de caracteres en la posición indicada por (X,Y).
Vuelvemodocrt
Sintaxis: VuelveModoCRT;
Uso: Reestablece el modo de video detectado por ModoGrafico.
FUNCIONES
Leecolorfondo
Sintaxis: LeeColorFondo;
Devuelve: Natural
Uso: Devuelve el índice de la paleta del color de fondo actual. Los colores de fondo pueden estar entre 0 y 15 dependiendo del modo gráfico.
Leecolor
Sintaxis: LeeColor;
Devuelve: Natural
Uso: Retorna el valor del último color elegido con DefColor. Los colores pueden variar de 0 a 15 dependiendo del modo gráfico.
Leemodografico
Sintaxis: LeeModoGrafico;
Devuelve: Entera
Uso: Devuelve el modo gráfico actual. El modo es un entero entr 0 y 5.
Leemaxcolor
Sintaxis: LeeMaxColor;
Devuelve: Natural
Uso: Retorna el máximo color que puede ser seteado con DefColor.
Leemodomax
Sintaxis: LeeModoMax;
Devuelve: Natural
Uso: retorna el máximo valor que puede ser pasado como modo en DefModoGrafico.
Leemaxx
Sintaxis: LeeMaxX;
Devuelve: Entera
Uso: Retorna el máximo valor de la coordenada X de la pantalla gráfica.
Leemaxy
Sintaxis: LeeMaxY;
Devuelve: Entera
Uso: Retorna el máximo valor de la coordenada Y de la pantalla gráfica.
Leenombremodo
Sintaxis: LeeNombreModo(NumeroModo: Natural);
Devuelve: Cadena
Uso: Devuelve una cadena conteniendo el nombre del modo especificado.
Leetamaniopaleta
Sintaxis: LeeTamanioPaleta;
Devuelve: Natural
Uso: Retorna el tamaño de la paleta. Informa de cuantos valores pueden seleccionarse para el modo gráfico actual.
Leepixel
Sintaxis: LeePixel(x, y: Enteras);
Devuelve: Natural
Uso: Indica el color del pixel en (X,Y).
Leex
Sintaxis: LeeX;
Devuelve: Entera
Uso: Retorna la actual posición en X. Esta posicion es relativa a VIEWPORT*?
Leey
Sintaxis: LeeY;
Devuelve: Entera
Uso: Retorna la actual posición en Y. Esta posicion es relativa a VIEWPORT*?
Resultado
Sintaxis: Resultado;
Devuelve: Entera
Uso: Indica el código de error de la última operación gráfica.
Tamanioimagen
Sintaxis: TamanioImagen(x1, y1, x2, y2: Enteras);
Devuelve: Natural
Uso: Indica el número de bytes requeridos para almacenar una región rectangular de la pantalla. Los cuatro parámetros definen el área rectangular.
Alturatexto
Sintaxis: AlturaTexto(texto: Cadena);
Devuelve: Natural
Uso: Informa de la altura de la cadena medida en pixels.
Anchotexto
Sintaxis: AnchoTexto(text: Cadena);
Devuelve: Natural
Uso: Informa del ancho de la cadena medida en pixels.
Instrucciones clasificadas según la función que realizan:
Manejo de modos de pantalla:
ModoTexto ModoGrafico Vuelvemodocrt
DefPagVisual PagActiva Omitegraf
Leenombremodo Leemodografico Leemodomax
Resultado
Dibujo de lineas simples y ubicación del cursor:
Linea Linearel Lineaa
Muevea Mueverel Ponepixel
Leex Leex Leemaxx
Leemaxy
Dibujo de figuras:
Arco Circulo Elipse
Barra Barra3d Partepastel
Rectangulo Poligono Sector
LlenaElipse LlenaPoliPinta
Colores, estilos y tramas para dibujar y pintar:
Defcolor DefColorFondo DefPaleta
DefEstiloLleno DefEstiloLinea DefTrama
Leecolor Leecolorfondo Leemaxcolor
Leetamaniopaleta
Textos:
Texto Textoxy DefEstiloTexto
Alturatexto Anchotexto DefTamCar
AlineaTexto
Manejo de imagenes:
LeeImagen Poneimagen Tamanioimagen
Leepixel
Manejo de la pantalla en general
Borrapant Borraventana LeeDeformPant
Defventana
Indice
Introducción
Arranque de la computadora con diskettes.................................................................................................................. 2
¿Cómo funciona un compilador?..................................................................................................................................... 3
Probando como funciona un compilador....................................................................................................................... 3
Escribiendo un programa fácil......................................................................................................................................... 4
EJERCITACION.................................................................................................................................................................. 4
Corrigiendo errores del programa................................................................................................................................... 5
EJERCITACION.................................................................................................................................................................. 5
Dándole órdenes a la computadora
Un comentario antes de empezar.................................................................................................................................... 7
Forma de un programa...................................................................................................................................................... 7
Escribiendo en la pantalla................................................................................................................................................ 8
EJERCITACION.................................................................................................................................................................. 9
Un poco de prolijidad: borrando la pantalla.................................................................................................................. 9
EJERCITACION................................................................................................................................................................ 10
Introducción a los gráficos
El modo gráfico................................................................................................................................................................ 11
Entrando y saliendo del modo gráfico......................................................................................................................... 11
EJERCITACION................................................................................................................................................................ 12
Haciendo algunos dibujos: coordenadas.................................................................................................................... 12
EJERCITACION................................................................................................................................................................ 13
Otras instrucciones de gráficos.................................................................................................................................... 13
EJERCITACION................................................................................................................................................................ 13
Pintando lo dibujos......................................................................................................................................................... 14
Programas
Un programa más complicado....................................................................................................................................... 15
EJERCITACION................................................................................................................................................................ 16
Analizando el programa.................................................................................................................................................. 17
EJERCITACION................................................................................................................................................................ 17
Poniendo las cosas en claro.......................................................................................................................................... 17
Forma de programar........................................................................................................................................................ 18
Como funcionan los procedimientos............................................................................................................................ 19
Una nueva instrucción antes de la ejercitación.......................................................................................................... 19
EJERCITACION................................................................................................................................................................ 20
Programación Top-Down La estructura de un programa bien escrito.................................. 21
EJERCITACION................................................................................................................................................................ 23
Diseño Top‑Down de un programa.............................................................................................................................. 23
EJERCITACION................................................................................................................................................................ 24
Variables
¿Qué es una constante?................................................................................................................................................. 25
¿Qué es una variable?..................................................................................................................................................... 25
¿Qué es un valor?............................................................................................................................................................ 25
Rangos de valores........................................................................................................................................................... 26
Usando variables............................................................................................................................................................. 26
EJERCITACION................................................................................................................................................................ 28
Usando constantes......................................................................................................................................................... 28
EJERCITACION................................................................................................................................................................ 29
Introducción..................................................................................................................................................................... 30
Mejorando la presentación............................................................................................................................................ 31
EJERCITACION................................................................................................................................................................ 33
Tomando decisiones
Repaso.............................................................................................................................................................................. 34
La instrucción si.............................................................................................................................................................. 34
EJERCITACION................................................................................................................................................................ 35
Usando el si...................................................................................................................................................................... 35
EJERCITACION................................................................................................................................................................ 37
Combinando condiciones.............................................................................................................................................. 37
EJERCITACION................................................................................................................................................................ 38
Repitiendo
Introducción...................................................................................................................................................................... 39
EJERCITACION................................................................................................................................................................ 40
Mensajes y códigos de error
Gráficos
PROCEDIMIENTOS......................................................................................................................................................... 45
FUNCIONES...................................................................................................................................................................... 49
Instrucciones clasificadas según la función que realizan:......................................................................................... 52
Aún no hay comentarios para este recurso.
Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.
Contacto »