Diapositiva 1 - Informática y Sistemas de Computación

Download Report

Transcript Diapositiva 1 - Informática y Sistemas de Computación

Unidad 4.- Construcción del comportamiento de un objeto.
4.1 Diseño de métodos (funciones).
4.1.1 Técnicas de formulación de algoritmos.
4.1.2 Tipos de algoritmos.
4.1.2.1 Algoritmos determinísticos.
4.1.2.2 Algoritmos aproximados.
4.1.2.3 Algoritmos heurísticos.
4.1.2.4 Algoritmos voraces.
4.1.3 Algoritmos probabilísticos.
4.1.4 Identificación del problema.
4.1.5 Planteamiento del problema.
4.1.6 Análisis del problema (Alternativas de
solución).
4.1.7 Diseño de la solución.
4.1.8 Pruebas y depuración.
4.1.9 Documentación.
4.2 Operadores.
4.2.1 Aritméticos.
4.2.2 Lógicos.
4.2.3 Jerarquía de operadores.
4.3 Expresiones.
4.4 Estructuras de control.
4.4.1 Selectivas.
4.4.2 Iterativas.
Operadores Aritméticos
Operador
Significado
Tipos de operandos
Tipos de resultado
^
Potencia
Entero o real
Entero o real
+
Suma
Entero o real
Entero o real
-
Resta
Entero o real
Entero o real
*
Multiplicación
Entero o real
Entero o real
/
División
Real
Real
DIV
División entera
Entero
Entero
resto
Resto
Entero
Entero
Operadores aritméticos en java
● Realizan las operaciones clásicas de la aritmética:
Operadores aritméticos básicos en java
Incremento y decremento
● (++) y (--): aumentan o decrementan el valor de la variable en uno
● Existen dos variantes:
―Preincremento (Predecremento): ++a (--a): primero se incrementa (decrementa)
y luego se produce el valor.
―Postincremento (Postdecremento): a++ (a--): primero se produce el valor y
luego se incrementa (decrementa).
Operadores Relacionales
Operador
Significado
<
menor que
>
mayor que
=
igual que
<=
menor o igual que
>=
mayor o igual que
<>
distinto de
Operadores relacionales en java
● El resultado de estas operaciones es booleano.
― true: si la relación es cierta
― false: si la relación es falsa
Operadores Lógicos
A
F
V
Operador
Expresión lógica
Significado
no (not)
no p (not p)
negación de p
y (and)
p y q (p and q)
conjunción de p y q
o (or)
p o q (p or q)
disyunción de p y q
Not A
V
F
A
F
F
V
B
F
V
F
AyB
F
F
F
A
F
F
V
B
F
V
F
AoB
F
V
V
V
V
V
V
V
V
Ejemplo: Operadores lógicos
● Expresión lógica de la implicación: a => b
● La tabla de verdad de la implicación lógica es:
● La expresión lógica equivalente sería: ! (a && !b)
Operadores lógicos booleanos
● Tanto los operandos como el resultado son booleanos
Otros Operadores
Operador
Significado
+
Concatenación
()
Paréntesis
Operador “?:”
● Operador ternario
expresión1 ? expresión2 : expresión3
―Se evalúa expresión2 si expresión1 es true, y expresión3 en caso contrario
● Similar a una sentencia condicional if-then-else
● Ejemplo:
denom == 0 ? 0 : num/denom
Expresiones aritmético-lógicas
● Mezcla de expresiones aritméticas, relacionales y lógicas. Por ejemplo:
3+7 < 4*3 || 9 < 3
● Ejemplo:
―Se debe hacer la declaración de la renta si se tienen al menos 18 años y
menos de 66, o bien si, teniendo más de 66, los ingresos anuales son más de
20000 €
Jerarquía de operadores
● Define cómo se evalúa una expresión cuando hay varios operadores presentes
● Por ejemplo:
a=x+y–2/2+z
● es distinto de
a = x + (y – 2) / (2 + z)
Orden de prioridad de los operadores
1.-
paréntesis (las expresiones más internas se evalúan primero)
2.-
signo
3.-
operador exponencial (potencias) ^
4.-
operadores *, /
5.-
operadores DIV y resto
6.-
operadores +, -
7.-
concatenación
8.9.-
relacionales
negación
10.-
conjunción
11.-
disyunción
Combinaciones de constantes, variables, símbolos de operaciones, paréntesis y
nombres de funciones especiales.
expresiones aritméticas »
fórmulas matemáticas
TIPO
RESULTADO
se construyen mediante operadores
numéricas
numérico
aritméticos
alfanuméricas
alfanumérico
alfanuméricos
booleanas
VERDADERO o FALSO
relacionales o lógicos
•
Ejercicio Resuelto.
Convierte en expresiones algorítmicas las siguientes expresiones algebraicas
a)
a2 + b2
b)
(a + b)2
c)
3
d)
f)
g)
h)
b + 34
3
b  34
x y
w
u
b
a*a+b*b ó
a^2 + b^2
(a + b) * (a+b)
b^(1/3) + 34
(b + 34)^(1/3)
(x+y) / (u + w / b)
y w
x 
u b
x + y/u + w/b
x
( z  w)
y
x/y * (z+w)
•Ejercicio.
Convierte en expresiones algorítmicas las siguientes expresiones
algebraicas:
•a)
a 3  b 1
•b)
x y  x
3
z
•c)
x y / z / 2 y / x z
•d)
x  y / z y4 3
¿Cuál es el resultado de las siguientes expresiones?
3+6*14=
8+7*3+4*6=
-4*7+2^3/4-5=
(33+3*4)/5=
2^2*3=
3+2*(18-4^2)=
16*6-3*2=
4/2*3/6+6/2/1/5^2/4*2=
3+3*2=
¿Cuál es el resultado de las siguientes expresiones?
3+6*14=
87
8+7*3+4*6=
53
-4*7+2^3/4-5=
-31
(33+3*4)/5=
9
2^2*3=
12
3+2*(18-4^2)=
7
16*6-3*2=
90
4/2*3/6+6/2/1/5^2/4*2= 1.06
3+3*2=
9
Evalúe las siguientes expresiones lógicas (booleanas)
a) 3>5 OR 8<=9
b) NOT (4*2>8 AND 7<2*3)
c) (2>=3 OR 5>1+3) AND NOT (6>=5)
Evalúe las siguientes expresiones lógicas (booleanas)
a) 3>5 OR 8<=9
b) NOT (4*2>8 AND 7<2*3)
c) (2>=3 OR 5>1+3) AND NOT (6>=5)
TRUE
TRUE
FALSE
Algoritmo
El término algoritmo no está exclusivamente relacionado con las matemáticas o
informática. En realidad, en la vida cotidiana empleamos algoritmos en multitud
de ocasiones para resolver diversos problemas. Ejemplos son el uso de una
lavadora (se siguen las instrucciones), para cocinar (se siguen los pasos de la
receta). También, existen ejemplos de índole matemática, como el algoritmo de
la división para calcular el cociente de dos números, el algoritmo de Euclides
para calcular el máximo común divisor de dos enteros positivos, o incluso el
método de Gauss para resolver sistemas de ecuaciones.
Definición
Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para
ejecutar una tarea o resolver un problema. De un modo más formal, un
algoritmo es una secuencia finita de operaciones realizables, no ambiguas, cuya
ejecución da una solución de un problema.
¿Qué es un algoritmo?
Webster: Cualquier método especial para resolver cierta clase de problemas.
Horowitz: Método preciso utilizable en una computadora para la solución de un
problema.
Conjunto finito de pasos utilizado por una computadora para resolver un
problema.
Medios de expresión de un algoritmo
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje
natural, pseudocódigo, diagramas de flujo y lenguajes de programación entre otros.
Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar
pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje
natural. Dichas expresiones son formas más estructuradas para representar
algoritmos; no obstante, se mantienen independientes de un lenguaje de
programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
Descripción de alto nivel. Se establece el problema, se selecciona un modelo
matemático y se explica el algoritmo de manera verbal, posiblemente con
ilustraciones y omitiendo detalles.
Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos
que encuentran la solución.
Implementación. Se muestra el algoritmo expresado en un lenguaje de
programación específico o algún objeto capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto,
un análisis de complejidad o ambos.
Diagrama de flujo
Los diagramas de flujo son descripciones
gráficas de algoritmos; usan símbolos
conectados con flechas para indicar la
secuencia de instrucciones y están regidos
por ISO.
Los diagramas de flujo son usados para
representar algoritmos pequeños, ya que
abarcan mucho espacio y su construcción es
laboriosa. Por su facilidad de lectura son
usados como introducción a los algoritmos,
descripción de un lenguaje y descripción de
procesos a personas ajenas a la computación.
Diagrama de flujo que expresa un
algoritmo para realizar la suma de dos
cantidades leídas del teclado
Pseudocódigo
Pseudocódigo es la descripción de un algoritmo que asemeja a un lenguaje de
programación pero con algunas convenciones del lenguaje natural. Tiene varias
ventajas con respecto a los diagramas de flujo, entre las que se destaca el poco
espacio que se requiere para representar instrucciones complejas. El
pseudocódigo no está regido por ningún estándar. pseudo viene de falso y por
ende es un codigo al que aunque es entendible no se aplica al proceso que debe
realizar la maquina.
INICIO
LEER A, B
C=A+B
IMPRIMIR C
FIN
Pseudocódigo que expresa un
algoritmo del ejemplo anterior
Máquina de Turing
La máquina de Turing es un modelo matemático, diseñado por Alan Turing, que
formaliza el concepto de algoritmo. A este modelo se le refiere comúnmente
como la "descripción de más bajo nivel" por el hecho de que no utiliza ninguna
expresión coloquial.
Implementación
Muchos algoritmos son ideados para implementarse en un programa. Sin
embargo, los algoritmos pueden ser implementados en otros medios, como una
red neuronal, un circuito eléctrico o un aparato mecánico. Algunos algoritmos
inclusive se diseñan especialmente para implementarse usando lápiz y papel. El
algoritmo de multiplicación tradicional, el algoritmo de Euclides, la criba de
Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos
ejemplos.
Tipos de algoritmos
Algoritmos voraces (greedy): seleccionan los elementos más prometedores del conjunto de
candidatos hasta encontrar una solución. En la mayoría de los casos la solución no es óptima.
Algoritmos paralelos: permiten la división de un problema en subproblemas de forma que se
puedan ejecutar de forma simultánea en varios procesadores.
Algoritmos probabilísticos: algunos de los pasos de este tipo de algoritmos están en
función de valores pseudoaleatorios.
Algoritmos determinísticos: El comportamiento del algoritmo es lineal: cada paso del
algoritmo tiene únicamente un paso sucesor y otro ancesor.
Algoritmos no determinísticos: El comportamiento del algoritmo tiene forma de árbol y a
cada paso del algoritmo puede bifurcarse a cualquier número de pasos inmediatamente
posteriores, además todas las ramas se ejecutan simultáneamente.
Tipos de algoritmos
Divide y vencerás: dividen el problema en subconjuntos disjuntos obteniendo una solución de
cada uno de ellos para después unirlas, logrando así la solución al problema completo.
Metaheurísticas: encuentran soluciones aproximadas (no óptimas) a problemas basándose
en un conocimiento anterior (a veces llamado experiencia) de los mismos.
Programación dinámica: intenta resolver problemas disminuyendo su coste computacional
aumentando el coste espacial.
Ramificación y acotación: se basa en la construcción de las soluciones al problema
mediante un árbol implícito que se recorre de forma controlada encontrando las mejores
soluciones.
Vuelta Atrás (Backtracking): se construye el espacio de soluciones del problema en un árbol
que se examina completamente, almacenando las soluciones menos costosas.
Algoritmos Determinísticos
En Ciencias de la computación, un algoritmo determinístico es un algoritmo que, en
términos informales, es completamente predictivo si se conocen las entradas al mismo.
Dicho de otra forma, si se conocen las entradas del algoritmo siempre producirá la misma
salida, y la máquina interna pasará por la misma secuencia de estados. Este tipo de
algoritmos ha sido el más estudiado durante la historia y por lo tanto resulta ser el tipo más
familiar de los algoritmos, así como el más práctico ya que puede ejecutarse en las
máquinas eficientemente.
Un modelo simple de algoritmo determinístico es la función matemática, de esta forma se
puede establecer el siguiente paralelismo: la función extrae la misma salida para una
entrada dada, al igual que los algoritmos determinísticos. La diferencia es que un algoritmo
describe explícitamente como la salida se obtiene de la entrada, mientras que las funciones
definen implícitamente su salida.
Formalmente los algoritmos determinísticos se pueden definir en términos de una máquina
de estado: un estado describe que está haciendo la máquina en un instante particular de
tiempo. Justo cuando se produce la entrada, la máquina comienza en su estado inicial y,
posteriormente, si la máquina es determinística, comenzará la ejecución de la secuencia de
estados predeterminados. Una máquina puede ser determinística y no tener límite temporal
para la ejecución o quedarse en un bucle de estados cíclicos eternamente.
Qué hace a un algoritmo no determinístico
Una variedad de factores puede ser la causa de que un algoritmo determinístico se comporte
como de una forma no determinística:
Si emplea en la ejecución de la secuencia de estados otro estado "externo" como entrada del
proceso, como por ejemplo: una entrada de un usuario, una variable objetivo, un valor de un
temporizador de hardware, un valor aleatorio, etc.
Si al operar se encuentra con concurrencia de estados, por ejemplo si tiene múltiples
procesadores escribiendo al mismo tiempo en un fichero. En este caso el orden preciso en el
que cada procesador escribe el dato puede afectar a la salida y no está pre-planificado su
valor inicial.
Si un error (cuyo origen puede deberse al hardware o al software) causa un inesperado
cambio en la secuencia de ejecución de estados.
Aunque los programas reales rara vez son puramente determinísticos, es más fácil que los
seres humanos así como otros programas determinar sobre la esencia de lo que realmente
son. Por esta razón, la mayoría de los lenguajes de programación y especialmente aquellos
que entran dentro de la categoría de programación funcional son lenguajes que hacen un
esfuerzo en prevenir eventos que se ejecutan sin control. Por esta razón este tipo de
restricciones fuerzan el carácter determinístico, a los algoritmos deterministicos se les
denomina purely functional.
Problemas con los algoritmos determinísticos
Para algunos problemas es muy difícil implementar un algoritmo determinístico. Por
ejemplo, existen eficientes y simples algoritmos probabilísticos que pueden determinar si
un número entero es primo o no, pero tienen una pequeña posibilidad de equivocarse.
Algunos de ellos son muy conocidos desde 1970 (véase, por ejemplo, el Test de
primalidad de Fermat); solamente tras otros 30 años de investigación focalizada en
investigar se ha encontrado un algoritmo determinístico similar, pero mucho más lento.
Otro ejemplo puede encontrarse en los problemas NP-completos. Dentro de esta
categoría puede encontrarse la mayoría de los problemas prácticos; este tipo de
problemas puede resolverse rápidamente empleando de forma masiva y paralela una
máquina de Turing no determinística, pero no se ha encontrado aún un algoritmo
eficiente para esta tarea, al menos ahora sólo encuentran soluciones aproximadas en
casos especiales.
Otro problema sobre el planteamiento de algoritmos determinísticos es que a veces no
es "deseable" que los resultados sean completamente predecibles. Por ejemplo, si se es
un jugador de blackjack, un algoritmo puede mezclar una serie de Generador de
números seudoaleatorios y, de esta forma, un apostador espabilado podría averiguar los
números del generador y determinar las cartas sobre la mesa de juego permitiendo
engañar durante todo el tiempo al croupier (esto ocurre actualmente). Problemas
similares pueden encontrarse en criptografía, donde las claves privadas a menudo se
crean mediante uno de estos generadores. Este tipo de problemas se evita mediante el
empleo de un generador criptográfico seguro de números seudoaleatorios.
Algoritmo no determinístico
En Ciencias de la computación, un algoritmo no determinístico es un algoritmo
que con la misma entrada ofrece muchos posibles resultados. No se puede
saber de antemano cuál será el resultado de la ejecución de un algoritmo no
determinístico.
Algoritmos Heurísticos:
son un procedimiento que puede producir una solución para nuestro
problema.
Algoritmos aproximados:
son un procedimiento que siempre proporciona algún tipo de solución para el
problema aún cuando probablemente no encuentre una solución óptima.
Implementación
Los algoritmos no se implementan sólo como programas, algunas veces en una
red neuronal biológica (por ejemplo, el cerebro humano implementa la aritmética
básica o, incluso, una rata sigue un algoritmo para conseguir comida), también en
circuitos eléctricos, en instalaciones industriales o maquinaria pesada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la
computación, y en la mayoría de los casos su estudio es completamente abstracto
sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación;
por eso, en ese sentido, comparte las características de las disciplinas
matemáticas. Así, el análisis de los algoritmos se centra en los principios básicos
del algoritmo, no en los de la implementación particular. Una forma de plasmar (o
algunas veces codificar) un algoritmo es escribirlo en pseudocódigo o utilizar un
lenguaje muy simple tal como Léxico cuyos códigos pueden estar en el idioma del
programador, otra manera de plasmar un algoritmo es utilizando diagramas de flujo
que viene siento la representación grafica del mismo, es muy útil para representar
procesos pequeños y simples, o para que sea mas entendible a personas que no
están familiarizadas con la programación.
DIAGRAMA DE FLUJO Y SIMBOLOGIA
Es un esquema para representar gráficamente un algoritmo. Se basan en la
utilización de diversos símbolos para representar operaciones específicas. Se les
llama diagramas de flujo porque los símbolos utilizados se conectan por medio de
flechas para indicar la secuencia de operación. Para hacer comprensible los
Diagramas a todas las personas, los Símbolos se sometieron a una normalización,
o lo que es en realidad se hicieron símbolos casi universales, ya que, en un
principio cada usuario podría tener sus propios símbolos para representar sus
procesos en forma de Diagrama de Flujo. Esto trajo como consecuencia que solo
el que conocía sus símbolos, los podía interpretar. La simbología utilizada para la
elaboración de diagramas de flujo es variable y debe ajustarse a un patrón
definido previamente. A continuación se mostrara las simbologías más utilizadas:
Simbología utilizada en los diagramas de flujo
Elementos de diagramación
Bloques terminales
Bloques de inicio y fin de programa
Indican los límites del procedimiento considerado como principal. Generalmente se trata de un
programa completo o de un módulo funcionalmente autónomo.
Bloques de inicio y fin de procedimiento
Indican los límites de un procedimiento considerado como una parte dependiente de otro mayor.
Delimitan la explosión de un grupo de acciones que han sido consideradas como un
procedimiento en otra parte del diagrama. Generalmente se trata de una función que hace una
tarea específica.
Bloques de acción
Bloque de acción simple
Representa una acción sencilla que puede ser considerada como única y que generalmente se
codifica con una sola instrucción. Por ejemplo: incrementar contador, ubicar cursor, abrir archivo,
etc.
Bloque de entrada
Representa una acción simple de entrada de datos, generalmente desde un dispositivo periférico
como el teclado. Por ejemplo: ingresar valor.
Bloque de procedimiento
Representa un conjunto de acciones que se consideran juntas, sin analizar su detalle. Este grupo
de acciones se describe generalmente como procedimiento en otra parte del diagrama. Por
ejemplo: buscar elemento, ordenar conjunto, procesar dato, etc.
Bloque de salida
Representa una acción simple de salida de datos, generalmente hacia un dispositivo periférico
como el monitor o la impresora.
Bloques de decisión
Bloque de decisión simple
Representa la acción de analizar el valor de verdad de una condición, que sólo puede ser
verdadera o falsa (selección simple). Según el resultado de esta evaluación se sigue uno u
otro curso de acción. Por lo tanto, de un bloque de decisión simple siempre salen
exactamente dos flujos, uno por V (sí) y otro por F (no).
Bloque de decisión múltiple
Representa la acción de analizar el valor de una variable, que puede tomar uno entre una
serie de valores conocidos (selección múltiple). Según el resultado de esta evaluación, se
sigue uno entre varios cursos de acción. Por lo tanto, de un bloque de decisión múltiple
siempre salen varios flujos, uno por cada valor esperado de la variable analizada.
Flujos y conectores
Flecha o flujo
Indica la secuencia en que se van ejecutando las acciones al pasar de un bloque a otro.
Conector
Indica la convergencia de dos o más flujos. En la práctica determina el comienzo o el fin de
una estructura.
Entrada y salida de información
Las operaciones de entrada permiten leer
determinados valores y asignarlos a determinadas
variables. Esta entrada se conoce como operación de
lectura y puede provenir de diversas fuentes como
teclado, mouse, lectora de códigos de barra, base de
datos, etc.
La operación de salida se denomina escritura y puede
darse por impresora, por pantalla o cualquier otro
dispositivo de salida.
Secuenciales
La estructura secuencial es aquella en la que una
acción o instrucción sigue a otra en secuencia.
Las tareas se suceden de tal modo que la salida
de una es la entrada de la siguiente y así
sucesivamente hasta el final del proceso.
La estructura es el modo en que se pueden agrupar y organizar las acciones de un
programa. Se reconocen tres estructuras básicas: la secuencia, la selección y la
iteración.
Estructura de secuencia
Se da cuando una acción sigue a la otra. Es la más simple y la más común de
todas y constituye la esencia de toda tarea programada. Se reconocen dos
variantes básicas: la secuencia independiente y la secuencia dependiente.
Estructura de secuencia independiente
Se da cuando las acciones pueden intercambiar su orden de ejecución sin alterar el
resultado final. Por ejemplo, la acción sumar 1 a la variable A seguida de sumar 2 a
la variable B. En este caso, el orden en que se efectúen las acciones es irrelevante
para el resultado final.
Estructura de secuencia dependiente
Se da cuando las acciones no pueden intercambiar su orden de ejecución sin alterar
el resultado final. Por ejemplo, la acción sumar 1 a la variable A seguida de
multiplicar la variable A por 2. En este caso, el orden en que se efectúen las
operaciones es determinante del resultado final.
Asignación
La operación de asignación es el modo de darle valores a una
variable. La operación de asignación se representa con el
símbolo u operador =.
La operación de asignación se conoce como instrucción o
sentencia de asignación cuando se refiere a un lenguaje de
programación.
El formato general de una operación de asignación es:
variable = expresión
Ejemplo
Escribir un algoritmo para calcular el área de un
triángulo dada la bases y la altura.
Algoritmo AreaTriangulo
Var
real: base, altura, area
Inicio
leer base, altura
area = base * altura / 2
escribir area
Fin
Suma de dos números
Pseudocódigo:
Inicio
Variables a utilizar: X, Y, R
Leer X, Y
R= X + Y
Imprimir R
Fin
Comprobación:
X = 2, Y = 3, R = 5.
2 + 3 = 5.
Un vendedor recibe un sueldo base mas un 10 % extra por comisión de sus ventas,
el vendedor desea saber cuanto dinero obtendrá por concepto de comisiones por
las tres ventas que realiza en el mes, y el total que recibirá en el mes.
Pseudocódigo:
Inicio
Variables SB, V1, V2, V3, C1, C2, C3, CT, T
Leer SB, V1, V2, V3
C1= (V1 * 10) / 100
C2= (V2 * 10) / 100
C3= (V3 * 10) / 100
CT= C1 + C2 + C3
T= SB + CT
Imprime SB, CT, T
Fin
Comprobación:
SB = $200
V1 = $30
V2 = $700
V3 = $200
CT = $93
T = $293
C1 = $3
C2 = $70
C3 = $20
Estructuras Selectivas
Las estructuras selectivas se utilizan para tomar decisiones
lógicas. En las estructuras selectivas se evalúa una condición y en
función del resultado de la misma se realiza una opción u otra.
Las condiciones se especifican usando expresiones lógicas.
Las estructuras selectivas o condicionales pueden ser:
–
–
–
–
–
Simples
Dobles
Anidadas
Múltiples
Intenta (Try and Catch)
Estructura de selección
Es la que permite a los programas adaptarse a situaciones diversas verificando ciertas condiciones y tomando
uno u otro curso de acción según corresponda. Se reconocen dos variantes básicas: la selección simple y la
selección múltiple.
Estructura de selección simple
Se da cuando existen sólo dos alternativas. Se evalúa una condición que puede
tomar los valores lógicos de verdadero o falso. Si la condición es verdadera se
hace una cosa y si es falsa se hace otra. Por ejemplo: si la variable A es inferior a
3, sumarle 1; si no, poner la variable B en 0. Es importante aclarar aquí que no
siempre deben estar presentes las acciones correspondientes a ambas
alternativas. En efecto, es posible -y muy común- que se ejecute alguna acción si
se cumple alguna condición y que no se haga nada en caso contrario. Por
ejemplo: si la variable B es mayor que 20, asignarle el valor 0. En este caso, si no
se cumple la condición (esto es, si B no es superior a 20), simplemente no ocurre
nada.
Estructura de selección múltiple
Se da cuando existen más de dos alternativas. En
este caso la variable que determina la selección
puede tomar uno entre varios valores numéricos
enteros previstos y se ejecutará uno entre varios
grupos de acciones, según corresponda. Puede
haber también -aunque no es obligatorio- un curso de
acción previsto para cuando la variable no toma
ninguno de los valores predeterminados. Por
ejemplo: examinar la variable resultado; si es 0
escribir 'Éxito', si es 1 escribir 'Memoria insuficiente',
si es 2 escribir 'Archivo no existe' y si es cualquier
otro número escribir 'Error desconocido'.
Simples
La estructura alternativa simple ejecuta un grupo de acciones cuando se
cumple una determinada condición. Si la condición no se cumple, entonces
no se hace nada.
si <condición> entonces
<acciones>
fin_si
Dobles
Las estructuras dobles permiten elegir entre dos opciones o
alternativas posibles, en función del cumplimiento o no de
una determinada condición. Si la condición es verdadera, se
ejecuta el primer grupo de acciones y si es falsa se ejecuta el
segundo grupo de acciones.
si <condición> entonces
<acción 1>
si_no
<acción 2>
fin_si
Anidadas
Las estructuras alternativas anidadas están compuestas por estructuras
alternativas simples y/o dobles que tienen en si interior una o mas
estructuras alternativas simples y/o dobles, la regla para realizar este tipo
de anidamientos, es que antes de terminar el bloque de acciones de la
estructura alternativa externa debe cerrarse la estructura alternativa
interna.
si <condición externa> entonces
si <condición interna> entonces
<acción 1>
si_no
<acción 2>
fin_si
fin_si
Anidadas
si <condición externa> entonces
si <condición interna 1> entonces
<acción 1>
si_no
<acción 2>
fin_si
si_no
si <condición interna 2> entonces
<acción 3>
si_no
<acción 4>
fin_si
fin_si
Múltiples
Con frecuencia es necesario que existan más de dos elecciones posibles. La
estructura de selección múltiple evaluará una expresión que podrá tomar
N valores distintos. Según se elija uno de estos valores en la condición, se
realizará una de las N acciones, o lo que es igual, el flujo del algoritmo
seguirá un determinado camino entre los N posibles.
segun_sea <expresión> hacer
<valor 1>:<acción 1>
<valor 2>:<acción 2>
.
.
.
si_no
:<acción N>
fin_segun
Múltiples
Los valores que toma la expresión no tienen
porque ser consecutivos ni únicos; se pueden
considerar rangos de constantes numéricas o de
caracteres como valores de expresión.
Practica:
Elabore un diagrama de flujo y un pseudocódigo que calcule el promedio de
cuatro calificaciones leídas por teclado, y determine si el alumno es
Excelente, muy bueno, bueno, regular o malo basado en su promedio de 100,
90, 80, 70 y <=60 respectivamente.
Intenta (try / catch)
Manejo de excepciones
Las excepciones son elementos que almacenan información y la transmiten
fuera de la secuencia normal de retorno de datos. Las excepciones se
propagan hacia atrás a través de la secuencia habitual de llamada, hasta
que sean recogidas por alguna rutina. Se emplean para detectar hechos
excepcionales, como por ejemplo errores.
Procesamiento de excepciones
El código que eventualmente puede generar una excepción se encierra en
el bloque try, el cual contiene una sección (catch) para los manejadores de
excepciones, la cual solo se ejecuta si se produce una excepción. En el
momento en que una excepción es generada, el bloque try del que procede
se considera finalizado. Cada bloque catch se prueba en orden hasta
encontrar un manejador de excepciones adecuado.
Una vez capturada la excepción correspondiente se ejecuta el código del
bloque catch. Entonces este bloque y el que contiene la combinación
try/catch se consideran terminados.
try
<acción o acciones que podrían generar una excepción>
cacha
<acción o acciones a realizar cuando se genere una excepción>
fin_try
Bloque try
Comprende el código que puede generar una excepción
Bloque catch
Se emplea para el procesamiento de excepciones.
Iterativas
Las computadoras están especialmente diseñadas para
todas aquellas aplicaciones en las cuáles una operación
o conjunto de ellas deben repetirse muchas veces.
Un tipo importante de estructura es el necesario para
repetir una o varias acciones un número determinado
de veces.
Iterativas
Las estructuras que repiten una secuencia de
instrucciones un número determinado de veces se
denominan ciclos, y se llama iteración al hecho de
repetir la ejecución de una secuencia de acciones.
Las dos principales preguntas a realizar en el diseño de
un ciclo son: ¿qué contiene el ciclo? Y ¿cuántas veces
debe repetirse el ciclo?
Estructura de iteración
Es la que permite a los programas efectuar una tarea extensa con un mínimo de código ejecutable, al reiterar
una y otra vez la ejecución de un mismo conjunto de instrucciones. Esta iteración o repetición está controlada
por una condición -llamada condición de salida- que toma la forma de una selección simple y se verifica con
cada ejecución del ciclo. Si la condición toma el valor adecuado (verdadero o falso, según corresponda) se
ejecutan las instrucciones incluidas en el ciclo. En caso contrario se lo interrumpe y se abandona la estructura.
Se reconocen dos variantes básicas: la iteración con evaluación previa y la iteración con evaluación posterior.
Estructura de iteración con evaluación previa
Se da cuando la condición de salida se evalúa antes de la ejecución de cada
ciclo. Se verifica primero la condición y si resulta ser adecuada se ejecutan las
acciones asociadas para volver a evaluar la condición. En este tipo de
estructuras puede ocurrir que la condición sea inadecuada la primera vez que se
evalúa y que, por lo tanto, las acciones asociadas no lleguen a ejecutarse nunca.
La iteración con evaluación previa debe utilizarse entonces en aquellos casos en
que la ejecución de todo el ciclo esté sujeta al estado previo de una condición, y,
por lo tanto, esté previsto que las acciones puedan no ejecutarse nunca. Por
ejemplo: mientras la variable A sea inferior a 10 escribir un salto de línea y
sumarle 1 a la variable A. En este caso, si ocurre que la variable A llega al ciclo
con un valor no inferior a 10 -esto es, si la condición es inicialmente falsa- no se
escribirá ningún salto de línea ni se incrementará la variable.
Estructura de iteración con evaluación posterior
Se da cuando la condición de salida se evalúa después de la ejecución de cada ciclo.
Se ejecutan primero las acciones asociadas al ciclo, se evalúa luego la condición y,
si resulta ser adecuada, se repite el ciclo. En este tipo de estructuras ocurre que las
acciones asociadas con el ciclo se ejecutan siempre, por lo menos una vez. La
iteración con evaluación posterior debe utilizarse entonces en aquellos casos en que
la evaluación de la condición esté sujeta a la ejecución del ciclo y, por lo tanto, esté
previsto que las acciones deban ejecutarse siempre, por lo menos una vez. Por
ejemplo: apretar una tecla mientras que la tecla apretada sea diferente de <Enter>. En
este caso es necesario primero oprimir por lo menos una tecla para poder evaluar
luego si es <Enter> y repetir eventualmente la acción de oprimir una tecla.
Iterativas
Los tres casos generales de estructuras iterativas dependen de la
situación y modo de la condición:
1. La condición de salida del ciclo se realiza al principio del
ciclo.
2. La condición de salida se origina al final del ciclo; el ciclo se
ejecuta hasta que se verifica una cierta condición
3. La condición de salida se realiza con un contador que cuenta
el número de iteraciones.
Estructura mientras (while)
La estructura iterativa mientras es aquella en que el cuerpo del ciclo se repite
mientras se cumple una determinada condición.
Cuando se ejecuta la instrucción mientras, la primera cosa que sucede es que
se evalúa la condición (una expresión lógica).
Si se evalúa como falsa, no se entra al ciclo y el programa prosigue en la
siguiente instrucción después del ciclo.
Si la expresión lógica es verdadera, entonces se ejecuta el cuerpo del ciclo,
después de lo cual se evalúa de nuevo la expresión lógica.
Este proceso se repite una y otra vez mientras la condición es verdadera.
Estructura mientras (while)
mientras <Condición> hacer
<Sentencias a repetir>
fin_mientras
Evalúa el área que deja un círculo al estar dentro de un cuadrado
Pseudocodigo:
Inicio
Variables a utilizar C, L, S, R, Z
Leer L
Mientras L <= 0
Leer L
fin mientras
C= L * L
Leer R.
Mientras (R*2) > L and R <= 0
Leer R
fin mientras
S= 3.1416 * (R * R)
Z= C – S
Imprime Z
Fin
Comprobación:
C = 100
L = 10
S = 12.56
R=2
Z = 87.44
Estructura repetir (repeat)
Existen muchas situaciones en las que se desea que el
ciclo se ejecute al menos una vez antes de comprobar
la condición de repetición.
La estructura repetir se ejecuta hasta que se cumpla
una condición determinada que se comprueba al final
del ciclo.
El ciclo repetir se ejecuta hasta que una condición que
originalmente es falsa, se hace verdadera.
Estructura repetir (repeat)
repetir
<Sentencias a repetir>
hasta_que <Condición>
Suponga que un individuo desea invertir su capital en un banco y desea
saber ¿Cuánto dinero ganará después de un mes, si el banco paga a razón
de 2% mensual?
Pseudocódigo:
Inicio
Variables a utilizar C, B
Repite
Leer C
Mientras C <= 0
B= (C * 2) / 100
Imprime B
Fin
Comprobación:
C = 5000
B = 100
Una tienda ofrece un descuento del 15% sobre el total de la compra, y un cliente
desea saber cuanto deberá pagar finalmente por su compra.
Pseudocódigo:
Inicio
Variables X,D,R
Repite
Leer X
Mientras X <= 0
D= (X * 15) / 100
R= X - D
Imprimir R
Fin
Comprobación:
X = $40.50
D = $6.075
R = $36.42
Estructura desde (for)
En muchas ocasiones se conoce de antemano el
número de veces que se desean ejecutar las acciones
de un ciclo. En este caso el número de iteraciones es
fijo, se debe usar la estructura desde.
La estructura desde ejecuta la acciones del cuerpo del
ciclo un número especificado de veces y de modo
automático controla el número de iteraciones o pasos a
través del ciclo.
Estructura desde (for)
Desde (<Var> = <VI> ; <expresión lógica>; [incremento de Var] )
<Sentencias a repetir>
fin_desde
Imprime un conteo del 0 al 100
Pseudocódigo:
Inicio
Variables I
Desde (I=0; I<=100; I++)
Imprime I
fin desde
Fin