Programación en Pascal
Introducción
editarEl lenguaje de programación Pascal fue desarrollado por el profesor suizo Niklaus Wirth a finales de los años 60. El objetivo de este lenguaje era facilitar el aprendizaje del lenguaje de la programación a sus alumnos.
Palabras reservadas
editarAlgunas de las palabras reservadas en Pascal son:
Palabra | Uso | Palabra | Uso |
---|---|---|---|
ABSOLUTE | AND | Conjunción lógica | |
ARRAY | Definición de variables (arrays) | ASM | |
BEGIN | Inicio de procedimiento | CASE | Salto condicional SWITCH - CASE - END |
CONST | Definición de constantes | CONSTRUCTOR | |
DESTRUCTOR | EXTERNAL | ||
DIV | División entera | DO | Bucle FOR - TO/DOWNTO - DO - END |
DOWNTO | Bucle FOR - TO/DOWNTO - DO - END | ELSE | Salto condicional IF - THEN - ELSE - END |
END | Término de saltos condicionales y bucles | FILE | Definicion de un archivo |
FOR | Bucle FOR - TO/DOWNTO - DO - END | FORWARD | |
FUNCTION | Definición de función | GOTO | Salto incondicional |
IF | Salto condicional IF - THEN - ELSE - END | IMPLEMENTATION | |
IN | Inclusión de conjuntos | INLINE | |
INTERFACE | INTERRUPT | ||
LABEL | MOD | Resto de división entera | |
NIL | NOT | Negación lógica | |
OBJECT | OF | Definición de variables | |
OR | Disyunción lógica inclusiva | PACKED | |
PRIVATE | PROCEDURE | Definición de procedimiento | |
PROGRAM | RECORD | Definición de variables (registros) | |
REPEAT | Bucle REPEAT - UNTIL | SET | Definición de variables (conjuntos) |
SHL | SHR | ||
STRING | THEN | Salto condicional IF - THEN - ELSE - END | |
TO | Bucle FOR - TO/DOWNTO - DO - END | TYPE | Definición de tipos |
UNIT | Interfaz de programa dado | UNTIL | Bucle REPEAT - UNTIL |
USES | Definicion para usar una libreria | VAR | Definición de variables |
VIRTUAL | WHILE | Bucle WHILE - DO - END | |
WITH | Definicion para utilizar las variables de un registro. | XOR | Disyunción lógica exclusiva |
También pasarán a ser reservadas las palabras que usemos para llamar a procedimientos o funciones implementados por nosotros en el programa.
Instrucciones basicas
editar- Asignacion:
La asignacion se usa para dar valores a variables. La estructura de la instruccion es la siguiente:
a := b;
donde a y b se entienden que son variables correctamente definidas y del mismo tipo.
- Muestreo por pantalla:
Para poder imprimir datos por pantalla usaremos la instruccion write. Su estructura es:
write(a);
donde a es una variable con datos guardados previamente.
En caso de que deseemos imprimir por pantalla cierto texto, deberemos escribir:
write("Texto que desea mostrar");
- Recepción de valores
Para que el programa trabaje con datos introducidos por el usuario debemos usar la instruccion read. Su estructura es:
read (a);
donde a es una variable definida para recibir unos datos de un tipo determinado.
Si queremos recibir varios valores seguidos, sera:
read(a,b,c,...,n);
El usuario debera introducir los valores separados por espacio, o por intro.
Tambien tenemos la posibilidad de mostrar por pantalla (equivalentemente introducir datos) en lineas distintas. Para ello, usaremos la palabra reservada writeln (eq. readln):
program prueba;
begin
writeln('Esto es una prueba de la instruccion writeln');
writeln('Esta es la segunda linea de escritura');
end.
Y por pantalla se mostraria:
Esto es una prueba de la instruccion writeln
Esta es la segunda linea de escritura
- Comentarios
Los comentarios en nuestros programas seran de gran utilidad para poder aclarar la funcion de una variable, procedimiento, etc. En Pascal, tenemos dos maneras de crear comentarios: mediante el uso de "{" y "}" o "(*" y "*)". Todo lo que escribamos entre ambas partes, formara parte de los comentarios de nuestro programa y en ningun momento seran compilados.
Nuestro primer programa: Hello World
editarEstudiemos este sencillo codigo:
program helloWorld;
BEGIN
writeln("Hello World!");
END.
Todo programa en Pascal comenzara con una cabecera del estilo program seguido del nombre del programa. Este nombre no podra incluir numeros, signos o espacios para separar palabras.
Tras la cabecera, deberemos declarar los tipos, constantes, procedimientos, funciones y variables. Una vez hecho, comenzaremos el codigo de nuestro programa. Este debera comenzar con la palabra reservada begin.
Ahora escribiremos las instrucciones de nuestro programa. Todas las lineas deberan terminar con un punto y coma (;). Para indicar que hemos terminado con nuestro programa, escribiremos end. Destacar que tras el end, ira ".", no ";".
Ciclos iterativos: While, For y Repeat
editar- While
La instruccion while estudia primero la condicion y, en caso de que se cumpla, procedera a ejecutar la(s) instruccion(es) deseada(s).
Su estructura es:
while (condicion) do
instruccion;
En caso de que haya mas de una instruccion a realizar, escribiremos:
while (condicion) do
begin
instrucciones;
end;
- For
El ciclo for realiza la(s) instruccion(es) deseada(s) durante un numero de vueltas predeterminadas. Este numero de vueltas no podra ser modificado NUNCA dentro del bucle, por lo que debemos tener cuidado en no tocar la variable indice (la que controla el numero de vueltas). Un ejemplo:
program pruebaFor;
CONST
N = 10; { numero de vueltas que dara el bucle}
VAR
i: integer; { variable que contara el numero de vueltas que llevamos}
BEGIN
for i:=1 to N do
writeln(i);
END.
Y se mostraria por pantalla:
1
2
3
4
5
6
7
8
9
10
En caso de que tengamos que ejecutar mas instrucciones dentro del bucle, escribiriamos:
for (contador) do
BEGIN
instrucciones;
END;
Un ejemplo de esto:
program pruebaForDos;
CONST
N=10;
VAR
i,j : integer; {Una nueva manera de declarar las variables. En caso de tener varias del mismo tipo,podemos separarlas por ","}
BEGIN
j:=0;
for i:=1 to N do
begin
writeln(i);
j:=j+3; {Con esta instruccion, a la variable j la sumamos durante N veces 3}
end;
write('j = ',j); {Cuando vamos a escribir varias cosas seguidas, podemos enviar la instruccion de esta manera}
END.
Y en pantalla se imprimiria:
1
2
3
4
5
6
7
8
9
10
j = 30
En los ciclos For, podemos seguir dos tipos de direccion. Ascendente (de 1 hasta N) o descendente (de N hasta 1). Esto lo deberemos indicar en el contador del siguiente modo (usaremos el ejemplo anterior):
Ascendente
for i:=1 TO N do
...
Descendente
for i:=N DOWNTO 1 do
...
- Repeat
El bucle Repeat realiza una serie de instrucciones y, una vez hechas, comprueba una condicion. En caso de cumplirse, no volvera a repetir dichas instrucciones, y en caso contrario las ejecutara. Su estructura es:
repeat
instruccion(es);
until (condicion);
- Aclaraciones
Observese que los 3 ciclos, bien implementados, son equivalentes entre si.
Hay que tener especial cuidado en el ciclo que se desea usar: · Si se desea hacer un numero de vueltas FIJO, podemos usar cualquiera de los 3. · Si las vueltas dependen de una condicion que se modifica dentro del bucle, solo podemos usar los ciclos WHILE y REPEAT. · Si queremos comprobar una condicion antes de realizar ciertas instrucciones, debemos usar el WHILE.
Selecciones: If y Case
editarIf (si) 1 < 3 (uno menor a 3); then (entonces);
if 1 < 3 then writeln ('1 es menor');
else (sino)
else; writeln ('3 es mayor');
Subprogramas
editarLos parámetros
Los parámetros son canales de comunicación para pasar datos ente programas y subprogramas en ambos sentidos. Los parámetros van asociados a variables. constantes, expresiones, etc., y por tanto, se indican mediante los correspondientes identificadores o expresiones. Los parámetros que se utilizan en la llamada o invocación al subprograma se denominan parámetros actuales, reales o argumentos, y son los que entregan la información al subprograma. Los parámetros que la reciben en el subprograma se denominan parámetros formales o ficticios y se declaran en la cabecera del subprograma. En una llamada a un subprograma tiene que verificarse que:
El número de parámetros formales debe ser igual al de actuales. Los parámetros que ocupen el mismo orden en cada una de las Listas deben ser compatibles en tipo.
Estructura, declaración y empleo de un procedimiento
Se declaran inmediatamente después de las variables del programa principal, teniendo la precaución de que si un subprograma referencia o llama a otro, el referenciado debe declararse primero.
Declaración de procedimientos.
Cabecera procedure nombreproced (lista de parámetros);
Declaraciones const Locales
Type... Var...
Cuerpo begin
end; (*obseiwar; final de proeedimiento*)
Declaración de parámetros formales.
Se declaran encerrados entre paréntesis, indicando el identificador y el tipo correspondiente asociado a cada uno, separados por ':', y terminando en ';'. La palabra reservada VAR precediendo a un identificador de parámetro formal indica al compilador que el paso del parámetro es pro VARiable. Su ausencia u omisión indica que el paso de parámetro se realiza por VALOR.
Ejem.
Procedure Identificador (PF1 :tipol ;PF2:típo2; var PW:tipo3); PFl y PF2 se pasan por valor. PF3 se pasa por variable.
Llamada a un procedimiento.
Se realiza desde el programa principal indicando el identificador del procedimiento seguido de la lista de parámetros actuales encerrados entre paréntesis y separados por comas.
Ejem.
Identificador (PAl ,PA2,PA3)
Ejemplo. Procedimiento para intercambiar los valores de dos variables.
Procedure intercambio (var pfl ,p12:integer); Var Aux:integer; (variable local uso exclusivo en procedimiento} Begin Aux:=pfl; Pfl:pf2; Pfl: aux End; {La llamada a este procedimiento se haría ...} {... por ejemplo desde el siguiente programa:}
Program Uno; Uses crt; Var Entero 1 ,entero2 : integer; Procedure intercambio (var pfl ,p12:integer);
...
begin clrscr; {*borrado de pantalla*} Write ('introduzca 2 variables enteras: '); Readln(entero1,entero2); Writeln ('valores de las variables antes de la llamada'); Writeln ('Entero 1 = ',enterol,'entero 2 = ',entero2); intercambio (enterol,entero2); {llamada al procedimiento} Writeln ('Valor de las variables después de la llamada'); Writeln ('entero 1 = ',enterol,'entero 2 = ',entero2); end;
Funciones o procedimientos?
Deben utilizarse funciones cuando solo tenga que devolverse un solo valor simple al programa llamador. En todos los demás casos utilizaremos: procedimietos.
Extraido de "LaPolitecnica.Net © 2000-2002, Raúl Zambrano Maestre"