Está en la página 1de 42

http://www.microsofttranslator.com/bv.aspx?&lo=SS&from=en&to=es&a=http%3A%2F%2Fwww.taoyue.com%2F tutorials%2Fpascal%2Fpas3cb.html Bienvenido a aprender Pascal!

Este tutorial es una introduccin a la introduccin simple, pero completa, de Pascal para el Pascal en el lenguaje de programacin. Cubre toda la sintaxis de Pascal estndar, incluidos los punteros. He tratado de hacer las cosas tan claras como sea posible. Si no entienden nada, prubelo en su compilador de Pascal y ajustar las cosas un poco. Pascal fue diseado con fines de enseanza y es un lenguaje muy estructurado y estricto sintcticamente. Esto significa que el compilador capturar ms errores de principiante y ceder ms mensajes de error de principiante-amistoso que con un lenguaje cargado de forma abreviada como C o PERL. Este tutorial fue escrito para los programadores principiantes, por lo tanto no asume ningn conocimiento. Al mismo tiempo, un nmero sorprendente de programadores experimentados ha encontrado el tutorial de una fuente de referencia til para recoger Pascal. Comenzamos con algunos antecedentes sobre Pascal, una explicacin de los compiladores y instrucciones paso a paso para obtener una tal compilador trabajando en un moderno sistema operativo de Windows. La seccin de fondo es lectura informativa, me dicen, para los programadores con experiencia, as como a principiantes, pero la tabla de contenido le permitir elegir cualquier tema, si ya est familiarizado con la programacin.

Orgenes
Pascal creci de ALGOL, un lenguaje de programacin destinado a la computacin cientfica. Reunidos en Zurich, un Comit Internacional haba diseado ALGOL como un idioma independiente de la plataforma. Esto les dio comparativamente rienda suelta en las caractersticas que podran disear en ALGOL, pero tambin hizo ms difcil escribir compiladores para l. Eran los das cuando muchos equipos carecen de las funciones de hardware que ahora damos por sentado. La falta de compiladores en muchas plataformas, combinados con su falta de los punteros y muchos tipos de datos bsicos tales como caracteres, llev a ALGOL no est ampliamente aceptado. Los cientficos e ingenieros acudieron a FORTRAN, un lenguaje de programacin que estaba disponible en muchas plataformas. En su mayora ALGOL desapareci distancia excepto como un lenguaje para describir algoritmos.

Wirth inventa Pascal


En la dcada de 1960, varios cientficos de la computacin trabajaban sobre la ampliacin de ALGOL. Uno de ellos fue el Dr. Niklaus Wirth del Instituto Federal Suizo de tecnologa (ETH-Zurich), un miembro del grupo original que cre ALGOL. En 1971, public su especificacin para un idioma muy estructurada que se asemejaba a ALGOL de muchas maneras. Lo llam Pascal despus del filsofo y escritor francs del siglo XVII y el matemtico que construy un equipo digital mecnica de trabajo. Pascal est muy orientada a datos, dando a los programadores la capacidad para definir tipos de datos personalizados. Con esta libertad viene estricta-comprobacin de tipos, lo que impidi que los tipos de datos que se mezclan. Pascal fue pensado como un idioma de enseanza y fue ampliamente adoptado como tal. Pascal es ro libre, a diferencia de FORTRAN y Lee mucho como un lenguaje natural, hacindola muy fcil de entender el cdigo escrito en ella.

UCSD Pascal
Una de las cosas que mat a ALGOL fue la dificultad de crear un compilador para l. Dr. Wirth evitar esto por tener su compilacin de compilador de Pascal para una etapa de cdigo de objeto intermedio, independiente de la plataforma. Otro programa haba convertido este cdigo intermedio en cdigo ejecutable. Bowles de Ken de profesor en la Universidad de California en San Diego (UCSD) incautados en la oportunidad que esto ofrece para adaptar el compilador de Pascal para el Apple II, el microordenador ms popular del da. P-sistema de UCSD se convirti en un estndar y fue ampliamente usada en las universidades. Esto fue ayudado por el bajo costo de Apple II en comparacin a los mainframes, que eran necesarios en el momento para ejecutar otros lenguajes como FORTRAN. Su impacto en la informtica puede verse en los anuncios de IBM para su PC revolucionario, que se jact de que el PC admite tres sistemas operativos: Digital Research CP/M-86, UCSD P-sistema de Softech y PC-DOS de MicroSoft.

Pascal se convierte en el estndar


Por los principios de la dcada de 1980, Pascal haba ya convertido en ampliamente aceptado en las universidades. Dos eventos conspiraron para hacerla an ms popular. En primer lugar, el servicio educativo de pruebas, la empresa que escribe y administra el examen de ingreso universitario principal en los Estados Unidos, decidi aadir un examen de Ciencias de la computacin a sus exmenes de Advanced Placement para estudiantes de escuela secundaria. Para este examen, se eligi el lenguaje Pascal. A causa de esto, los estudiantes de escuela secundaria, as como estudiantes universitarios comenzaron a aprender Pascal. Pascal sigui siendo el idioma oficial de los exmenes de AP hasta 1999, cuando fue reemplazado por C++, que fue rpidamente reemplazada por Java. En segundo lugar, una pequea empresa llamada internacional de Borland lanz el compilador Turbo Pascal para la IBM PC. El compilador fue diseado por Anders Hejlsberg, que sera ms tarde jefe del grupo en Microsoft que desarroll C# y (re) introdujo el cdigo administrado de vuelta al mundo de la informtica. Turbo Pascal fue verdaderamente revolucionario. Lo tomar algunos mtodos abreviados y realiz algunas modificaciones a Pascal estndar, pero estas fueron menores y le ayud a lograr su mayor ventaja: velocidad. Turbo Pascal compilado a una velocidad vertiginosa: varios miles de personas las lneas de un minuto. Al tiempo, los compiladores disponibles para la plataforma de PC eran lentas y estaba repleto. Cuando sali el Turbo Pascal, fue un soplo de aire fresco. Pronto, Turbo Pascal se convirti en el de facto estndar para la programacin en el PC. Cuando PC Magazine public el cdigo fuente de programas de utilidad, por lo general fue en conjunto o en Turbo Pascal. Al mismo tiempo, Apple se sali con su serie de Macintosh de equipos. Como Pascal era el lenguaje de programacin preeminente de estructurada del da, Apple escogi a Pascal como el lenguaje de programacin estndar para Mac. Cuando los programadores recibieron el cdigo API y ejemplo para la programacin de Mac, era todo en Pascal.

Extensiones
Desde la versin 1.0 a 7.0 de Turbo Pascal, Borland continu expandindose el idioma. Una de las crticas de la versin original de Pascal fue su falta de compilacin separada para los mdulos. Dr. Wirth incluso cre un nuevo lenguaje de programacin, Modula-2, para resolver ese problema. Borland agrega mdulos a Pascal con su caracterstica de unidades. Por la versin 7.0, se ha aadido muchas caractersticas avanzadas. Uno de ellos fue DPMI (DOS Protected Mode Interface), una forma de ejecutar programas de DOS en modo protegido, ganando velocidad adicional y rompiendo libre de la barrera de los de 640 K para tener acceso a memoria bajo DOS. Turbo Vision, un sistema de ventanas basado en texto, permiti a los programadores a crear interfaces de gran calidad en prcticamente en ningn momento a todos. Pascal incluso se convirti en orientada a objetos, como versin 5.5 adopt las extensiones de Apple Object Pascal. Cuando sali Windows 3.0, Borland crea Turbo Pascal para Windows, trayendo la velocidad y la facilidad de Pascal a la interfaz grfica de usuario. Pareca que el futuro de Pascal era segura.

Los cambios en la World


Sin embargo, esto no fue. En la dcada de 1970, Dennis Ritchie y Brian Kernighan de los laboratorios Bell AT&T crean el lenguaje de programacin de C. Ritchie, a continuacin, colabor con Ken Thompson para disear el sistema operativo UNIX. Al tiempo, AT&T haba un monopolio sancionada por el Gobierno sobre el servicio de telfono en los Estados Unidos. En cambio para el monopolio, su negocio de telfono estaba regulado y estaba prohibido entrar en el negocio de equipo. AT&T, no ver ningn mercado para un sistema operativo de investigacin, regal UNIX a universidades de forma gratuita, con cdigo fuente. Por lo tanto, toda una generacin de estudiantes de Ciencias de la computacin aprendidas C en sus cursos universitarios sobre los idiomas y sistemas operativos. Lenta pero segura, C comenz a filtrar en el mundo de la programacin informtica. Pascal fue finalmente asesinado por la orientacin a objetos y el paso a Windows en la plataforma de PC estndar de la industria. En la dcada de 1980, Bjarne Stroustrop, tambin de los laboratorios de Bell, populariz la orientacin a objetos mediante el desarrollo de C++, que mantuvo la conocida sintaxis de C mientras extendindola para orientacin a objetos. C++ lleg a definir la orientacin a objetos a una generacin de programadores y sigue siendo una fuerza fuerte incluso hoy en da. Tambin en la dcada de 1980, Microsoft Windows adopt C como su lenguaje de programacin estndar. En contraste con MacOS y Pascal, las muestras de la API de Windows eran todos en K & R C (pre-ANSI), completa con listas de variables despus el prototipo de funcin. Como orientacin a objetos y Windows arraig, el lenguaje natural para aplicaciones de migrar a Windows fue C++. Muchos institutos y universidades movido lejos de Pascal, eligiendo C++ o idiomas ms recientes para sus cursos de programacin. Por ltimo, el examen de AP se traslad a C++, terminando el dominio de Pascal en escuelas americanas de alta.

As que por qu aprender Pascal?


A pesar de su decoloracin lejos como una de facto estndar, Pascal es todava bastante til. C y C++ son muy idiomas de simblico. Donde Pascal elige palabras (por ejemplo, comenzar-final), C/C ++, en cambio, utiliza smbolos ({ - }). Tambin, C fue diseado para sistemas de programacin. En Pascal, 3

mezcla de tipos conduce a un error y se realiza con muy poca frecuencia. En C/C ++, conversin de tipos y aritmtica de punteros es comn, lo que facilita a bloquear programas y escribir en las saturaciones de bfer. Cuando el examen de AP se cambi a C++, fue aprobado slo un subconjunto de C++. Muchas caractersticas, como arreglos de discos, fueron consideradas demasiado peligrosas para los estudiantes, y ETS proporciona su propia versin de "seguro" de estas caractersticas. Otra razn: velocidad y tamao. El compilador de Pascal de Borland es an alta velocidad. Borland ha revitalizado Pascal para Windows con Delphi, un entorno de rpido desarrollo de aplicaciones. En lugar de pasar varias horas escribiendo una interfaz de usuario para un programa de Windows en C y C++, podra hacerlo en diez minutos con herramientas de diseo grfico de Delphi. Delphi es de Pascal lo que Visual BASIC hizo a BASIC. Borland an est en desarrollo de Delphi, y la comunidad open-source ha creado un compilador en gran medida compatible con Borland llamado Free Pascal. Tambin, Pascal sigue siendo preferido en muchas universidades, especialmente en las zonas donde los estudiantes en primer lugar estn expuestos a los equipos en la escuela, en lugar de hacerlo en casa. Adems, Pascal fue adaptado para la enseanza de programacin y sigue siendo as. Hay menos sobrecarga y formas menos para un estudiante obtener un programa en problemas. Para la enseanza de procedimiento simple de programacin, Pascal sigue siendo una buena eleccin. Pascal ha colgado ya en la educacin fuera de Estados Unidos y sigue siendo una lengua oficial de la Olimpiada Internacional de informtica. Un fondo de programacin bsico es til en muchas de las ocupaciones tcnicas, y la sobrecarga de un lenguaje orientado a objetos de aprendizaje no es necesariamente la mejor aplicacin de los recursos. Por lo tanto, incluso despus de C, C++ y Java toman las riendas del mundo de la programacin, Pascal conserva un nicho en el mercado. Muchos en pequea escala de freeware, shareware y programas de fuente abierta se escriben en Pascal/Delphi. Por lo tanto disfrutar aprenderlos mientras dura. Es una gran introduccin a la programacin informtica. No es miedo como C, peligroso como C++ o abstracto como Java. En otra de veinte aos, ser uno de los pocos programadores de equipo para conocer y apreciar Pascal.

Este documento ser explicar los conceptos bsicos sobre compiladores, as como proporcionar vnculos a conocidos compiladores de Pascal y explicar cmo configurar Free Pascal.

Acerca de lenguajes y compiladores


Cuando hablamos de los lenguajes informticos, son bsicamente tres trminos principales que se utilizar. 1. Lenguaje de mquina--cdigo binario real que da instrucciones bsicas en la CPU del equipo. Estos suelen ser muy simples comandos como agregar dos nmeros o mover los datos de ubicacin de una memoria a otra. 2. Idioma de la Asamblea--una manera para los seres humanos a los equipos de programa directamente sin necesidad de memorizar cadenas de nmeros binarios. Existe una correspondencia uno a uno con cdigo mquina. Por ejemplo, en lenguaje de mquina de Intel x 86, ADD y MOV son teclas de acceso para la adicin y mover las operaciones. 3. Lenguaje de alto nivel--permite a los seres humanos para escribir programas complejos sin ir paso a paso. Lenguajes de alto nivel incluyen Pascal, C, C++, FORTRAN, Java, BASIC y muchos ms. Un comando en un lenguaje de alto nivel, como escribir una cadena en un archivo, puede traducir a docenas o incluso cientos de instrucciones en lenguaje mquina. 4

Microprocesadores slo pueden ejecutar programas en lenguaje de mquina directamente. Programas en lenguaje ensamblador son montados o traduccin al lenguaje de mquina. Del mismo modo, los programas escritos en lenguajes de alto nivel, como Pascal, tambin deben traducirse a lenguaje mquina antes de que se puedan ejecutar. Para hacer esta traduccin es para compilar un programa. El programa que realiza la traduccin se llama un compilador. Este programa es bastante compleja, ya que no slo crea instrucciones en lenguaje mquina de lneas de cdigo, pero a menudo tambin optimiza el cdigo para que se ejecute ms rpido, agrega cdigo de correccin de errores y vincula el cdigo con las subrutinas almacenadas en otros lugares. Por ejemplo, cuando dicen el equipo para imprimir algo a la pantalla, el compilador traduce esto como una llamada a un mdulo previamente escrito. El cdigo, a continuacin, debe estar vinculado al cdigo que proporciona el fabricante de compilador antes de los resultados de un programa ejecutable. Con lenguajes de alto nivel, una vez ms hay tres trminos bsicos para recordar: 1. Cdigo fuente--el cdigo que se escribe. Normalmente, esto tiene una extensin que indica el idioma utilizado. Por ejemplo, el cdigo fuente de Pascal normalmente termina en ".pas" y cdigo de C++ termina generalmente en "CPP" 2. Cdigo de objeto--el resultado de la compilacin. Cdigo de objeto normalmente incluye un nico mdulo de un programa y no se puede ejecutar an, ya que es incompleta. En los sistemas de DOS/Windows, esto por lo general tiene una extensin de ".obj" 3. Cdigo ejecutable--el resultado final. Todos los objetos mdulos de cdigo necesarios para un programa funcione vinculadas entre s. En los sistemas de DOS/Windows, esto por lo general tiene una extensin de ".exe"

Ms informacin acerca de compiladores


El de facto estndar en DOS y compiladores basado en Windows es Pascal de Borland. Antes de que saliera, la mayora de los compiladores de Pascal fueron torpe y lento, desviado de la norma de Pascal y varios cientos de dlares en costos. En 1984, Borland introdujo Turbo Pascal, que venden por menos de 100 dlares, compil un orden de magnitud ms rpido que los compiladores existentes y vino con una abundancia de programas de cdigo y la utilidad de la fuente. Este producto fue un gran xito y fue prominente durante casi una dcada. Pero en la dcada de 1990, el mundo se trasladaba a Windows. En 1993, la ltima versin del Turbo Pascal , versin 7 para DOS, sali. Despus de eso, la demanda para DOS programas de plummetted y Borland (renombrado Inprise, a continuacin, volver a Borland) se centr en la produccin de compiladores de Windows. Este tutorial slo se ocupar de programacin basada en consola, donde el equipo imprime las lneas de datos a la pantalla y el usuario interacta con el programa mediante un teclado. El objetivo del curso es ensear cmo programar en Pascal. Una vez que usted haya aprendido, fcilmente puede mirar un libro de referencia o de otra pgina web y recoger los sistemas en su propio de grficos y ventanas. Aunque viejos compiladores de Pascal comerciales a menudo estn disponibles para descarga, Turbo Pascal 5.5 desde el Museo de Borland y Symantec Think Pascal (Macintosh) vinculado desde Del pas Free Free Pascal Compiler lista, los equipos han progresado mucho desde la dcada de 1980 y principios de los noventa. Ya no estamos atascados con nombres de 8.3 archivo en DOS o no preferente multitarea en Mac OS. Utilizando un compilador de antiguo es divertido en el mismo sentido que jugando un juego antiguo en un emulador, pero el movimiento de cdigo abierto ha producido buenos compiladores para los sistemas operativos modernos, y un principiante le resultar mucho ms fcil de utilizar aquellos. 5

Compiladores de cdigo fuente abierto


Los dos proyectos principales del compilador de cdigo abierto son:

GNU Pascal Free Pascal

Free Pascal es generalmente considerado ms amistoso para principiantes y se esfuerza para emular Borland Pascal en muchos sentidos, aunque ambos servirn finos para el aprendizaje de Pascal. La forma ms sencilla para un principiante a comenzar con la programacin en Pascal es descargar el Lazarus IDE, que proporciona un entorno amigable, basada en GUI para el compilador de Free Pascal. Aqu es cmo obtener comenz, paso por paso, sobre Windows. Lazarus y Free Pascal estn disponibles en otros sistemas operativos demasiado; algunos pasos diferirn ligeramente. 1. Descargar a Lazarus. Si no est seguro de si ejecutas 32 bits o de 64 bits, seleccione 32-bit, ya que es compatible con ambos. 2. Ejecutar mediante el programa de instalacin, aceptar todos los valores predeterminados. 3. Abra a Lzaro de la carpeta de Lzaro en el men Inicio. 4. Seleccione el elemento de men Archivo-nuevo... y, a continuacin, seleccione el programa en el subrbol de proyecto. 5. Lzaro crear un archivo de cdigo fuente con un montn de cosas que ha rellenado. Esto es ms complicado que necesita hasta el momento, as que seleccione todo el contenido y eliminar. 6. Tipo en un programa (flip a la Siguiente leccin para obtener un "Hola, mundo." programa). 7. Guarde el archivo con Archivo-guardar como..., en algn lugar donde puedes encontrarla fcilmente ms tarde por. Por ejemplo, guardar el archivo como Hola en un directorio en mi escritorio. Lzaro crear dos archivos: hello.lpr que contiene lo que yo he escrito; y el archivo de proyecto, hello.lpi. Ms tarde, puede hacer doble clic en cualquier archivo para abrir el programa en Lzaro. 8. Ejecute el programa desde el men Ejecutar. Esto automticamente compilar el programa, si ha realizado cambios, a continuacin, ejecutar el programa. Tambin se ejecutar el programa sin compilar si no ha realizado los cambios desde la ltima vez que se ha compilado. Con programas que no espere que la entrada del usuario, ver un ventana flash hasta y desaparecer. Esto es porque el programa termina que se ejecutan en un abrir y cerrar de ojos y cierra por s mismo. Se devuelven al IDE sin ver los resultados de su trabajo. Hay dos maneras de evitar esto:
Agregar una instruccin de readln al final de cada programa. Ahora el programa se esperar a que presione la tecla Intro, antes de se cierre. Si no est familiarizado con la lnea de comandos, esto es probablemente la forma ms sencilla de obtener lo que desea.

Tenga en cuenta que un archivo .exe fue creado en el directorio donde guard su programa. Este es el archivo ejecutable. Usted puede ir a la lnea de comandos, cambie al directorio y ejecute este ejecutable recto. Usted puede tambin hacer doble clic sobre l en el explorador de Windows (y todava parpadear por rpidamente si termina sin necesidad de intervencin del usuario).

La estructura bsica de un programa de Pascal es:


PROGRAM NombrePrograma (FileList) ; CONST (* Declaraciones constantes *) TIPO (* Escriba declaraciones *) VAR (* Las declaraciones de variables *) (* Las definiciones de la subpartida *) COMENZAR (* Instrucciones ejecutables *) FINAL.

Los elementos de un programa deben estar en el orden correcto, aunque algunos pueden ser omitido si no es necesario. Aqu es un programa que no hace nada, pero tiene todos los elementos necesarios:
programa DoNothing ; comenzar final.

Los comentarios son porciones del cdigo que no compilar o ejecutar. Pascal comentarios comienzan con un (* y terminan con un *). No se pueden anidar comentarios: (* (* *) *) producir un error porque el compilador coincide con la primera (* con la primera *), haciendo caso omiso de la segunda (* que se encuentra entre el primer conjunto de marcadores de comentario. El segundo *) se queda sin su coincidencia (*. Este problema con marcadores de comentario final comenzar es una de las razones por qu muchos idiomas usan sistemas de comentarios basados en lnea. Turbo Pascal y la mayora de los otros compiladores modernos admiten comentarios de llave, tales como {Comment}. La llave de apertura significa el comienzo de un bloque de comentarios y la llave final significa el final de un bloque de comentarios. Tambin utilizan los comentarios de aparato ortopdico para directivas de compilador. Comentando hace el cdigo ms fcil de entender. Si se escribe el cdigo sin comentarios, usted puede reaparecer a ella semanas, meses o aos ms tarde sin una gua de por qu haba codificado el programa de esa manera. En particular, puede que desee documentar el diseo ms importante de su programa y insertar comentarios en el cdigo cuando difiera de ese diseo para una buena razn. Adems, a menudo utilizan los comentarios a tomar cdigo problemtico fuera de accin sin eliminarlo. Recuerde que la restriccin anterior en los comentarios de anidamiento? Slo resulta que entre llaves {} tienen prioridad sobre estrellas entre parntesis (* *). No se obtendr un error si haces esto: {(* Comentario *)} Los espacios en blanco (espacios, tabuladores y finales de lneas) son ignorados por el compilador de Pascal, a menos que estn dentro de una cadena literal. Sin embargo, para hacer que su programa sea legible por los seres humanos, debe aplicar una sangra sus declaraciones y poner declaraciones separadas en lneas separadas. Sangra a menudo es una expresin de la individualidad por los programadores, pero proyectos de colaboracin suele seleccionan un estilo comn para permitir que todo el mundo a trabajar desde la misma pgina. Los identificadores son nombres que permiten hacer referencia a los valores almacenados, tales como las variables y constantes. Tambin, cada programa y unidad deben ser nombrado por un identificador. Reglas de los identificadores:

Debe comenzar con una letra del alfabeto ingls. Puede ser seguida por caracteres alfanumricos (caracteres alfabticos y nmeros) y, posiblemente, el carcter de subrayado (_). No se puede contener ciertos caracteres especiales, muchos de los cuales tienen significados especiales en Pascal. ~!@#$%^&*()+`-={}[]:";'<>?,./|

Diferentes implementaciones de Pascal difieren en sus normas sobre caracteres especiales. Tenga en cuenta que normalmente est permitido el carcter de subrayado (_). Varios identificadores estn reservados en Pascal como elementos sintcticos. No puede utilizar estos para los identificadores. Estos incluyen, pero no se limitan a: y arreglo de discos comenzar caso const div hacer Bajarpara else final archivo para adelante funcin goto si en etiqueta mod nil no de o empaquetados procedimiento programa rcord Repita establecer , a continuacin, a tipo hasta que var mientras que con 8

Compiladores de Pascal modernos buque con mucho la funcionalidad de la API (Application Programming Interfaces). Por ejemplo, puede ser una unidad de tratamiento de grficos (por ejemplo, dibujar lneas) y otro para las matemticas. A diferencia de los nuevos lenguajes, como C# y Java, Pascal no proporciona un sistema de clasificacin para los identificadores en forma de espacios de nombres. As que cada unidad que utilice puede definir algunos identificadores (digan que DrawLine) que ya no se pueden utilizar. Pascal incluye una unidad de sistema que se utiliza automticamente por todos los programas. Esto proporciona funcionalidad de lnea de base como el redondeo al entero y clculo de logaritmos. La unidad de sistema vara entre los compiladores, por lo tanto, consulte la documentacin. Aqu es la unidad de documentacin del sistema para el compilador de Free Pascal. Pascal no es caso sensible! (Fue creado en los das cuando maysculas de todos los equipos eran comunes). MyProgram, MYPROGRAM y mYpRoGrAm son equivalentes. Pero a efectos de legibilidad, es una buena idea usar maysculas significativa. Mayora de los programadores estar en el lado seguro por nunca utilizando dos maysculas de los identificadores de la mismos con fines diferentes, independientemente de si es o no el idioma estn utilizando entre maysculas y minsculas. Esto reduce la confusin y aumenta la productividad. Identificadores pueden tener cualquier longitud, pero algunos compiladores de Pascal slo mirar los primeros varios caracteres. Uno normalmente no empujar las reglas con identificadores extremadamente largos o cargas de caracteres especiales, ya que hace que el programa es ms difcil de escribir para el programador. Adems, dado que la mayora de los programadores trabajan con muchos idiomas diferentes, cada una con diferentes reglas acerca de caracteres especiales y minsculas, es generalmente mejor atenerse con caracteres alfanumricos y el carcter de subrayado. 1 C-(constantes) Constantes se hace referencia por identificadores y se pueden asignar un valor al comienzo del programa. No se puede cambiar el valor almacenado en una constante. Constantes se definen en la seccin constante del programa: const Identifier1 = valor ; Identifier2 = valor ; Identifier3 = valor ; Por ejemplo, vamos a definir algunas constantes de diversos tipos de datos: cadenas de caracteres, nmeros enteros, reales y valores booleanos. Estos tipos de datos se explicar ms en la siguiente seccin. const Nombre = 'Tao Yue'; FirstLetter = 'a'; Ao = 1997; PI = 3.1415926535897932; UsingNCSAMosaic = TRUE; Tenga en cuenta que en Pascal, caracteres aparecen entre comillas simples o apstrofes (')! Esto contrasta con el ms recientes de los idiomas que a menudo usan o permitan dobles comillas o notacin de Heredoc. Pascal estndar no utilizar o permitir comillas dobles marcar caracteres o cadenas.

Constantes son tiles para definir un valor que se utiliza a lo largo de su programa, pero puede cambiar en el futuro. En lugar de cambiar todas las instancias del valor, puede cambiar slo la definicin constante. Ha escrito constantes fuerza una constante para ser de un tipo de datos en particular. Por ejemplo, const un: real = 12; dara un identificador de una que contiene un valor real 12.0 en lugar del valor de nmero entero 12.

D 1 - tipos de datos y variables

Las variables son similares a los constantes, pero se pueden cambiar sus valores como el programa se ejecuta. En primer lugar las variables deben declararse en Pascal antes de que se puedan utilizar: var IdentifierList1 : DataType1 ; IdentifierList2 : DataType2 ; IdentifierList3 : DataType3 ; ... IdentifierList es una serie de identificadores, separados por comas (,). Todos los identificadores de la lista se declaran como ser del mismo tipo de datos. 10

Los tipos de datos bsicos en Pascal incluyen:


integer real char Boolean

Pascal estndar no prever el tipo de datos de string, pero hacen de compiladores ms modernos. Programadores experimentados de Pascal tambin utilizan punteros para asignacin dinmica de memoria, los objetos para la programacin orientada a objetos y muchos otros, pero esto se puede empezar. Ms informacin sobre los tipos de datos de Pascal:

El tipo de datos entero puede contener comprendidos entre -32768 y 32767. Esto es el rango firmado que puede almacenarse en una palabra de 16 bits y es un legado de la poca cuando la CPU de 16 bits eran comunes. A efectos de compatibilidad con versiones anteriores, un entero con signo de 32 bits es una longint y puede contener una mayor gama de valores. El tipo de datos real tiene un rango de 3.4x10 -38 a 3.4x10 38, adems en el mismo rango en el lado negativo. Valores reales se almacenan dentro del equipo de forma similar a la notacin cientfica, con una mantisa y exponente, con algunas complicaciones. En Pascal, usted puede expresar valores reales en el cdigo en una notacin de punto fijo o en notacin cientfica, con el carcter E separar la mantisa del exponente. Por lo tanto, 452.13 es el mismo que 4.5213e2 El tipo de datos char contiene caracteres. Asegrese de que les encierre las comillas simples, como por ejemplo: 'a' 'B' '+' Pascal estndar utiliza caracteres de 8 bits, no de 16 bits, por lo que no se admite Unicode, que se utiliza para representar a todos los idiomas de todo el mundo se establece en un solo sistema de cdigo unificado, El tipo de datos booleano puede tener slo dos valores: TRUE y FALSE

Un ejemplo de declarar varias variables es: var edad, ao, grado: integer; circunferencia: real; LetterGrade: char; DidYouFail: Boolean; Nos podr ser aprendizaje slo los fundamentos de Pascal en este tutorial, por lo que se te apegarse a los programas de consola que impresin texto a la pantalla e interactan con el teclado. Sin embargo, son capaces de producir programas como cualquier complicado que tiene en su equipo ahora Lazarus y Pascal. Un navegador web? Una hoja de clculo? Un juego? Todas las posibles, con miles (o millones) de horas-hombre de esfuerzo. En la corta historia de programacin informtica, una tradicin duradera es que el primer programa en un nuevo lenguaje es un "Hello, world" a la pantalla. As que vamos a hacer. Copiar y pegar el programa por debajo de su editor de texto o IDE, a continuacin, compilar y ejecutarlo. Si usted no tiene idea cmo hacer esto, volver a la tabla de contenido. Lecciones anteriores explican qu es un compilador, dar enlaces a compiladores descargables y le guiarn a travs de la instalacin de un compilador de Pascal de open-source en Windows. 11

program Hello; begin writeln ('Hola, mundo.') end. Debe parecerse a la salida de la pantalla: Hola mundo. Si est ejecutando el programa en un IDE, puede que vea el programa ejecutar en un flash, a continuacin, devolucin del IDE para poder ver lo que ha ocurrido. Consulte la parte inferior de la leccin anterior por la razn de por qu. Uno sugiri alterara la solucin, aadiendo un readln que esperar para que usted pulse entrar antes de terminar el programa, "Hello, world" programa para convertirse en: program Hello; begin writeln ('Hola, mundo.'); readln end.

1E - Asignacin y operaciones

Una vez que se ha declarado una variable, puede almacenar valores en l. Esto se denomina asignacin. Para asignar un valor a una variable, siga esta sintaxis: variable_name := expression; Tenga en cuenta que a diferencia de otros idiomas, cuyo operador de asignacin es slo un signo igual, Pascal utiliza un signo de dos puntos seguido por un signo igual, de forma similar a como se hace en ms sistemas de lgebra computacional. La expresin puede ser un nico valor: some_real: = 385.385837; o puede ser una secuencia aritmtica: some_real: = 37573.5 * 37593 + 385.8 / 367.1; Los operadores aritmticos en Pascal son: Operador + * / div mod Operacin Adicin o unario positiva Sustraccin o unario negativo Multiplicacin Divisin real Divisin entera Mdulo (divisin del resto) Operandos real o entero real o entero real o entero real o entero nmero entero nmero entero Resultado real o entero real o entero real o entero real nmero entero nmero entero 12

div y mod slo funcionan en nmeros enteros. / trabaja en ambos reales y enteros, pero voluntad siempre dan una respuesta real. Las dems operaciones trabajan en reales y enteros. Al mezclar enteros y reales, el resultado siempre ser un verdadero puesto que dara como resultado la prdida de datos en caso contrario. Por eso, Pascal utiliza dos operaciones diferentes para la Divisin y divisin entera. 7 / 2 = 3.5 (real), pero 7 div 2 = 3 (y 7 mod 2 = 1 ya que es el resto). Cada variable slo se puede asignar un valor que es del mismo tipo de datos. Por lo tanto, no se puede asignar un valor real a una variable de tipo entero. Sin embargo, ciertos tipos de datos sern convertir a un tipo de datos superior. Esto se hace ms a menudo cuando se asigna valores enteros a las variables reales. Supongamos que haba en esta seccin de la declaracin de la variable: var some_int: integer; some_real: real; Cuando se ejecuta el siguiente bloque de declaraciones, some_int: = 375; some_real: = some_int; some_real tendr un valor de 375.0. Cambiar datos de un tipo a otro se denomina esterotipos. Compiladores de Pascal modernos soportan esterotipos explcita en la forma de C, con una sintaxis ligeramente diferente. Sin embargo, esterotipos se suele utilizacin en situaciones de bajo nivel y en relacin con la programacin orientada a objetos, y un estudiante de programacin de comienzo no ser necesario utilizarlo. Aqu tiene informacin sobre esterotipos desde el manual de GNU Pascal. En Pascal, puede utilizarse el signo menos para hacer que un valor negativo. El signo ms tambin puede utilizarse para hacer que un valor positivo, pero por lo general se deja desde los valores por defecto a positivo. No intente utilizar dos operadores de al lado, como en: some_real: = 37,5 *-2; Esto puede tener sentido perfecto para usted, ya que est intentando multiplicar por negativas-2. Sin embargo, Pascal ser confundido que no sabe si se va a multiplicar o restar. Puede evitar esto mediante el uso de parntesis para aclarar: some_real: = 37,5 * (-2); El equipo sigue un orden de operaciones similares a uno de los que seguir cuando haces aritmtica. Multiplicacin y la Divisin (* / div mod) venir antes de suma y resta (+ -), y entre parntesis siempre tienen prioridad. As, por ejemplo, el valor de: 3.5*(2+3) ser 17,5. Pascal no puede realizar operaciones estndar de aritmtica en valores booleanos. Hay un conjunto especial de operaciones booleanas. Adems, no debe realizar operaciones aritmticas en caracteres.

13

1F - funciones estndar

Pascal tiene varias funciones matemticas estndar que puede utilizar. Por ejemplo, para encontrar el valor del sin de pi radianes: value := sin (3.1415926535897932); Tenga en cuenta que la funcin de pecado opera en medida angular declarado en radianes, como lo hacen todas las funciones trigonomtricas. Si todo va bien, el valor se debe convertirse en 0. Las funciones se denominan utilizando el nombre de funcin, seguido por los argumentos entre parntesis. Funciones de Pascal estndar incluyen: Funcin ABS Arctan Cos EXP ln Round Sin SQR Sqrt trunc Descripcin valor absoluto arctan en radianes coseno de una medida en radin e a la potencia dada logaritmo natural se redondea al entero ms cercano Seno de una medida en radin cuadrado (potencia 2) raz cuadrada (potencia de 1/2) Truncar (redondea hacia abajo) Tipo de argumento real o entero real o entero real o entero real o entero real o entero real real o entero real o entero real o entero real o entero Tipo de valor devuelto mismo como argumento real real real real nmero entero real mismo que argumento real nmero entero

Ordinal tipos de datos (entero o char), donde los valores permitidos tienen un predecesor distinto y sucesor, puede utilizar estas funciones: Funcin chr Ord PRED Succ Descripcin caracter con un valor dado ASCII valor ordinal predecesor sucesor Tipo de argumento nmero entero entero o char entero o char entero o char Tipo de valor devuelto Char nmero entero igual que el tipo de argumento igual que el tipo de argumento

Real no es un tipo de datos ordinal. Eso es porque no tiene sucesor distinto ni predecesor. Qu es el sucesor de 56,0? Es 56,1, 56.01, 56.001, 56.0001? Sin embargo, para un nmero entero de 56, existe un predecesor distinto: 55 y un sucesor distinto: 57. Lo mismo puede decirse de caracteres: 14

'b' Sucesor: 'c' Predecesor: 'a' Lo anterior no es una lista exhaustiva, como compiladores de Pascal modernos incluyen miles de funciones para todo tipo de fines. Consulte la documentacin del compilador para obtener ms informacin.

1 G - puntuacin y sangra

Dado que Pascal ignora final de lneas y espacios, signos de puntuacin es necesaria para indicar al compilador cuando termina una declaracin. Usted debe disponer de un punto y coma a continuacin:

el ttulo del programa cada definicin de constante cada declaracin de variable cada definicin de tipo (que se explicar ms adelante) casi todas las declaraciones

La ltima instruccin en un bloque BEGIN-END, el uno inmediatamente anterior a la final, no requiere un punto y coma. Sin embargo, es inofensivo para agregar uno, y le ahorra tener que agregar un punto y coma, si de repente tuvo que mueva la instruccin ms arriba. No es necesaria aplicar sangra. Sin embargo, resulta de gran utilidad para los programadores, ya que ayuda a hacer el programa ms claro. Si desea, podra tener un programa de parecerse a esto: program Stupid; const un = 5; b = 385.3; var alfa, beta: real; comenzar alfa: = un + b; beta: = b / a final. Pero es mucho mejor tener este aspecto: program NotAsStupid; const un = 5; b = 385.3; var alfa, Beta: real; Begin (* principal *) alfa: = un + b; Beta: = b / a End. (* principal *) En general, aplicar sangra a cada bloque. Saltar una lnea entre bloques (por ejemplo, entre los bloques const y var). Entornos de programacin modernos (IDE o entorno de desarrollo integrado) entienden la 15

sintaxis de Pascal y a menudo se sangra para usted a medida que escribe. Puede personalizar la sangra a tu gusto (mostrar una ficha como espacios de tres o cuatro?). Sangra adecuada hace mucho ms fcil determinar cmo funciona el cdigo, pero es ayudado enormemente por comentando juiciosa.

1 H - asignacin de programacin

Ahora sabe cmo utilizar variables y cambiar su valor. Est listo para su primera asignacin de programacin? Pero hay un pequeo problema: todava no ha aprendido cmo mostrar datos a la pantalla! Cmo vas a saber si es o no el programa funciona si toda esa informacin es todava almacenada en la memoria y no aparece en la pantalla? Por lo tanto, para empezar, aqu es un fragmento de las lecciones de pocos siguientes. Para mostrar los datos, utilice: writeln (argument_list); La lista de argumentos se compone de cadenas de caracteres o nombres de variables separados por comas. Un ejemplo es: writeln ('Sum = ', sum);

Aqu es la asignacin de programacin para el captulo 1: Encontrar la suma y el promedio de los cinco nmeros enteros. La suma debe ser un nmero entero, y el promedio debe ser real. Los cinco nmeros son: 45, 7, 68, 2 y 34. Utiliza una constante para indicar el nmero de enteros manejados por este programa, es decir, definir una constante por tener el valor 5. A continuacin, imprimirlo todo. La salida debe ser algo parecido a esto: Nmero de enteros = 5 Nmero1 = 45 Nmero2 = 7 Nmero3 = 68 Nmero4 = 2 Nmero5 = 34 Suma = 156 Promedio = 3.1200000000E + 01 Como puede ver, el mtodo de salida por defecto para los nmeros reales es la notacin cientfica. El captulo 2 se explicar cmo darle formato a decimal de punto fijo. Para ver una posible solucin de la asignacin, vaya a la pgina siguiente. 16

1Ha - soluciones

Aqu es una forma de resolver la asignacin de programacin en la seccin anterior. (* Autor: Tao Yue Fecha: 19 de junio de 1997. Descripcin: Encontrar la suma y el promedio de cinco nmeros predefinidos Versin: 1.0 - versin original *) program SumAverage; const NumberOfIntegers = 5; var A, B, C, D, E, Suma: integer; Promedio: real; Begin (* principal *) A: = 45; B: = 7; C: = 68; D: = 2; E: = 34; Suma: = A + B + C + D + E; Media: = suma / NumberOfIntegers; writeln (' nmero de enteros = ', NumberOfIntegers); writeln (' Nmero 1 = ', A); writeln (' nmero 2 = ', B); writeln (' Nmero 3 = ', C); writeln (' Nmero 4 = ', D); writeln (' Nmero 5 = ', E); writeln (' suma = ', suma); writeln (' Media = ', media) End. (* Principal *)

2A - Input

La entrada es lo que entra en el programa. Puede ser desde el teclado, el ratn, un archivo en el disco, un escner, un joystick, etc.. No nos pondremos en la entrada del mouse en detalle, porque esa sintaxis difiere de una mquina a otra. Adems, sistemas operativos actuales de ventanas orientadas a eventos suelen manejar entrada del mouse para usted. El formato bsico para la lectura de datos es: leer ( Variable_List ); 17

Variable_List es una serie de identificadores variables separados por comas. leer trata entrada como una secuencia de caracteres, con lneas separadas por un carcter especial de fin de lnea. por otra parte, readln, ser saltar a la siguiente lnea despus de leer un valor, moviendo automticamente pasado el siguiente carcter de fin de lnea: readln ( Variable_List ); Supongamos que haba este de entrada del usuario, y a, b, c y d fueron todos los enteros. 45 97 3 123 A continuacin presentamos algunas declaraciones de leer y readln de muestra, junto con los valores que se leen en las variables adecuadas. Sentencias read (a); read (b); readln (a); read (b); read (a, b, c, d); readln (a, b); readln (c, d); a 45 45 45 45 b 97 1 97 97 3 1 1 2 c d

Cuando se leen en nmeros enteros, se omiten todos los espacios hasta que encuentra un valor numrico. A continuacin, numberals todo posteriores se leen, hasta que se alcanza un carcter no numrico (incluyendo, pero sin limitarse a, un espacio). 8352.38 Cuando se lee un nmero entero de la entrada anterior, su valor se convierte en 8352. Si, inmediatamente despus, lees en un caracter, el valor sera '. ' ya que la cabeza lectora se detuvo en el primer carcter alfanumrico. Supongamos que ha intentado leer en dos nmeros enteros. Que no funcionara, porque cuando el equipo busca datos rellenar la segunda variable, ve la '. ' y se detiene ya que no pudo encontrar dato alguno para leer. Con valores reales, el equipo tambin omite espacios y, a continuacin, se lee tanto como se puede leer. Sin embargo, muchos de los compiladores de Pascal colocar una restriccin adicional: una real que no tiene ninguna parte entera debe comenzar con 0. As que .678 no es vlido y el equipo no puede leer de una manera real, pero 0.678 est muy bien. Asegrese de que todos los identificadores en la lista de argumentos hacer referencia a variables. No se puede asignar un valor a constantes y tampoco se puede a valores literales.

18

2B - salida

Para escribir datos en la pantalla, tambin hay dos declaraciones, que uno de los cuales usted ha visto ya en la asignacin del programacin del ltimo captulo: write ( Argument_List ); writeln ( Argument_List ); La declaracin de writeln salta a la lnea siguiente cuando haya terminado. Puede utilizar cadenas en la lista de argumentos, constantes o en valores literales. Si desea mostrar un apstrofe dentro de una cadena, utilice dos apstrofos consecutivos. Mostrar dos apstrofos consecutivos, a continuacin, se requiere utilizar cuatro. Este uso de una secuencia especial para referirse a un carcter especial se llama escapar y permite hacer referencia a cualquier carcter, incluso si no hay clave para ello en el teclado.

2 C - formato de salida
Formato de salida es bastante fcil. Para cada identificador o un valor literal en la lista de argumentos, utilice: Value : field_width El resultado es justificado a la derecha en un campo de la anchura de entero especificado. Si la anchura no es lo suficientemente larga como para los datos, se omitir la especificacin de ancho y los datos se mostrarn en su totalidad (excepto para valores reales ver ms abajo). Supongamos que hemos tenido: write ('Hi': 10, 5: 4, 5673:2); El resultado sera (que es ocho espacios antes de la Hola y tres espacios despus de): Hola 55673 Los valores reales, puede utilizar la sintaxis de la antes mencionada para mostrar la notacin cientfica en un ancho de campo especificado, o se puede convertir en notacin de punto decimal fija con: Valor : field_width : decimal_field_width El ancho del campo es el ancho total del campo, incluyendo la parte decimal. La parte de nmero entero siempre se muestra plenamente, por lo que si no han asignado espacio suficiente, se mostrar de todos modos. Sin embargo, si el nmero de dgitos decimales supera el ancho de campo decimal especificado, la salida se mostrarn redondea el nmero especificado de lugares (aunque no se cambia la variable en s). escribir (573549.56792:20:2); tendra este aspecto (con 11 espacios delante): 573549.57 19

2D - archivos

Lectura de un archivo en lugar de la consola (teclado) se puede realizar: read ( file_variable , argument_list ); write ( file_variable , argument_list ); Del mismo modo con readln y writeln. file_variable se declara como sigue: var ... archivo, fileout : texto; El tipo de datos de texto indica que el archivo es de slo texto sin formato. Despus de declarar una variable para el archivo y antes de leer o escribir en l, es necesario asociar la variable con el nombre de archivo en el disco y abra el archivo. Esto puede hacerse de dos maneras. Por lo general: assign ( file_variable, 'filename.extension' ); reset ( file_variable, 'filename.extension' ); Reset abre un archivo para lectura y reescribir abre un archivo para escritura. Un archivo abierto con Restablecer slo puede utilizarse con leer y readln. Un archivo abierto con reescribir slo puede utilizarse con escribir y writeln. Turbo Pascal introdujo la notacin assign. Primero asignar un nombre de archivo a una variable y, a continuacin, llamar a reset o rewrite utilizando slo la variable. Assign (file_variable, 'filename.extension'); Reset (file_variable) El mtodo de representacin de la ruta de acceso vara en funcin de su sistema operativo. Windows utiliza letras de barras diagonales inversas y unidad debido a su patrimonio de DOS (por ejemplo, c:\directory\name.pas), mientras que MacOS X y Linux uso barras diagonales debido a su patrimonio de UNIX. Despus de que haya terminado con el archivo, puede cerrarlo con: Close ( File_Identifier ); Aqu hay un ejemplo de un programa que utiliza los archivos. Este programa fue escrito para Turbo Pascal y DOS y crear file2.txt con el primer carcter de file1.txt: program CopyOneByteFile; var mychar : char; filein, fileout : text; begin 20

assign (filein, 'c:\file1.txt'); reset (filein); assign (fileout, 'c:\file2.txt'); rewrite (fileout); read (filein, mychar); write (fileout, mychar); close(filein); close(fileout) end.

2E - EOLN and EOF


EOLN es una funcin booleana que es verdadero cuando usted ha llegado al final de una lnea en un archivo de entrada abierto. eoln (file_variable) si desea probar para ver si la entrada estndar (el teclado) es en un fin de lnea, simplemente emitir eoln sin ningn parmetro. Esto es similar a la forma en la que de lectura y escritura utilizan la consola (teclado y pantalla) si es llamada sin un parmetro de archivo. eoln EOF es una funcin booleana que es verdadera cuando usted ha llegado al final del archivo. EOF (file_variable) normalmente, no escribe el caracter de fin de archivo desde el teclado. En mquinas de DOS/Windows, el caracter es control-Z. En mquinas UNIX/Linux, el caracter es Control-D.eoln (file_variable)

2F - asignacin de programacin

Volver a encontrar la suma y el promedio de cinco nmeros, pero esta vez leer en cinco nmeros enteros y mostrar el resultado en columnas ordenadas. Referirse a la especificacin del problema original si es necesario. Debe escribir los nmeros separados por espacios desde el teclado: 45 7 68 2 34. La salida debe ahora este aspecto: Nmero de enteros = 5 Nmero1: 45 Nmero2: 7 Nmero3: 68 Nmero4: 2 Nmero5: 34 ================ Suma: 156 Media: 31,2 Como un ejercicio adicional, puede intentar escribir la salida en un archivo. Sin embargo, no utilizar archivos de la solucin del problema. 21

2Fa - Solution

(* Author: Tao Yue Date: 19 June 1997 Description: Find the sum and average of five predefined numbers Version: 1.0 - original version 2.0 - read in data from keyboard *) program SumAverage; const NumberOfIntegers = 5; var A, B, C, D, E : integer; Sum : integer; Average : real; begin (* Main *) write ('Enter the first number: '); readln (A); write ('Enter the second number: '); readln (B); write ('Enter the third number: '); readln (C); write ('Enter the fourth number: '); readln (D); write ('Enter the fifth number: '); readln (E); Sum := A + B + C + D + E; Average := Sum / 5; writeln ('Number of integers = ', NumberOfIntegers); writeln; writeln ('Number1:', A:8); writeln ('Number2:', B:8); writeln ('Number3:', C:8); writeln ('Number4:', D:8); writeln ('Number5:', E:8); writeln ('================'); writeln ('Sum:', Sum:12); writeln ('Average:', Average:10:1); end.

3B - Boolean Expressions
Las expresiones booleanas se utilizan para comparar dos valores y obtener una respuesta de verdadero o falso: Los siguientes operadores son usados: < Menor que > Mayor que = Igual a 22

<= Menor o igual que >= Mayor o igual que <> Diferente a Puede asignar las expresiones booleanas a variables booleanas. Aqu le asignamos una verdadera expresin a some_bool: some_bool := 3 < 5; Las expresiones booleanas complejas se forman mediante el uso de los operadores booleanos: not negacin (~) and conjuncin (^) or disjuncin (v) xor O exclusive (v) NOT es un operador monario se aplica a un nico valor y lo invierte:

not true = false not false = true

AND devuelve TRUE slo si ambos valores son TRUE:


TRUE and FALSE = FALSE TRUE and TRUE = TRUE

OR devuelve TRUE si al menos un valor es TRUE:


TRUE or TRUE = TRUE TRUE or FALSE = TRUE FALSE or TRUE = TRUE FALSE or FALSE = FALSE

XOR devuelve TRUE si una de las expresiones es TRUE y la otra es FALSE. Luego:

TRUE xor TRUE = FALSE TRUE xor FALSE = TRUE FALSE xor TRUE = TRUE FALSE xor FALSE = FALSE

Al combinar dos expresiones booleanas utilizando los operadores booleanos y relacionales, tenga cuidado de usar parntesis. (3 > 5) or (650 < 1) Esto es porque los operadores booleanos son superiores en el orden de las operaciones que los operadores relacionales: 1. no 2. * / div mod y 23

3. + - o 4. < > <=> == < > Por lo tanto, 3 > 5 or 650 < 1 pasa a ser evaluada como 3 > (5 or 650) < 1, que no tiene sentido, porque el operador booleano o slo funciona en valores booleanos, no en nmeros enteros. Los operadores booleanos (AND, OR, NOT, XOR) pueden utilizarse sobre variables booleanas tan fcilmente como se utilizan en las expresiones booleanas. En la medida de lo posible, no comparar dos valores reales con el signo de igual a igual. Pequeos errores de redondeo pueden causar que dos expresiones equivalentes difieran.

3Ca - IF
La instruccin IF le permite a rama basado en el resultado de una operacin de tipo Boolean. El formato de la rama unidireccional es: If BooleanExpression then StatementIfTrue ; Si la expresin booleana se evala como true, la instruccin se ejecuta. De lo contrario, se omite. La instruccin IF acepta slo una declaracin. Si usar ms de una sentencia, debe utilizar un begin-end para encerrar las declaraciones: If BooleanExpression then Begin Statement1 ; Statement2 end; Tambin hay una seleccin de dos vas: If BooleanExpression then StatementIfTrue else StatementIfFalse ; Si la expresin booleana se evala como FALSE, se realizar la instruccin que sigue a la otra. Nota que usted puede no uso un punto y coma despus de la instruccin anterior a la otra. Hace que el equipo tratarlo como una seleccin unidireccional, dejndolo a preguntarse la otra de dnde viene. Si usted necesita usar una seleccin mltiple, simplemente anide sus declaraciones: if Condition1 then Statement1 else if Condition2 then Statement2 else Statement3; 24

Tenga cuidado con el anidamiento. A veces el equipo no har lo que desea hacer: if Condition1 then if Condition2 then Statement2 else Statement1; La otra siempre coincide con el ms reciente si, por lo tanto el equipo interpreta el bloque anterior de cdigo como: if Condition1 then if Condition2 then Statement2 else Statement1; Usted puede obtener con una instruccin nula: if Condition1 then if Condition2 then Statement2 else else Statement1; o puede usar un bloque de inicio-end. Pero la mejor forma de limpiar el cdigo sera reescribir la condicin. if not Condition1 then Statement1 else if Condition2 then Statement2; Este ejemplo ilustra donde el operador no resulta muy til. Si Condicin1 haba sido un tipo booleano: (not(a < b) or (c + 3 > 6)) y g, revertir la expresin sera difcil. Tenga en cuenta tambin la importancia de la sangra transmitir la lgica del cdigo de programa para un ser humano, pero el compilador omite la sangra.

3Cb - CASE
Supongamos que usted quera sucursales de una manera si b es 1, 7, 2037, o 5; y otra forma si lo contrario. Podra hacerlo: if (b = 1) or (b = 7) or (b = 2037) or (b = 5) then Statement1 else Statement2; 25

Pero en este caso, sera ms sencillo a la lista de los nmeros que desea Statement1 para ejecutar. Hara esto con una declaracin de caso: case b of 1,7,2037,5: Statement1; otherwise Statement2 end; La forma general de la instruccin case es: case selector of List1: Statement1; List2: Statement2; ... Listn: Statementn; otherwise Statement end; La parte de lo contrario es opcional. Cuando est disponible, difiere de un compilador al compilador. En muchos de los compiladores, se utiliza la palabra de otra cosa en lugar de lo contrario. Selector es cualquier variable de un tipo de datos ordinal. Usted no puede usar reales! Tenga en cuenta que las listas deben constar de valores literales. Es decir, debe utilizar constantes o valores codificados--no puede utilizar las variables.

3Da - para... HACER


Funcin de bucle significa repetir una instruccin o un comando compuesto una y otra vez hasta que se cumpla alguna condicin. Existen tres tipos de bucles:

slo fija de repeticin - se repite un nmero fijo de veces prueba preliminar - pruebas de una expresin booleana y, a continuacin, entra en el bucle si es TRUE posttest - ejecuta el bucle y, a continuacin, comprueba la expresin booleana

En Pascal, el bucle de repeticin fijo es el bucle for. La forma general es:


for index := StartingLow to EndingHigh do statement;

La variable de ndice debe ser de un tipo de datos ordinal. Puede utilizar el ndice en los clculos dentro del cuerpo del bucle, pero no se debe cambiar el valor del ndice. Un ejemplo de cmo utilizar el ndice es:
sum := 0; for count := 1 to 100 do sum := sum + count;

26

El equipo sera hacer el largo camino de la suma y sigue terminarlo en mucho menos tiempo que tard el matemtico Gauss para hacer la suma la forma corta (1 + 100 = 101. 2 + 99 = 101. Ves un patrn? Hay 100 nmeros, as que el patrn se repite 50 veces. 101 * 50 = 5050. Esto no es avanzada de matemticas, su atribucin a Gauss es apcrifa). En el bucle for-to-do, el valor inicial debe ser menor que el valor final, o nunca se ejecutar el bucle. Si desea contar hacia abajo, debe utilizar el bucle para downto
for index := StartingHigh statement;: downto EndingLow do

En Pascal, la de bucle slo puede contar en incrementos (pasos) de 1.

3Db - WHILE..DO

El bucle de prueba preliminar tiene el siguiente formato:


while BooleanExpression do statement;

El bucle contina ejecutndose hasta que la expresin booleana se convierte en FALSE. En el cuerpo del bucle, de alguna manera debe afectar la expresin booleana cambiando una de las variables utilizadas en el mismo. De lo contrario, dar como resultado un bucle infinito:
a := 5; while a < 6 do writeln (a);

Remediar esta situacin, cambiando el valor de la variable:


a := 5; while a < 6 do begin writeln (a); a := a + 1 end;

El bucle WHILE... debe se llama un bucle de prueba preliminar debido a que la condicin se prueba antes de que el cuerpo del bucle se ejecuta. As pues, si la condicin se inicia como FALSE, el cuerpo de mientras no ejecuta nunca el bucle.

REPEATUNTIL

El bucle de posttest tiene el siguiente formato:


repeat statement1; statement2 until BooleanExpression;

27

En un bucle repetir, declaraciones compuestas estn integradas--no necesita utilizar comenzar-final. Tambin, el bucle contina hasta que la expresin booleana es TRUE, Considerando que el tiempo bucle contina hasta la expresin booleana es FALSE. Este bucle se llama un bucle posttest porque la condicin es probada despus de que el cuerpo del bucle se ejecuta. El bucle REPEAT es til cuando se desea que el bucle para ejecutar al menos una vez, no importa lo que es el valor inicial de la expresin booleana.

3E - asignaciones de programacin
Problema 1 Encuentre los primeros 10 nmeros en la secuencia de Fibonacci. La secuencia de Fibonacci comienza con dos nmeros:
1 1

Cada nmero posterior est formado mediante la adicin de los dos nmeros ante s. 1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, etc.. Esto constituye la siguiente secuencia:
1 1 2 3 5 8 13 21 34 55 89 144 ...

Problema 2 Mostrar todos los poderes de 2 que son menos de 20000. Mostrar la lista de una manera con el formato correcto, con comas entre los nmeros. Mostrar nmeros de cinco por lnea. Debe parecerse a la salida:
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384

3Ea - Solutions
Solucin a la secuencia del problema de Fibonacci
(* Author: Tao Yue Date: 19 July 1997 Description: Find the first 10 Fibonacci numbers Version: 1.0 - original version *) program Fibonacci; var Fibonacci1, Fibonacci2 : integer; temp : integer; count : integer; begin (* Main *) writeln ('First ten Fibonacci numbers are:'); count := 0; Fibonacci1 := 0; Fibonacci2 := 1; repeat write (Fibonacci2:7); temp := Fibonacci2;

28

Fibonacci2 := Fibonacci1 + Fibonacci2; Fibonacci1 := Temp; count := count + 1 until count = 10; writeln; (* Of course, you could use a FOR loop or a WHILE loop to solve this problem. *) end. (* Main *)

Solucin a la potencia de dos problemas


(* Author: Tao Yue Date: 13 July 2000 Description: Display all powers of two up to 20000, five per line Version: 1.0 - original version *) program PowersofTwo; const numperline = 5; maxnum = 20000; base = 2; var number : longint; linecount : integer; begin (* Main *) writeln ('Potencias de ', base, ', 1 <= x <= ', maxnum, ':'); (* Set up for loop *) number := 1; linecount := 0; (* Loop *) while number <= maxnum do begin linecount := linecount + 1; (* Print a comma and space unless this is the first number on the line *) if linecount > 1 then write (', '); write (number); if (linecount=numperline) and not (number*2> maxnum) then begin writeln (','); linecount := 0 end; number := number * base; end; (* while *) writeln; end. (* Main *)

Nota que utilic tres constantes: la base, el nmero de facultades para mostrar en cada lnea y el nmero mximo. Esto asegura que el programa puede ser fcilmente adaptable en el futuro. El uso de constantes en lugar de literales es una buena costumbre de programacin al formulario. Al escribir programas realmente largos, puede referirse a determinados nmeros de miles de veces. Si usted codificado ellos en el cdigo, usted tendra que buscarlos. Asimismo, puede utilizar el mismo valor en un contexto diferente, por lo que simplemente no puede hacer un Mundial bsqueda-y-reemplazo. Utilizando una constante hace ms sencillo expandir el programa. 29

Tambin tenga en cuenta que he utilizado el tipo de longint para la variable de nmero. Esto es debido a un error el nmero de pruebas < = 20000, nmero tendra que llegar a 32768, la prxima potencia de dos despus de 16384. Esto supera el rango del tipo integer: -32768 a 32767. (probarlo sin longint y ver qu pasa).

4A - procedimientos

Un procedimiento es una subrutina o subprograma. Los subprogramas ayudan a reducir la cantidad de redundancia en un programa. Declaraciones que son ejecutadas una y otra vez pero no figura en un bucle se ponen a menudo en subprogramas. Los subprogramas tambin facilitan el diseo de arriba a abajo. Diseo de arriba a abajo es para abordar un programa desde los ms generales a los ms especficos. Por ejemplo, un diseo arriba hacia abajo para pasar de una habitacin a otra comienza es como sigue:

Salir de la sala primera Ir a la Sala Segunda Entrar en la Sala Segunda

Entonces es refinado a

Salir de la sala primera o Ir a la puerta o Abrir la puerta o Salir de la puerta o Puerta estrecha

...

Slo va a la puerta puede ser refinado an ms:

Salir de la sala primera o Ir a la puerta Levantarse del asiento Girar hacia la puerta Caminar hasta casi ella

Esto, por supuesto, puede ser an ms refinado para decir cunto ejercicio debera darse a sus miofibrillas cardacos, y cunto adenosn difosfato debe convertir a trifosfato de adenosina por fermentacin o respiracin aerbica. Esto puede parecer demasiado detallado, pero para la programacin de la computadora, esto es, en efecto lo que tienes que hacer. El equipo no puede entender declaraciones generales--debe ser especfico. Las tareas principales que deberan figurar en los procedimientos, por lo que en el programa principal, usted no tiene que preocuparse acerca de los detalles. Esto tambin hace de cdigo reutilizable. Slo puede mantener sus procedimientos en un archivo y un vnculo en su programa.

Un procedimiento tiene el mismo formato bsico como un programa:

30

procedimiento Nombre ; const (* Constantes *) var (* Variables *) Begin (* Declaraciones *) end;

Hay un punto y coma (no un punto) al final. Para llamar al procedimiento desde el programa principal, slo utilice el nombre, como hara writeln.
Nombre ;

Muy a menudo se utilizan procedimientos para datos de salida. Es as de simple (hasta la siguiente leccin, por supuesto).

4B - parmetros

Una lista de parmetros puede incluirse como parte de la partida de procedimiento. La lista de parmetros permite valores de las variables de transferirse desde el programa principal para el procedimiento. La nueva lnea de procedimiento es:
procedure Name (formal_parameter_list);

La lista de parmetros se compone de varios grupos de parmetro, separados por punto y coma:
param_group_1; param_group2; ... ; param_groupn

Cada grupo de parmetro tiene la forma:


identifier_1, identifier_2, ... , identifier_n : data_type

El procedimiento se denomina por pasar argumentos (llamados en la lista de parmetros reales) del mismo nmero y el tipo como la lista de parmetros formales.
procedure Name (a,b: integer; c,d: real); begin a := 10; b := 2; writeln (a, b, c, d) end;

Por ejemplo, llamado el procedimiento anterior desde el programa principal como sigue:
alpha := 30; Name (alpha, 3, 4, 5);

31

Cuando regrese al programa principal, cul es el valor de alpha? 30. Sin embargo, alpha se pas a una, que fue asignado a un valor de 10. Lo que realmente ocurri fue que un y alpha son totalmente distintos. El valor en el programa principal no se vio afectado por lo que sucedi en el procedimiento. Esto se denomina llamado por valor. As pasa el valor de una variable a un procedimiento. Otra manera de paso de parmetros es haciendo una llamada por referencia. Esto crea un vnculo entre el parmetro formal y el parmetro real. Cuando el parmetro formal se modifica en el procedimiento, del mismo modo se modifica el parmetro real. Llamada por referencia es activado por anteriores del grupo de parmetro con un VAR:
VAR identifier1, identifier2, ..., identifiern : datatype;

En este caso, constantes y literales no pueden utilizarse como parmetros reales porque se podra cambiar en el procedimiento. Aqu hay un ejemplo que mezcla llamada por valor y llamada por referencia:
procedure Name (a, b : integer; VAR c, d : integer); begin c := 3; a := 5 end; begin alpha := 1; gamma := 50; delta := 30; Name (alpha,2,gamma,delta); end.

Inmediatamente despus de que el procedimiento ha sido ejecutado, gamma tiene el valor 3 porque c fue un parmetro de referencia, pero alfa todava es 1 debido a una era de un parmetro de valor. Esto es un poco confuso. Creo que de llamada por valor como copiar una variable, y, a continuacin, dando la copia al procedimiento. El procedimiento se trabaja sobre la copia y descarta cuando est hecho. La variable original no se modifica. El procedimiento est dando la variable real llamada por referencia. El procedimiento funciona directamente sobre la variable y lo devuelve al programa principal. En otras palabras, llamada por valor es la transferencia de datos unidireccional: principal del programa al procedimiento. Llamada por referencia va de ambas maneras.

4 C - funciones

Funciones funcionan del mismo modo como los procedimientos, pero siempre devuelven un valor nico para el programa principal a travs de su propio nombre:
function Name (parameter_list) : return_type;

Las funciones se denominan en el programa principal a travs de expresiones: 32

a := Name (5) + 3;

Si la funcin no tiene ningn argumento, tenga cuidado de no usar el nombre de la funcin en el lado derecho de cualquier ecuacin dentro de la funcin. Es decir:
function Name : integer; begin Name := 2; Name := Name + 1 end.

es uno-uno. En lugar de devolver el valor 3, como cabra esperar, esto configura un bucle infinito recursiva. Nombre llamar al nombre, que se llamar el nombre, que ser llamada nombre, etc. El valor devuelto se establece mediante la asignacin de un valor para el identificador de la funcin.
Name := 5;

Es generalmente mala programacin formulario para hacer uso de los parmetros VAR en funciones-las funciones deben devolver un nico valor. Sin duda, no desea que la funcin de pecado para cambiar tus radianes de pi en radianes 0 porque son equivalentes--slo quieres la respuesta 0.

4 D - mbito de aplicacin
mbito de aplicacin se refiere a donde ciertas variables son visibles. Tiene procedimientos dentro de procedimientos, variables dentro de los procedimientos y su trabajo consiste en intentar averiguar cuando cada variable puede ser vista por el procedimiento. Una variable global es una variable definida en el programa principal. Cualquier subrutina puede verla, usarla y modificarla. Todos los subprogramas pueden llamar a s mismos y pueden llamar a todos los otros subprogramas definidos ante s. El punto principal aqu es: cualquier bloque de cdigo (procedimiento, funcin,), los identificadores nicos que son visibles son aquellos definicin antes de ese bloque y en o fuera de ese bloque.
program ScopeDemo; var A : integer; procedure ScopeInner; var A : integer; begin A := 10; writeln (A) end; begin (* Main *) A := 20; writeln (A); ScopeInner; writeln (A); end. (* Main *)

La salida del programa anterior es: 33

20 10 20

La razn es: si dos variable con los identificadores de la mismos se declara en una subrutina y el programa principal, el programa principal ve su propia, y el subprograma ve su propia (de no el principal). La definicin ms local se utiliza cuando se define un identificador dos veces en diferentes lugares. Aqu es un grfico de alcance que bsicamente equivale a una copia con sangra de un programa con slo las variables y menos la lgica. Eliminando la lgica de la aplicacin y que encierra bloques en cuadros, a veces es ms fcil ver donde estn disponibles ciertas variables.

Todo el mundo puede ver las variables globales A, B y C. Sin embargo, en el procedimiento Alpha la definicin global de A se sustituir por la definicin local. Beta1 y Beta 2 pueden ver las variables de VCR, Betamax y cassette. Beta1 no puede ver la variable FailureToo y Beta 2 no puede ver el error. No puede acceder a ningn subprograma excepto Alpha F y G. El procedimiento beta puede llamar alpha y beta. La versin beta 2 de la funcin puede llamar cualquier subrutina, incluido l mismo (el programa principal no es una subrutina).

4E - recursin

Recursin es un tema difcil de entender. Sin embargo, es muy fcil de aplicar una vez que la entiendes. La asignacin de programacin para este captulo implicar la recursividad. Recursividad significa permitir que una funcin o procedimiento pueda llamarse a s mismo. Hasta que se alcanza el lmite de algunos, mantiene su llamado a s mismo. La funcin de suma, designada por una mayscula Sigma en matemticas, es un ejemplo popular de recursividad:
function Summation (num: integer): integer; begin if num = 1 then Summation := 1 else Summation:= Summation(num-1) + num end;

Supongamos que piden suma 3.


a := Summation(3);

Summation(3) se convierte en Summation(2) + 3. 34

Summation(2) se convierte en Summation(1) + 2. En 1, la recursin se detiene y se convierte en 1. Summation(2) se convierte en 1 + 2 = 3. Summation(3) se convierte en 3 + 3 = 6. se convierte un en 6.

Recursividad trabaja hacia atrs hasta que se alcanza un punto determinado en el que se define una respuesta y funciona entonces con esa definicin, resolviendo las otras definiciones en que uno confa. Todos los procedimientos/funciones de recursivas debe tener algn tipo de prueba tan detener la recursin. Bajo una condicin, llamada la condicin de base, debe detener la recursin. En virtud de todas las dems condiciones, debe profundizar la recursin. En el ejemplo anterior, la condicin de base es si num = 1. Si no construir en una condicin de base, la recursin no tiene lugar en todo, o convertirse en infinita.

4F - Forward referencia a

Despus de todos estos temas confusos, aqu es algo fcil. Recuerde que slo puede ver procedimientos/funciones, variables y otros subprogramas que ya se han definido. Bueno, es una excepcin. Si tienes dos subprogramas, cada uno de los que llama a la otra, tiene un dilema que no importa que pones en primer lugar, el otro an no puede ser llamado desde la primera. Para resolver este problema de la gallina-y-el-huevo, utilice hacia adelante que hacen referencia a.
procedure Later (parameter list); forward; procedure Sooner (parameter list); begin ... Later (parameter list); end; ... procedure Later; begin ... Sooner (parameter list); end;

Lo mismo ocurre con las funciones. Slo se pegan un adelante; al final de la partida.

4 G - asignacin de programacin
Un problema clsico de recursividad, enseado en todos los cursos introductorios de Ciencias de la computacin, es la torre de Hanoi. En este problema, tiene tres clavijas verticales. Hay una torre en forma de cono en la clavija ms a la izquierda, que consiste en una serie de discos con forma de rosquilla. Por ejemplo, esto es lo que parece una torre de cuatro pisos:

35

| | | | | | * | | *** | | ***** | | ******* | |

Se designan las clavijas de 1, 2 y 3 de izquierda a derecha. El desafo es mover una torre (cualquier altura) de clavija 1 clavija 3. En el proceso, ningn disco grande puede colocarse encima de un disco ms pequeo, y slo un disco (el disco superior en un pitn) podr presentarse en cualquier momento. El problema parece trivial, y es para uno o dos discos. Para un disco, usted simplemente muvalo de clavija 1 a clavija 3. Para dos discos, mover el disco superior de clavija 1 a clavija 2, 1 a 3 y finalmente mover el disco ms pequeo de 2 a 3. El problema obtiene ms difcil para tres o ms discos. Tres discos, se podra mover 1 a 3, 1 a 2, luego de 3 a 2. Efectivamente, esto crea una torre de dos pisos en clavija 2. A continuacin, mueva el disco ms grande: 1 a 3. Ahora mueva la torre de dos pisos en la parte superior de la disco grande: 2 a 1, 2 a 3, 1 a 3. Su misin, si decide aceptarla--escribir un programa mediante un procedimiento recursivo para resolver las torres de Hanoi para cualquier nmero de discos. En primer lugar, pregunte al usuario para la altura de la torre original. A continuacin, imprima las instrucciones paso a paso para mover discos individuales de clavija de uno a otro. Por ejemplo, un problema de tres discos debe producir el siguiente resultado:
1 1 3 1 2 2 1 a a a a a a a 3 2 2 3 1 3 3

Como se indic en la seccin sobre recursividad (leccin 4E), recursin es uno de los temas ms difciles de captar. Algunas personas miran este problema y les resulta extremadamente fcil. Otros tendrn un momento difcil con ella. Sin embargo, una vez que superas el obstculo de la recursividad de entendimiento, la codificacin real del programa es relativamente simple. Por lo tanto, si le gustara desafiar a usted mismo, dejar de leer aqu. Si tienes un poco de molestia, contine leyendo para una pequea pista. Sugerencia: el problema, como todos los problemas de recursiva, s, reduce cada vez ms simple con cada paso. Recuerde que el problema de tres discos? Primero crear una torre de dos discos de clavija 2, que le permite mover el disco situado ms abajo en la clavija 1 a clavija 3. A continuacin, mover la torre de dos discos en la parte superior de clavija 3. Es lo mismo con cuatro discos. En primer lugar, crear una torre de tres discos en la clavija 2 y, a continuacin, mueva el disco ms grande sobre peg 3 y mover la torre de tres discos a clavija 3. Cmo se crea la torre de tres discos? Simple. Ya sabemos cmo mover una torre de tres discos de clavija 1 a clavija 3. Esta vez, usted est simplemente pasando de peg 1 a peg 2 y, a continuacin, cuando el palo mayor est en el lugar, que est desplazando la torre de clavija 2 a clavija 3. En todo este procedimiento, podemos actuar como si el disco grande no existe, ya que ha garantizado a ser ms 36

grande que los otros y por lo tanto no plantea ningn problema. Slo utilizan la solucin de tres discos, los nmeros de alrededor de conmutacin. Buena suerte!

4Ga - la solucin a las torres de Hanoi


(* Autor: Tao Yue Fecha: 13 de julio de 2000. Descripcin: Resuelve las torres de Hanoi Versin: 1.0 - versin original *) programa de TowersofHanoi; var numdiscs: integer; procedimiento de DoTowers (NumDiscs, OrigPeg, NewPeg, TempPeg: integer); (* Explicacin de variables: Nmero de discos--nmero de discos en OrigPeg OrigPeg--nmero de clavija de la torre NewPeg--nmero de clavija para mover la torre a TempPeg--peg para utilizar para el almacenamiento temporal *) if NumDiscs = 1 then writeln (OrigPeg, ' ---> ', NewPeg) (* Take care of all other cases *) else begin (* First, move all discs except the bottom disc to TempPeg, using NewPeg as the temporary peg for this transfer *) DoTowers (NumDiscs-1, OrigPeg, TempPeg, NewPeg); (* Now, move the bottommost disc from OrigPeg to NewPeg *) writeln (OrigPeg, ' ---> ', NewPeg); (* Finally, move the discs which are currently on TempPeg to NewPeg, using OrigPeg as the temporary peg for this transfer *) DoTowers (NumDiscs-1, TempPeg, NewPeg, OrigPeg) end end; (********************************************************) BEGIN (* Main *) write ('Please enter the number of discs in the tower ===> '); readln (numdiscs); writeln; DoTowers (numdiscs, 1, 3, 2) end. (* Main *)

5A - tipos enumerados

Puede declarar sus propios tipos de datos ordinal. Para ello, en la seccin tipo de su programa:
type datatypeidentifier = typespecification;

37

Una forma de hacerlo es mediante la creacin de un tipo enumerado. Una especificacin de tipo enumerado tiene la sintaxis:
(identifier1, identifier2, ... identifiern)

Por ejemplo, si desea declarar los meses del ao, lo hara un tipo:
type MonthType = (January, February, March, April, May, June, July, August, September, October, November, December);

A continuacin, se puede declarar una variable:


var Month : MonthType;

Puede asignar cualquier valor enumerado a la variable:


Month := January;

Todas las funciones ordinales son vlidas en el tipo enumerado. ord(January) = 0, y ord(December)= 11. Algunas restricciones se aplican, sin embargo: tipos enumerados son internos a un programa--no pueden ser leer ni escriben en un archivo de texto. Debe leer los datos y convertirlo a un tipo enumerado. Asimismo, el identificador utilizado en el tipo (como la de enero) no puede utilizarse en otro tipo. Uno de un tipo enumerado sirve para permitir que usted, el programador, para hacer referencia a nombres descriptivos para los datos. Adems, los tipos enumerados permitan funciones y procedimientos para la garanta de un parmetro vlido, ya que slo las variables del tipo enumerado pueden pasarse en y la variable slo puede tener uno de los varios valores enumerados.

5B - Subranges

Un tipo de subrango se define en trminos de otro tipo de datos ordinal. La especificacin de tipo es:
lowest_value .. highest_value

donde lowest_value < highest_value y los dos valores estn en la gama de otro tipo de datos ordinal. Por ejemplo, puede que desee declarar los das de la semana, as como la semana de trabajo:
type DaysOfWeek = (Sunday, Monday, Tuesday, Wednesday,Thursday, Friday, Saturday); DaysOfWorkWeek = Monday..Friday;

Tambin se puede utilizar subranges para tipos ordinales integrados como char e integer. 38

5 C - Arreglos de discos de una-dimensin

Supongamos que desea leer en 5000 enteros y hacer algo con ellos. Cmo se podra almacenar los nmeros enteros? Puede utilizar variables de 5000, caer en:
aa, ab, ac, ad, ... aaa, aab, ... aba, ...

Pero esto crecera tedioso (despus de declarar esas variables, tienes que leer los valores en cada una de esas variables). Una matriz contiene varios espacios de almacenamiento de informacin, todos del mismo tipo. Se hace referencia a cada espacio de almacenamiento de informacin con el nombre de la matriz y con un subndice. La definicin de tipo es:
Type typename = array [enumerated_type] of another_data_type;

El tipo de datos puede ser cualquier cosa, incluso de otra matriz. Se har cualquier tipo enumerado. Puede especificar el tipo enumerado dentro de los corchetes, o utilizar un tipo enumerado predefinido. En otras palabras,
type enum_type = 1..50; arraytype = array [enum_type] of integer;

es equivalente a
type arraytype = array [1..50] of integer;

Un lado: Esto es cmo se gestionan internamente las cadenas y los arreglos de discos. Antes de que los compiladores de Pascal modernos agregaran soporte para las cadenas, el programador tena que manejar en s mismos, al declarar:
type String = packed array [0..255] of char;

y el uso de algn tipo de terminacin de carcter para indicar el final de la cadena. La mayora del tiempo es el carcter nulo (nmero ordinal 0, o ord(0)). El especificador de empaquetado significa que la matriz se va exprimida para asumir la menor cantidad de memoria. Matrices de caracteres que representa cadenas son a menudo denominadas buffers y errores en el manejo de les en la C o lenguajes de programacin C++ pueden conducir a las saturaciones de bfer. Un desbordamiento de bfer se produce cuando se intenta poner, digamos, una cadena de 200 caracteres en una matriz de longitud de 150. Si se sobrescribe la memoria ms all de la memoria intermedia, y si esa memoria originalmente contena cdigo ejecutable, entonces el atacante tiene slo lograron inyectar cdigo arbitrario en el sistema. Esto es lo que caus el famoso gusano Slammer que corra desenfrenado en Internet durante varios das. Prubalo en Pascal y ver qu pasa. 39

Las matrices son tiles si desea almacenar grandes cantidades de datos para su uso posterior en el programa. Que trabajan especialmente bien con bucles, debido a que el ndice puede utilizarse como el subndice. Para leer en el 50 nmero, asumiendo las siguientes definiciones:
Type arraytype = array[1..50] of integer; var myarray : arraytype;

uso:
for count:= 1 to 50 do read (myarray[count]);

Entre corchetes [ ] encierre el subndice cuando se refiere a arreglos de discos.


myarray[5] := 6;

Matrices multidimensionales
Puede tener arreglos de discos en mltiples dimensiones:
Type datatype = array [enum_type1, enum_type2] of datatype;

La coma separa las dimensiones, y refirindose a la matriz se hara con:


a[5, 3]

Los arreglos bidimensionales son tiles para la programacin de juegos de mesa. Una Junta de tic tac toe podra tener estos tipos y las declaraciones de variables:
Type StatusType = (X, O, Blank); BoardType = array[1..3,1..3] of StatusType; var Board : BoardType;

Puede inicializar el tablero con:


for count1 := 1 to 3 do for count2 := 1 to 3 do Board[count1, count2] := Blank;

Por supuesto, puede utilizar tres - o dimensiones superiores de arreglos de discos.

5E - Registros

Un registro permite mantener los elementos de datos relacionados en una estructura. Si desea obtener informacin acerca de una persona, quizs desee saber el nombre, edad, ciudad, Estado y zip. Para declarar un registro, se utilizara:

40

TYPE TypeName = record identifierlist1 : datatype1; ... identifierlistn : datatypen; end;

Por ejemplo:
type InfoType = record Name : string; Age : integer; City, State : String; Zip : integer; end;

Cada uno de los identificadores de nombre, edad, ciudad, Estado y ZIP se denominan campos. Usted puede tener acceso a un campo dentro de una variable por:
VariableIdentifier.FieldIdentifier

Un perodo separa la variable y el nombre del campo. Hay una declaracin muy til para hacer frente a los registros. Si va a utilizar una variable de registro por un largo tiempo y no tiene ganas de escribir el nombre de la variable de una y otra vez, puede despojar fuera el nombre de la variable y utilizar slo los identificadores de campo. Esto se realiza:
WITH RecordVariable DO BEGIN ... END;

Ejemplo:
with Info do begin Age := 18; ZIP := 90210; end;

5F - Punteros

Un puntero es un tipo de datos que contiene una direccin de memoria. Un puntero puede considerarse como una referencia a esa direccin de memoria, mientras que una variable accede directamente a esa direccin de memoria. Si una variable es el nmero de telfono de una persona, entonces un puntero es la pgina y nmero de lnea donde aparece en la libreta de telfonos. Acceso a los datos almacenados en esa direccin de memoria, deja de hacer referencia el puntero. Para declarar un tipo de datos de puntero, debe especificarse lo que sealar. Ese tipo de datos est precedido con un quilate (^). Por ejemplo, si va a crear un puntero a un entero, se podra utilizar este cdigo: 41

type PointerType = ^integer;

Por supuesto, a continuacin, puede declarar variables de tipo PointerType. Antes de acceder a un puntero, bloquea un espacio en la memoria para ese puntero para acceder a. Esto se hace con:
New (PointerVariable);

Para acceder a los datos en la ubicacin de la memoria del puntero, agregue un quilate despus del nombre de la variable. Por ejemplo, si PointerVariable fue declarado como un tipo de PointerType (desde arriba), puede asignar la ubicacin de la memoria un valor mediante el uso de:
PointerVariable^ := 5;

Despus de que termine con el puntero, debe desasignar el espacio de memoria. De lo contrario, cada vez que se ejecuta el programa, asignar ms y ms memoria hasta que el equipo tiene no ms. Para desasignar la memoria, utilice el comando Eliminar: Dispose(PointerVariable); Puede asignar un puntero a otro puntero. Sin embargo, tenga en cuenta que desde slo la direccin, no el valor, se est copiando, una vez que usted modificar los datos ubicados en un puntero, el otro puntero, cuando dejar de referencia de escritos, tambin produce datos modificados. Tambin, si usted libre (o desasignar) un puntero, el puntero copiado ahora apunta a datos sin sentido. Lo que es bueno para un puntero? Por qu no puede usted utilizar slo un nmero entero en los ejemplos anteriores en lugar de un puntero a un entero? Pues bien, lo anterior es claramente un ejemplo inventado. El poder real de punteros es que, junto con registros, que posibilita las estructuras de datos de tamao de forma dinmica. Si necesita almacenar muchos elementos de un tipo de datos en orden, puede utilizar una matriz. Sin embargo, su matriz tiene un tamao predefinido. Si no tienes un tamao lo suficientemente grande, puede no podr acoger todos los datos. Si tienes una gama enorme, ocupa mucha memoria cuando a veces que no se utiliza memoria. Una estructura de datos dinmicos, por otra parte, ocupa slo tanta memoria como est siendo utilizado. Qu es crear un tipo de datos que apunta a un registro. A continuacin, el registro tiene ese puntero escriba como uno de sus campos. Por ejemplo, pilas y colas pueden todos implementarse usando esta estructura de datos:
type PointerType = ^RecordType; RecordType = record data : integer; next : PointerType; end;

Cada elemento se apunta a la siguiente. El ltimo registro de la cadena indica que no hay ningn registro siguiente estableciendo su campo prximo a un valor de cero.

42

También podría gustarte