Download bucles - WordPress.com

Document related concepts

Little man computer wikipedia , lookup

Scheme wikipedia , lookup

APL wikipedia , lookup

Maple (software) wikipedia , lookup

Evaluación de cortocircuito wikipedia , lookup

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.