UNIDAD 4. ESTRUCTURA DE DATOS EN FUNCIONES Y PROCEDIMIENTOS. INTRODUCCIÓN AL TURBO PASCAL. El lenguaje Turbo Pascal se caracteriza por ser un lenguaje de propósito general (puede usarse en un gran número de diversas aplicaciones), es un lenguaje procedimental, es estructurado (usa las estructuras repeat, for, while y no necesita go to) y recursivo, y posee una gran riqueza de tipos de datos. Un programa en PASCAL es un conjunto de instrucciones o sentencias, escritas según ciertas reglas, para realizar operaciones sobre entidades de datos conocidas como constantes, variables y resultados de funciones. Estructura de un programa haciendo uso del lenguaje Turbo Pascal: PROGRAM identificador USES Encabezamiento asocia una serie de rutinas de control de pantalla LABEL declaración de etiquetas CONST definición de constantes Sección de declaraciones y TYPE declaración de tipos de datos definiciones definidos por el usuario VAR declaración de variables FUNCTION >PROCEDURE Declaraciones y cuerpo Sección de subprogramas de los subprogramas BEGIN Sentencias o instrucciones Cuerpo del programa o Sección Ejecutable END. Ing. N ahiby Castillo 11 El encabezamiento Un programa escrito en PASCAL empieza siempre con un encabezamiento que consiste en: • La palabra reservada PROGRAM. • El nombre del programa. • Los nombres de los ficheros externos que se usan para entrada y salida. Se escriben separados por comas y entre paréntesis. • El delimitador punto y coma. La sección de las declaraciones Todas las entidades definidas por el usuario que se usan en un programa deben ser declaradas en esta sección, indicando un identificador y lo que representa. ETIQUETAS (LABEL) CONSTANTES (CONST) TIPOS (TYPE) VARIABLES (VAR) PROCEDIMIENTOS (PROCEDURE) FUNCIONES (FUNCTION) • No es necesario que un programa contenga declaraciones de todas esas categorías. • Las declaraciones pueden escribirse en un orden cualquiera. • Una misma clase de declaración puede aparecer más de una vez. Pero una declaración particular no se puede repetir en un bloque. • Las etiquetas son enteros decimales que pueden usarse para señalar alguna sentencia y hacerla accesible mediante la sentencia GOTO. Ejemplo: TYPE estaciones = (primavera, verano, otoño, invierno) ; VAR letra : CHAR; CONST pi = 3.1416 ; LABEL 100, 200, 300 ; Ing. N ahiby Castillo 12 La sección ejecutable Contiene a las sentencias que, cuando se ejecutan, realizan las acciones del programa. La sección ejecutable sigue a la de las declaraciones y está delimitada por BEGIN y END, terminando en un punto. Entre BEGIN y END puede haber sentencias condicionales, repetitivas, sentencias de asignación, sentencias que controlan el flujo de la ejecución. OBJETOS DE UN PROGRAMA EN TURBO PASCAL. IDENTIFICADORES: un identificador es un nombre dado a un elemento de programa, tal como una constante, una variable, un procedimiento, un programa, una función, una unidad, un campo de registro, etc. CARACTERÍSTICAS DE LOS IDENTIFICADORES: • Secuencia de caracteres de cualquier longitud, sólo los 63 primeros son significativos. • Debe comenzar por una letra (A Z) y no puede contener blancos. • Después del primer carácter se aceptan letras, dígitos y subrayado ( _ ). • No se pueden usar palabras reservadas. Ejemplos válidos: N OMBRE_APELLIDO, IMPUESTO, NOTA2, H346 Ejemplos no válidos: NOMBRE APELLIDO, EJ?AB, 23ALX, 4NOM, &NOM NOTA: El Turbo Pascal no distingue las letras mayúsculas de las minúsculas en los identificadores. Ejemplo: EDAD edad Edad son identificadores válidos e idénticos. PALABRAS RESERVADAS: son palabras que tienen un significado especial y que no se pueden utilizar para otros propósitos. Las palabras reservadas no se pueden usar como identificador. Ejemplo de palabras reservadas: ABSOLUTE, AND, ARRAY, BEGIN, CONST, DIV, DO, DOWNTO, ELSE, END, EXTERNAL, FILE, FOR, FORWARD, FUNCTION, GOTO, IF, IMPLEMENTATION, IN INLINE, INTERFASE, INTERRUPT, LABEL, MOD, NIL, NOT, OF, Ing. N ahiby Castillo 13 OR, PAKED, PROCEDURE, PROGRAM, RECORD, REPEAT, SET, SHL, SHR, STRING, THEN, TO, TYPE, UNIT, UNTIL, USES, VAR, WHILE, WITH, XOR, etc. DATOS: es una representación simbólica (numérica, alfabética, algorítmica etc. Cifras originales que por si solas tienen poco significado. Son los conceptos básicos o elementales como el nombre de las cosas o personas, las cantidades, etc. TIPOS DE DATOS: DATOS NUMÉRICOS: conformados por dígitos, puede incluir un signo (+,-), un punto decimal ( . ) y un exponente. No pueden contener comas ( , ) o espacios en blanco. DATOS NUMÉRICOS ENTEROS (INTEGER): No contienen ni punto decimal, ni exponente. Ejemplo: 5 +5 -6 7343 Rango de valores posibles entre: -32768 ....32767 Enteros largos (LOGINT), su rango de valores: -2147483648 .....2147483647 DATOS NUMÉRICOS REALES (REAL): Deben contener punto decimal ( . ) o un exponente o ambos. Ejemplo: 0.0 -0.2 -314.63 0.000078 +32.45 32.45 En forma exponencial la base 10 se reemplaza por la letra E, manteniendo la forma siguiente: nE+-dd donde n = número decimal y dd = exponente entero (+,- o cero) . Ejemplo: 5.2x10-4 5.2E-4 5.2e-4 -6.784E-12 7.0E5 7.0E+5 DATOS CARACTER (CHAR): sólo pueden contener un caracter y deben estar encerrados entre apóstrofes. Pueden ser una letra (A Z), un dígito ( 0 9) o un caracter especial ($,*, &, etc.). Ejemplo: ‘A’ ‘*’ ‘6’ ‘ ‘ ‘X’ NOTA: No se pueden utilizar apóstrofes cuando se introducen caracteres desde el terminal. Ing. N ahiby Castillo 14 DATOS CADENA (STRING): es una secuencia de caracteres (letras, dígitos o caracteres especiales) escritos en una línea sobre el programa y encerrados entre apóstrofes, generalmente no mayor de 255 caracteres. Ejemplo: ‘DIOS SI EXISTE’ ‘¿COMO ESTAS?’ ‘EDO. MERIDA’ ‘6457-AL3’ ‘2X(3+D)-J’ DATOS LÓGICOS (BOOLEAN): pueden tomar sólo dos valores: true significa verdadero false significa falso donde false < trae CONSTANTES: son datos que no varían durante la ejecución o vida del programa. El dato simple se asocia a menudo a un IDENTIFICADOR que le proporciona un nombre al dato. El identificador se dice que es una constante si se le asigna un dato permanente. Las constantes deben ser declaradas antes de su utilización. Forma de definición de constantes: CONST nombre = valor; nombre1, nombre2, …. nombren = valor; Donde: CONST es la palabra reservada para la declaración de constantes nombre es un identificador que representa el nombre de la constante valor es el dato efectivo que se asigna al nombre, el cual puede ser entero, real, carácter, cadena, lógico, ..., conjuntos o arreglos,.. o una expresión que se evalúa en tiempo de compilación. ; punto y coma es el elemento separador de sentencias. Ejemplos: CONST Pi = 3.141592; Constante real CUENTA = 632; Constante entera Min = 0; Constante entera SUMA = (2.5+40)/(3.5-4); Constante real COLOR = ’AZUL’; Constante cadena (string) ANCHO,ALTO,LONG = 25; Constantes enteras SEC = ‘X’; Constante caracter Ing. N ahiby Castillo 15 NOTA: El tipo del valor asociado a la constante define el tipo de la constante. Los valores de las constantes tipo cadena o caracter deben ser asignados entre apóstrofes. VARIABLES: Es un identificador cuyo valor puede cambiar durante la ejecución del programa. Cada variable debe ser declarada (definida) individualmente en la sección de declaración del programa antes de ser utilizadas. Forma de definición de variables: VAR nombre: tipo; Donde: o VAR nombre1, nombre2, ...nombren: tipo; VAR: es la palabra reservada para la declaración de variables. nombre: es el identificador que representa el nombre de la variable. tipo: se refiere al tipo de dato contenido en la variable. Existen tantos tipos de variables como tipos de datos diferentes. ; punto y coma es el elemento separador de sentencias. Ejemplos: VAR EDAD: INTEGER; SALARIO: REAL; NOMB: STRING[30]; LETRA: CHAR; NACIONALIDAD: CHAR; CONDICION: BOOLEAN; NOTA: Las definiciones de constantes deben preceder a las declaraciones de variables. Ejemplo: CONST TITULO = ‘LA CASA DE LA CULTURA’; FRAC = 0.18453; VAR FILA, COLUMNA: INTEGER; SB: REAL; COMENTARIOS: es cualquier frase encerrada entre llaves { } o entre los signos (* *) que puede acompañar a las instrucciones de un programa, sean estas de declaraciones o pertenecientes al cuerpo del mismo. Ejemplo: VAR EDAD: INTEGER; {Edad del estudiante} Ing. N ahiby Castillo 16 Expresiones: Las expresiones son combinaciones de constantes, variables, símbolos de operación (matemáticos, lógicos y relacionales) y nombres de funciones que se utilizan en el cuerpo del algoritmo. Las expresiones pueden ser simples o compuestas. Las expresiones simples, son asignaciones directas a una variable o constante de un valor numérico o carácter, véase el siguiente ejemplo: Nombre de la Expresión Valor asignado Explicación o análisis A B FECHA DÓLAR =6 = ‘DEFINITIVO’ = dd/mm/aa =2120 PAIS =’VENEZUELA’ A la variable A se le asigna el valor de 6 A la variable B se le asigna el valor ‘DEFINITIVO’ A la variable FECHA se le asigna una fecha dada A la constante DOLAR se le asigna el valor 2120 A la constante PAIS se le asigna el valor ‘VENEZUELA’ Una expresión compuesta es la asignación a una variable o constante que surge de la unión de valores numéricos, operadores aritméticos, de comparación o lógicos. Por ejemplo: Nombre de la Expresión Valor asignado A =6*2 C =A+B EDAD =AÑOACTUAL - ANONAC SUELDO =DIASTRAB*SDIARIO Explicación o análisis A la variable A se le asigna el valor 12, que resulta de multiplicar 6 por 2 A la variable C se le asigna el valor de sumar A + B La variable EDAD obtendrá el resultado de restarle a la constante ANÑOACTUAL el valor de la variable ANOÑAC La variable SUELDO tomará el valor de multiplicar los días trabajados contenidos en la variable DIASTRAB por el valor de salario diario contenido en SDIARIO Expresiones Aritméticas Son utilizadas para construir formulas matemáticas. Las variables y constantes utilizadas son de naturaleza numérica, es decir números enteros o reales, y las operaciones a efectuar son de orden aritmético. Operadores Aritméticos Operadores + * ** / Significado Sumar Restar Multiplicar Exponenciación División Ejemplo Interpretación SI A=10 y B=13 A-B A*B A**B A/B Resultado es: 23 -3 130 100.000.000.000.000 0,76 Ing. N ahiby Castillo 17 REGLAS PARA EVALUAR EXPRESIONES ARITMÉTICAS: 1. Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones con paréntesis anidados se evalúan de dentro hacia fuera. El paréntesis más interno se evalúa primero. 2. Prioridad de operadores aritméticos: * / div mod se evalúan primero + - se evalúan de último Ejemplos: 4+2*5 4+10 23*2div5 14 46div5 3+5*(10-(2+4)) 9 3+5*(10-6) (9+3)*5div4mod7+1 12*5div4mod7+1 3+5*4 3+20 23 60div4mod7+1 15mod7+1 1+1 2 Expresiones Relacionales Se construyen a partir de los operadores relacionales (de relación o comparación, = , > , < , >=, <=, <>. Los operadores relacionales sirven para expresar las condiciones en los algoritmos. Si A=10 y B=13 Operadores > < >= <= = <> Significado Mayor que Menor que Mayor igual Menor igual Igual Diferente Ejemplo Interpretación A>B A<B A >= B A <= B A=B A <> B Resultado: FALSO VERDADERO FALSO VERDADERO FALSO VERDADERO Orden de Evaluación Al incluir estos operadores con los operadores aritméticos, obtenemos este nuevo orden de evaluación: Prioridad 1 2 3 4 Operador Contenido de paréntesis () *,/,div,mod +,=, <, >, <=, >=, distinto a Ing. N ahiby Castillo 18 Contador: Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante, cada vez que se produce un determinado suceso, acción o iteración. Para incluir un contador en un proceso deberá seguirse los siguientes pasos: Inicializar antes del ciclo Ejemplo: Se requiere obtener cuantos números primos existen del número 1 hasta el 100. Inicio Cuentaprimo= 0 Numero = 1 Incrementar dentro del ciclo Si se requiere puede imprimirse el valor con el cual finaliza el contador. Un contador se construye colocando el nombre del contador = nombre del contador + el valor del incremento. Se lee de la siguiente manera: A la variable Cuentaprimo (el contador en este caso) se le asigna el valor que trae y se incrementa en uno, en la primera iteración o lectura de datos, el valor que trae, es 0, al ejecutarse la instrucción del contador se incrementa en uno, y así sucesivamente hasta que se finalice el ciclo. Este contador se incrementará cada vez que la formula determine que el número en proceso es primo Leer Numero Mientras Número <= 100 Aplicar fórmula primo Si es primo Entonces Cuentaprimo = Cuentaprimo + 1 Imprimir Número Fin Si Numero = Numero + 1 Fin Mientras Imprimir Cuentaprimo Fin Acumulador: Un acumulador es una variable que suma sobre sí misma un conjunto de valores, al finalizar con el ciclo contendrá, en una sola variable, la sumatoria de todos los valores, que cumplen una determinada condición. Para incluir un acumulador en un proceso se deben seguir los siguientes pasos: Ejemplo: Se requiere obtener cuantos números primos existen del 1 hasta el 100, pero además se requiere su sumatoria. Inicializar antes del ciclo Inicio Cuentaprimo= 0, Sumaprimo = 0 Numero = 1 Incrementar dentro del ciclo Por lo general se requiere la impresión de su valor. Leer Numero Un acumulador se construye colocando el nombre del acumulador = nombre del acumulador + el valor variable. Ej: Sumaprimo Mientras Número <= 100 Aplicar fórmula primo Se lee de la siguiente manera: A la variable Sumaprimo se le asigna el valor que trae, que en su inicio es cero, más el valor que contiene la variable Número. De esta manera Sumaprimo contiene el valor del primer número. Cuando ocurre el encuentro del siguiente número primo y deba incrementarse el acumulador Sumaprimo, la instrucción dice que Sumaprimo, es igual al valor que trae o tiene actualmente, que en esta segunda iteración corresponde al primer número primo, más el valor del siguiente número primo encontrado, este proceso se realizará cada vez Si es primo Entonces Cuentaprimo = Cuentaprimo + 1 Sumaprimo = Sumaprimo + Número Fin Si Imprimir Numero Numero = Numero + 1 Fin Mientras Imprimir Cuentaprimo, Sumaprimo Fin que se encuentre un número primo, acumulando la sumatoria de todos los números primos hasta llegar al número 100. Ing. N ahiby Castillo 19 UNIDADES TURBO PASCAL UNIDAD SYSTEM Contiene los procedimientos y funciones estándar de Turbo Pascal relativas a la entrada/salida, cadenas de caracteres, calculo en coma flotante, gestión de memoria, entre otras funciones. UNIDAD CRT Esta unidad proporciona un conjunto de declaraciones que permiten el acceso al control de los modos de pantalla, de teclado, posicionamiento del cursor, entre otros. Algunos de sus procedimientos son: • clrscr: borra la pantalla. • keypressed: detecta la pulsación de una tecla. • Sound: hace sonar el altavoz interno • window: define una ventana de texto en la pantalla. UNIDAD DOS Esta unidad contiene declaraciones, constantes, tipos variables, procedimientos y funciones relacionadas con el sistema operativo DOS y la gestión de archivos. Algunos de sus procedimientos son: • gettime: proporciona la hora a través del reloj interno • getdate: proporciona fecha registrada en el ordenador. • Disksize: proporciona el tamaño de la unidad de almacenamiento señalada. UNIDAD PRINTER Esta unidad facilita la tarea del programador cuando utiliza la impresora como dispositivo de salida. Permite enviar la salida estándar de Pascal a la impresora utilizando para ello los procedimientos “write” y “writeln.” LA DECLARACIÓN USES Para declarar una unidad, o lo que es lo mismo, dejarla lista para ser utilizada, se utiliza la palabra reservada USES que debe ir inmediatamente después de la sentencia PROGRAM, después se escriben los nombres de las unidades que se utilizarán. Ing. N ahiby Castillo 20 Reglas sintácticas • El punto y coma ( ; ) y el punto ( . ) son DELIMITADORES en PASCAL. El punto y coma separa sentencias consecutivas. También se usa para terminar el encabezamiento del programa y las declaraciones de los datos. No es necesario escribir punto y coma después de la palabra BEGIN ni antes de la palabra END porque BEGIN y END no son sentencias. El punto indica el final del programa. • Las palabras BEGIN y END también son delimitadores, no son sentencias. Se usan para separar las partes funcionales de un programa. Con ellas se indica el principio y el final de la sección ejecutable. También sirven para delimitar una sentencia compuesta. Cada BEGIN debe estar asociado con un END, excepto en dos casos: la sentencia CASE y la declaración de RECORD. • El PASCAL permite formato libre en la escritura del texto que compone el programa. Se pueden colocar las sentencias en cualquier lugar de una línea, escribir una sentencia en más de una línea y colocar varias sentencias en una misma línea. Pero no se puede dividir un nombre y un número entre varias líneas o con un espacio en blanco. • Un programa puede contener comentarios en cualquier lugar. Los comentarios se delimitan encerrándolos entre llaves ( { } ). También es posible comenzar un comentario con " ( * " y acabarlo con " * ) ". • El comando readln: carga un valor en una variable y salta una línea. El comando writeln: muestra información por pantalla y salta una línea. Si no se escribe (ln) no saltará la línea • Para dejar una línea en blanco: writeln, o readln. • El readkey sirve para que la pantalla muestre el resultado del programa hasta que el usuario presione una tecla. Ing. N ahiby Castillo 21