Вы находитесь на странице: 1из 14

Resumen pascal Este libro presupone cierta familiaridad con pascal sin embargo para proporcionar una referencia

completa incluye un resumen de las caractersticas de lenguaje y muestra la manera de aplicarlas a los mtodos numricos. El lenguaje empleado se ajusta al estndar BSI/ISO (1982) y el estilo de pascal se ha adoptado del L.V Atkinson (1980, 1981, 1982). Un programa pascal tiene los siguientes componentes: 1. 2. 3. 4. 5. 6. 7. encabezamiento del programa declaracin de etiquetas globales declaracin de constantes globales declaracin de tipos globales declaraciones de variables globales declaraciones de procedimiento y funciones globales. Cuerpo del programa

Todos excepto el encabezamiento y el cuerpo del programa son opcionales pero cualquier otro que est presente debe colocarse en la posicin relativa mostrada (por ejemplo las constantes han de declararse antes que los tipos y las variables antes de los procedimientos y funciones). El que sigue es un anlisis de cada componente. 1.1. Cuerpo del programa En el cuerpo del programa empieza con la palabra bejin y termina con la palabra end y un punto. Entre bejin y end se encuentran las proporciones del cuerpo, separadas por puntos y comas. En este libro las palabras reservadas con bejin y end aparecen en negritas. Al introducir un programa en un computador se aconseja utilizar letras maysculas para las palabras reservadas y minsculas en otros contextos. Esto har mas legible los programas y as de esa forma los programas sern ms legibles y su objeto ms transparente. Como ayuda adicional a la legibilidad deben incluirse comentarios dentro de los programas. Un comentario es una secuencia de caracteres encerrados entre {y} con el nico motivo de ayudar al lector humano pues el compilador considera el comentario como un espacio. 1.1.1. Proposiciones de salida Si se va utilizar un archivo distinto al archivo estndar output debe asignarse el valor inicial de escritura mediante una proposicin de la forma rewrite (f). Hay cuatro proposiciones de salida. 1) Write (f, e1, e2,, en) Escribe en el archivo f los valores de las expresiones e1, e2,, en. El archivo f puede ser de cualquier tipo de componente que no tenga archivos y e1, e2,, en deben de ser de un tipo compatible con tipos de componentes. Si f es un archivo de texto, los archivos se imprimirn en una lnea con un ancho de de campo definido por la instalacin. Si f es el archivo estndar output entonces su nombre puede omitirse en la proposicin de escritura. 2) Writeln (f, e1, e2,, en)

Difiere solo de 1) en dos aspectos f debe ser un archivo de texto e inmediatamente despus del valor de en se escribir una seal de fin de lneas 3) Put (f) Es en el archivo f el valor actual de la variable del buffer del archivo f. El archivo f puede ser de cualquier tipo de componente. 4) Page Coloca una seal de fin de pagina en el archivo f que debe de ser un archivo de texto. El efecto de esta proposicin vara dependiendo del dispositivo que se utilice para imprimir el archivo. Por ejemplo si el dispositivo es un terminal VDU debe borrar la pantalla pero con algunas instalaciones puede no tener efecto. 1.1.2. Proposiciones de entrada Si se va a emplear un archivo distinto del archivo estndar input debe asignarse valor inicial de lectura mediante una proposicin de la forma reset (f). Hay tres proposiciones de entrada. 1) Read (f,v1, v2,, vn) Lee n valores del archivo f y los asigna en orden a las n variables v1, v2,, vn. El archivo f puede ser de cualquier tipo de componente que no tenga un tipo archivo v1, v2,, vn deben ser u tipo compatible con este tipo de componente. Si f es un archivo de texto y se estn leyendo nmeros enteros o reales entonces se salta cualquier espacio o marca de fin de lnea que preceda a un valor. Si el archivo es el archivo estndar input en la proposicin de lectura puede omitirse su nombre. 2) Readln (f,v1, v2,, vn) Difiere de 1) en dos aspectos f debe de ser un archivo de texto y despus de leer el valor vn todos los dems caracteres se saltan hasta la siguiente seal de fin de lnea inclusive. Ha de tenerse en cuenta que algunas terminales de aplicacin de pascal son muy deficientes en el manejo de readln requiere la adicin de un carcter despus de la manera de fin de lnea. Si se dispone de una de estas instalaciones habr de emplear readln con cuidado (y presionar al proveedor para que la mejore). 3) Get (f) Lee el siguiente valor de archivo f y lo asigna a la variable del buffer del archivo f. El archivo f puede ser de cualquier tipo de componente que no tenga tipo archivo. 1.1.3. Proposiciones de asignacin La proposicin de asignacin tiene la forma V:= e Donde v es una variable aplicada y e es una expresin cuyo tipo es compatible con el tipo de v.

V puede ser el nombre de una variable simple (por ejemplo x) un campo de registro (por ejemplo matriz dimensin) una variable de buffer de archivo (por ejemplo f ) una expresin de apuntador (por ejemplo fila ) una variable con subndice (por ejemplo, a [i, j]) o puede comprender una combinacin de subndices apuntadores y selectores de campo (por ejemplo a [a, j+ . Coef [j]) cuando en el momento de la ejecucin se encuentra una asignacin se determina la direccin de la variable del al lado izquierdo se calcula el valor de la expresin del lado derecho y el valor obtenido se pone en la localidad de la memoria con la direccin especificada. 1.1.4. Proposicin if En su forma completa esta es: If h then s1 else s2 Donde h es una expresin booleana (por ejemplo una prueba) y s1 y s2 son proposiciones cualesquiera. Su efecto es la seleccin de una de dos proposiciones alternativas. Si b es verdadera (true) se ejecutara la proposicin s1 (y s2 no se ejecuta) si b es falsa (false) se ejecuta s2 (y s1 no se ejecuta) en ambos caso el control pasa despus. Suele darse el caso de que s2 sea en si misma condicional y que la proposicin que siga a su else tambin sea condicional lo que da lugar a la forma general. If b then s1 else If b2 then s2 else If b3 then s3 else Cuyo efecto es realizar varias pruebas de secuencia (b1, b2, b3) hasta que una sea verdadera (true) despus de lo cual se ejecutara la proposicin que sigue al then correspondiente. Si ninguna de las pruebas es verdadera se ejecuta la proposicin que sigue al else final (si es que hay alguna) Esta es una forma reducida de la proposicin if.

If b then s Donde b es una expresin booleana y s es una proposicin cualquiera Esto solo determina si una proposicin s ser obedecida o no. 1.1.5. Proposicin case La proposicin case suele tener la forma siguiente: Case e of V1: s1; v2: s2 vn: sn end ,case-

Donde e es una expresin ordinal, v1, v2, vn son constantes del mismo tipo ordinal que e y s1, s2, sn son proporciones cualesquiera. En el momento de la ejecucin se evala la expresin e (llamada selector) y suponiendo que coincida con alguno de los valores citados vi (denominados etiquetas case) si el valor del selector no se presenta con una de las etiquetas case se producir un error en el momento de la ejecucin. Todas las etiquetas dentro de la proposicin case deben ser distintas peo un miembro puede ir precedido de varias etiquetas separadas por comas. 1.1.6. Proposicin compuesta Entre begin y end se puede encerrar un grupo de proposiciones separadas por punto y coma Begin S1; s2;; sn End Para formar una proposicin compuesta que se emplea si se desea ejecutar varias proposiciones cuando de otra forma se ejecutara una sola. Como ejemplo esta un miembro de una proposicin case o una que sigue a then, else o do. 1.1.7. Proposicin for Tiene dos formas una proposicin for incremental es de la forma For v:= e1 to e2 do s Donde v es una variable ordinal local e1 y e2 son expresiones ordinales de un tipo compatible con v y s es una proposicin cualquiera. La proposicin se abandona de inmediato si e1> e2. Es otro caso la proposicin s (denominada cuerpo del ciclo) se ejecuta un total de Ord (e2)-ord (e1)+1 Veces tomado v (variable de control) los valores sucesivos E1, succ (e1), succ (succ (e1)),, e2 Una proposicin for decremental tiene la forma For v:= e1 downto e2 do s Siendo v, e1, e2 y s igual que antes. La proposicin se abandona inmediata mente si e1<e2. En otro caso el cuerpo del ciclo se ejecuta un total de Ord (e1)-ord (e2)+1 Veces tomando la variable de control los valores sucesivos E1, pred (e1), pred (pred (e1)),, e2

En ninguna de las 2 formas de la proposicin for debe intentarse cambiar el valor de la variable de control dentro del cuerpo del ciclo despus de la salida natural del ciclo su valor se hace indefinido. Obsrvese que una variable de control de un ciclo for no puede ser de tipo real. En aplicaciones matemticas el tipo de la variable de control es casi siempre un sub intervalo entero. Se utiliza una proposicin for si se sabe (o el programa lo pueda determinar con facilidad) el nmero de veces que desea ejecutar un ciclo. 1.1.8. Proposicin while Tiene la forma While b do s Donde b es una expresin booleana y s es una proposicin cualquiera. Si b es falsa (false) al entrar a la proposicin while se abandona de inmediato. En otro caso se ejecuta el cuerpo del ciclo (s) y la prueba b hace de nuevo. Este proceso se repite hasta que b sea false despus de lo cual el control abandona la proposicin while. Se empleara una proposicin while cuando no se sepa por anticipado cuantas veces se requiere ejecutar un ciclo puede suceder que no se desee su ejecucin. 1.1.9 proposicin repeat. Tiene la forma Repeat S1; s2;; sn Donde b es una expresin booleana y s1; s2,;sn son proposiciones cualesquiera. Es similar a la proposicin while paro diferente en 3 aspectos. 1) El cuerpo del ciclo puede contener varias proposiciones sin necesitar bejin y end 2) La prueba se hace despus de haber ejecutado el cuerpo del ciclo en lugar de antes y en consecuencia el cuerpo del ciclo en lugar de antes y en consecuencia el cuerpo de un ciclo repeat se ejecuta al menos una vez. 3) La salida del ciclo ocurre cuando la prueba es verdadera (true). Se usara un ciclo repeat si no se sabe cuntas veces va a ejecutar un ciclo pero debe de ser al menos una vez. 1.1.10 proposicin with Cuando se usan registros a menudo se hacen varias referencias a los campos de un registro dentro de un pequeo grupo de proposiciones. La proposicin with ofrece una notacin abreviada para estas referencias. Por ejemplo las proposiciones. r.a:=17; r.b:=true

r.c:=x;

r.d:= pascal

Se puede escribir with r do Begin a:=17; b:=true; c:=x; d:=pascal End 1.1.11 Proposicin goto La proposicin goto Goto l Donde l es una etiqueta de proposicin transfiere el control directamente a la proposicin etiquetada con l. una etiqueta de proposicin es un entero sin signo y la proposicin de destino debe estar en el mismo bloque (cuerpo del procedimiento cuerpo de la funcin o cuerpo del programa) de la proposicin goto o en un bloque que encierre de manera textual el bloque que contiene la proposicin goto. No se debe intentar la transferencia del control hacia un cuerpo de procedimiento cuerpo de funcin o proposiciones case if compuesta while repeat o with pero puede sacarse de tales construcciones. Si se saca directamente el control de una proposicin for la variable de control retiene el valor que tenia inmediatamente antes de la ejecucin de la proposicin goto. La proposicin goto es un instrumento muy peligroso por lo que no debe fomentarse un empleo. La transferencia de un programa y su confiabilidad puede verse muy mermadas si se introducen de manera innecesaria proposiciones goto. Su uso debe restringirse a salir de las estructuras de control en el caso de una condicin inesperada. En este libro su nico objeto ser tratar condiciones excepcionales como la suspensin de un proceso numrico (por ejemplo el descubrimiento de la singularidad de una matriz durante un intento de inversin) 1.2 encabezamiento del programa Tiene la forma Program p (f1, f2,,fn) Donde p es el nombre del programa y f1, f2,,fn son los nombres de los archivos utilizados en el programa. Las instalaciones varan pero se dar por supuesto que los dos archivos estndar input y output se refieren al terminal y cualesquiera otros archivos externos que se introduzcan sern archivos de disco o cinta. El encabezamiento del programa se separa del resto del programa con un punto y coma. 1.3. declaraciones Un programa funcin o procedimiento constituye un bloque y las entidades pueden declararse locales a un bloque. Se dice que una entidad est en el campo de accin desde su punto de declaracin hasta el final del bloque que la comprende ms claramente. Si su identificador se redefine en un bloque interno la entidad original no est al alcance en el bloque interno. Cuales quiera declaraciones que se produzcan deben aparecer en el orden expresado al principio de este captulo y dado que una declaracin siempre debe estar separada de lo que sigua por un punto y coma puede considerarse el punto y coma como un finalizador de la declaracin.

1.3.1. Etiquetas Cualquier etiqueta de proposiciones que aparezca en un programa debe declararse en la cabeza del bloque que la comprende ms localmente. Las etiquetas se relacionan separadas por comas y precedidas por una sola inclusin de la palabra reservada label por ejemplo: Label 99, 1; 1.3.2. Constantes Las constantes definidas por el usuario pueden ser de cualquier tipo escalar o de cadenas (string). Una secuencia de definicin de constantes va procedida por una sola inclusin de la palabra reservada const. Por ejemplo: Const Pi=3.14159; N=25; Grados circulo=360; Supuesto cero=1E-20; Escala temp=C; Titulo= programa para resolver la ecuacin cuadrtica; Se empleara la constante para nombrar constantes matemticas (como/pi) y para denominar limites de sub intervalos. Por ejemplo si denotamos el tamao de un arreglo cuadrado por la constante n podemos definir un tipo de sub intervalos 1n para subndices. 1.3.3. Tipos Pascal proporciona cuatro tipos estndar Boolean los valores precisos de true y false Char- el conjunto de caracteres disponibles Integer- todos los nmeros enteros entre dos limites definidos por la instalacin maxint y maxint Real- nmeros reales dentro de un intervalo definido por la instalacin y representados con un una precisin tambin definida por la instalacin. Los computadores representan informacin en forma binaria y los dgitos binarios (bits) se agrupan para formar lo que se llama palabras. Por lo general el nmero de bits de una palabra puede variar de 16 a 60, dependiendo del tipo de computador. La unidad de memoria direccionable mnima suele ser un byte (ocho bits) y con frecuencia una palabra tiene dos bytes. En el computador un valor booleano requiere un bit pero por lo comn utiliza un byte o una palabra un carcter requiere un byte pero puede ocupar una palabra un entero ocupa una palabra (dos bytes) o dos palabras (cuatro bytes) un valor real suele emplear dos palabras (cuatro bytes) o cuatro palabras (ocho bytes)

En algunos computadores hay paquetes de aritmtica de precisin mltiple. Estos paquetes son conjuntos de rutinas que realizan las operaciones aritmticas estndar pero empleando nmeros reales que ocupan ms palabras de lo usual. Son muy tiles cuando la precisin de los nmeros reales son muy importantes pero pueden retardar mucho el programa. Adems los tipos estndar el usuario puede definir tipos adicionales. Para no confundir los nombres de los tipos con otro nombre de un programa se usaran plurales para los tipos definidos por el usuario.

Tipos simblicos Los tipos simblicos (o de enumeracin) de pascal permite dar nombre a los valores que deseamos procesar. Por ejemplo: Das= (lunes, martes, mircoles, jueves viernes, sbado, domingo); Cada valor simblico ocupa un byte o una palabra dependiendo de la instalacin. La aplicacin principal que tendr este libro ser nombra los estados de inters en un clculo. En la prctica es frecuente el uso de de tipos simblicos para controlar un ciclo con mltiples salidas esta es un ciclo que tenga ms de una razn para salir de el. Por ejemplo con el siguiente esquema de iteracin:

Los valores sucesivos Xn+1 (n=0, 1, 2,.) aproximan la raz cuadrada de v. puede concluirse el proceso cuando la diferencia absoluta entre v y x2n+1 sea menor que alguna tolerancia especificada por ejemplo 10-7 Const Tolerancia=1E-7; Var X, v: real; . Read (v, x); While abs (sqr(x)-V) tolerancia do X:= (x+v/x)/2 Si la tolerancia es muy pequea el proceso puede tardar mucho tiempo de converger y si sobre pasa los limites de precisin del computador el proceso puede no converger jams en evitacin de esto se acostumbra a contar el numero de iteraciones y terminar el proceso si esta cuenta a un lmite especificado. Ahora bien hay dos razones

posibles para salirse del ciclo (tolerancia lograda o mximo de iteraciones alcanzado) con la cual tenemos tres estados de inters: 1. Calculando todava nuevas iteraciones 2. Tolerancia lograda 3. Mximo de iteraciones alcanzado Por controlar el ciclo puede utilizarse una variable escalar de tres estados Const Tolerancia=1E-7; maxiter=50 Var X, v: real; Contiter: integer; Estado: (literando, dentrodetol, maxiteralcanzado); .. Read (v, x); Contiter:= 0; estado:= iterando;

Repeat If abs (sqr(x)-v) <= tolerancia then estado:= dentrodetol else If contiter= maxiter then estado: maxiter alcanzado else Begin X:= (x+v/x)/2; contiter:= contiter+1 End Until estado<> iterando Y una vez fuera del ciclo puede determinarse el estado actual con una proposicin case. Case estado of Dentrodetol:; Maxiter alcanzado:; End {case}

Podra utilizarse una proposicin if If estado=dentrodetol thenelse Sin embardo es mejor case ya que proporciona mas informacin. En este momento del programa la variable estado puede tomar uno de los dos valores y la proposicin case concreta este hecho. De esta forma la proporcin case da transparencia al programa. Adems puede ser deseable evitar la divisin entre cero y concluir la iteracin si x se hace demasiado pequea. Para ello se introduce una constante suficientemente pequea supuesto cero y se ampla el nmero de estado de inters a cuatro Estado: (iterando, dentrodetol, maxiteralcanzado, raizcasicero) Entonces se realiza una prueba adicional dentro del ciclo If abs (X) <= supuestocero then estado:= raizcasicero else Y se aade otro miembro a la proposicin case Case estado of Dentrodetol:; Maxiteralcanzado:; Raizcasicero: End {case} Tipos de subintervalos Los tipos escalares distintos de los reales se denominan ordinales. Un tipo de subintervalos de los valores definidos por un tipo ordinal (que entonces recibe el nombre de tipo anfitrin). Por ejemplo: Letras =az; Grados =0360; Resultados =dentrodetolrazcasicero; Subinds =1n; En el fragmento de raz cuadrada anterior la cuenta de iteraciones del ciclo podra ser realizada por una variable sub intervalo. Contiter: 0 maxiteralcanzado; Cualquier intento de asignarle a una variable subintervalo algn valor fuera de intervalo permitido constituye un error as que mediante el uso de tipos de subintervalos se ayuda al computador a detectar errores. En particular a menudo es posible que el compilador localice errores de subintervalo; esta proteccin en el momento de la compilacin es una de las mayores ventajas de pascal.

Arreglos El arreglo es el equivalente en pascal del vector de las matemticas. Const. N= 20; Type Subinds= 1n; Vectores= array [subinds] of real; Todo arreglo va asociado a un tipo de componente (real en el ejemplo anterior) y a un tipo ndice (subinds en el ejemplo anterior). Para identificar un ejemplo determinado de un arreglo el nombre de este va seguido de un sub ndice entre corchetes. Por ejemplo. Var U, v: vectores; I: subinds; Punto: real; . Punto:= 0; For i:= 1 to n do Punto:= punto + u[i] * v [i] El tipo del ndice de un arreglo debe ser un tipo ordinal pero el tipo del componente puede ser de cualquier tipo y sobre todo puede ser un tipo de arreglo. Esto da un tipo de arreglo de tipo multidimensional. Por ejemplo: Const. N=25 Type Subinds=1n; Vectores=array [subinds] of real; Nporn=array [subinds] of vectores; Var A, b: nporn

Las variables ay b son matrices de n X n y as la expresin a [i] denota un vector y un elemento de ese vector puede identificarse agregando un subndice adicional: a [i], [j]. Por conveniencias de notacin los corchetes adyacentes pueden remplazarse por una coma. A [i, j] es equivalente a a [i], [j]. As mismo tambin puede aplicarse una notacin abreviada a las declaraciones de arreglos en las que el tipo de datos. Nporn= array [subinds, subinds] of real Es equivalente al tipo Nporn=array [subinds] of array [subinds] of real Las estructuras definidas por estos dos tipos son en realidad las mismas que las definidas por el tipo de datos original nporn pero es preferible la forma original. Var Archmat: archnporn; Mat: nporn; Rewrite (archmat); write (archmat, mat) Y el segundo lee en el Program prog 2 (input, archmat, output); Var Archmat: archnporn; Mat: nporn; Reset (archmat); read (archmat, mat) Una instalacin puede limitar el nmero de palabras comprendidas en una transferencia de archivo y un lmite usual seria 1024 (210). En este caso y una maquina donde los nmeros de tipo real ocupen dos palabras el ejemplo anterior no funciona para n>16. El programa tendra que usar un archivo tipo file of vectores y transferir la matriz fila por fila. Conjuntos En pascal un conjunto es una serie de valores de algn tipo ordinal y con nmeros ordinales dentro de algn intervalo definido por la instalacin (en general de 0 a 127). Por ejemplo.

Const N=25; Type Letras=az; Subinds=1n; Var Vocales: set of letras; Subinds: set of subinds; K: integer; Vocales:= [a, e, i, o, u]; Subinds:= *1n+; La inclusin de un conjunto se prueba con el operador in. Por ejemplo, If k in subndices then Los conjuntos se utilizaran en un programa Apuntadores Un apuntador es el nombre que se da en pascal a la direccin de un objeto en el computador, ocupa una palabra. Los apuntadores son muy tiles cundo se va a reordenar de alguna manera una gran cantidad de elementos de datos por que en vez de mover los propios elementos de datos pueden ponerse apuntadores a los elementos y mover los apuntadores. Por ejemplo si se pretende intercambiar las filas de una matriz M y los elementos correspondientes de un vector v, pueden emplearse los siguientes tipos de datos: Const. N=; Type Subinds=1n; Vectores=array [subinds] of real; Filas= Record Vec: vectores;

V: real End {filas}; Apuntfilas=filas; Apuntvects=array [subinds] of apuntfilas; Entonces el intercambio de las filas 1 y 2 tiene la forma siguiente: Var M: apuntvects; P: apuntfilas; P:= m [1]; m [1]:= m [2]; m [2]:= p Y realiza tres asignaciones requiriendo cada una la copia de una palabra simple. Si se utilizaran los primeros tipos de datos definidos por matrices y vectores las operaciones resultaran mucho ms costosas. Var M: nporn; Filatempor, v: vectores; Realtempor: real;