Está en la página 1de 18

Pascal

Niklaus Wirth
Niklaus Wirth (Winterthur Suiza, 15 de febrero de 1934), cientfico de la computacin.
En 1959 obtiene el ttulo de Ingeniero en Electrnica en la Escuela Politcnica Federal
de Zrich (ETH) en Suiza. En 1960 obtuvo un M.Sc. de la Universidad de Laval, Canad. En
1963 obtiene un Doctorado (Ph.D.) en la Universidad de California, Berkeley.
De 1963 a 1967 sirvi como profesor auxiliar de Informtica en la Universidad de
Stanford y de nuevo en la Universidad de Zrich. A partir de 1968 se convirti en profesor de
Informtica en la ETH en Suiza, tomndose dos aos sabticos en la Xerox PARC de
California.
Wirth fue el jefe de diseo de los lenguajes de programacin Euler, Algol W, Pascal,
Modula, Modula-2 y Oberon. Tambin ocup gran parte de su tiempo en el equipo de diseo e
implementacin de sistemas operativos Lilith y Oberon para el Lola en el diseo del hardware
digital y el sistema de simulacin.
Su artculo de desarrollo de un programa por refinamiento sucesivo ("program
development by stepwise refinement") se considera un texto clsico en la ingeniera del
software, as como su libro Algoritmos + Estructuras de datos = Programas, que recibi un
amplio reconocimiento, y que an hoy resulta til en la enseanza de la programacin. Recibi
el Premio Turing por el desarrollo de estos lenguajes de programacin en 1984. Se jubil en
1999.
Pascal. Lenguaje de Programacin.
El lenguaje de programacin Pascal apareci por primera vez en 1971, de la mano de
Niklaus Wirth. Wirh invent el lenguaje como una forma de mejorar el por aquel entonces
arcaico Algol. No es el primer lenguaje que Wirth disea, posteriormente invent el Modula-2
y el Oberon. Sin embargo, paradjicamente, esos dos lenguajes han sido ampliamente
superados por el Extended Pascal y el Object Pascal. De todos esos lenguajes, Pascal es el que
ms xito ha tenido.
Aunque nace a principios de los 70, Pascal cobra autntica vida a partir de

principios/mediados de los 80, popularizado por el fabuloso Turbo Pascal de MS-DOS para
PC, y sobre todo el Apple Pascal. Pascal ha sido tan popular hasta mediados de los 90, que una
gran parte (la mayor parte) de las aplicaciones desarrolladas para Mac estaban realizadas en
Pascal, as como una enorme parte tambin de los programas de MS-DOS.
Todava hoy, Pascal se ensea en las universidades como primer lenguaje, pues se trata
de un lenguaje muy legible. Fue Borland la que, hasta el Turbo Pascal 7, se encarg de la
mayor parte de la evolucin de este lenguaje. A mediados de los 90, con el boom de Windows
y el renacimiento de los sistemas Unix (entre ellos Linux) como ordenadores servidores
primero y luego como estaciones de trabajo, motiv que Pascal pasara a un segundo plano en
beneficio de C.
En ese momento, prcticamente solo Delphi (Object Pascal para Windows) consigui
mantenerse en la brecha, pero conformndose con una pequea parte del mercado solamente.
Pascal se caracteriza por ser un lenguaje de programacin estructurado fuertemente
tipificado. Esto implica que:

El cdigo est dividido en porciones fcilmente legibles llamadas funciones o


procedimientos. De esta forma Pascal facilita la utilizacin de la programacin
estructurada en oposicin al antiguo estilo de programacin monoltica.

El tipo de dato de todas las variables debe ser declarado previamente para que su uso
quede habilitado.

El nombre de Pascal fue escogido en honor al matemtico Blaise Pascal.

Estructura de un Programa en Pascal


La parte de declaraciones y definiciones es la zona del programa donde se definen y
declaran todos los elementos (constantes, tipos, variables, funciones y procedimientos) con los
que va a trabajar el programa. Se trata de una parte opcional (puede no existir) pero, si existe,
debe de aparecer al principio del programa, justo tras la cabecera del mismo y en el orden
apropiado.

El cuerpo del programa es la zona donde se encuentran las instrucciones ejecutables. El


cuerpo del programa siempre empieza con la palabra 'BEGIN' y acaba con 'END.'. De esta
forma, un programa en PASCAL, ha de tener, como mnimo, un encabezamiento y un bloque o
cuerpo con al menos una instruccin, por ejemplo:
PROGRAM Ejemplo (Input, Output);
BEGIN
Write ('HOLA'); (* CUERPO *)
END.
El Encabezado:
Es la primera instruccin de un programa, Todo programa en pascal comienza con la
palabra program, y el nombre del programa, mximo 8 caracteres, sin espacios en blanco
seguido de un punto y coma. Ejemplo:
Program nomina;
Program IDENTIFICADOR;
Program: Indica el inicio del programa.
IDENTIFICADOR: Sirve para identificar el programa.
Y ; :Indica el fin de la instruccin.
Es conveniente utilizar la clusula uses crt para utilizar las propiedades de la pantalla.
Ejemplo:
uses crt;
Declaracin de variables:
En esta seccin se declaran las constantes (const), los tipos de datos (type), las
variables (var), los procedimientos (procedure) y las funciones (function) definidos por el
programador que se usan en el programa. Tambin se puede indicar tanto la
<lista_de_unidades> como la <lista_de_etiquetas> que se utilicen en el programa.

Los caracteres abrir corchete ( [ ) y cerrar corchete ( ] ) se utilizan para indicar que lo
que contienen es opcional.
Cuerpo:
En el cuerpo se escriben las instrucciones del bloque de instrucciones principal del
programa. La sintaxis es:
begin
<instruccin_1>
<instruccin_2>
...
<instruccin_n>
end.
Begin y End:
Son palabras reservadas que marcan el principio y final de la seccin cuerpo. Por
ltimo, escribimos el programa principal, el cual comienza con la palabra begin y termina con
la palabra end seguida de un punto. Dentro del begin y el end final se encuentran todas las
instrucciones y llamadas a los procedimientos que hemos definido anteriormente. Ejemplo:
begin
write(Escriba el nombre del estudiante: );
readl(nombre);
..
listar; > aqu llamamos al procedimiento listar definido antes
..
end.
Las palabras reservadas son identificadores reservados predefinidos que tienen un
significado especial y no se pueden utilizar como identificadores en sus programas.
Identificador:
Nombre utilizado para describir constantes, variables, tipos, funciones e incluso el

nombre del programa.


Un identificador puede tener cualquier nmero de caracteres, pero debe empezar con
un carcter alfabtico y, a continuacin, cualquier nmero de caracteres alfanumricos .
Los identificadores que pueden ser utilizados en los programas no podrn coincidir con
un conjunto de palabras del lenguaje con un significado especial o palabras reservadas (como
por ejemplo AND, FOR, PACKED, WHILE, ARRAY, FUNCTION, PROCEDURE, WITH,
BEGIN, PROGRAM, CASE, IF, RECORD, FALSE, TRUE, MAXINT, BOOLEAN, CHAR,
INTEGER, ...)
Un identificador se debe separar con un blanco (o salto de lnea) de las palabras
reservadas y de las constantes numricas.

Declaraciones Bsicas - Tipos de Variables - Valores y Operaciones.


Tipo INTEGER:
Se trata del subconjunto finito de los nmeros enteros comprendido entre
(MAXINT+1) y MAXINT, donde MAXINT corresponde al valor mximo entero que el
ordenador puede representar.

Operadores

Operaciones
sobre
INTEGER

Funciones

Aritmticos
Lgicos
Relacionales
ABS (), PRED(),
SUCC(), SQR(),
ORD(), ODD()

Procedimientos READ(), READLN()


WRITE(), WRITELN()

+ - * div mod
< <= > >= = <>

Tipo REAL:
Subconjunto finito de los nmeros reales comprendido entre: MAXREAL ..
MINREAL, 0, MINREAL .. MAXREAL. Tambin se llaman nmeros de punto o coma
flotante.
Aritmticos
Lgicos

Operadores

+-*/
< <= > >= =
<>

Relacionales
Operaciones
sobre
REAL

Funciones

ABS(), SQR(), SQRT(), SIN(), COS(), ARCTAN(),


LN(), EXP(), TRUNC(), ...

Procedimientos

READ(), READLN()
WRITE(), WRITELN()

Existen dos formas de escribir o especificar los nmeros reales:

Forma Normal: En este formato, los nmeros deben de tener un punto decimal con, al
menos, un dgito a la izquierda del punto.

Forma Exponencial o Cientfica: En este formato, para escribir el nmero real, se


escribe la mantisa, a continuacin la letra 'E' y el exponente en base 10 (ste debe de
ser un nmero entero).
Ejemplos de nmero reales:
Correctos:

2.5

0.0

3.4E-5

5.0E2

Incorrectos:

E20

.1

5.

7E0.5

La forma exponencial es conveniente para trabajar con nmeros muy grandes o muy pequeos.
Tipo CHAR:
El tipo char tiene 256 posibles valores (caracteres) que corresponden al cdigo ASCII
(American Standard Code for Infomation Interchange) de los cuales algunos son caracteres de

control que no es posible imprimir.


Algunas de las operaciones que se pueden realizar sobre el conjunto de caracteres son
las siguientes:
ORD(x): Indica la posicin dentro del cdigo ASCII del carcter x
CHR(pos): Indica el carcter que hay en la posicin pos del cdigo ASCII.
WRITE(x) y READ(x): Son las operaciones de lectura y escritura de caracteres.
En PASCAL, los caracteres se representan siempre entre apstrofes: 'A', '+', '7' ,etc., y
expresiones del tipo 'AB' no son de tipo carcter, sino de tipo STRING (una cadena o tira de
caracteres, este tipo se estudiar en prximas prcticas).
Tipo BOOLEAN:
El tipo BOOLEAN slo consta de dos valores: FALSE y TRUE. Las operaciones
sobre los valores del tipo slo son las operaciones lgicas (AND, OR, NOT) y las operaciones
relacionales.
Variable:
Es cualquier identificador de cualquier tipo que puede asumir diferentes valores
durante la ejecucin de un programa. Una variable se declara dentro de la zona de declaracin
identificada por VAR de la siguiente forma:
VAR
identif1, identif2: Tipo1;
Ejemplos:
VAR
a,b,c : REAL;
dias
f,t

: INTEGER;
: BOOLEAN;

Tipos Homogneos. Tipo vector.


Vector:
Es una coleccin de componentes del mismo tipo, homognea, que tiene un nombre o
identificador comn. En concreto es posible denotar y acceder a cada componente individual
por su posicin dentro del grupo o coleccin y en Pascal, y en la mayora de los lenguajes de
programacin, el nmero de componentes de un vector se define inicialmente, no siendo
posible su modificacin posterior, por ello se dice que el vector es un tipo de datos esttico.
El siguiente ejemplo muestra la definicin de una variable, denominada pluviosidad,
formada por 100 componentes individuales, cada una de ellas de tipo real:
VAR pluviosidad: Array [1..100] of real;
Efectuada la declaracin anterior en un programa en Pascal, es posible en las
instrucciones de dicho programa acceder (para determinar o modificar cada valor) a cada uno
de los 100 elementos de tipo real que constituyen la variable pluviosidad,
En Pascal la palabra reservada que se utiliza para definir un vector es la palabra
"Array", como es habitual en este lenguaje de programacin la definicin de variables de tipo
vector puede efectuarse directamente, como en el ejemplo anterior, en la seccin de
declaracin de variables; o puede definirse previamente un nuevo tipo, en la seccin de
definicin de tipos y, a continuacin, definir cualquier nmero de nuevas variables
pertenecientes a dicho tipo.
La forma general que adopta una declaracin de un nuevo tipo vector en Pascal es la
siguiente:
TYPE
NombreTipo = ARRAY [Indice] OF TipoBase;
Pudindose, tras la declaracin anterior, definir nuevas variables de dicho tipo, como se
efecta a continuacin:
VAR Nom1, Nom2, ..., NomN : NombreTipo;

En la declaracin del tipo anterior distinguimos:


La declaracin del tipo base (TipoBase), que es el tipo de cada uno de los elementos
individuales del vector. En el ejemplo inicial (pluviosidad) dicho tipo era el Real.
La definicin de un ndice (Indice), que puede ser cualquier tipo subrango o
enumerado. Dicha declaracin establece el nmero de elementos del vector, as como el tipo
que debern tener las expresiones que se utilizarn en la referenciacin individual de cada
componente.
En general, el TipoBase del vector puede ser cualquier otro tipo vlido en Pascal,
siendo posible que dicho tipo base sea, a su vez, estructurado. As, es posible definir vectores
de tuplas, e incluso vectores cuyos componentes son tambin vectores.
A los vectores cuyas componentes son, a su vez, otros vectores, se les denomina
multidimensionales. Por lo contrario, a los vectores cuyas componentes no son otros vectores
se les denomina unidimensionales.
El siguiente ejemplo muestra algunas declaraciones de vectores unidimensionales
efectuadas en Pascal:
TYPE
Fecha = Record
Dia, Mes, Anyo: Integer
End;
Ind1 = -3 .. 123;
Letras = 'A' .. 'Z';
VecFechas = ARRAY [Ind1] OF Fecha;
VecLetras1 = ARRAY [Letras] of Integer;
VecLetras2 = ARRAY [1..100] of Letras;

VAR
VFecha1, VFecha2 : VecFechas;
VLetras1: VecLetras1;
VLetras2: VecLetras2;
Cuerpo del programa
El cuerpo del programa es obligatoria. Siempre empieza con la palabra "BEGIN" y
finaliza con "END."; entre ambas se sitan las instrucciones del programa.

Funciones con las que Trabaja Pascal


Funciones Matemticas

Abs(x): Valor Absoluto.

Exp(x): Exponencial ex.

Ln(x): Logaritmo natural.

Sin(x): Seno.

Cos(x): Coseno.

ArcTan(x): Arco Tangente.

Sqr(x): Cuadrado.

Sqrt(x): Raz Cuadrada.


Una funcin que opera slo sobre valores enteros es Odd(n), que entrega True si n es

impar.
Funciones de Conversin de Real a Entero
Existen dos funciones para convertir un nmero real a un entero:

Trunc(x): Truncamiento (elimina los decimales).

Round(x): Redondeado (aproxima al entero ms cercano).


Algunos Ejemplos:

Round(5.4) { 5}

Trunc(5.4) { 5}

Round(5.7) { 6}

Trunc(5.7) { 5}

Round(2.0) { 2}

Trunc(2.0) { 2}

Round(-8.4) { -8}

Trunc(-8.4) { -8}

Round(-8.6) { -9}

Trunc(-8.6) { -8}

Funciones Sucesor y Predecesor


En tipos de datos para cuyos valores tenga sentido, las funciones Succ y Pred permiten
obtener respectivamente el sucesor y el predecesor de un valor.
Por ejemplo:
Succ(10)

{ 11}

Succ('y') { 'z'}

Pred(10) { 9}
Pred('y') { 'x'}

Succ(False) { True} Pred(True) { False}


Succ(-5)

{ -4}

Pred(-5) { -6}

Generalmente, ambas funciones son inversas una de la otra, y en la mayora de los


casos se cumplen estas relaciones:
Succ(Pred(x)) = x
Pred(Succ(x)) = x
Funciones de Mapeo de Caracteres
Los caracteres (valores de tipo Char) son representados internamente en el computador
como nmeros enteros. Para ello, tiene que haber un mapeo que asocie cada smbolo a un
nmero. El ejemplo ms conocido de eso es el cdigo ASCII, que mapea los nmeros del 0 al
127 a caracteres.

Este mapeo es accesible desde Pascal usando las siguientes funciones:

Ord(c): Entrega el nmero asociado al carcter c.

Chr(n): Entrega el carcter asociado al nmero n.


Ambas funciones son inversas mutuas:

Ord(Chr(n)) = n

Chr(Ord(c)) = c

Sentencias Repetitivas
Bucles
Los bucles son parientes cercanos de los condicionantes, pero ejecutan constantemente
un cdigo mientras se cumpla una determinada condicin. Los ms frecuentes son:
For: Ejecuta un cdigo mientras una variable se encuentre entre 2 determinados parmetros.
While: Ejecuta un cdigo mientras se cumpla la condicin que solicita.
Hay que decir que a pesar de que existan distintos tipos de bucles, ambos son capaces
de realizar exactamente las mismas funciones. El empleo de uno u otro depende, por lo
general, del gusto del programador.
Sentencias IF THEN/IF THEN ELSE
El formato de la sentencia o estructura if es el siguiente:
If expresin lgica o booleana then
Sentencial1 (simple o compuesta)
Else
Sentencia2 (simple o compuesta);
Donde podemos observar el ; que sierra la sentencia.
Si el resultado de la expresin es verdadero /true) entonces se ejecuta la sentencia

siguiente a la palabra reservada then, en caso contrario se ejecuta la sentencia a continuacin


de else. La clausula else es opcional sin embargo toda estructura if debe tener una palabra then
asociada con ella.
Sentencia CASE
Se utiliza para cuando los distintos valores de una variable o expresin existen distintos
conjuntos de sentencias a ejecutar, por eso recibe el nombre de sentencia alternativa mltiple.
La sentencia case of tiene el siguiente formato:
Case <expresin> of
<lista de constantes 1> : <sentencia 1>;
<lista de constantes 2> : <sentencia 3>;
<lista de constantes 2> : <sentencia 3>;

<lista de constantes n> : <sentencia n>


Else <sentencia>

End;
La expresin o variable debe ser de tipo ordinal es decir entero, carcter, lgico o
enumerado. Cada una lista de constantes que recibe el nombre de etiquetas debe ser del mismo
tipo de la variable o expresin. Cuando termina la ejecucin de la sentencia de control salta a
la sentencia siguiente al final de la estructura (sentencia end;)
Las reglas para utilizar case son:

Una constante no puede aparecer en dos listas de constantes distintas.

Una etiqueta puede estar formada por un tipo subrango si para todos los valores de
este tipo la sentencia a ejecutar es la misma, con lo que se ahorra esfuerzo en la
codificacin.

Sentencia Incondicional GOTO


La sentencia goto transfiere el control del programa a la sentencia siguiente a la
etiqueta marcada en goto, pudiendo ser el salto adelante o atrs en el cdigo. La sentencia goto
requiere de una declaracin de etiquetas label, para transferir el control a una sentencia

etiquetada se debe utilizar la sentencia goto etiquetada, cada etiqueta solo puede marcar una
sentencia dentro del programa.
Etiqueta: <sentencia>

Goto etiqueta
La sentencia goto debe ser evitada y su uso restringido al mximo por no decir
prohibido. No obstante en caso de necesidad jams se debe saltar al interior de un bucle for,
while o repeat.
Las sentencias o estructuras repetitivas permiten que una o mas sentencias se ejecuten
varias veces, dependiendo el numero de ejecuciones de la verificacin de una o varias
condiciones en Pascal existen tres tipos de sentencias repetitivas: WHILE, REPEAT y FOR.
Sentencia WHILE
La sentencia o bucle while indica a la computadora que se ejecuten una o mas
sentencias mientras que se cumpla una determinada condicin. La condicin viene
determinada por la variable o expresin booleana. El formato general que adopta la estructura
es la siguiente:
While

condicin

Begin

do

while condicin do
<sentencia>;

<sentencia1>;

<sentencian>
End.
Dependiendo de si se ejecuta una sentencia compuesta o una sentencia simple.
La sentencia while comprueba inicialmente si la condicin es verdadera. Si la
condicin es verdadera se ejecutan las sentencias mientras la condicin de su enunciado sea
verdadera y finaliza cuando la condicin es falsa. Si la condicin es falsa se saltan las
sentencias de bucle continuando la ejecucin del programa en la siguiente sentencia al mismo.
La expresin o variable lgica se verifica antes que la <sentencia> del interior del
bucle se ejecuten, por tanto, deben estar definidas antes de la ejecucin del bucle.

El bucle while se ejecuta mientras la condicin sea verdadera.

Dentro del bucle deben existir sentencias que modifiquen el valor de la variable o
expresin, pues de lo contrario si el valor inicial es verdadero nunca se podr salir del
mismo y se ejecutara indefinidamente.

Si la expresin lgica es falsa al comenzar el bucle, este no se realizara

Sentencia REPET-UNTIL
La sentencia o bucle repeat ejecuta las sentencias cmprendidas entre las palabras repeat
y until hasta que la expresin o variable sea verdadera (true). La sentencia o estructura repeatuntil es la siguiente:
Repeat
<sentencia>;
<sentencia>;

Until condicin;

Los bucles repeat se ejecutan siempre una ves por lo menos.

La terminacin del bucle se produce cuando el valor de la expresin lgica o condicin


de salida es true (verdadera).

El bucle repeat se ejecuta hasta que la expresin lgica es verdadera es decir, se


ejecuta mientras la expresin o variable toma el valor falso (false).

Sentencia FOR
La sentencia repetitiva for repite la ejecucin de una o varias sentencias un numero fijo
de veces, previamente establecido, necesita una variable del control del bucle que es
necesariamente de tipo ordinal, comprendidos entre dos valores extremos (inferior y superior)
La sentencia for tiene la siguiente forma:
For variable control := valor inicial to valor final do
<sentencia>;
For variable control := valor inicial downto valor final do
<sentencia>;
Donde <sentencia> puede ser una sentencia simple o compuesta. El primer formato de

la sentencia for se denomina ascendente y el segundo descendente.


La variable de control del bucle y las variables inciales y finales que lo determinan son
ordinales y del mismo tipo y no deben ser alterados por ninguna de las sentencias que
componen el bucle. Los valores inicial y final son evaluados una sola ves de la forma que si en
el caso de downto el valor inicial mayor (menor) que el valor inicial, el conjunto de sentencias
que componen la estructura no se ejecutan continuando el programa en la siguiente sentencia
al bucle.
Podemos sealar los siguientes aspectos de su aplicacin

Utilizar la sentencia o estructura for cuando se conozca el numero de iteraciones


siempre que la variable de control de bucle sea de tipo ordinal.

Utilizar la estructura repeat-until cuando el bucle se realice por lo menos una vez.

En todos los dems casos utilizar la sentencia while.


Cuando alguna de las sentencias que componen un bucle es a su vez una estructura

repetitiva estamos ante lo que se denomina en programacin bucle animado.


Hay tantos tipos de bucles animados como combinaciones posibles de estructuras
repetitivas, es decir, pueden presentarse bucles for-for, for-while, for-repeat, while-while,
repeal-while, repeat-repeat, etc.

Ejemplos Ejercicios

También podría gustarte