25
Pascal Niklaus Wirth Niklaus Wirth (Winterthur Suiza, 15 de febrero de 1934), científico de la computación. En 1959 obtiene el título de Ingeniero en Electrónica en la Escuela Politécnica Federal de Zúrich (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 Informática en la Universidad de Stanford y de nuevo en la Universidad de Zúrich. A partir de 1968 se convirtió en profesor de Informática en la ETH en Suiza, tomándose dos años sabáticos en la Xerox PARC de California. Wirth fue el jefe de diseño de los lenguajes de programación Euler, Algol W, Pascal, Modula, Modula-2 y Oberon. También ocupó gran parte de su tiempo en el equipo de diseño e implementación de sistemas operativos Lilith y Oberon para el Lola en el diseño del hardware digital y el sistema de simulación. Su artículo de desarrollo de un programa por refinamiento sucesivo ("program development by stepwise refinement") se considera un texto clásico en la ingeniería del software, así como su libro Algoritmos + Estructuras de datos = Programas, que recibió un amplio reconocimiento, y que aún hoy resulta

Pascal: Lenguaje de Programación

Embed Size (px)

DESCRIPTION

Breve documentación del Lenguaje de Programación Pascal.

Citation preview

PascalNiklaus WirthNiklaus 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 PascalLa 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);BEGINWrite ('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 como la 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...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:beginwrite(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.Aritmticos+ - * div mod

OperadoresLgicos

Relacionales< >= =

OperacionessobreINTEGERFuncionesABS (), PRED(),SUCC(), SQR(),ORD(), ODD()

ProcedimientosREAD(), READLN()

WRITE(), WRITELN()

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+ - * /

OperadoresLgicos

Relacionales< >= =

OperacionessobreREALFuncionesABS(), SQR(), SQRT(), SIN(), COS(), ARCTAN(), LN(), EXP(), TRUNC(), ...

ProcedimientosREAD(), 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.0E2Incorrectos: E20 .1 5. 7E0.5La 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 xCHR(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 : INTEGER; f,t : 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 programaEl 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 PascalFunciones 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 EnteroExisten 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 PredecesorEn 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} Pred(10) { 9}Succ('y') { 'z'} 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)) = xPred(Succ(x)) = xFunciones de Mapeo de CaracteresLos 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 RepetitivasBuclesLos 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 CASESe 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 of : ; : ; : ; : Else 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 GOTOLa 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: Goto etiquetaLa 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 WHILELa 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 do while condicin do Begin ; ; 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 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 realizaraSentencia REPET-UNTILLa 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 repeat-until es la siguiente:Repeat ; ; 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 FORLa 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 ;For variable control := valor inicial downto valor final do ;

Donde 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