Programación en Pascal

De Wikiversidad

Introducción[editar]

El 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[editar]

Algunas 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[editar]

Estudiemos 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[editar]

If (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[editar]

Los 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"