INSTITUTO TECNOLÓGICO DE DURANGO PROGRAMACIÓN PARA INGENIERÍA UNIDAD III.- FUNDAMENTOS DEL LENGUAJE. OBJETIVO DE LA UNIDAD.- Que el alumno conozca e identifique: la estructura general de un programa, las palabras reservadas, los identificadores, los diferentes tipos de datos, constantes y variables (sintaxis), operadores y operandos, así como, la evaluación de las expresiones aritmético-lógicas. También diseñará, editará, compilará y ejecutará programas básicos. 3.1 Entorno del lenguaje.Programación Lineal.- Los lenguajes de programación lineal (BASIC, COBOL Y FORTRAN) no tenían facilidad para reutilizar el código existente de programas. De hecho se duplicaban segmentos de software cada vez más en muchos programas. Los programas se ejecutaban en secuencias lógicas, heciendo la lógica difícil de comprender. El control de programas era difícil y se producían continuos saltos a lo largo del referido programa. Aún más, los lenguajes lineales no tenían capacidad de controlar la visibilidad de los elementos llamados datos. Programación Modular.- El soporte más elemental de la programación Modular llegó con la aparición de la subrutina. Una subrutina ha creado una secuencia de instrucciones a las que se les da un nombre independiente; una vez que se ha definido, la subrutina se puede ejecutar simplemente incluyendo el nombre del programa siempre que se requiera. Las subrutinas proporcionan una división natural de las tareas; diferentes programas las utilizan. Aunque las subrutinas proporcionan el mecanismo básico de la programación Modular, se necesita mucha disciplina para crear software bien estructurado. Sin esta disciplina, es fácil escribir programas compilados y tortuosos difíciles de modificar y comprender, así como imposible de mantener. Esta ha sido la panorámica durante muchos años en el desarrollo del software. Programación Estructurada.- Un concepto importante en campo de la programación Estructurada: Abstracción ya que la abstracción se puede definir como la capacidad de examinar algo sin preocuparse de los detalles internos. En un programa estructurado, es suficiente conocer que un procedimiento sea fiable, para que se pueda utilizar sin tener que conocer cómo funciona su interior. Esto se conoce como una abstracción funcional y es el núcleo de la programación estructurada. Hoy casi todos los lenguajes de programación tienen construcciones que facilitan la programación estructurada. 3.2 Estructura general de un programa (encabezado, declaraciones, cuerpo principal). El programa será la manera como planearemos a la computadora nuestro algoritmo para resolver un problema. Un programa es un conjunto de instrucciones que se ejecutan por la computadora y este programa consta de 3 partes principales. Encabezado. Declaración de variables, constantes y tipos (funciones y procedimientos si los hay). Cuerpo del programa principal. 1 EJEMPLO: Program Integer_Variable_Demo; VAR Count : integer; X, Y : integer; BEGÍN X:= 12; Y:= 13; Count := X + Y; Writeln (´El valor de X es ´, X:4); Writeln (´El valor de Y es ´, Y:5); Writeln (´Y la suma es ´, Count:6); END. Resultados de la ejecución: El valor de X es 12 El valor de Y es 13 Y la suma es 25 En este caso, el encabezado del programa es: Program Integer_Variable_Demo; Este nos permite identificar internamente el programa, y puede ser omitido sin efectos secundarios en la ejecución del programa. La declaración de variables: VAR Count : integer; X, Y : integer; En esta parte, por medio del declarativo var estamos declarando 3 variables, Count, X e Y, las tres son del tipo entero (integer) esto es, sólo podrán tomar valores enteros que vayan de –32768 hasta 32767. La regla para declarar variables es: Después del declarativo var, se forma una lista de variables separadas por comas, y al terminar la lista se incluyen dos puntos (:) para luego indicar el tipo al que pertenecerán. Es posible tener más de un renglón de declaraciones de variables y cada uno de estos, como en casi todos los casos en pascal deben terminar con punto y coma (;). La declaración de otro tipo de variables se hace como lo hemos 2 indicado, o sea, una lista de variables separadas por comas (,) seguidas por dos puntos (:) y el tipo de variable que serán para terminar con punto y coma (;). El programa principal en este caso es: BEGÍN X:= 12; Y:= 13; Count := X + Y; Writeln (´El valor de X es ´, X:4); Writeln (´El valor de Y es ´, Y:5); Writeln (´Y la suma es ´, Count:6); END. El programa principal es donde indicaremos que operaciones ejecutar, y se delimita por los declarativos Begín y End, este terminado con un punto (.). En la primera instrucción (X:=12) indicamos que a la variable X se le asigne el valor 12, por medio del operador de asignación (:=) dos puntos igual, en la tercera instrucción se efectúa una suma y el resultado se almacena en la variable Count (Count:=X+Y). Aparece en este primer programa la instrucción Writeln, por medio de esta es posible desplegar en el monitor de la computadora valores de variables o letreros, lo que se desee desplegar se pondrá en una lista separada por comas, y si es un letrero se deberá poner entre apostrofes. 3.3 Palabras reservadas e identificadores, variables y constantes.- Las palabras reservadas o palabras clave son aquellas que tienen un significado fijo y predeterminado para el compilador (de Pascal) y que no puede ser cambiado por el programador. Las palabras reservadas de Pascal estándar son las siguientes: And, end, nil, set, array, file, not, then, begín, for, of, to, case, function, or, type, const, goto, packed, until, div, if, procedure, var, do, in program, while, downto, label, record, with, else, mod, repeat. Las palabras reservadas de Turbo Pascal (5.5, 6.0 y 7.0) son las siguientes: And, file, not, then, array, for, object, to, asm, function, of, type, begin, goto, or, unit, case, if, packed, until, const, implementation, procedure, uses, constructor, in, program, var, div, inherited (7.0), record, while, do, inline, repeat, with, downto, interface, set, xor, else, label shl, end, mod, shr, nil, string. Los identificadores estándar representan constantes, variables, tipos de datos, procedimientos, funciones, etc. Se diferencian de las palabras reservadas en que pueden ser redefinidos por el usuario aunque esta práctica no es recomendable, para esto se tienen los identificadores definidos (diseñados) por el usuario. 3.4 Representación de datos básicos y 3.5 Declaración de variables y constantes.- Tipos de datos.- Al analizar un problema, determinamos que existen varios datos, y no damos el mismo trato a todos ellos, por ejemplo no podemos restar dos nombres de personas, sin embargo si podemos hacerlo con la edad de estas. 3 El tipo al que corresponde un dato, determina el rango de valores que se le pueden asignar y las operaciones que se pueden hacer con ellos. Existen en los lenguajes de programación diferentes tipos de datos predeterminados y particularmente en Pascal los datos se dividen en: Numéricos Alfanuméricos Boléanos Datos numéricos.- Los datos numéricos pueden tomar valores numéricos y es posible hacer operaciones matemáticas con ellos, sin embargo para el lenguaje de programación Pascal, es necesario especificar algunas características adicionales en los tipos de datos numéricos, y específicamente para Turbo Pascal, los tipos de datos numéricos se dividen en: Integer, Byte, Real, Shorting, Word, Longint, Single, Double, Extended. Ejemplo de enteros: 34 567 987 Ejemplo de reales: 56.89 987.6 1234.0 Enteros: rango de –32768 a 32767 ocupa 2 bytes en memoria. Reales: rango de 10 a la –38 hasta 10 a la 38 ocupa 6 bytes en memoria. Datos alfanuméricos.- Permiten representar nombres, direcciones, características, etc. No es posible hacer operaciones matemáticas con ellos. Deben representarse siempre entre comillas. Por ejemplo: ´Instituto Tecnológico de Durango´ ´x25-Z2´ ´91040824´ Datos Boléanos.- Permiten representar respuestas simples, producto de la comparación entre dos datos de tipo numérico o alfanumérico. Sólo permite dos tipos de respuesta (cierto o falso). Por ejemplo: 13 = (14-1) 15 < 17 ´tu´ = ´Tu´ ´Hola´=´Lola´ Cada uno de los datos identificados en el análisis del problema es de cierto tipo, pero es necesario que el valor de ese dato pueda ser almacenado, para consultarlo y utilizar su valor actual o para cambiar su valor en algún momento. En el problema de venta de camisas, el precio se establece de acuerdo al número de camisas compradas, entonces para saber a que precio venderemos debemos consultar el valor que tiene el dato de camisas compradas, y entonces se determina el precio de venta. Esto nos lleva a considerar como es necesario tener un lugar donde poner el valor actual de un dato, y en una computadora, ese lugar sólo puede estar en la memoria principal. La memoria tiene espacios consecutivos y a cada uno de ellos corresponde una dirección, digamos de 0 hasta la cantidad de memoria disponible, pero para un programador el tratar con las direcciones se convierte en una tarea difícil de llevar, por lo que se auxilia del uso de identificadores (que para este fin se conocen y llamaremos variables(operandos)). Operadores y operandos.- (operandos= variables y constantes) Los operadores son elementos que relacionan de diversas formas los valores contenidos en una o más variables. Los resultados de esta relación puede ser numéricos o lógicos. Existen los siguientes tipos de operadores: Matemáticos.- Permiten hacer operaciones matemáticas y el resultado de esta operación es siempre numérico y puede asignarse a una variable. Son los siguientes: + (suma), - (resta), * (multiplicación), / (división tradicional, regresa el cociente entero con decimales), MOD (división, regresa el residuo), DIV (división, regresa el cociente sin decimales), ( ) paréntesis, altera el orden de precedencia en la ejecución de operaciones. Relacionales.- Permiten comparar los valores entre si y obtener una respuesta de esta comparación (de tipo lógico), este resultado no puede asignarse a una variable. Son los siguientes: 4 < (menor), > (mayor), > (mayor o igual), > (menor o igual), = (igual), <> (diferente) Lógicos.- Permiten comparar dos valores lógicos, pueden provenir de una comparación relacional. Son los siguientes: AND, OR, NOT Tabla de verdad del AND Tabla de verdad del OR Tabla de verdad del NOT 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 0 1 1 0 0 0 0 0 0 En el caso del operador lógico AND es necesario que se cumplan las dos condiciones para que la respuesta (salida sea verdadera), en el caso del operador lógico OR con cualquiera de las dos condiciones que se cumpla se obtendrá la salida verdadera y en el caso del operador lógico NOT significa que la salida es lo contrario de lo que entró. Ejemplos: (a>b) and (c>a) (a>b) or (c = d) not (b = c) Operandos.- Son los elementos que se relacionan (variables o constantes). Constante.- Dato numérico o alfanumérico que permanece invariable durante la ejecución de un programa. También ocupa un espacio en la memoria y se almacena temporalmente. Una constante, por tanto, es un identificador con un valor fijo a lo largo del programa. Las constantes pueden ser de cinco tipos diferentes dependiendo del tipo de dato que representen (entero, reales, boléanos, de caracteres y cadenas de caracteres). Las constantes sirven para hacer programas más generales y para ganar rapidez, claridad y legibilidad. Siempre es mejor utilizar la constante PI que el número 3.1416, ya que así el programa es más fácil de leer. Las constantes no se pueden modificar a lo largo del programa, ya que si un de ellas cambiase, ya no sería constante, es por esto que estos datos pueden pasarse a variables para poder hacer un mejor uso de ellos en el programa, dependiendo del enunciado. SINTAXIS CONST (identificador) = constante (valor); (identificador) = constante (valor); DIAGRAMA CONST identificador = ; constante ; EJEMPLO: CONST Alfa = 5; PI = 3.1416; BETA = - Alfa; 5 B = TRUE; MENSAJE = „EL VALOR DE PIES:‟; Variable.- Las variables son los datos que cambian o evolucionan a lo largo de un programa. Las variables son los recipientes de los cuales dispone el programador para almacenar la información en la memoria de la computadora. Las variables pueden estar vacías, y en ese caso están indefinidas. Cuando se coloca un valor en una variable, permanece en ella hasta que es sustituido por otro, o bien hasta que la variable sea borrada por el programador. Una variable recién creada tiene un valor indefinido y es misión del programador colocar o modificar sus valores. Las variables se crean mediante una declaración y mediante una sentencia de asignación se varía su contenido, es por esto que las variables se pueden clasificar de acuerdo a su uso o tipo de asignación en: DE TRABAJO.- Variable que recibe el resultado de una operación matemática completa y que se usa normalmente dentro de un programa. Ejemplo: leer a,b,c; Sumar = a+b+c/3; Imprimir sumar; CONTADOR.- Forma que toma una variable y que sirve para llevar la cuenta de las operaciones o procesos realizados con incrementos constantes. Generalmente es de uno en uno. Ejemplo: A = 0; Leer r,t; C = r + t; A = A +1; Si a < 10 entonces ir al paso 2 Imprimir c, a; ACUMULADOR.- Sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo: c = 0, a = 0; Leer b; A = a + b; C = c +1; Si c < 10 entonces ir al paso 2 Imprimir a; INDICADOR.- (bandera).- Recibe un determinado valor cuando se cumple cierta condición o sucede cierto evento dentro de un programa. Se le conoce también como bandera o centinela. Ejemplo: leer a Si a < 15 entonces b = 1 sino b = 2; Imprimir b; ASIGNACIÓN SIMPLE.- La variable recibe un valor determinado en forma directa, no depende de ninguna operación matemática. Cada variable debe tener un nombre y la formulación de este nombre debe seguir estas reglas que son las siguientes: (reglas para los identificadores estandar) Deberá empezar con una letra No se puede utilizar una palabra reservada (se consultarán en un texto de Pascal) 6 No deberán tener caracteres especiales excepto subrayado (_) No debe tener espacios en blanco Puede tener una longitud de hasta 127 caracteres, siendo significativos sólo los 63 primeros. En Pascal no existe diferencia entre mayúsculas y minúsculas Puede utilizar letras A..Z, a..z, dígitos 0..9 Para crear los identificadores nemónicos se toman en cuenta las reglas anteriores y se agregan las siguientes: Se formula una frase Se selecciona de la frase las dos palabras más significativas Se toman las cuatro primeras letras de cada palabra y si la quinta letra es vocal se considera también. Se puede separar por el guión de subrayado Ejemplo: Sueldo por quincena Se toma: sueldo quincena Se formula: suel quin Quedaría: suelquin o (frase) suel_quin NOTA: El programador es quien elige el nombre del identificador y si se escoge adecuadamente según las reglas anteriores, puede ser de gran ayuda para la escritura y comprensión del programa. Las constantes deben definirse al empezar un programa y las variables deben declararse del mismo modo al iniciar el programa. SINTAXIS DE VARIABLES: VAR (identificador), ....(identificador): tipo; (identificador), ... (identificador): tipo; DIAGRAMA VAR identificador , ; : tipo ; EJEMPLO:VAR Maxi, mini : real; Verdad, seguir : bolean; Recorrer : integer; NOTA: En el momento que se declara una variable, la computadora asigna a dicha variable un lugar en su memoria, el orden es diferente, pero no se puede declarar una misma variable más de una vez en el mismo programa principal, porque no puede tener asignadas dos posiciones de memoria diferentes. Para poder 7 utilizar las variables hay que asignarles un valor mediante una instrucción de asignación, que generalmente se suele llamar sentencia de asignación. 3.6 Expresiones aritmético/lógicas y Proposición de asignación.- Proposición de asignación puede llamarse también sentencia de asignación, su símbolo es := la cual permite almacenar en una variable el contenido de otra variable o constante o el resultado de una expresión siempre que sean del mismo tipo. El operador de asignación es := y el formato es: Ejemplo: edad := 45 N := n +1 variable1 := valor, variable2 ó expresión asigna el valor de 45 a la variable edad el valor de la variable N se incrementa en 1 Las sentencias de asignación tienen dos misiones; por un lado halla el resultado o valor de la expresión que está a la derecha del signo :=, y por otro lado almacena este valor en la variable representada por el identificador de la izquierda (variable). Una expresión no es más que una “regla” para “calcular” un valor, consiste en uno o más operandos combinados mediante algún operador. Todas las expresiones se evalúan siguiendo ciertas reglas de precedencia (jerarquía) de los operadores. REGLAS PARA DESARROLLAR (EJECUTAR/EVALUAR) UNA EXPRESIÓN A).- Se ejecutan las expresiones de acuerdo a la precedencia de los operadores. Precedencia Operadores 4 ( ), NOT 3 *, /, DIV, MOD, AND 2 +, -, OR 1 <, >, >, <, =, <> B).- Se va a evaluar de izquierda a derecha tomando en cuenta la regla a). C).- Siempre se desarrolla de acuerdo a los paréntesis, el más interno se desarrolla primero, y se siguen tomando en cuenta las reglas anteriores. FUNCIONES NUMÉRICAS, TRIGONOMÉTRICAS (BIBLIOTECA).- Turbo Pascal contiene funciones estándar (incorporadas o predefinidas) en la unidad System. Estas funciones están declaradas en dicha unidad, en consecuencia no necesitamos declararlas ni ninguna sentencia uses cuando se desee utilizar alguna de ellas. Funciones aritméticas: Abs ArcTan Cos Exp Frac Int Pi Sin Sqr Sqrt Devuelve el valor (positivo) absoluto de su argumento Arco tangente expresado en radianes Coseno del argumento en radianes Potencia exponencial del argumento (e ) Parte decimal de un número real Parte entera del argumento Valor de Pi (3.141592...........) Seno del argumento Cuadrado del argumento Raíz cuadrada del argumento 8 Ejemplos: Z:= abs(x) *2; f:=sqr(3.45); r:=sqrt(1.2345) etc. Funciones de transferencia: Chr Devuelve el carácter correspondiente al código ASCII Ord Número ordinal de un tipo ordinal Round Redondea un valor real a entero largo Trunc Trunca un valor de tipo real a entero Ejemplos: Round(5.449) devuelve 5 Trunc(-3.14) devuelve -3 Trunc(6.5) devuelve 6 9