Esquema de Programación en Pascal

 

Estructuras (Registros)

 

Una estructura es una agrupación de variables que hacen referencia a un mismo elemento y que por lo tanto es lógico que vayan todas juntas.

 

Por ejemplo, si queremos guardar los datos de una persona necesitaríamos una serie de cadenas de texto para el nombre y los apellidos, otra para el DNI, un entero para la edad. Un long para el número de teléfono.

 

En Pascal, esto sería:

Type

   TipoPersona = RECORD

          Nombre : String[12];

          Apellido1 : String[12];

          Apellido2 : String[12];

          DNI : String[9];

          Edad : Integer;

          Telefono : LongInt;

       END;

 

Var

   Persona : TipoPersona;

 

Acceder a los campos de una estructura. Cuando queremos asignar valor u obtener el valor de las variables que están dentro de la estructura se utiliza la siguiente notación:

Variable.nombreCampo

 

Ejemplo:

Persona.Nombre := ‘Luis’;

Persona.Apellido : ‘Perez’;

Persona.Edad := 21;

Writeln (Persona.Telefono);

 

Bucles

 

Repetición un número finito de veces de un conjunto de instrucciones.

El bucle termina cuando la condición de parada se cumple.

La condición de parada es una variable de tipo booleano o una expresión de la que resulte un booleano (operaciones lógicas). Es importante recordar, que la condición de parada debe ser actualizada dentro del bucle. Una condición de parada mal definida, mal actualizada o no actualizada, puede dar lugar a un bucle infinito.

 

·        Bucles con número de iteraciones predefinidos

En el momento de escribir el programa, sabemos el número exacto de repeticiones que el bucle va a realizar. Son denominados bucles tipo “for”. Se utiliza una variable para llevar la cuenta de la repetición en la que se está. Esta variable es conocida como índice.

FOR variable := inicio TO final DO

   action;

 

FOR variable := inicio DOWNTO final DO

   action;

 

Utilizando la partícula TO, el bucle se ejecutará mientras el valor de variable sea menor o igual que “final”. Y con la partícula DOWNTO, mientras sea mayor o igual.

repeticiones := 10;

FOR i := 0 TO repeticiones DO

   BEGIN

       writeln (‘ El índice vale ‘ , i);

       i := i + 1;

   END;

 

·        Bucles sin número de iteraciones

No podemos saber al escribir el programa el número de repeticiones del bucle.

Un ejemplo sería un bucle controlado por la opción del usuario. “El bucle no termina hasta que el usuario pulsa la tecla ‘A’ y en cada iteración se solicita que presione una tecla.”

 

o   Se ejecuta de 1 a n veces (Comprobación al final)

Nos interesa que el contenido del bucle se ejecute por lo menos una vez.

REPEAT

   accion1;

   accion2;

UNTIL condicionParada;

 

Ejemplo:

Var

   letra : char;

...

 

REPEAT

   write(‘Pulse una tecla, ‘a’ para terminar’);

   readln(letra);

   writeln (‘Pulso la tecla ‘, letra);

UNTIL letra = ‘a’ ;

 

 

o   Se ejecuta de 0 a n veces (Comprobación al principio)

Según el desarrollo del programa puede que no nos interese que se ejecute ese bucle:

 

WHILE condicioParada DO

accion;

 

Ejemplo:

Var

   error : boolean;

   numero : Integer;

...

 

error :=false;

Randomize;

WHILE error DO

   BEGIN

       write(‘Hola’);

       numero := Random(9);

       error := numero > 5;

   END;

 

 

Condicionales

Son instrucciones que evalúan una condición lógica (boolean) y en función del resultado ejecutan o no ejecutan una determinada porción de código.

 

Condicionales positivos.

Ejecutan una porción de código sólo si la condición evaluada es positiva.

IF condicion THEN

       accion;

 

Ejemplo

write (‘Escribe un número de 1 a 10’);

readln (numero);

IF numero = 10) THEN

   writeln (‘Tu número es de dos cifras’);

write (‘Escribe un número de 2 a 20);

...

 

 

Condicionales dobles.

Ejecutan una porción de código si la condición evaluada es positiva y otra porción de código distinta si la condición es negativa.

IF condicion THEN

       accion si positiva;

ELSE

       accion si negativa;

 

Ejemplo

write (‘Escribe un número de 1 a 10’);

readln (numero);

IF numero > 5) THEN

   writeln (‘Tu número es mayor de 5’);

ELSE

   writeln (‘Tu número es menor o igual de 5’);

write (‘Escribe un número de 2 a 20);

...

 

Condicionales múltiples.

Son utilizadas para ejecutar distintas porciones de código en función del valor de una variable de tipo Integer, Byte o Char.

CASE variable OF

   valor1: accion;

   valor2: accion;

...

ELSE accionElse;

END;

 

La entrada “ELSE” no es obligatoria, pero si recomendada, ya que se ejecuta si “variable” no tiene ninguno de los valores definidos por “valor1”, “valor2”..

 

Ejemplo

write (‘Escribe un número de 1 a 10’);

readln (numero);

CASE numero OF

   1 : writeln (‘Ha escrito 1’);

   2 : BEGIN

           writeln (‘Ha escrito 2’);

           writeln (‘Es un numero par);

       END;

   3 : writeln (‘Ha escrito 3’);

   ...

   10 : writeln (‘Ha escrito 10’);

   ELSE  writeln (‘No es un valor correcto’);

END;

 

 

Funciones y procedimientos

El objetivo de crear funciones (y procedimientos) es agrupar y generar módulos que realizan una función muy concreta. à Modularidad.

Los argumentos son información que se le pasa a la función con la que realiza operaciones. Los argumentos se definen de la siguiente manera:

                        nombreArgumento : tipo del argumento

 

FUNCTION Suma(a,b: Integer): Integer;

 

Las funciones devuelven un valor como resultado de sus operaciones. Los procedimientos no devuelven ningún valor.

 

PROCEDURE Suma(a,b: Integer; VAR resultado : Integer);

 

Existen dos métodos de pasar argumentos, por valor o por variable. Cuando se pasa un argumento por variable se utiliza la partícula “VAR”. El valor de la variable cambia fuera de la función o procedimiento. Mientras que si se pasa por valor, cualquier cambio se descarga una vez terminado el procedimiento o función.

 

Funciones

Devuelven un valor, hay que definir un tipo de dato para el retorno. Para devolver ese nivel se realiza la siguiente acción.

nombreFuncion := ValorRetorno

Procedimientos

No devuelven nada.