Módulo 5: Lenguaje Pascal Tecnologías en la Educación Matemática Dr. Carlos Gonzalía DCIC - UNS Técnologías en la educación matemática – Dr. Carlos Gonzalía – 1 de Copyright ● ● ● Copyright © 2012: M. Capobianco, C. Gonzalía Se asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera. Una copia de esta licencia está siempre disponible en la página http://www.gnu.org/copyleft/fdl.html. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 2 Cómo seguimos PROBLEMA ● Resolveremos problemas con soluciones objetivas. SOLUCIÓN ● Expresaremos la solución como un algoritmo. ALGORITMO ● PROGRAMA Codificaremos la solución en el lenguaje Pascal. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 3 Aprender un lenguaje nuevo ● ● ¿Qué significa aprender un nuevo lenguaje? Pensemos en aprender a hablar italiano, ¿Qué tendremos que aprender? – nuevas palabras – nuevas formas de conectar estas palabras – qué significa cada expresión en el contexto de este lenguaje – qué estilos comunicativos se usan Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 4 Tipos de lenguajes Lenguajes Naturales castellano inglés Artificiales código morse notación musical lenguajes de programación Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 5 Aprender un lenguaje de programación Para aprender un lenguaje de programación nuevo necesitamos conocer: – Alfabeto: qué letras puedo usar – Vocabulario: qué palabras son válidas – Sintaxis: cómo escribir sentencias del lenguaje – Semántica: qué significan las sentencias del lenguaje – Pragmática: el estilo de uso de las sentencias Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 6 El lenguaje Pascal Pascal fue definido por Niklaus Wirth en 1972. ● Alfabeto: letras y símbolos del código ASCII ● Vocabulario: palabras reservadas e identificadores ● Sintaxis: cómo escribir las sentencias ● Semántica: qué significan las sentencias ● Pragmática: el uso de los programas Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 7 Alfabeto ● ● ● El alfabeto es el código ASCII. American Standard Code for Information Interchange (código estándar americano para intercambio de información). Está formado por 256 símbolos. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 8 Código ASCII Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 9 Código ASCII Extendido Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 10 Vocabulario ● ● ● ● Los identificadores son nombres para elementos del programa (por ejemplo datos) creados por el programador. Deben comenzar con una letra, seguida de más letras o números (o el signo de “subrayado”). Ejemplos: num, cantidad, es_nro_par, SueldoNeto, Valor2 No afecta si usamos mayúsculas o minúsculas. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 11 Palabras reservadas ● ● ● Son términos que ya tienen un significado en el lenguaje Pascal y sólo pueden ser usadas por el programador con ese significado. Ejemplos: PROGRAM, IF, ELSE, BEGIN Lista completa en Appendix B del Free Pascal User’s Guide, en el sitio: http://www.freepascal.org/docs-html/user/user.html Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 12 Ejercicio ● ● Escribir 5 nombres de identificadores válidos. Escribir 5 nombres de identificadores no válidos y decir en cada caso porque razón no son válidos. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 13 La forma que debe tener un programa PROGRAM <nombre del programa> ; CONST < Declarar los datos constantes a usar por el programa > VAR < Declarar los datos variables a usar por el programa > < Declarar algoritmos auxiliares (subprogramas) a usar por el programa > BEGIN < acciones que ejecutará el programa > END. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 14 Datos en Pascal ● ● ● Los datos tienen un nombre y un valor asociado (como en los algoritmos) El valor puede modificarse durante la ejecución del programa Los datos se llaman – variables: pueden recibir diferentes valores durante la ejecución del programa – constantes: cuyo valor nunca cambia Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 15 Tipos de Datos ● ● El tipo define el conjunto de valores que puede tomar una variable. Existen algunos tipos predefinidos: – – – – Integer: es un subconjunto de los números enteros. Real: es un subconjunto de los números reales. Boolean: es el conjunto {true, false} (valores lógicos). Char: es el conjunto de caracteres del código ASCII. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 16 Declaración Declaración de variables: se escribe la palabra reservada VAR, y luego nombre y tipo de dato de cada variable. VAR contador: INTEGER; raiz1,raiz2,raiz3: REAL; letra: CHAR; Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 17 Tipo Integer Operador operación Operandos Resultado + * div mod suma resta producto división entera resto Integer Integer Integer Integer Integer Integer Integer Integer Integer Integer Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 18 Tipo Real Corresponde a un subconjunto de los reales Operador operación Operandos Resultado + * / suma resta producto div. real Real Real Real Real Real Real Real Real Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 19 Tipo Boolean ● ● Este tipo de dato tiene únicamente dos valores asociados, true y false (correspondientes a “verdadero” y “falso”). Operadores: los operadores booleanos “y”, “o”, y “no” (vistos en la primer clase), se denominan en Pascal and, or y not. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 20 Tipo Char ● ● ● ● Este tipo de dato tiene asociados los distintos caracteres que componen el código ASCII. ¿Cómo se diferencia un dato cuyo nombre es A de la letra A? Para referenciar a un carácter como un valor de tipo CHAR, se utilizan las comillas simples. Ej.: ’a’, ’?’, ’+’, ’ ’, etc. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 21 Ejercicio ● ● ● Analizar la corrección de los siguientes identificadores en Pascal: ALPHA, A$3, 3F, r-4, Comisión. Para cada uno de los siguientes casos, definir dos constantes utilizando nombres significativos: precios, años, días, letras. Para cada uno de los datos definir variables de tipo adecuado para representarlos: un día del mes, cantidad de alumnos en un curso, indicar si encontré un nombre en una lista de personas, la raíz cuadrada de un número. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 22 Sintaxis: asignación ● En algoritmos: <nombre_del_dato> ← <expresión> Ejemplos: ● dia ← 31 suma ← suma + 5 En Pascal: <identificador_de_variable> := <expresión> Ejemplos: dia := 31 suma := suma + 5 Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 23 Lectura y escritura ● ● Veremos cómo hacer que nuestro programa se comunique con el usuario. Para esto Pascal provee primitivas para mostrar valores por pantalla y leer valores por teclado. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 24 Lectura y escritura ● ● ● ● WRITE: muestra valores en la pantalla. WRITELN: muestra valores en pantalla y baja de línea (LN por “line”). READ: lee valores que son ingresados por teclado. READLN: lee valores y espera por un FIN DE LINEA (LN). Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 25 Ejemplo de escritura write(’YO’); write(’TU’); write(’EL’); YOTUEL Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 26 Ejemplo de escritura writeln(’YO’); writeln(’TU’); writeln(’EL’); YO TU EL Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 27 Lectura en Pascal read(A); read(B); read(C); 123 Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 28 Lectura en Pascal readln(A); readln(B); readln(C); 1 2 3 Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 29 El lenguaje de los procesadores Cada procesador entiende un conjunto de instrucciones específicas, esto depende del fabricante (Intel, AMD, Sun, IBM, Motorola, etc.). 297D:0100 297D:0102 297D:0104 297D:0106 297D:0108 297D:010A 297D:010C 297D:010E MOV INT CMP JNZ MOV MOV INT INT AH,01 21 AL,0D 0100 AH,02 DL,AL 21 20 Muestra por pantalla lo que se teclea, hasta presionar Enter Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 30 Un poco de historia ● En la década del '50 los programadores debían conocer las instrucciones específicas de cada procesador. Programación de bajo nivel 8086 Motorola IBM Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 31 La programación en los '60 Lenguaje de Programación L Traductor de L a 8086 8086 Traductor de L a Motorola Motorola Traductor de L a IBM IBM Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 32 La programación de alto nivel Algol Cobol ... Fortran Compilación 8086 Motorola IBM Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 33 Programando en Pascal ● ● ¿Tengo que aprender el lenguaje de cada procesador? NO. Hay lenguajes de programación de “alto Programa en Pascal nivel” (como Pascal) que permiten escribir un programa que puede ser ejecutado por cualquier computadora. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 34 Programando en Pascal ● ● Para esto se necesita una traducción del lenguaje de “alto nivel” al lenguaje de la máquina específica. Dicha traducción la realiza un “compilador”, si recibe la opción correspondiente. Compilador Programa en Pascal Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 35 Edición, compilación y ejecución Edición Compilación Programa fuente escrito en Pascal Ejecución Programa ejecutable por la computadora Un entorno hace posible editar, compilar y ejecutar programas. Nosotros usaremos a Lazarus. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 36 Estructura de un programa PROGRAM <nombre del programa> ; CONST < Declarar los datos constantes a usar por el programa > VAR < Declarar los datos variables a usar por el programa > < Declarar algoritmos auxiliares (subprogramas) a usar por el programa > BEGIN < acciones que ejecutará el programa > END. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 37 Ejemplo PROGRAM HolaMundo; VAR nro, cuadrado: integer; BEGIN writeln('Este es mi primer programa en Pascal'); write('Ingrese un número: '); readln(nro); cuadrado := nro*nro; write('El cuadrado del número ingresado es: '); writeln(cuadrado); END. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 38 Ejemplo PROGRAM Circulo; {cálculo de perímetro} CONST Pi = 3.141592; VAR radio: INTEGER; circunferencia: REAL; BEGIN write(’Ingrese el radio: ’); {ingresa radio por teclado} readln(radio); circunferencia := 2 * Pi * Radio; {hallo circunferencia} writeln(’Dado el radio: ’,radio,’ la circunferencia es: ’, circunferencia); END. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 39 Ejercicios ● ● Escribir un programa en Pascal para calcular el promedio de 4 números leídos por teclado. Escribir un programa en Pascal para calcular el área de un rectángulo, leyendo por teclado la base y la altura del mismo. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 40 Ejercicios ● ● Determinar la validez de las siguientes declaraciones: Const Base = 173.5; Error = 0.1E-5; Parar = ’&; Blanco = ’ ’; ● Var i,j : Real; k : Boolean; m : Integer; ● Var Cant = 100; Suma: 45; Diferencia: Integer; Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 41 Expresiones en Pascal ● ● ● Ahora veremos cómo escribir expresiones más complejas en Pascal. Mencionaremos algunas primitivas provistas por Pascal que pueden usarse en las expresiones. Diferentes tipos tienen asociado un conjunto diferente de primitivas para operar con ellos. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 42 Operadores ● ● ● El tipo boolean tiene asociados los operadores and, or y not que corresponden a los operadores lógicos y, o y no que vimos en la primera clase. Los tipos integer y real tienen asociados los operadores aritméticos de suma (+), resta (-), multiplicación (*) y división (/). El tipo integer tiene además a div y mod. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 43 Primitivas del tipo Integer ● ● La constante MAXINT representa el máximo entero que puede usarse. Algunas funciones predefinidas: – Succ(N): devuelve el sucesor de N – Pred(N): devuelve el predecesor de N – SQR(N): devuelve N2 Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 44 Ejemplos ● SQR(3) devuelve 9 ● SQR(-4) devuelve 16 ● Pred(2) devuelve 1 ● Succ(3) devuelve 4 ● Pred(-4) devuelve -5 ● ¿Se puede aplicar la función succ a una variable de tipo real? ¿Por qué? Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 45 Ejercicios ● ● ● Escribir un programa en Pascal para calcular el cuadrado de un número dado, usando la función SQR. Escribir un programa en Pascal que calcule el valor de la función f(x)=x2+x4 para un x dado como entrada. Escribir un programa en Pascal que dado un número calcule su predecesor y su sucesor usando las funciones aprendidas. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 46 Primitivas del tipo real ● ● ● ● Función SIN: dado un valor de un ángulo (en radianes), devuelve su seno. Análogamente COS, TAN. Ejemplo: SIN(0) = 0, COS(0) = 1 Función SQRT: raíz cuadrada. Ej.: SQRT(4) = 2.0 Función ROUND: dado un valor real, devuelve el entero más cercano. Ejemplo: ROUND(0.9) = 1 Función TRUNC: dado un valor real, devuelve el entero que resulta de eliminar la parte decimal. Ejemplo: TRUNC (0.9) = 0 Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 47 Ejercicios ● ● ● Escribir un programa en Pascal para calcular la raíz cuadrada de un número dado usando la función SQRT. Escribir un programa en Pascal que calcule el seno y el coseno de un ángulo dado como entrada. Escribir un programa en Pascal para que dado un número real calcule el entero más cercano a éste. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 48 Primitivas del tipo char ● ● ● ● Función CHR: permite obtener un carácter cualquiera a partir de su código ASCII. Ejemplo: chr(65) es ´A´, chr(33) es ´!´ Función ORD: dado un carácter cualquiera, devuelve su código ASCII. Ejemplo: ord(´A´) = 65, ord(´!´) = 33 También funcionan pred y succ. Se pueden comparar caracteres con los operadores relacionales. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 49 Ejemplo PROGRAM CaracterSiguiente; VAR caracter, siguiente: char; BEGIN write('Ingrese un carácter: '); readln(caracter); siguiente := succ(caracter); write('El próximo carácter es: '); writeln(siguiente); END. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 50 Ejercicio Escribir un programa en Pascal que permita obtener la mayúscula de una letra dada como entrada. Tecnologías en la educación matemática – Dr. Carlos Gonzalía – 51