E N D
Pascal Es un lenguaje de alto nivel desarrollado en Alemania a fines de la década del 70 por Niklaus Wirth. La idea fue crear un lenguaje que permitiese la enseñanza y el aprendizaje de la programación. A tal fin, la sintaxis del Pascal es muy similar a la del idioma inglés y los programas son fáciles de leer e interpretar. Además, Pascal no toma en consideración el hecho que las letras estén en mayúsculas o minúsculas.
Compiladores En el Laboratorio de Informática se emplea el compilador de Pascal de Borland, que ofrece muchas facilidades para el aprendizaje, como el realzado de sintaxis y la ubicación de los errores en la línea de código en que ocurren. Para uso en la casa, existen varios compiladores gratis en Internet; se recomienda BloodShed DevPascal, disponible en http://www.bloodshed.nu. Algunos detalles sobre su uso aparecen en http://www.intec.edu.do/~ceis/pascal/
Tres conceptos fundamentales • Antes de ver en mayor detalle el lenguaje de programación Pascal, es bueno tener claro que son : • las constantes, • las variables y • los identificadores. • Para eso debe tener una noción (por vaga que sea) de programa.
¿Qué es un programa? Un programa no es más que una serie de líneas de texto, cada una de las cuales contiene alguna definición sobre la información a ser usada en el programa o bien alguna instrucción que se desea que la computadora ejecute.
Definiciones (1) Constante: como su nombre lo indica, es un valor que a lo largo de la ejecución de un programa no varía. Variable: este es un espacio o contenedor, es como un vaso, que puede almacenar diversos valores durante la ejecución del programa.
Definiciones (2) Identificador: Es una combinación de letras, números y el caracter '_', pudiendo empezar con cualquiera de ellos excepto números. Es un concepto muy importante en Pascal, ya que sirve para nombrar las constantes, las variables e incluso el mismo programa.
Tipos de Datos En Pascal se debe especificar a la computadora qué clase de datos va a contener una variable. A simple vista, podemos distinguir entre una palabra como 'Hola' o un número como 47. La computadora no puede hacer esto, así que se le debe decir qué tipo de datos se pondrá en cada variable. Una vez hecho esto, no puede almacenarse un valor de cualquier tipo en esa variable, sino de algunos tipos
Tipos de Datos (I) Integer: número entero entre -32,768 y 32,767 LongInt: número entero entre -2*10^31 y 2*10^31 - 1 Real: número con coma decimal entre 2.9*10-39^y 1.7*10^38 String: cadena de caracteres (conjunto de números, letras, símbolos; palabras y frases)
Tipos de Datos (II) Char: un caracter (un dígito o una letra o un símbolo) Boolean: Pueden tomar dos valores True (verdadero) False (falso). Existen otros tipos de datos
Tipos Ordinales Un tipo ordinal representa una secuencia ordenada de valores individuales, a los que se pueden aplicar los conceptos de predecesor y sucesor (Ej. enteros, carácter, booleanos). En cada tipo de datos ordinales hay un primer valor y un último valor.
Tipos Definidos por el Usuario Existen dos tipos de datos simples definidos por el usuario: Tipos enumerados: Se componen de una lista de identificadores encerrados entre paréntesis y separados por comas. Tipos subrango: Es un subconjunto de un tipo ordinal (enteros, boolean, carácter y enumerado) que se especifica indicando el primero y el último elemento del conjunto.
Tipos Enumerados • Los tipos enumerados son ordinales. Cada uno lleva asociado un número entero: al primero se le asigna el O, al segundo un 1, y así sucesivamente, por lo que no es independiente el orden de declaración. • Un valor de tipo enumerado no puede pertenecer a dos declaraciones de tipo distintas y no pueden leerse desde teclado, ni escribirse en pantalla.
Tipos Enumerados. Ejemplos • Type • Estaciones = (primavera, verano, otoño, invierno); • Colores = (rojo, amarillo, verde, azul, violeta);
Tipos Subrango. Ejemplos • Notación: • Type • Identificador = primerelemento..ultimoelemento; • Ejemplos: • Type Dias = 1..31; • Meses = 1..12;
Asignación de tipos a variables • Para decirle a Pascal el tipo de una variable, se usa una de las siguientes palabras clave en el lugar indicado en el esqueleto del programa. • Ejemplo: • var i: integer; • a: boolean;
Esqueleto de un Programa en Pascal (I) Todos los programas de Pascal comparten ciertas características comunes, algunas de las cuales son opcionales. Esto se llama esqueleto del programa y se muestra a continuación.
Convención En este esqueleto, lo que se ponga entre signos de mayor y menor (<>) indicarán elementos que deben reemplazarse en un programa real.
Esqueleto de un Programa en Pascal (II) • Program <identificador>;Uses WinCrt; • Const {constantes} • <identificador> = <valor>; • Var {variables} • <identificador> : <tipo>; • Begin {instrucciones}. . .End.
Componentes del Esqueleto de un programa (I) La línea Program es opcional y sirve para ponerle un nombre al programa. La línea Uses WinCrt es una forma de que Pascal active la capacidad de leer desde el teclado y de escribir hacia la pantalla; en Windows, se hace esto sobre una pequeña ventana blanca, y en DOS sobre la pantalla completa (se debe escribir 'Uses Crt' en compiladores de DOS).
Componentes del Esqueleto de un programa (II) • Las secciones llamadas Const y Var son para declarar las constantes y las variables, respectivamente. • Son opcionales e intercambiables. Se pone un identificador que será el nombre con el que, tanto Pascal como el programador, la conocerán. • A una constante no se le especifica el tipo, sólo el valor. • A una variable no se le puede dar un valor cuando se la declara.
Componentes del Esqueleto de un programa (III) La sección entre las palabras Begin y End es la parte principal del programa y es aquí donde van las instrucciones del programa. Estas palabras actúan como paréntesis. Se requieren las dos pero además pueden ponerse más dentro de éstas, siempre poniendo primero el Begin y luego el End, de manera que en un programa correctamente escrito, haya tantos Begins como Ends. El último End debe terminar con un punto, para que Pascal sepa que el programa ha terminado.
Componentes del Esqueleto de un programa (IV) Al final de varias líneas del esqueleto aparece un punto y coma. En general, todas las líneas de código Pascal terminan en punto y coma, a menos que terminen en una palabra reservada (no obstante, las líneas que terminan en un End que no sea el último del programa deben llevar punto y coma). Las palabras entre llaves ({}) son comentarios, y Pascal las ignora por completo. Son una forma valiosa de incluir información para los humanos dentro del código para la computadora.
Operaciones de Entrada/Salida • Sentencias de salida o escritura. • Write o Writeln (NombreArchivo, Nomvarl ,Nomvar2...): • Realizan conversión de tipos de datos antes de que la salida llegue al archivo de salida. Las variables o argumentos de esta sentencia pueden ser: expresiones. constantes o variables numéricas, de carácter, de cadena o booleanas.
Operaciones de Entrada/Salida • Sentencias de salida o escritura. • Formatos: Write o Writeln (argumento) • Write o Writeln (argumcnto:m) • Write o Writeln (argumento:m:n) • Donde m es el número de caracteres que ocupará la salida ajustando la información a la derecha, y n sólo se emplea cuando el argumento es numérico real indica el número de caracteres que ocupará en la salida la parte decimal.
Operaciones de Entrada/Salida Sentencia de entrada o lectura. Read o Readln (NombreArchivo,Nomvarl ,Nomvar2..);
Operadores Aritméticos Operador Función - Operador unario. Invierte el signo. + Operador binario suma. - Operador binario resta. * Operador binario producto. / Operador binario división real. div Operador binario división entera. Mod Operador binario resto entero (Módulo).
Operador de asignación La combinación de símbolos := es el operador de asignación y sirve, al igual que el ReadLn, para darle valor a una variable. El valor que se da a la variable no se lee del teclado, sino que se toma de una constante, de otra variable, o de una expresión aritmética (situadas a la derecha del operador de asignación) y se copia hacia la variable cuyo nombre está a la izquierda.
Concepto y clasificación de estructuras • Las estructuras se clasifican de acuerdo a varios criterios. • Respecto al número de componentes, las estructuras se clasifican en estáticas (el número de componentes es fijo) y dinámicas (el número de componentes varía durante la ejecución del programa • Respecto al tipo de componentes, las estructuras suelen formarse o bien por combinación de datos de distinto tipo (registros) o bien por la repetición de datos del mismo tipo (arrays, conjuntos, etc..).
La Estructura Array • Es una estructura homogénea de datos de tamaño constante accediendo a cada uno de sus elementos mediante un identificador común y uno o varios índices. • Todos los elementos del array son del mismo tipo. • El número de ellos no varía durante la ejecución del programa.
La Estructura Array • Accedemos a un elemento de la estructura mediante un identificador común, el nombre del array, y con el valor que toman uno o varios índices. Al número de índices necesarios para designar un elemento del array se le denomina dimensión del array. • El número máximo de valores posibles que puede tomar cada índice se denomina rango de esa dimensión o índice. Los valores han de ser consecutivos, por lo que el índice ha de ser de un tipo ordinal
Declaración de tipos y variables Array La declaración más general de un array es la siguiente: Type Rango1 = tipoordinal1; Rango2 = tipoordinal2; ... rangon = tipoordinaln; tipobase = (*cualquier predefinido o definido por el usuario*) tipoarray = array [rango1,rango2,...,rangon] of tipobase,
Ejemplo 1 Arreglo de una dimensión: const n = 10; var arr: array [1..n] of integer;
Ejemplo 2 Arreglo de varias dimensiones: Para almacenar las notas correspondiente a todos los alumnos de un colegio. Suponiendo lo siguiente: Numero de cursos 5 Grupos por curso 3 Numero de evaluaciones 3 Numero de asignaturas 6 Numero de alumnos por curso 20
Ejemplo 2.1 Const Numcurso=5; Numasig=6; Numalum=20; Type Cursos=1.. nurneurso; Grupos='A'..'C'; Eval=(primera,segunda,tercera); Asign=1.. numasin; Alum=1. .numalum; Tiponotas=array[cursos,grupos,eval,asign,alum] of real;
Ejemplo 2.2 Var Notas: tiponotas; Curso: cursos; Grupo: grupos; Evaluacion: eval; Materia: asign; Alumno: alum; Con los elementos de un array podemos realizar las mismas operaciones que el tipo base al que pertenecen.
String: Cadenas de Caracteres Las cadenas de caracteres son arrays especiales. Una cadena de caracteres (string) consiste en una serie o secuencia de caracteres cuyo número (longitud) puede estar entre 0 y 255. Se puede definir la longitud de la cadena poniendo string [n] donde n está entre 0 y 255. Longitud física: corresponde al máximo número de caracteres que puede almacenar. Longitud lógica: corresponde al número de caracteres que tiene en un instante determinado.
Operaciones y Tratamiento de cadenas • Las dos operaciones básicas son: • Comparación • Concatenación. • Operador de concatenación (+) Se utiliza para reunir varias cadenas en una sola • Ejemplo: Cad1:='esto es un ejemplo'; Cad2:='de concatenación de cadenas'; Cadr:=cad1+cad2; • Write (cadr); • esto es un ejemplo de concatenación de cadenas
Operaciones y Tratamiento de cadenas La función concat realiza la misma función que el operador de concatenación. La sintaxis es: Function concat (cad1,cad2,...:string): string; La cadena vacía o nula se representa con dos caracteres apóstrofes seguidos ' '. El acceso a los elementos de una cadena individualmente se hace como si fuera un array. Ejemplo: cad1:='ejemplo'; cad1[1] devuelve el primer elemento, la letra ´e’.
Operaciones y Tratamiento de cadenas La función Length proporciona la longitud lógica de una cadena de caracteres. Ejemplo: Longitud:=length(cad1); La variable longitud tomaría el valor 7.
Funciones de tratamiento de cadenas InstrucciónFunción COPY Extrae una subcadena de caracteres de otra cadena de caracteres Copy (cadl,po,num) po: primera posición del caracter a extraer.Num: número de caracteres que se extraen.Po y Num deben ser enteros POS Determina si una cadena es subcadena de otra, en caso afirmativo devuelve la posición donde comienza la subcadena, en caso negativo devolvería cero. Pos (subcadena,cadena) DELETE Suprime el numero de caracteres que le digamos de una cadena a partir de la posición que le indiquemos Delete (Cad,Po,Num)
Funciones de tratamiento de cadenas InstrucciónFunción INSERT Inserta una cadena de caracteres en otra a partir de una posicion dada. Insert (subcadena,destino,posicion)Subcadena: Cadena a insertarDestino: Cadena donde se va a insertarPosicion: Lugar a partir del cual se va a insertar UPCASE Devuelve el caracter mayúscula Upcase(x) Donde x es una variable de tipo char. STR Convierte un valor numérico a la correspondiente cadena de caracteres que lo representa. Str(valor,cad)
Funciones de tratamiento de cadenas InstrucciónFunción VAL Procedimiento inverso a Str, es decir, devuelve el valor numérico de una cadena. Val(cad,variable,codigo) Cad: la cadena a convertir en valor numérico. Variable: el numero que se obtenga. Codigo: cero si se ha podido convertir.
Funciones Predefinidas Instrucción Función Abs(x) Proporciona el valor absoluto de una variable numérica x. ArcTan(x) El arco cuya tangente es x. Chr(x) Devuelve el carácter ASCII de un entero entre O y 255. Cos(x) Proporciona el valor del coseno de x. Exp(x) La exponencial de x(eX). Frac(x) Parte decimal de x. Int(x) Parte entera de x. Ln(x) Logaritmo neperiano de x. Odd(x) True si x es impar, y false si es par. Ord(x) Ordinal de una variable tipo ordinal x. Pred(x) Ordinal anterior a la variable ordinal x.
Funciones Predefinidas Instrucción Función. Round(x) Entero más próximo al valor x. Succ(x) Ordinal siguiente a la variable ordinal x. Sin(x) Seno de x. Sqr(x) Cuadrado de x. Sqrt(x) Raiz cuadrada de x, para x>=O. Trunc(x) Parte entera de x.
Estructuras de Control • Se denominan estructuras de control a aquellas que determinan qué instrucciones deben ejecutarse y qué número de veces. • Existen dos tipos de estructuras de control: • alternativas o de selección • repetitivas o de iteración.
Estructuras Alternativas • Son aquellas que bifurcan o dirigen la ejecución de un programa hacia un grupo de sentencias u otro dependiendo del resultado de una condición. Las dos sentencias alternativas de Pascal son: • Sentencia alternativa simple IF-THEN-ELSE • Sentencia alternativa múltiple CASE-OF.
IF THEN ELSE IF (expresión lógica o booleana) THEN Sentencia1 (simple o compuesta) ELSE Sentencia2 (simple o compuesta);
Ejemplo Ejemplo: IF n>O then Writeln (`Número positivo'); IF n>O then Writeln (`Número positivo') ELSE Writeln (`Negativo o cero'); No puede existir un punto y coma inmediatamente antes de una palabra ELSE ya que sería interpretado como final de IF.
CASE OF CASE (expresión o variable) OF (lista de constantes1):(sentencia1); (lista de conslantes2):(sentencia2); (lista de constantes3):(senteneia3); ... (lista de constantesN):(sentenciaN); ELSE (SENTENCIA) ... END;
Ejemplo • Program menu; • Var Numerodia: integer; • Begin • Write('introduzca el ordinal de un día laborable de la semana:'); Readln (numerodia); • Write (`Hoy es '); • Case numerodia Of • 1:Writeln ('Lunes'); • 2:Writeln ('Martes'); • 3:Writeln ('Miercoles'); • 4:Writeln ('Jueves'); • 5:Writeln ('Viernes'); • 6:Writeln ('Sábado') • Else Writeln ('¡¡¡Domingo!!! No es día laborable'); • End.