Download bucles - WordPress.com
Document related concepts
Transcript
PROGRAMACION Lenguaje PASCAL 3ªEvaluación Lenguajes de Programación • Podemos definir lenguaje de programación como un conjunto de símbolos y reglas que sirven para realizar programas • Un programa es un conjunto de instrucciones, expresadas de manera algorítmica, que deben ser entendidas y ejecutadas por un ordenador • Los elementos básicos de los lenguajes de programación son: – Léxico: conjunto de símbolos y palabras clave. Cada lenguaje de programación tiene su propio léxico y en la mayoría de los casos, las órdenes son palabras en inglés cuyo significado literal recuerda la funcionalidad de la orden. Lenguajes de programación – Sintaxis: reglas que permiten construir oraciones con sentido, empleado el léxico específico del lenguaje de programación que utilicemos. – Semántica: significado de las oraciones formuladas con el léxico y la sintaxis. Organizando adecuadamente las órdenes y los datos mediante un lenguaje de programación, podemos realizar operaciones, evaluar valores o tomar decisiones según condiciones. Clasificación de los lenguajes de programación • Los lenguajes de programación los podemos clasificar según diversos criterios: – Por su cercanía al lenguaje natural: • Lenguajes Máquina: son lenguajes propios de cada microprocesador y usan dígitos binarios o hexadecimales. Los microprocesadores están diseñados para responder a un juego concreto y limitado de instrucciones. Por ejemplo, la siguiente instrucción: 1110 0101 0000 0000 Está escrita en código máquina y significa que se añada al valor de una variable el contenido de otra Clasificación de los lenguajes de programación • Lenguajes de bajo nivel. Lenguajes que emplean una simbología más legible que los lenguajes máquina, pero todavía alejada de la de nuestro lenguaje natural. El más importante es el ensamblador y también es diferente de cada microprocesador. Cada instrucción del lenguaje ensamblador tiene su correspondencia con instrucciones en el lenguaje máquina y consiste en una representación simbólica formada por un conjunto de 3 a 5 letras Por ejemplo las siguientes instrucciones: mov AX,A (asigna el valor de A al registro AX) add AX,B (añade al registro AX el valor de B) mov C,AX (asigna a la variable C el valor del registro AX) Clasificación de los lenguajes de programación • Lenguajes de alto nivel: lenguajes que emplean un léxico similar al humano (aunque generalmente en lengua inglesa) y una sintaxis coherente con la forma que tiene nuestro lenguaje natural de organizar las oraciones o las expresiones matemáticas. Cada instrucción en un lenguaje de alto nivel corresponde a varias instrucciones en lenguaje ensamblador o en lenguaje máquina. Casi todos los lenguajes actuales son de alto nivel. Algunos ejemplos son: Visual Basic, C, Java, Pascal,… Lenguajes estructurados • La programación estructurada consiste, básicamente, en la modularización del problema, esto es, en dividirlo en otros más pequeños, de manera que se mejore la gestión de errores y la eficiencia del programa cuando las tareas se reiteren dentro de él. • La práctica totalidad de los lenguajes de programación actuales son estructurados. Aunque muchos de ellos no nacieron con esa filosofía la han incluido. • Las características básicas de los lenguajes estructurados son: – Secuencia. Los procesos se desencadenan de manera ordenada y descendente. Generalmente, los programas los escribimos componiendo una o varias instrucciones en cada línea, ejecutándose cada instrucción después de la anterior y una línea tras otra Lenguajes estructurados – Selección. Las instrucciones se ejecutan según una serie de condiciones que dirigen el curso del programa por un camino u otro, provocando que algunas instrucciones se salten o que el programa acuda a otros módulos para realizar alguna tarea concreta. En el siguiente epígrafe veremos las estructuras selectivas. – Repetición o iteración. Mediante estructuras específicas, que estudiaremos más adelante, una serie de instrucciones se repiten hasta que se dan las condiciones de continuación Compiladores e intérpretes • Para poder emplear un lenguaje de programación, debemos instalar en nuestro ordenador una aplicación que nos permita redactar las instrucciones que componen un programa y que proporcione un mecanismo para su ejecución, de modo que podamos probarlo y, en su caso, modificarlo. • Una vez escribo el programa, hay dos maneras de ejecutarlo, interpretándolo o compilándolo – Intépretes. Son aplicaciones que traducen las instrucciones al lenguaje máquina, a medidas que son leídas. La ventaja es que podemos interactuar con el código, alterándolo y viendo de inmediato los resultados. Por otra parte, sólo podremos ejecutar el programa si el intérprete en cuestión está instalado en nuestro ordenador Compiladores e intérpretes – Compiladores. Son aplicaciones que traducen las instrucciones al lenguaje ensamblador o al lenguaje máquina, creando un archivo que puede ejecutarse en cualquier ordenador, aunque no tenga instalado el compilador. Las modificaciones resultan menos interactivas, puesto que cada alteración nos obliga a una nueva compilación • Actualmente, las aplicaciones sobre las que escribimos programas se comportan como editores e intérpretes, incluyendo la posibilidad de compilar el programa cuando consideremos que está concluido El proceso de la solución de problemas mediante lenguajes de programación 1. Planteamiento del problema 2. Redacción del enunciado en lenguaje científico 3. Programación algorítmica o pseudocódigo 4. Programación en el lenguaje elegido o codificación Variables • Las variables son nombres que representan valores y ocupan una posición concreta en la memoria RAM de nuestro ordenador. Se emplean para almacenar temporalmente los datos de entrada/salida, de modo que podamos incluirlos en el lenguaje simbólico de los procesos algorítmicos Variables • En el empleo de variables conviene observar algunas pautas: – Nombres de variables: Para nombrar las variables podemos emplear cualquier conjunto de caracteres alfanuméricos (excepto el espacio en blanco). Es bastante aconsejable que el nombre de las variables nos recuerde alguna característica de su contenido – Declaración de variables y sus tipos: La declaración de una variable consiste en indicar el tipo al que pertenece el dato que representa: numérico, cadena de caracteres, lógico, fecha,… Los tipos de variables dependen del lenguaje de programación que empleemos. Variables • Asignación de variables: Para que el programa asigne un valor a una variable, generalmente basta con que expresemos una igualdad. Un caso particular es la asignación recursiva; en ella, la variable adquiere un valor que depende del que tenía ella misma hasta ese momento por ejemplo x=x+1 Condiciones y operadores lógicos • Las condiciones son expresiones relacionales o lógicas empleadas en as instrucciones de los programas y que, al ser evaluadas, devuelven uno de los dos estados lógicos posibles: verdadero o falso (si o no, se cumple o no se cumple). • Los operadores relacionales están representados por los símbolos: =, <, >, <=, >= y <> Condiciones y operadores lógicos • Por ejemplo, comparando el valor de dos variables definidas en un programa (x,y), una condición podría ser: x>y. Cuando el programa analice la condición, obtendrá el valor verdadero si x es mayor que y, si no ocurre eso (x es menor o igual que y), obtendrá el valor falso. Condiciones y operadores lógicos • Los operadores lógicos sirven para establecer las relaciones entre varias expresiones de una condición, influyendo en el valor lógico que devuelva la condición al ser analizada por el programa. • Los principales operadores lógicos empleados en programación son los siguientes: – AND. Devuelve verdadero cuando se cumplen las dos expresiones o argumentos que relaciona (producto lógico) – OR. Devuelve verdadero cuando se cumple al menos una de las expresiones o argumentos que relaciona (suma lógica) – NOT. Devuelve< el valor lógico contrario. Condiciones y operadores lógicos • Por ejemplo, dadas las variables edad(edad de una persona, numérica) y sexo (sexo de una persona H-M) – La condición: edad>30 AND sexo=H, devuelve verdadero cuando se cumplan simultáneamente las expresiones a ambos lados del operador AND, esto es, hombres de más de 30 años. – La condición edad>16 OR sexo=M, devuelve verdadero cuando se cumpla una u otra condición de las relacionadas por el operador OR, esto es, mayores de 16 años o mujeres. – La condición NOT (edad=40), devuelve verdadero cuando la variable edad es diferente de 40. En este caso, observamos que también podríamos haberlo puesto sin emplear el operador NOT: (edad <> 40) Estructuras selectivas • Estructura selectiva SI… Si condicion entonces accion Fin si CONDICION SI ACCION FIN NO Estructuras selectivas • Estructura selectiva SI/NO… Si condicion entonces accion1 Si no accion2 Fin si CONDICION NO SI ACCION1 FIN ACCION2 Estructuras selectivas • Ejemplo1: Diseñemos un programa o procedimiento para que, dado un número natural, determine si es par o impar. Leer n //Lee un valor desde el teclado y lo asigna a la variable n Si parteentera(n/2)=n/2 entonces //si n es par, la variable s s= “Par” almacena el valor de texto “par” Si no s=“Impar” Fin Si Escribir s //marca el final de la selección //muestra el valor de la variable s Función parte entera Bucles • Los bucles son estructuras que se repiten mientras se cumple una determinada condición. En el seno del bucle pueden desarrollarse diversas acciones, incluso algunas que modifiquen el estado de la condición Bucles • Bucle por contador: Este tipo de bucles son estructuras en las que el valor de una variable auxiliar (contador) condiciona la ejecución del bucle. El contador se incrementa al final de cada bucle según un valor que hayamos definido (generalmente, por defecto es 1) Bucles Para x= vi hasta x= vf incr= vp Acciones Fin para x Las instrucciones que componen las acciones se ejecutan mientras el valor del contador se encuentre entre vi(valor inicial) y vf (valor final. Tras las acciones y siempre dentro del bucle, se produce un incremento del valor del contador (vp) que establecerá el número de veces que se realizará el bucle Bucles INICIALIZACION DEL CONTADOR X=vi CONDICION X<=VF SI ACCIONES NO FIN INCREMENTO X=X+vp Bucles(for) Ejemplo: Queremos diseñar un programa o procedimiento para que, dado un número natural, calcule su factorial (el producto de ese número por todos los números naturales menores que él, excluido el 0). Si el número fuera 4, debería calcular: 4*3*2*1=24 Leer n X=2, f=1 Para x=2 hasta x=n f=f*x Fin para x Escribir f Bucles(for) Vamos a ver cómo podemos crear bucles, es decir, partes del programa que se repitan un cierto número de veces. Según cómo queramos que se controle ese bucle, tenemos tres posibilidades, que vamos a comentar en primer lugar: • for..to: La orden se repite desde que una variable tiene un valor inicial hasta que alcanza otro valor final (un cierto NÚMERO de veces). • while..do: Repite una sentencia MIENTRAS que sea cierta la condición que indicamos • repeat..until: Repite un grupo de sentencias HASTA que se dé una condición La diferencia entre estos dos últimos es que "while" comprueba la condición antes de repetir las demás sentencias, por lo que puede que estas sentencias ni siquiera se lleguen a ejecutar, si la condición de entrada es falsa. En "repeat", la condición se comprueba al final, de modo que las sentencias intermedias se ejecutarán al menos una vez. Bucles(for) El formato de "for" es for variable := ValorInicial to ValorFinal do Sentencia; Se podría traducir por algo como "desde que la variable valga ValorInicial hasta que valga ValorFinal" (y en cada pasada, su valor aumentará en una unidad). • Como primer ejemplo, vamos a ver un pequeño programa que escriba los números del uno al diez: Bucles (ejemplo) Program For1; var contador: integer; begin for contador := 1 to 10 do writeln( contador ); end. Bucles(for) Los bucles "for" se pueden enlazar uno dentro de otro, de modo que podríamos escribier las tablas de multiplicar del 1 al 5, dando 5 pasos, cada uno de los cuales incluye otros 10, así: Ejemplo Program For2; var tabla, numero: integer; begin for tabla := 1 to 5 do for numero := 1 to 10 do writeln( tabla, ' por ', numero ,' es ', tabla * numero ); end. Bucles(for) Hasta ahora hemos visto sólo casos en los que después de "for" había un única sentencia. ¿Qué ocurre si queremos repetir más de una orden? Basta encerrarlas entre "begin" y "end" para convertirlas en una sentencia compuesta, como hemos hecho hasta ahora.Así, vamos a mejorar el ejemplo anterior haciendo que deje una línea en blanco entre tabla y tabla: Bucles(for) Program For3; var tabla, numero: integer; begin for tabla := 1 to 5 do begin for numero := 1 to 10 do writeln( tabla, ' por ', numero ,' es ', tabla * numero ); writeln; (* Línea en blanco *) end; end. Bucles (while) Vimos como podíamos crear estructuras repetitivas con la orden "for", y comentamos que se podía hacer también con "while..do", comprobando una condición al principio, o con "repeat..until", comprobando la condición al final de cada repetición. Vamos a ver estas dos con más detalle: La sintaxis de "while" es • while condición do sentencia; • Que se podría traducir como "MIENTRAS se cumpla la condición HAZ sentencia". • Un ejemplo que nos diga la longitud de todas las frases que queramos es: Bucles (while) Program While1; var frase: string; begin writeln('Escribe frases, y deja una línea en blanco para salir'); write( '¿Primera frase?' ); readln( frase ); while frase <> '' do begin writeln( 'Su longitud es ', length(frase) ); { SURPAS 1.00 no reconoce "length" } write( '¿Siguiente frase?' ); readln( frase ) end end. Bucles (Repeat) • Repeat..untilPara "repeat..until", la sintaxis es • repeat sentencia; ... sentencia; sentencia until condición; • Es decir, REPITE un grupo de sentencias HASTA que la condición sea cierta. Ojo con eso: es un grupo de sentencias, no sólo una, como ocurría en "while", de modo que ahora no necesitaremos "begin" y "end" para crear sentencias compuestas. • El conjunto de sentencias se ejecutará al menos una vez, porque la comprobación se realiza al final. • Como último detalle, de menor importancia, no hace falta terminar con punto y coma la sentencia que va justo antes de "until", al igual que ocurre con "end". Bucles (Repeat) program ClaveDeAcceso; var ClaveCorrecta, Intento: String[30]; begin ClaveCorrecta := 'PaskalForever'; repeat WriteLn( 'Introduce la clave de acceso...' ); ReadLn( Intento ) until Intento = ClaveCorrecta end.