UNIDAD III. LENGUAJE DE PROGRAMACION PASCAL  

Contenido

Breve Reseña Histórica

Estructura de un Programa en Turbo Pascal

Encabezamiento

Sección de Declaraciones

Cuerpo Principal

Sentencia de Asignación

Expresiones Aritméticas

Expresiones Relacionales

Expresiones Lógicas

Instrucciones de Entrada y de Salida

Estructuras de Control

Ejercicios Propuestos

Breve Reseña Histórica

En el año de 1970, el profesor Niklaus Wirth, en el Instituto Tecnológico de Zurich en Zuiza, diseñó  el Lenguaje Pascal con el propósito de facilitar una programación menos subjetiva y mejor estructurada. En 1974 junto a K. Jenssen publican un libro que sirvió como definición básica del lenguaje. Posteriormente aparecieron otras versiones estandar como el IEEE e ISO PASCAL, y en los EE.UU. aparece el UCSD PASCAL en ambientes universitarios. En 1983 aparece en el mercado de los EE.UU. un compilador PASCAL diseñado por la empresa BORLAND INTERNATIONAL, llamado TURBO PASCAL y que posteriormente  ha sido mejorado con distintas versiones, presentando en las últimas un ambiente de programación sencillo de manejar, facilitando así la edición, compilación y ejecución de los programas.

Estructura de un Programa en Turbo Pascal

Cada paso o grupo de instrucciones dentro de un algoritmo pueden transformarse en un módulo de Pascal. Los módulos en Pascal son  formados por un bloque de instrucciones, funciones o procedimientos. Un programa en Pascal, en forma general, consta de tres partes:

  1. Encabezamiento.
  2. Sección de Declaraciones.
  3. Cuerpo Principal del programa.

A continuación se muestra un esquema gráfico de tal estructura y las palabras claves que la identifican :

La sección de declaraciones ( entre USES y FUNCTION ), son opcionales y no tienen que aparecer necesariamente, en todo programa. Turbo Pascal permite, en caso de usar ésta sección, que las sentencias puedan ser escritas en cualquier orden, excepto el USES que debe ir inmediatamente después de PROGRAM, sin embargo se sugiere mantener el orden descrito.

Ahora se analizará cada sección en detalle:

  1. Encabezamiento: Permite asignarle un nombre al programa.  

¿Qué es un identificador en PASCAL?

Es el nombre o código que puede representar: a una constante, a una variable, al nombre de: un programa, de un procedimiento o una función, etc. Se define como una secuencia de caracteres de cualquier  longitud, sólo que para PASCAL son significativos los primeros 63 caracteres, que cumpla los siguientes tres requisitos:

1)    Debe comenzar con una letra (A – Z ), indiferentemente que sea en mayúscula o minúscula o el signo de subrayado ( _ ).

2)    La primera letra puede ser seguida de otras letras, dígitos del 0 al 9  o el guión de subrayado.

3)    La cadena de caracteres formada no debe ser una palabra reservada de PASCAL (Palabra característica que se utiliza para describir una acción propia del Lenguaje).

Ejemplos de identificadores:

Identificadores válidos                    Identificadores no válidos

SUMATORIA                                     4Ventas

Total_Nómina                                   Valor   Promedio  

Tipo4ZAC                                        VAR

Km28_08                                         Num#

Rrowaq                                              A+B

_ABC                                                Piso?12

Ejemplos de Encabezamientos:           a) PROGRAM           Promedio_de_Notas  ;

        b) PROGRAM Calculo;

  1. Sección De Declaraciones: Permite especificar el nombre de los identificadores que  servirán como: constantes y su correspondiente valor, variables con el correspondiente tipo de dato a almacenar en ellas, así como la declaración de los módulos que estarán representados por procedimientos y funciones. A continuación se explica cada una de las sentencias que corresponden a ésta sección:

USES: Permite utilizar unidades estándar de Turbo Pascal. Estas unidades están almacenadas en el archivo TURBO.TPL ( librería de programas residentes en Turbo Pascal ). Estas unidades son: SYSTEM, GRAPH, DOS, CRT, PRINTER, TURBO3 y GRAPH3; las cinco primeras se usan en la escritura de programas y las dos últimas para mantener la compatibilidad con programas y archivos creados con la versión 3.0 de Turbo Pascal. Estas unidades se cargan en memoria y estan disponibles en cualquier momento, con la ayuda de la cláusula USES. a continuación un resumen de las utilidades de estas unidades:

Unidad

Uso

System

Contiene todos los procedimientos y funciones estándar de Pascal , ésta se enlaza automáticamente en la compilación de cada programa y no se requiere referenciarla en la cláusula USES.

Graph

Contiene todo lo requerido para el manejo de gráficos, como tipos de pantallas, tamaño de caracteres, figuras geométricas, etc.

Dos

Contiene todo lo relacionado con el MS-DOS y la gestión de archivos. Algunos procedimientos contenidos en ésta unidad son: GetTime, SetTime, Disksize, etc.

Crt

Permite el acceso al control de los modos de pantalla, del teclado, e los colores, al posicionamiento del cursor, etc. Algunos procedimientos típicos de ésta unidad son: ClrScr, KeyPressed, Sound Window, etc.

Printer

Facilita el uso de la impresora como dispositivo de salida. La inclusión de Printer, define a Lst como una variable de texto, que permite enviar la salida a la impresora, utilizando Write o Writeln. Esta unidad requiere a su vez de la unidad Crt.

Graph3, Turbo3

Estas dos unidades deben usarse cuando se utilicen con las versiones 4 o 5, programas elaborados con la versión 3.

Ejemplos de declaración de Uso de Unidades:           a) USES           Crt  ;

b) Uses Crt, Printer;

CONST :  Sección donde se especifican aquellos identificadores que se comportarán como constantes en la ejecución del programa, además se asigna el valor que tomará y que no podrá cambiar. Conviene aclarar que no sólo se consideran constantes las cantidades numéricas, sino que las cadenas de caracteres como una dirección de un empleado también puede serlo.  

Ejemplos de declaración de Constante:              a) CONST           N    =  50  ;

b) CONST Por = 16.5 ;

U   = ‘Universidad’ ;

Precio_Max = 154.75 ;

TYPE :  Se usa para definir tipos de datos creados por el programador. ( Esta sección será analizada posteriormente, cuando se necesite otros tipos de datos diferentes a los estándar de Turbo Pascal ).

VAR :  Sección donde se especifican aquellos identificadores que representen a una variable, en el cuerpo principal del programa o en un módulo.  

Es necesario ahora, estudiar los tipos de datos  que el lenguaje Turbo Pascal permite que se almacenen en las variables. Existen dos tipos: los que son estándar y los que son creados por el programador.

Tipos de Datos Estándar en Turbo Pascal

Un tipo de dato define el conjunto de valores que una variable puede guardar o almacenar. Cada una de las variables en un programa debe estar asociada con uno y sólo un tipo de dato. Turbo Pascal posee un grupo de datos llamados básicos el cuál está compuesto  por los tipos siguientes:  

Tipo Enteros: Turbo Pascal permite el uso de cinco tipos predefinidos de valores enteros. En la tabla siguiente se especifican el nombre y el rango:  

Tipo Real: Turbo Pascal ofrece cinco tipos predefinidos que de valores reales. En la tabla siguiente se especifican el nombre y el rango:  

Tipo Cadena de Caracteres: Se trata de una secuencia de cero o más caracteres correspondientes al código ASCII, escrito en una línea sobre el programa y encerrado entre apóstrofos (comillas simples). Una variable de éste tipo debe declararse con la identificación STRING.

Ejemplos de cadenas de caracteres:

‘Historia Universal’,                       ’,                      ‘ Carrera 8 # 10-28 ’,           ‘ AMIGOS ’

Tipo Caracter: Es el tipo de dato que puede contener un solo carácter, que puede ser una letra, un dígito o un carácter especial como el espacio en blanco. Una variable de éste tipo debe declararse con la identificación CHAR.

Ejemplos:                ‘H’,                ‘%’,                           ‘8’,                 ‘+’

Tipo Lógico: Es el tipo de dato que sólo puede  tomar los valores lógicos TRUE (Verdadero) o FALSE (Falso). Una variable de éste tipo debe declararse con la identificación BOOLEAN.

Ejemplos de declaración de Variables:         

a)           VAR              N    :  Byte  ;

b)               VAR

Por : Real ;

Nombres : String[15] ;

Precio_Max : Longint ;

Sexo, Nacionalidad : Char;

Clave : Boolean ;

Peso, Altura, Sueldo : Single ;

PROCEDURE y FUNCTION:  Estas secciones son las que se usan para declarar módulos dentro de un programa, específicamente los procedimientos y funciones.

( Estas secciones serán analizadas posteriormente).

  1. Cuerpo Principal: Contiene la secuencia de sentencias que pueden ser ejecutadas. Es en ésta sección donde se traduce el algoritmo previamente planificado. Ese cuerpo de sentencias debe estar limitadas por las palabras reservadas BEGIN (inicio) y END (fin).

A continuación se especifican el formato y la sintaxis del lenguaje Turbo Pascal para las reglas o enunciados utilizados en el diseño de algoritmos:

Sentencia de Asignación: Es la traducción del enunciado de asignación analizado en la elaboración de algoritmos; recuerde que es una operación que almacena  un valor determinado en una posición de memoria a le que se le asigna un nombre ( variable ).

Ejemplo de Asignaciones:           C : = A + B ;

Sumatoria : =  Sumatoria  +  Cantidad ;

Clave : =  0 ;

C : = C + 1 ;

Bandera : = False ;

Expresiones Aritmeticas: Se trata de aquellas asignaciones, en donde a la derecha aparecen variables o constantes relacionadas mediante operadores aritméticos. A continuación se especifican los operadores aritméticos válidos en Turbo Pascal y los datos a quienes se les pueden aplicar:  

Operación

Operador

Aplicación

Suma

Resta

Multiplicación

División Real

División Entera

Módulo o Resto de la División Entera

+

-

*

/

DIV

MOD

Reales, Enteros

Reales, Enteros

Reales, Enteros

Reales, Enteros

Enteros

Enteros

Ejemplo de Expresiones Aritméticas:

K : = Valor * 3.14 / 2 ;

Pendiente : =  (Y1  - Y2 ) /  (X1 – X2)  ;

A : =  14 ;

B : =  3 ;

C : = A / B ;                      

D : = A  DIV  B ;                                      

E : = A  MOD  B ;     

F : =  B  DIV   A ;

G : =  B  MOD  A ;                

Estudiemos brevemente los valores asignados a las variables C, D, E, F en los ejemplos anteriores, considerando que a la variable “A” se le asigna 14  y a “ B “ 3, respectivamente, entonces :

División Rea l           A / B                                               División Entera           A  DIV  B

Valores Asignados :            

Variables Valores Asignados

C

4.666666 . . .

D

4

E

2

F

0

G

3

Expresiones Relacionales: Se trata de aquellas expresiones, en donde aparecen variables o constantes relacionadas mediante operadores de relación, aunque pueden estar presentes los operadores aritméticos. A continuación se especifican los operadores de relación válidos en Turbo Pascal:  

Operación

Operador

Mayor que

Mayor o Igual que

Menor que

Menor o Igual que

Igual a

Diferente

>

>= ó =>

<

<= ó =<

=

<> ó ><

Ejemplo de Expresiones Relacionales:

A < B ;

Sueldo < = 75000  ;

9Clave  =  True ;

Sexo =  ‘Femenino’ ;

(A  +  B ) <> 0;

Expresiones Lógicas: Se trata de aquellas expresiones, en donde aparecen variables o constantes relacionadas mediante operadores lógicos, aunque puede contener operadores aritméticos y de relación. A continuación se especifican los operadores lógicos válidos en Turbo Pascal:  

Operación

Operador

Negación

Conjunción

Disyunción

Disyunción ( O Exclusivo )

NOT

AND

OR

XOR

Ejemplo de Expresiones Lógicas:

M1           : =           (A < 0 )   AND   (A < B ) ;

Sas           : =           H  OR   NOT   (Sueldo < = 75000 ) ;

Valor           : =            (H*3 = 5 )  OR  (Clave  =  True ) ;

Wra           : =            ( Sexo =  ‘Femenino’ )  AND  ( Edad  < 18 ) ;

Color           : =           (A  +  B ) <> 0;

Instrucciones de Entrada y de Salida

  1. Instrucciones de Entrada

Turbo Pascal ofrece dos instrucciones para introducir datos desde el teclado o desde un medio externo, durante la ejecución de un programa. Estas sentencias son las que permiten traducir de los algoritmos aquellas sentencias que inician con el verbo LEER.

Estas instrucciones son:           READ           y READLN  

Las variables, a las que se les asignaran valores, deben  estar declaradas en la sección de declaración de variables VAR.  Cuando un programa que contenga  la sentencia READ ó READLN, se está ejecutando, se detendrá al encontrar una de estas dos sentencias, a la espera  de la entrada al valor correspondiente  para ser almacenado en la variable que se encuentre dentro del paréntesis. El usuario debe escribir el valor y luego pulsar ENTER.

Ejemplo de uso de la sentencia READ    y    READLN:

READ ( Nombre) ;

READ ( Código, Descripción, Precio_Costo, Precio_Venta ) ;

READLN ( Céd, Nombre, Sex ) ;

En caso de dársele entrada a varios valores a la vez, estos deben separarse con espacios en blanco, para  indicar la correspondencia entre estos y las variables; aunque es recomendable no leer más de un dato a la vez.

Diferencia entre el READ y el READLN

La diferencia entre ambas instrucciones, se observa en la pantalla, en el momento de introducir los datos. Consideremos que se le está dando entrada a la variable Nombre, primero haciendo uso del READ y luego con el READLN:

a) READ ( Nombre ) ;                                                b) READLN ( Nombre ) ;  

En éste caso, luego de escribir el nombre y pulsar ENTER, el cursor se mantiene a la derecha del último carácter

En éste caso, luego de escribir el nombre y pulsar ENTER, el cursor se traslada a la línea siguiente.  

  1. Instrucciones de Salida

Turbo Pascal ofrece dos instrucciones para darle salida a los resultados o a cualquier otra información; ya sea a través del monitor o de la impresora. Estas sentencias son las que permiten traducir de los algoritmos aquellas sentencias que inician con el verbo IMPRIMIR.

Estas instrucciones son:           WRITE y WRITELN

Salidas por pantalla del monitor:  

Ejemplo de uso de la sentencia      WRITE  y  WRITELN:

WRITE ( Nombre) ;

WRITE (‘Código :  ‘, Código ) ;

WRITELN ( ‘El promedio Obtenido es:  ‘ , Prome,  ‘Bs. / artículo ‘);

En caso de dársele salida a varios items a la vez, estos deben separarse con comas.

Diferencia entre el WRITE  y  WRITELN

La diferencia entre ambas instrucciones, se observa en la pantalla, en el momento de producirse el despliegue o la impresión de las salidas. Consideremos que se le está dando salida a la variable Nombre, primero haciendo uso del WRITE y luego con el WRITELN:

a)           WRITE ( ‘Nombre: ‘, Nombre ) ;                         b)           WRITELN (‘Nombre: ‘, Nombre );  

En éste caso, luego de que el programa muestra  la cadena Nombre y el valor de la variable Nombre, el cursor se mantiene a la derecha del último carácter.     

En éste caso, luego de que el programa muestra  la cadena Nombre y el valor de la variable Nombre, el cursor se traslada a la línea siguiente. 

Salidas por impresora:  

El uso de función LST, requiere definir previamente la unidad PRINTER en la sección USES, ya estudiada. Las demás características de la salida por monitor se mantienen para la salida por impresora.

Estructuras de Control

  1. Toma de Decisión: Sentencia que permite la traducción de regla o enunciado de decisión aprendido en el diseño de algoritmos.

Si las sentencias a ejecutarse dentro del THEN o dentro del ELSE, son  dos o más de dos, se requiere limitarlas con las palabras reservadas BEGIN END.  

¿Cómo funciona el IF?

Al igual que el enunciado SI-ENTONCES-CASO CONTRARIO, el IF evalúa el valor o expresión  que se encuentre delante de éste, si resulta TRUE (verdadero), se ejecutarán las sentencias que se encuentran en la sección del THEN y luego el control del programa se dirige a la sentencia posterior al IF; si resulta FALSE (falso), se ejecutarán las sentencias que se encuentran en la sección del ELSE y luego el control del programa se dirige a la sentencia posterior al IF.

Ejemplos de uso del IF:  

IF    Nota_Def >= 4.5                                                 IF       Nota_Def >= 4.5        

       THEN                                                                             THEN

              WRITE ( ‘Alumno Aprobado’)                                        BEGIN

       ELSE                                                                                             WRITE ( ‘Alumno Aprobado’)

              WRITE ( ‘Alumno Reprobado’) ;                                             ContaApro : = ContaApro + 1

                                                                                            END

                                                                                                ELSE

                                                                                                       BEGIN

                                                                                                              WRITE ( ‘Alumno Reprobado’) ;

                                                                                                              ContaRepro : = ContaRepro + 1

                                                                                                   END ;

  1. Ciclos de Repetición

Ciclo definido FOR ( llamado también Automático ): Recordemos que es aquel cuyo uso es permitido cuando se conoce el número de veces a repetir un cuerpo de sentencias. Es la traducción del enunciado de repetición HAGA-DESDE.  

¿Cómo funciona el ciclo FOR?

Al igual que el enunciado HAGA-DESDE, al entrar a un ciclo FOR se le asigna el valor inicial al identificador ( que trabaja como una variable de control ), y se compara éste con el valor final, si aun no lo ha superado el control del programa pasa a ejecutar la sentencia o cuerpo de sentencias, luego el identificador se incrementa y se vuelve a comparar con el valor final, hasta que llegue a superarlo entonces el control del programa se dirige a la sentencia posterior al FOR.

El uso del TO implica que el incremento del identificador ( variable control ), es de +1, mientras que si se utiliza el DOWNTO  el incremento del identificador ( variable control ), es de –1. En todo caso sólo uno de ellos debe ser utilizado.

Si el número de sentencias a repetir son dos o más, se requiere que sean limitadas por las palabras reservadas BEGIN END, así:  

Ejemplos del uso del ciclo  FOR:  

Ciclos Condicionales: Existen dos tipos de ciclos en donde la repetición o no del cuerpo de sentencias depende de si una condición se cumple o no.

a)    Ciclo Condicional WHILE: Es la traducción del enunciado de repetición       REPITA-MIENTRAS.  

¿Cómo funciona el Ciclo WHILE ?

Al igual que el enunciado REPITA-MIENTRAS, al entrar a un ciclo WHILE se evalúa el valor de la variable o de la expresión lógica, si resulta TRUE (verdadero),  se ejecutará la sentencia que se encuentre delante del encabezamiento WHILE; si resulta FALSE  entonces el control del programa se dirige a la sentencia posterior al WHILE.

Si el número de sentencias a repetir son más de dos, se requiere que sean limitadas por las palabras reservadas BEGIN END, así:

Ejemplos del uso del ciclo  WHILE:  

Es necesario que en el cuerpo de sentencias que se repiten, exista una que permita que la condición tome el valor FALSE, a fin de que el ciclo se detenga, de lo contrario se generaría un ciclo infinito, situación que debe evitarse.

b)    Ciclo condicional REPEAT: Es la traducción del enunciado de repetición REPITA-HASTA.  

¿Cómo funciona el Ciclo REPEAT ?

Al igual que el enunciado REPITA-HASTA, al entrar a un ciclo REPEAT se ejecuta la sentencia que se encuentra entre las palabras reservadas REPEAT-UNTIL, luego al llegar al UNTIL se evalúa el valor de la variable o de la expresión lógica, si resulta FALSE (falso),  se ejecutará de nuevo la sentencia; si resulta TRUE (verdadero) entonces el control del programa se dirige a la sentencia posterior al UNTIL.

Si el número de sentencias a repetir son dos o más, no se requiere que sean limitadas por las palabras reservadas BEGIN END, así:  

Ejemplos del uso del ciclo  REPEAT:

Es necesario que en el cuerpo de sentencias que se repiten, exista una que permita que la condición tome el valor TRUE, a fin de que el ciclo se detenga, de lo contrario se generaría un ciclo infinito, situación que debe evitarse.

Ejercicios Propuestos

1.      Codifique en Lenguaje Turbo Pascal las asignaciones siguientes:

a)     M ß 10 . (n – a . b)

b)     H ß

c)      K ß x ÷ [y . (z + w)]

d)     P ß

e)     S ß (Edad > 18) y [Esp ≠ ‘Electrónica’] 

f)        Valor ß (A = 1000) ó [(C + D) ≤ 5] y (E ≥ 0)

2.      ¿ Cual es el valor de la variable AUX al ejecutar la instrucciones 1 a la 6

                                 I.      A       :=   10 ;

                               II.      B    :=   20 ;

                              III.      AUX   :=   A ;

                           IV.      A   :=   B ;

                             V.      B   :=   A  + AUX ;

                           VI.      AUX   :=   B ;

3.      ¿ Cual es el valor de la variable X al ejecutar la instrucciones 1 a la 6?

                                 I.      M   :=   100 ;

                               II.      H1   :=   M = 100 ;

                              III.      PB   :=   M  MOD  4  <  0 ;

                           IV.      LAR   :=   H1  AND  PB ;

                             V.      B   :=   LAR  OR   ( M > = -999 ) ;

                           VI.      X   :=   H1 < > NOT B ;

4.      Efectúe la corrida en frío del siguiente programa:

PROGRAM   CORRIDA ;

USES

            CRT ;

CONST

            VALOR = 150 ;

VAR

            A :            BOOLEAN ;

            B  :            INTEGER ;

            C  :            REAL ;

BEGIN

            CLRSCR ;

            A := VALOR = 0 ;

            B := ( VALOR - 100 )  DIV  4  -  (VALOR - 50 )  MOD  15 ;

            C := VALOR  / ( B + 5 ) ;

            WRITELN ( ‘  VALOR =  ’ , VALOR , ‘ A = ’ , A , ‘ B = ’ , B ) ;

            WHILE            B < 5            DO

                        IF            A

THEN

                                                BEGIN

                                                            B := B  +  2 ;

                                                            WRITE LN ( ‘ B VALE = ’ , B )

                                                END

                                    ELSE

                                                BEGIN

                                                            A := NOT ( A ) ;

                                                            B := B  +  1 ;

                                                WRITE ( ‘  AHORA A VALE = ’ , A, ’    Y    ’ )

                                    END ;

            WRITELN ( ‘  C =  ’ , C : 7 :3 ) 

END.

5.      La Administración de un Supermercado maneja la siguiente información: Descripción de los artículos que ofrece al publico, Cantidad en Almacén de cada uno de ellos al iniciar el mes, Cantidad vendida de cada uno de ellos al finalizar el mes y el Precio de Venta en Bs. Se necesita codificar un programa en Turbo Pascal para:

a)     Mostrar un listado de aquellos artículos, para los que solo quedan menos de 10 unidades al final de mes.

b)     Calcular el total de Ventas, en Bs., al final del mes.

c)      Encontrar el Articulo que se vendió en mayor cantidad durante el mes.

d)     Mostrar la Cantidad al iniciar el mes, la Cantidad vendida al finalizar el mes y el Precio de Venta en Bs., de un articulo cuya descripción sea solicitada al usuario para que sea introducida a través del teclado.

e)     Mostrar el nombre de aquellos artículos para los que la cantidad que queda en Almacén a fin de mes, sea mayor al 20%.

g)     Calcular el porcentaje de artículos para los que la cantidad vendida sea menor al promedio.