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 SOLUCIÓN ALGORITMO Resolveremos problemas con soluciones objetivas. Expresaremos la solución como un 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 Artificiales castellano inglés 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 + suma Integer Integer - resta Integer Integer * producto Integer Integer div división Integer Integer entera mod resto 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 Real Real - resta Real Real * producto Real Real / div. 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); 1 2 3 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 MOV AH,01 297D:0102 INT 21 297D:0104 CMP AL,0D 297D:0106 JNZ 0100 297D:0108 MOV AH,02 297D:010A MOV DL,AL 297D:010C INT 21 297D:010E INT 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 Traductor de L a Motorola Traductor de L a IBM 8086 Motorola 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 nivel (como Pascal) que permiten escribir un programa que puede ser ejecutado por cualquier computadora. Programa en Pascal 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 Ejecución Programa fuente escrito en Pascal 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 Var i,j : Real; k : Boolean; m : Integer; 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 N 2 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)=x 2 +x 4 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