SlideShare uma empresa Scribd logo
1 de 32
Sentencias selectivas y repetitivas
Yoly Parra Espitia
CIDE
(MANTENIMIENTO INFORMÁTICO)
Estructuras de control; secuenciales y selectivas
Un algoritmo es una sucesion finita de pasos no ambiguos que se pueden
llevar a cabo en un tiempo finito.
Sucesión finita es lo contrario de infinita: esto quiere decir que se acaba en algún
momento ;)
Pasos no ambiguos son pasos tan claros que hasta una máquina los puede
entender, de ahí la necesidad de la no ambigüedad ;)
Lo del tiempo finito es una cuestión práctica: no creo que tengamos tanta
paciencia (ni que lleguemos vivos, sobre todo) como para ver la salida de un
programa que calcule Pi :)
No vamos a entrar en filosofías de qué puede ser considerado como un algoritmo,
qué no lo es, etc... , no porque no sea interesante en sí, sino porque a nosotros lo
que nos preocupa en estos momentos es aprender a resolver problemas, y a eso
es a lo que vamos.
No hay que confundirse: un algoritmo no es lo mismo que un programa, para
hacer un programa necesitamos algo más: unas estructuras de datos.
Hay distintas formas de escribir un algoritmo, bien usando un lenguaje específico
de descripción de algoritmos, bien mediante representaciones gráficas.
Yo he elegido la primera: el pseudocódigo. Que sea un lenguaje específico no
significa que haya que aprender un idioma nuevo, lo único que quiere decir es que
hay unas cuantas palabras que son clave, y que son las palabras que, de acuerdo
a unas reglas muy sencillitas, nos ayudan a describir el algoritmo.
La estructura del pseudocódigo es bastante parecida a la de algunos lenguajes de
programación (por ejemplo, el Pascal), por ello me ha parecido la más
recomendable.
El pseudocódigo tiene algunas ventajas:
 Es fácil hacer cambios si nos equivocamos en la lógica del programa
 Es independiente del lenguaje de programación que vaya a usarse; un
algoritmo que esté escrito en pseudocódigo es fácilmente traducible a
muchos lenguajes de programación.
Y ya, sin más preámbulos, vamos a lo que nos interesa: nosotros queremos
resolver problemas con el ordenador, ¿no es así? Pues veamos con qué
herramientas nos podemos defender para escribir nuestros propios algoritmos.
Elementos básicos para la descripción de algoritmos
El principio y el fin
Para delimitar el comienzo y el final de un algoritmo, o de un trozo de algoritmo
(por ejemplo, en los bucles, y otros, como vamos a ver), haremos lo siguiente:
inicio
... Aqui va el algoritmo en cuestion
fin
También, en vez de inicio y fin se puede usar "empezar" y "fin", o lo que querais,
pero siempre quedando clara la intención. No hay que ser estrictamente riguroso
con la aplicación del "inicio-fin", muchas veces, una buena indentación hace su
papel.
Asignaciones
Sobre las asignaciones ya hablamos la vez pasada, al tratar el tema de las
variables, vamos a recordarlo brevemente:
Cuando hayamos declarado una variable, llegará un momento en el que
querremos que la variable tome algún valor. Por ejemplo, tenemos una variable de
tipo entero que se llama I y queremos asignarle el valor 3, entonces, escribiremos:
I <- 3
Estructuras de control
Las estructuras de control tienen una finalidad bastante definida: su objetivo es ir
señalando el orden en que tienen que sucederse los pasos de un algoritmo.
Veamos un ejemplo: supongamos que acabamos de mostrar un mensaje en la
pantalla que pregunte al usuario "¿desea seguir adelante?".
Obviamente, de la respuesta del usuario va a depender la siguiente acción del
programa. Por ejemplo, si este mensaje se nos presenta tras haber pulsado un
botón de cerrar la aplicación, si nosotros elegimos "Sí", la aplicación se cerrará, y
si elegimos "No", la aplicación seguirá adelante. El programador tiene que haber
escrito código para las dos posibilidades, aunque cuando el programa esté
funcionando, sólo se elegirá una.
Las estructuras de control son de tres tipos:
1. Secuenciales
2. Selectivas
3. Repetitivas
Estructuras secuenciales
Una estructura de control secuencial, en realidad, no es más que escribir un paso
del algoritmo detrás de otro, el que primero se haya escrito será el que primero se
ejecute (al implementarlo, por ejemplo).
Veamos un ejemplo: queremos leer el radio de un círculo, calcular su área y
mostrar por pantalla al usuario el resultado.
Declaracion de variables
REAL: radio, area
fin declaracion de variables
inicio
mostrar por pantalla 'dame el radio del circulo'
leer del teclado la variable radio
area <- 3.14159*radio
mostrar por pantalla 'el area del circulo es:'
mostrar por pantalla el contenido de la variable area
fin
Notar una cosa: cuando queremos hacer cosas relativas a entrada o salida por
algún dispositivo, como el teclado, la pantalla o la impresora, yo pongo cosas
como "mostrar por pantalla", o "leer del teclado". Dado que cada lenguaje de
programación tiene sus funciones de entrada/salida, no uso la forma particular de
ninguno, simplemente, lo que le diríamos al ordenador en caso de que fuera una
persona ("oye, por favor, sácame esto por impresora").
Por otro lado, cuando queramos decir que nos muestre el contenido de una
variable, yo he puesto "mostrar por pantalla el contenido de la variable area", pero
podía haber puesto igualmente "mostrar por pantalla area", o cosas similares.
Vosotros elegís la forma que os resulte más clara o más cómoda, lo importante es
que las intenciones sean claras, o, lo que es lo mismo, "no ambiguas" ;)
Además, si os fijais, para que quede claro que una cosa es mostrar por pantalla
una cadena, y otra cosa es mostrar por pantalla el valor de una variable, el texto
que aparece entre ' ' es una cadena, mientras que el que no aparece entre ' ' no es
una cadena, sino que se refiere a una variable.
Ahora vamos a pasar a las estructuras selectivas y a las repetitivas. Para ello,
necesitamos primero hablar un poco de... CONDICIONES.
La palabra condición nos sugiere frases como "lo haré a condición de que me
dejes tu boli". Analicemos esta frase con un poco de detenimiento.
Decimos "lo haré", pero, ¿"lo haré" siempre, pase lo que pase? o, por el contrario,
¿"lo haré" si antes hay algo que debe cumplirse? En la frase está claro que no se
ha dicho "lo haré" sin más, si no que hay como una pequeña cláusula "SI me dejas
tu boli".
Ya nos ha vuelto a aparecer el SI; esto parece querer decir que debe ser algo
importante.
Lo que significa "SI me dejas tu boli" es lo siguiente, en caso de que la acción
"dejarme tu boli" sea cierta (o verdad, usaré ambas palabras), yo "lo haré". Pero si
la acción "dejarme tu boli" es falsa (o mentira), yo NO "lo haré".
En esto reside el "quid" de las estructuras que vamos a ver a continuación:
se EVALUA una condición, y se actúa en consecuencia, según que la
condición sea VERDADERA o FALSA.
Estructuras selectivas
Estas estructuras se utilizan para TOMAR DECISIONES (por eso también se
llaman estructuras de decisión o alternativas). Lo que se hace es EVALUAR una
condición, y, a continuación, en función del resultado, se lleva a cabo una opción u
otra.
Alternativas simples
Son los conocidos "si... entonces". Se usan de la siguiente manera (una vez
más, la escritura es más o menos personal, siempre que las intenciones queden
claras para todos): yo quiero evaluar una condición, y si se cumple (es decir, si es
cierta), entonces realizaré una serie de pasos. Esto lo podemos escribir así:
SI se cumple la condicion, ENTONCES:
Hago el paso 1
....
Hago el paso N
fin del SI
Muy estrictamente, sería:
SI se cumple la condicion, ENTONCES:
inicio
Hago el paso 1
....
Hago el paso N
fin
fin del SI
pero con una buena sangría nos podemos evitar escribir de más ;)
Es importante cerrar el SI, ya que, si no se cumple la condición, el programa
seguirá a continuación de donde termina el SI.
Por ejemplo, queremos calcular la raíz cuadrada de un número; sin embargo todos
sabemos (¡supongo! ;)) que la raíz cuadrada de un número negativo NO es un
número real. Esto quiere decir que, tras leer el número por teclado, tendremos que
ver si es positivo, ya que sólo en este caso podremos calcular su raíz cuadrada.
Veamos como queda:
Declaracion de variables
REAL: numero, raiz
fin declaracion de variables
inicio
mostrar por pantalla 'introduce un numero'
leer del teclado la variable numero
SI numero >= 0 ENTONCES:
raiz <- raiz_cuadrada(numero)
mostrar por pantalla 'la raiz cuadrada es:'
mostrar por pantalla raiz
fin del SI
fin
Como extraer una raíz cuadrada es una operación que, en principio, no es
elemental, yo he puesto raiz_cuadrada(numero), eso significa que, en alguna
parte, tengo definida una función que me calcula la raíz cuadrada de un número.
Ya hablaremos de funciones y subrutinas más adelante, pero hago esta aclaración
para que conste que raiz_cuadrada no forma parte de ningún tipo de
especificación de pseudocódigo ;-)
Sin embargo, hubiera sido bonito haber podido avisar al usuario de que no
podíamos calcular la raíz cuadrada en caso de que el número fuera negativo, pero
no os preocupeis, para ello tenemos las...
Alternativas dobles
O el famoso trío "si ... entonces ... sino" ;-D
Se usan de esta forma: queremos evaluar una condición, si es verdad, realizaré
una serie de pasos, y SI NO es verdad (es decir, si es falsa, si es una puerca
mentira cochina... ;) ), entonces realizaré otra serie de pasos. Esto lo podemos
escribir así:
SI se cumple la condicion, ENTONCES:
Hago el paso A1
....
Hago el paso AN
y SI NO se cumple la condicion, ENTONCES:
Hago el paso B1
....
Hago el paso BM
fin del SI
Con esto, nuestro algoritmo para la raíz cuadrada quedaría:
Declaracion de variables
REAL: numero, raiz
fin declaracion de variables
inicio
mostrar por pantalla 'introduce un numero'
leer del teclado la variable numero
SI numero >= 0 ENTONCES:
raiz <- raiz_cuadrada(numero)
mostrar por pantalla 'la raiz cuadrada es:'
mostrar por pantalla raiz
SI NO es numero >=0 ENTONCES: {es decir, si numero es negativo}
mostrar por pantalla 'lo siento, no puedo calcular
la raiz cuadrada de un numero negativo'
fin del SI
fin
Alternativas múltiples
Es muy probable que tengamos la necesidad de incluir en nuestros programas
alternativas con muchas opciones posibles. Esto lo podríamos hacer a base
de anidar "si ... entonces ... si no", pero si es un número elevado de alternativas,
se hace demasiado farragoso como para resultar inteligibles. Por ejemplo, si
queremos hacer un menú que dé a elegir cuatro opciones, un posible algoritmo
sería:
{Algoritmo MENU a base de 'si ... entonces ... sino'}
Declaracion de variables
ENTEROS: opcion
fin declaracion de variables
inicio
mostrar por pantalla 'menu de opciones:'
mostrar por pantalla '1. Diccionario de sinonimos'
mostrar por pantalla '2. Diccionario de antonimos'
mostrar por pantalla '3. Buscar palabra'
mostrar por pantalla '4. Salir'
leer del teclado la variable opcion
SI opcion = 1 ENTONCES
{lo que toque a esta opcion}
SI NO, ENTONCES
SI opcion = 2 ENTONCES
{lo que toque a esta opcion}
SI NO, ENTONCES
SI opcion = 3 ENTONCES
{lo que toque a esta opcion}
SI NO, ENTONCES
SI opcion = 4 ENTONCES
{lo que toque a esta opcion}
SI NO, ENTONCES
mostrar por pantalla 'opcion incorrecta'
fin del SI
fin del SI
fin del SI
fin del SI
fin
Farragoso, ¿verdad?
Para evitar esto (¿os imaginais que en vez de cuatro fueran 20 las alternativas?),
está la estructura "según sea". La idea es esta; por ejemplo, como en el algoritmo
que hemos puesto del menú, pedimos al usuario que entre una opción, y hay
cuatro posibilidades, cuatro posibles valores para los que haremos algo.
Entonces, SEGUN lo que valga la variable opción, elegiremos una alternativa de
entre todas las posibles.
La forma de escribir esto en pseudocódigo es:
SEGUN SEA la variable o la expresion HACER
VALOR1: {las acciones que toque}
...
VALORN: {las acciones que toque}
por defecto: {las acciones que toque}
fin SEGUN
¿Qué pinta ahí ese 'por defecto'?
No es más que una alternativa por si acaso se elige alguna opción no
contemplada entre las que se ofrece.
Como ejemplo, vamos a ver nuestro menú utilizando la alternativa múltiple
SEGUN SEA:
{Algoritmo MENU a base de 'segun sea'}
Declaracion de variables
ENTEROS: opcion
fin declaracion de variables
inicio
mostrar por pantalla 'menu de opciones'
mostrar por pantalla '1. Diccionario de sinonimos'
mostrar por pantalla '2. Diccionario de antonimos'
mostrar por pantalla '3. Buscar palabra'
mostrar por pantalla '4. Salir'
leer del teclado la variable opcion
SEGUN SEA opcion HACER:
opcion = 1 : {lo que toque a esta opcion}
opcion = 2 : {lo que toque a esta opcion}
opcion = 3 : {lo que toque a esta opcion}
opcion = 4 : {lo que toque a esta opcion}
por defecto: {mostrar un posible mensaje de error}
fin SEGUN
fin
Así queda mucho más claro, no sólo para nosotros, si no para cualquier persona
que tuviera que leerlo; además, es una forma más sencilla de manejar una
alternativa múltiple :)
Podemos abreviar un poquito el texto; es igualmente válido poner, dentro del
SEGUN, lo siguiente:
SEGUN SEA opcion HACER:
1 : {lo que toque a esta opcion}
2 : {lo que toque a esta opcion}
3 : {lo que toque a esta opcion}
4 : {lo que toque a esta opcion}
por defecto: {mostrar un posible mensaje de error}
fin SEGUN
Sentencias repetitivas
Las estructuras de repetición, permiten la ejecución de una lista o secuencia de
instrucciones (<bloque de instrucciones>) en varias ocasiones. El número de
veces que el bloque de instrucciones se ejecutará se puede especificar de manera
explícita, o a través de una condición lógica que indica cuándo se ejecuta de
nuevo y cuándo no. A cada ejecución del bloque de instrucciones se le conoce
como una iteración.
TIPOS DE ITERACIÓN
Existen tres tipos principales de sentencias de repetición:
• Ciclo mientras
• Ciclo haga-mientras
• Ciclo para
A continuación se describe cada una de ellas.
- CICLO MIENTRAS
El ciclo mientras permite ejecutar un bloque de instrucciones mientras que una
expresión lógica dada se cumpla, es decir, mientras su evaluación dé como
resultado verdadero. La expresión lógica se denomina condición y siempre se
evalúa antes de ejecutar el bloque de instrucciones. Si la condición no se cumple,
el bloque no se ejecuta. Si la condición se cumple, el bloque se ejecuta, después
de lo cual la instrucción vuelve a empezar, es decir, la condición se vuelve a
evaluar.
En el caso en que la condición evalúe la primera vez como falsa, el bloque de
instrucciones no será ejecutado, lo cual quiere decir que el número de repeticiones
o iteraciones de este bloque será cero. Si la condición siempre evalúa a
verdadero, la instrucción se ejecutará indefinidamente, es decir, un número infinito
de veces.
La forma general del ciclo mientras es la siguiente:
Donde, <condición> es la expresión lógica que se evalúa para determinar la
ejecución o no del bloque de instrucciones, y <bloque instrucciones> es el
conjunto de instrucciones que se ejecuta si la condición evalúa a Verdadero.
Ejemplos:
Ejemplo 1. Dado un número natural n se desea calcular la suma de los números
naturales desde 1 hasta n.
ANALISIS DEL PROBLEMA:
ESPECIFICACIÓN:
DISEÑO:
Primera División:
División Final:
Diagrama de Flujo:
Ejemplo 2. Calcular el máximo común divisor de dos números naturales, distintos
de cero.
ANALISIS DEL PROBLEMA:
ESPECIFICACIÓN:
DISEÑO:
Primera División:
Segunda División:
División Final:
Diagrama de Flujo:
1..2 CICLO HAGA--MIENTRAS
El ciclo haga-mientras es similar al ciclo mientras, la diferencia radica en el
momento de evaluación de la condición. En el ciclo haga-mientras la condición se
evalúa después de ejecutar el bloque de instrucciones, por lo tanto, el bloque se
ejecuta por lo menos una vez. Este bloque se ejecuta nuevamente si la condición
evalúa a verdadero, y no se ejecuta más si se evalúa como falso.
La forma general del ciclo haga-mientras es la siguiente:
Donde, <bloque instrucciones> es el conjunto de instrucciones que se ejecuta y
<condición> es la expresión lógica que determina si el bloque se ejecuta. Si la
<condición> se evalúa como verdadero el bloque es ejecutado de nuevo y si es
evaluada como falso no es ejecutado. Después de ejecutar el bloque de acciones
se evalúa la <condición>.
Ejemplos:
Ejemplo 1. El problema de calcular la suma de los números naturales desde 1
hasta n (se puede solucionar usando el ciclo haga-mientras. A continuación se
describe el algoritmo solución:
Diagrama de Flujo:
Ejemplo 2. El problema de calcular el máximo común divisor de dos números
naturales, distintos de cero, se puede solucionar usando el ciclo haga-mientras. A
continuación se describe el algoritmo solución:
Diagrama de Flujo:
1..3 CICLO PARA
El ciclo para ejecuta un bloque de instrucciones un número determinado de veces.
Este número de veces está determinado por una variable contadora (de tipo
entero) que toma valores desde un límite inferior hasta un límite superior. En cada
ciclo después de ejecutar el bloque de instrucciones, la variable contadora es
incrementada en 1 automáticamente y en el momento en que la variable
sobrepasa el límite superior el ciclo termina.
El valor final de la variable contadora depende del lenguaje de programación
utilizado, por lo tanto, no es recomendable diseñar algoritmos que utilicen el valor
de la variable contadora de un ciclo para, después de ejecutar el mismo. De la
definición de ciclo para se puede inferir que el bloque de instrucciones no se
ejecuta si el límite inferior es mayor al límite superior.
La forma general del ciclo para es la siguiente:
Donde <variable> es la variable contadora del ciclo, la cual debe ser de tipo
entero. <lim_inf> es el valor inicial que toma la variable contadora. <lim_sup> es el
último valor que toma la variable contadora; cuando el valor de la variable
contadora supere este valor, el ciclo termina. <bloque instrucciones> es el
conjunto de instrucciones que se ejecuta en cada iteración, mientras la variable
contadora no sobrepase el <lim_sup>.
Casos:
• Cuando <lim_inf> es menor que <lim_sup> ocurre lo siguiente:
1. La variable contadora se vuelve igual a <lim_inf>
2. Se ejecuta <bloque de instrucciones>
3. Se incrementa automáticamente en 1 la variable contadora del ciclo.
4. Si el valor de contador del ciclo es menor o igual que <lim_sup> se vuelve de
nuevo al paso 2. De otro modo se abandona el ciclo.
• Es de anotar que el valor final de la variable contadora queda incrementada por
encima del <lim_sup> para que pueda finalizar el ciclo para variable:= lim_inf,
hasta lim_sup
ENTRADA
SALIDA 14
• Cuando <lim_inf> es mayor que <lim_sup> el ciclo termina sin ejecutarse nunca
el <bloque de instrucciones>. Tenga en cuenta que no se genera error al correr el
programa
Ejemplo:
para (x:=5 hasta 4) hacer.
Esta línea de código nunca se ejecuta.
• Es de anotar que los lenguajes de programación tienen una variable a esta
instrucción para que el valor pueda ir en descenso.
• Tanto <lim_inf> como <lim_sup> pueden ser expresiones como en el siguiente
ejemplo:
para(j:=x+1 hasta 2*y) hacer.
En este caso se calculan primero los valores de las expresiones (x+1) y (2*y)
empleando para esto los valores actuales de x y y para utilizarlos como <lim_inf> y
<lim_sup> respectivamente.
Ejemplos:
Ejemplo 1. El problema de calcular la suma de los números naturales desde 1
hasta n
(enunciado anteriormente), se puede solucionar usando el ciclo para, a
continuación se
muestra el algoritmo solución:
Nótese que se requieren menos instrucciones que en las anteriores estructuras
dado que el incremento de i se hace automáticamente en la instrucción 7 al repetir
el ciclo.
Diagrama de flujo:
Ejemplo 2. Calcular las primeras tres filas de la tabla de multiplicar de un número
dado.
ANALISIS DEL PROBLEMA:
ESPECIFICACIÓN:
DISEÑO:
Primera División:
División Final:
Diagrama de flujo:
2.. TIPO DE VARIABLES ÚTILES PARA LA ITERACIÓN
Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas,
existen ciertas variables que cumplen una función específica en cada iteración del
ciclo, las más comunes son:
• Las variables contadoras
• Las variables acumuladoras
• Las variables bandera.
2..1 VARIABLES CONTADORAS
Como su nombre lo indica estas variables se usan fundamentalmente para contar,
por lo tanto deben ser de tipo entero. Un ejemplo de este tipo de variables es la
variable de control en un ciclo para.
Una variable contadora se incrementa (o decrementa) en un valor constante en
cada iteración del ciclo. Es así como en los algoritmos presentados anteriormente
para resolver el problema de calcular la suma de los números naturales desde 1
hasta n, la variable i es una variable contadora.
Ejemplo.
Desarrollar un algoritmo que imprima los números impares en orden descendente
que hay entre
1 y 100.
Algoritmo Solución
En este caso i es una variable contadora, ya que en cada iteración del ciclo la
variable es decrementada en una cantidad fija, 2 en este caso. 19
2..2 VARIABLES ACUMULADORAS
La función de una variable acumuladora es almacenar valores numéricos que
generalmente se suman (o multiplican) en cada iteración, por lo tanto la variable
debe ser de tipo entero o real.
Por ejemplo, en los diferentes algoritmos presentados para solucionar el problema
de calcular la suma de los números naturales desde 1 hasta n, la variable suma es
una variable acumuladora.
Ejemplo.
Calcular las suma de los cuadrados de los números entre 1 y 100.
Algoritmo Solución
En este caso suma es una variable acumuladora mientras que la variable i es una
variable contadora.
2..3 VARIABLES BANDERA
Una variable bandera es utilizada dentro de la condición de un ciclo, para
determinar cuándo un ciclo se sigue iterando o cuando no. De esta manera una
variable bandera debe ser de tipo booleano o entero.
Ejemplo.
Realizar un programa que lea una serie de números reales y los sume. El
programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si
el usuario responde que no desea ingresar más datos el programa debe confirmar
la respuesta. Si el usuario desea continuar ingresando datos se debe seguir
solicitando datos y si el usuario confirma su deseo de salir, el programa debe
mostrar la suma de los datos leídos y terminar.
ESPECIFICACIÓN:
Donde, datos es la colección de n números reales que el usuario ingresa hasta
que decide no continuar ingresando datos y suma es la sumatoria de dichos
números y pertenece a los reales.
Algoritmo Solución
Vale la pena recordar que una variable de tipo booleano toma valores de
verdadero y falso. Note que la instrucción mientras (bandera) hacer es equivalente
a mientras (bandera = verdadero) hacer.
3.. CORRESPONDENCIA ENTRE CICLOS
En la teoría matemática de programación sólo es necesario un tipo de ciclo, en
esta sección se explican las correspondencias que hacen posible esta afirmación,
tomando como ciclo referencia el ciclo mientras.
3..1 Correspondencia entre el ciclo mientras y el ciclo haga-mientras
La diferencia fundamental entre los ciclos mientras y haga-mientras, es que en el
segundo se ejecuta por lo menos una vez el <bloque de instrucciones>, mientras
que en el primero hay la posibilidad de que no se ejecute alguna vez.
El ejecutar el bloque de acciones una vez antes del ciclo mientras permite modelar
un ciclo haga-mientras, es decir:
3..2 Correspondencia entre el ciclo para y el ciclo mientras
Formalmente, un ciclo para es una forma abreviada de un ciclo mientras,
precedido por una asignación y que en cada iteración incrementa una variable. Por
lo tanto, el siguiente ciclo para:
Es la abreviación del siguiente bloque de acciones:
3..3 Cuando usar estructuras de control definido o indefinidos
El ciclo para se conoce comúnmente como estructura de control definida, ya que
los valores iniciales y finales especificados para la variable contadora que controla
el ciclo determina de manera exacta el número de veces que se ejecuta el ciclo.
Para utilizar un ciclo para al resolver un algoritmo se debe determinar el número
exacto de veces que se va a ejecutar el ciclo. En el ejemplo de calcular la suma de
los números de 1 hasta n. Se sabe que el ciclo se repetirá n veces.
En el ejemplo de calcular el máximo común divisor de dos número naturales
común divisor de dos números naturales no puede resolverse con un ciclo para,
porque no se sabe de antemano cuantas veces se repetirá el ciclo.
Gracias.

Mais conteúdo relacionado

Mais procurados

Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Marcelo Vilela Pardo
 
Tipos de datos C#
Tipos de datos C#Tipos de datos C#
Tipos de datos C#alex28Xx
 
While y do while
While y do whileWhile y do while
While y do whilejosenassr
 
Pseudocodigo y una prueba de escritorio
Pseudocodigo y una prueba de escritorioPseudocodigo y una prueba de escritorio
Pseudocodigo y una prueba de escritorioLeonardo Torres
 
Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Rommel Lòpez
 
Modelo de Objeto Semantico
Modelo de Objeto SemanticoModelo de Objeto Semantico
Modelo de Objeto SemanticoF
 
File reader y filewriter
File reader y filewriterFile reader y filewriter
File reader y filewriterSynysterA7X
 
Arquitectura Orientada a Servicios
Arquitectura Orientada a ServiciosArquitectura Orientada a Servicios
Arquitectura Orientada a Serviciosfinger10
 
Estructuras repetitivas
Estructuras repetitivasEstructuras repetitivas
Estructuras repetitivasVictor Zapata
 
Elementos control
Elementos controlElementos control
Elementos controlTino Cejudo
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y SalidaCristian Andres
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Javaquesada_diego
 
Lenguajes de simulacion
Lenguajes de simulacionLenguajes de simulacion
Lenguajes de simulacionAnel Sosa
 

Mais procurados (20)

LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Paradigmas de la programación
Paradigmas de la programación Paradigmas de la programación
Paradigmas de la programación
 
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
Diagramas de flujo - Estructuras de Control (For, While, Do Whille y Switch C...
 
Do while en Java
Do while en JavaDo while en Java
Do while en Java
 
Tipos de datos C#
Tipos de datos C#Tipos de datos C#
Tipos de datos C#
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Programacion estructurada
Programacion estructuradaProgramacion estructurada
Programacion estructurada
 
While y do while
While y do whileWhile y do while
While y do while
 
Pseudocodigo y una prueba de escritorio
Pseudocodigo y una prueba de escritorioPseudocodigo y una prueba de escritorio
Pseudocodigo y una prueba de escritorio
 
Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)Estructuras repetitivas(while, for, repeat)
Estructuras repetitivas(while, for, repeat)
 
Operadores de c++
Operadores de c++Operadores de c++
Operadores de c++
 
Modelo de Objeto Semantico
Modelo de Objeto SemanticoModelo de Objeto Semantico
Modelo de Objeto Semantico
 
Metodo de montecarlo
Metodo de montecarloMetodo de montecarlo
Metodo de montecarlo
 
File reader y filewriter
File reader y filewriterFile reader y filewriter
File reader y filewriter
 
Arquitectura Orientada a Servicios
Arquitectura Orientada a ServiciosArquitectura Orientada a Servicios
Arquitectura Orientada a Servicios
 
Estructuras repetitivas
Estructuras repetitivasEstructuras repetitivas
Estructuras repetitivas
 
Elementos control
Elementos controlElementos control
Elementos control
 
Metodos de entrada y Salida
Metodos de entrada y SalidaMetodos de entrada y Salida
Metodos de entrada y Salida
 
Estructuras de control en Java
Estructuras de control en JavaEstructuras de control en Java
Estructuras de control en Java
 
Lenguajes de simulacion
Lenguajes de simulacionLenguajes de simulacion
Lenguajes de simulacion
 

Semelhante a Sentencias selectivas y repetitivas

Lógica de programación basica
Lógica de programación basicaLógica de programación basica
Lógica de programación basicaJackeline Quintero
 
Lógica de programación basico
Lógica de programación basicoLógica de programación basico
Lógica de programación basicojacky2414
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programaciónZarlenin docente
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programaciónIng Cabrera
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmosaralylopez88
 
Solución examen 2 con ollydbg
Solución examen 2 con ollydbgSolución examen 2 con ollydbg
Solución examen 2 con ollydbgTensor
 
Solución examen 2 con ollydbg
Solución examen 2 con ollydbgSolución examen 2 con ollydbg
Solución examen 2 con ollydbgTensor
 
Primer programa en 1
Primer programa en 1Primer programa en 1
Primer programa en 1fehrhuichapa
 
1 conceptos algoritmos
1 conceptos algoritmos1 conceptos algoritmos
1 conceptos algoritmosLeidy Campos
 
Programación en lenguaje C
Programación en  lenguaje C Programación en  lenguaje C
Programación en lenguaje C Fer Torres
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint michellbermudez3
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Annymuoz6
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint AngelicaAguado2
 

Semelhante a Sentencias selectivas y repetitivas (20)

Fundamentos De Programacion
Fundamentos De ProgramacionFundamentos De Programacion
Fundamentos De Programacion
 
Lógica de programación basica
Lógica de programación basicaLógica de programación basica
Lógica de programación basica
 
Lógica de programación basico
Lógica de programación basicoLógica de programación basico
Lógica de programación basico
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
Presentacion algoritmos
Presentacion algoritmosPresentacion algoritmos
Presentacion algoritmos
 
Solución examen 2 con ollydbg
Solución examen 2 con ollydbgSolución examen 2 con ollydbg
Solución examen 2 con ollydbg
 
Solución examen 2 con ollydbg
Solución examen 2 con ollydbgSolución examen 2 con ollydbg
Solución examen 2 con ollydbg
 
Primer programa en 1
Primer programa en 1Primer programa en 1
Primer programa en 1
 
1 conceptos algoritmos
1 conceptos algoritmos1 conceptos algoritmos
1 conceptos algoritmos
 
Variables
VariablesVariables
Variables
 
Programación en lenguaje C
Programación en  lenguaje C Programación en  lenguaje C
Programación en lenguaje C
 
Netbeans
Netbeans Netbeans
Netbeans
 
Unidad I - Clase 5 - ALGORITMOS.pdf
Unidad I - Clase 5 - ALGORITMOS.pdfUnidad I - Clase 5 - ALGORITMOS.pdf
Unidad I - Clase 5 - ALGORITMOS.pdf
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint
 
Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint Trabajo escrito grupal de pseint
Trabajo escrito grupal de pseint
 
Salto condicional
Salto condicionalSalto condicional
Salto condicional
 

Mais de yoly1parra1

Manual de instalación wampserver
Manual de instalación wampserverManual de instalación wampserver
Manual de instalación wampserveryoly1parra1
 
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]yoly1parra1
 
Configurar un dominio
Configurar un dominioConfigurar un dominio
Configurar un dominioyoly1parra1
 
A colaborativo 1 unidad 1
A colaborativo 1 unidad 1A colaborativo 1 unidad 1
A colaborativo 1 unidad 1yoly1parra1
 
Instalación y desinstalación de un programa
Instalación y desinstalación de un programaInstalación y desinstalación de un programa
Instalación y desinstalación de un programayoly1parra1
 
Actividad de trabajo colaborativo
Actividad de trabajo colaborativoActividad de trabajo colaborativo
Actividad de trabajo colaborativoyoly1parra1
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativoyoly1parra1
 
Representación gráfica de los diagramas de flujo yoly parra
Representación gráfica de los diagramas de flujo yoly parraRepresentación gráfica de los diagramas de flujo yoly parra
Representación gráfica de los diagramas de flujo yoly parrayoly1parra1
 
Representación gráfica de los algoritmos.
Representación gráfica de los algoritmos. Representación gráfica de los algoritmos.
Representación gráfica de los algoritmos. yoly1parra1
 
Partes internas de un computador, Yoly Parra
Partes internas de un computador, Yoly ParraPartes internas de un computador, Yoly Parra
Partes internas de un computador, Yoly Parrayoly1parra1
 
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.yoly1parra1
 

Mais de yoly1parra1 (14)

Manual de instalación wampserver
Manual de instalación wampserverManual de instalación wampserver
Manual de instalación wampserver
 
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]
Autoaprendizaje unidad 5_mantenimiento_de_computadores[1]
 
Configurar un dominio
Configurar un dominioConfigurar un dominio
Configurar un dominio
 
A colaborativo 1 unidad 1
A colaborativo 1 unidad 1A colaborativo 1 unidad 1
A colaborativo 1 unidad 1
 
Instalación y desinstalación de un programa
Instalación y desinstalación de un programaInstalación y desinstalación de un programa
Instalación y desinstalación de un programa
 
Irq
IrqIrq
Irq
 
Disco duro
Disco duroDisco duro
Disco duro
 
Actividad de trabajo colaborativo
Actividad de trabajo colaborativoActividad de trabajo colaborativo
Actividad de trabajo colaborativo
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Representación gráfica de los diagramas de flujo yoly parra
Representación gráfica de los diagramas de flujo yoly parraRepresentación gráfica de los diagramas de flujo yoly parra
Representación gráfica de los diagramas de flujo yoly parra
 
Representación gráfica de los algoritmos.
Representación gráfica de los algoritmos. Representación gráfica de los algoritmos.
Representación gráfica de los algoritmos.
 
Partes internas de un computador, Yoly Parra
Partes internas de un computador, Yoly ParraPartes internas de un computador, Yoly Parra
Partes internas de un computador, Yoly Parra
 
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
Algoritmos, lenguajes de programación, datos, tipos de datos y datos primitivos.
 
Algortitmos
AlgortitmosAlgortitmos
Algortitmos
 

Sentencias selectivas y repetitivas

  • 1. Sentencias selectivas y repetitivas Yoly Parra Espitia CIDE (MANTENIMIENTO INFORMÁTICO)
  • 2. Estructuras de control; secuenciales y selectivas Un algoritmo es una sucesion finita de pasos no ambiguos que se pueden llevar a cabo en un tiempo finito. Sucesión finita es lo contrario de infinita: esto quiere decir que se acaba en algún momento ;) Pasos no ambiguos son pasos tan claros que hasta una máquina los puede entender, de ahí la necesidad de la no ambigüedad ;) Lo del tiempo finito es una cuestión práctica: no creo que tengamos tanta paciencia (ni que lleguemos vivos, sobre todo) como para ver la salida de un programa que calcule Pi :) No vamos a entrar en filosofías de qué puede ser considerado como un algoritmo, qué no lo es, etc... , no porque no sea interesante en sí, sino porque a nosotros lo que nos preocupa en estos momentos es aprender a resolver problemas, y a eso es a lo que vamos. No hay que confundirse: un algoritmo no es lo mismo que un programa, para hacer un programa necesitamos algo más: unas estructuras de datos. Hay distintas formas de escribir un algoritmo, bien usando un lenguaje específico de descripción de algoritmos, bien mediante representaciones gráficas. Yo he elegido la primera: el pseudocódigo. Que sea un lenguaje específico no significa que haya que aprender un idioma nuevo, lo único que quiere decir es que hay unas cuantas palabras que son clave, y que son las palabras que, de acuerdo a unas reglas muy sencillitas, nos ayudan a describir el algoritmo. La estructura del pseudocódigo es bastante parecida a la de algunos lenguajes de programación (por ejemplo, el Pascal), por ello me ha parecido la más recomendable. El pseudocódigo tiene algunas ventajas:  Es fácil hacer cambios si nos equivocamos en la lógica del programa  Es independiente del lenguaje de programación que vaya a usarse; un algoritmo que esté escrito en pseudocódigo es fácilmente traducible a muchos lenguajes de programación. Y ya, sin más preámbulos, vamos a lo que nos interesa: nosotros queremos resolver problemas con el ordenador, ¿no es así? Pues veamos con qué herramientas nos podemos defender para escribir nuestros propios algoritmos.
  • 3. Elementos básicos para la descripción de algoritmos El principio y el fin Para delimitar el comienzo y el final de un algoritmo, o de un trozo de algoritmo (por ejemplo, en los bucles, y otros, como vamos a ver), haremos lo siguiente: inicio ... Aqui va el algoritmo en cuestion fin También, en vez de inicio y fin se puede usar "empezar" y "fin", o lo que querais, pero siempre quedando clara la intención. No hay que ser estrictamente riguroso con la aplicación del "inicio-fin", muchas veces, una buena indentación hace su papel. Asignaciones Sobre las asignaciones ya hablamos la vez pasada, al tratar el tema de las variables, vamos a recordarlo brevemente: Cuando hayamos declarado una variable, llegará un momento en el que querremos que la variable tome algún valor. Por ejemplo, tenemos una variable de tipo entero que se llama I y queremos asignarle el valor 3, entonces, escribiremos: I <- 3 Estructuras de control Las estructuras de control tienen una finalidad bastante definida: su objetivo es ir señalando el orden en que tienen que sucederse los pasos de un algoritmo. Veamos un ejemplo: supongamos que acabamos de mostrar un mensaje en la pantalla que pregunte al usuario "¿desea seguir adelante?". Obviamente, de la respuesta del usuario va a depender la siguiente acción del programa. Por ejemplo, si este mensaje se nos presenta tras haber pulsado un botón de cerrar la aplicación, si nosotros elegimos "Sí", la aplicación se cerrará, y si elegimos "No", la aplicación seguirá adelante. El programador tiene que haber
  • 4. escrito código para las dos posibilidades, aunque cuando el programa esté funcionando, sólo se elegirá una. Las estructuras de control son de tres tipos: 1. Secuenciales 2. Selectivas 3. Repetitivas Estructuras secuenciales Una estructura de control secuencial, en realidad, no es más que escribir un paso del algoritmo detrás de otro, el que primero se haya escrito será el que primero se ejecute (al implementarlo, por ejemplo). Veamos un ejemplo: queremos leer el radio de un círculo, calcular su área y mostrar por pantalla al usuario el resultado. Declaracion de variables REAL: radio, area fin declaracion de variables inicio mostrar por pantalla 'dame el radio del circulo' leer del teclado la variable radio area <- 3.14159*radio mostrar por pantalla 'el area del circulo es:' mostrar por pantalla el contenido de la variable area fin Notar una cosa: cuando queremos hacer cosas relativas a entrada o salida por algún dispositivo, como el teclado, la pantalla o la impresora, yo pongo cosas como "mostrar por pantalla", o "leer del teclado". Dado que cada lenguaje de programación tiene sus funciones de entrada/salida, no uso la forma particular de ninguno, simplemente, lo que le diríamos al ordenador en caso de que fuera una persona ("oye, por favor, sácame esto por impresora"). Por otro lado, cuando queramos decir que nos muestre el contenido de una variable, yo he puesto "mostrar por pantalla el contenido de la variable area", pero podía haber puesto igualmente "mostrar por pantalla area", o cosas similares.
  • 5. Vosotros elegís la forma que os resulte más clara o más cómoda, lo importante es que las intenciones sean claras, o, lo que es lo mismo, "no ambiguas" ;) Además, si os fijais, para que quede claro que una cosa es mostrar por pantalla una cadena, y otra cosa es mostrar por pantalla el valor de una variable, el texto que aparece entre ' ' es una cadena, mientras que el que no aparece entre ' ' no es una cadena, sino que se refiere a una variable. Ahora vamos a pasar a las estructuras selectivas y a las repetitivas. Para ello, necesitamos primero hablar un poco de... CONDICIONES. La palabra condición nos sugiere frases como "lo haré a condición de que me dejes tu boli". Analicemos esta frase con un poco de detenimiento. Decimos "lo haré", pero, ¿"lo haré" siempre, pase lo que pase? o, por el contrario, ¿"lo haré" si antes hay algo que debe cumplirse? En la frase está claro que no se ha dicho "lo haré" sin más, si no que hay como una pequeña cláusula "SI me dejas tu boli". Ya nos ha vuelto a aparecer el SI; esto parece querer decir que debe ser algo importante. Lo que significa "SI me dejas tu boli" es lo siguiente, en caso de que la acción "dejarme tu boli" sea cierta (o verdad, usaré ambas palabras), yo "lo haré". Pero si la acción "dejarme tu boli" es falsa (o mentira), yo NO "lo haré". En esto reside el "quid" de las estructuras que vamos a ver a continuación: se EVALUA una condición, y se actúa en consecuencia, según que la condición sea VERDADERA o FALSA. Estructuras selectivas Estas estructuras se utilizan para TOMAR DECISIONES (por eso también se llaman estructuras de decisión o alternativas). Lo que se hace es EVALUAR una condición, y, a continuación, en función del resultado, se lleva a cabo una opción u otra. Alternativas simples Son los conocidos "si... entonces". Se usan de la siguiente manera (una vez más, la escritura es más o menos personal, siempre que las intenciones queden claras para todos): yo quiero evaluar una condición, y si se cumple (es decir, si es cierta), entonces realizaré una serie de pasos. Esto lo podemos escribir así: SI se cumple la condicion, ENTONCES: Hago el paso 1
  • 6. .... Hago el paso N fin del SI Muy estrictamente, sería: SI se cumple la condicion, ENTONCES: inicio Hago el paso 1 .... Hago el paso N fin fin del SI pero con una buena sangría nos podemos evitar escribir de más ;) Es importante cerrar el SI, ya que, si no se cumple la condición, el programa seguirá a continuación de donde termina el SI. Por ejemplo, queremos calcular la raíz cuadrada de un número; sin embargo todos sabemos (¡supongo! ;)) que la raíz cuadrada de un número negativo NO es un número real. Esto quiere decir que, tras leer el número por teclado, tendremos que ver si es positivo, ya que sólo en este caso podremos calcular su raíz cuadrada. Veamos como queda: Declaracion de variables REAL: numero, raiz fin declaracion de variables inicio mostrar por pantalla 'introduce un numero' leer del teclado la variable numero SI numero >= 0 ENTONCES: raiz <- raiz_cuadrada(numero) mostrar por pantalla 'la raiz cuadrada es:'
  • 7. mostrar por pantalla raiz fin del SI fin Como extraer una raíz cuadrada es una operación que, en principio, no es elemental, yo he puesto raiz_cuadrada(numero), eso significa que, en alguna parte, tengo definida una función que me calcula la raíz cuadrada de un número. Ya hablaremos de funciones y subrutinas más adelante, pero hago esta aclaración para que conste que raiz_cuadrada no forma parte de ningún tipo de especificación de pseudocódigo ;-) Sin embargo, hubiera sido bonito haber podido avisar al usuario de que no podíamos calcular la raíz cuadrada en caso de que el número fuera negativo, pero no os preocupeis, para ello tenemos las... Alternativas dobles O el famoso trío "si ... entonces ... sino" ;-D Se usan de esta forma: queremos evaluar una condición, si es verdad, realizaré una serie de pasos, y SI NO es verdad (es decir, si es falsa, si es una puerca mentira cochina... ;) ), entonces realizaré otra serie de pasos. Esto lo podemos escribir así: SI se cumple la condicion, ENTONCES: Hago el paso A1 .... Hago el paso AN y SI NO se cumple la condicion, ENTONCES: Hago el paso B1 .... Hago el paso BM fin del SI Con esto, nuestro algoritmo para la raíz cuadrada quedaría: Declaracion de variables REAL: numero, raiz
  • 8. fin declaracion de variables inicio mostrar por pantalla 'introduce un numero' leer del teclado la variable numero SI numero >= 0 ENTONCES: raiz <- raiz_cuadrada(numero) mostrar por pantalla 'la raiz cuadrada es:' mostrar por pantalla raiz SI NO es numero >=0 ENTONCES: {es decir, si numero es negativo} mostrar por pantalla 'lo siento, no puedo calcular la raiz cuadrada de un numero negativo' fin del SI fin Alternativas múltiples Es muy probable que tengamos la necesidad de incluir en nuestros programas alternativas con muchas opciones posibles. Esto lo podríamos hacer a base de anidar "si ... entonces ... si no", pero si es un número elevado de alternativas, se hace demasiado farragoso como para resultar inteligibles. Por ejemplo, si queremos hacer un menú que dé a elegir cuatro opciones, un posible algoritmo sería: {Algoritmo MENU a base de 'si ... entonces ... sino'} Declaracion de variables ENTEROS: opcion fin declaracion de variables inicio mostrar por pantalla 'menu de opciones:' mostrar por pantalla '1. Diccionario de sinonimos' mostrar por pantalla '2. Diccionario de antonimos' mostrar por pantalla '3. Buscar palabra'
  • 9. mostrar por pantalla '4. Salir' leer del teclado la variable opcion SI opcion = 1 ENTONCES {lo que toque a esta opcion} SI NO, ENTONCES SI opcion = 2 ENTONCES {lo que toque a esta opcion} SI NO, ENTONCES SI opcion = 3 ENTONCES {lo que toque a esta opcion} SI NO, ENTONCES SI opcion = 4 ENTONCES {lo que toque a esta opcion} SI NO, ENTONCES mostrar por pantalla 'opcion incorrecta' fin del SI fin del SI fin del SI fin del SI fin Farragoso, ¿verdad? Para evitar esto (¿os imaginais que en vez de cuatro fueran 20 las alternativas?), está la estructura "según sea". La idea es esta; por ejemplo, como en el algoritmo que hemos puesto del menú, pedimos al usuario que entre una opción, y hay cuatro posibilidades, cuatro posibles valores para los que haremos algo. Entonces, SEGUN lo que valga la variable opción, elegiremos una alternativa de entre todas las posibles. La forma de escribir esto en pseudocódigo es: SEGUN SEA la variable o la expresion HACER
  • 10. VALOR1: {las acciones que toque} ... VALORN: {las acciones que toque} por defecto: {las acciones que toque} fin SEGUN ¿Qué pinta ahí ese 'por defecto'? No es más que una alternativa por si acaso se elige alguna opción no contemplada entre las que se ofrece. Como ejemplo, vamos a ver nuestro menú utilizando la alternativa múltiple SEGUN SEA: {Algoritmo MENU a base de 'segun sea'} Declaracion de variables ENTEROS: opcion fin declaracion de variables inicio mostrar por pantalla 'menu de opciones' mostrar por pantalla '1. Diccionario de sinonimos' mostrar por pantalla '2. Diccionario de antonimos' mostrar por pantalla '3. Buscar palabra' mostrar por pantalla '4. Salir' leer del teclado la variable opcion SEGUN SEA opcion HACER: opcion = 1 : {lo que toque a esta opcion} opcion = 2 : {lo que toque a esta opcion} opcion = 3 : {lo que toque a esta opcion} opcion = 4 : {lo que toque a esta opcion} por defecto: {mostrar un posible mensaje de error} fin SEGUN
  • 11. fin Así queda mucho más claro, no sólo para nosotros, si no para cualquier persona que tuviera que leerlo; además, es una forma más sencilla de manejar una alternativa múltiple :) Podemos abreviar un poquito el texto; es igualmente válido poner, dentro del SEGUN, lo siguiente: SEGUN SEA opcion HACER: 1 : {lo que toque a esta opcion} 2 : {lo que toque a esta opcion} 3 : {lo que toque a esta opcion} 4 : {lo que toque a esta opcion} por defecto: {mostrar un posible mensaje de error} fin SEGUN Sentencias repetitivas Las estructuras de repetición, permiten la ejecución de una lista o secuencia de instrucciones (<bloque de instrucciones>) en varias ocasiones. El número de veces que el bloque de instrucciones se ejecutará se puede especificar de manera explícita, o a través de una condición lógica que indica cuándo se ejecuta de nuevo y cuándo no. A cada ejecución del bloque de instrucciones se le conoce como una iteración. TIPOS DE ITERACIÓN Existen tres tipos principales de sentencias de repetición: • Ciclo mientras • Ciclo haga-mientras • Ciclo para A continuación se describe cada una de ellas. - CICLO MIENTRAS
  • 12. El ciclo mientras permite ejecutar un bloque de instrucciones mientras que una expresión lógica dada se cumpla, es decir, mientras su evaluación dé como resultado verdadero. La expresión lógica se denomina condición y siempre se evalúa antes de ejecutar el bloque de instrucciones. Si la condición no se cumple, el bloque no se ejecuta. Si la condición se cumple, el bloque se ejecuta, después de lo cual la instrucción vuelve a empezar, es decir, la condición se vuelve a evaluar. En el caso en que la condición evalúe la primera vez como falsa, el bloque de instrucciones no será ejecutado, lo cual quiere decir que el número de repeticiones o iteraciones de este bloque será cero. Si la condición siempre evalúa a verdadero, la instrucción se ejecutará indefinidamente, es decir, un número infinito de veces. La forma general del ciclo mientras es la siguiente: Donde, <condición> es la expresión lógica que se evalúa para determinar la ejecución o no del bloque de instrucciones, y <bloque instrucciones> es el conjunto de instrucciones que se ejecuta si la condición evalúa a Verdadero. Ejemplos: Ejemplo 1. Dado un número natural n se desea calcular la suma de los números naturales desde 1 hasta n. ANALISIS DEL PROBLEMA:
  • 14. Ejemplo 2. Calcular el máximo común divisor de dos números naturales, distintos de cero. ANALISIS DEL PROBLEMA: ESPECIFICACIÓN: DISEÑO:
  • 16.
  • 18. 1..2 CICLO HAGA--MIENTRAS El ciclo haga-mientras es similar al ciclo mientras, la diferencia radica en el momento de evaluación de la condición. En el ciclo haga-mientras la condición se evalúa después de ejecutar el bloque de instrucciones, por lo tanto, el bloque se ejecuta por lo menos una vez. Este bloque se ejecuta nuevamente si la condición evalúa a verdadero, y no se ejecuta más si se evalúa como falso. La forma general del ciclo haga-mientras es la siguiente: Donde, <bloque instrucciones> es el conjunto de instrucciones que se ejecuta y <condición> es la expresión lógica que determina si el bloque se ejecuta. Si la <condición> se evalúa como verdadero el bloque es ejecutado de nuevo y si es evaluada como falso no es ejecutado. Después de ejecutar el bloque de acciones se evalúa la <condición>. Ejemplos: Ejemplo 1. El problema de calcular la suma de los números naturales desde 1 hasta n (se puede solucionar usando el ciclo haga-mientras. A continuación se describe el algoritmo solución:
  • 19.
  • 21. Ejemplo 2. El problema de calcular el máximo común divisor de dos números naturales, distintos de cero, se puede solucionar usando el ciclo haga-mientras. A continuación se describe el algoritmo solución:
  • 23. 1..3 CICLO PARA El ciclo para ejecuta un bloque de instrucciones un número determinado de veces. Este número de veces está determinado por una variable contadora (de tipo entero) que toma valores desde un límite inferior hasta un límite superior. En cada ciclo después de ejecutar el bloque de instrucciones, la variable contadora es incrementada en 1 automáticamente y en el momento en que la variable sobrepasa el límite superior el ciclo termina. El valor final de la variable contadora depende del lenguaje de programación utilizado, por lo tanto, no es recomendable diseñar algoritmos que utilicen el valor de la variable contadora de un ciclo para, después de ejecutar el mismo. De la definición de ciclo para se puede inferir que el bloque de instrucciones no se ejecuta si el límite inferior es mayor al límite superior. La forma general del ciclo para es la siguiente: Donde <variable> es la variable contadora del ciclo, la cual debe ser de tipo entero. <lim_inf> es el valor inicial que toma la variable contadora. <lim_sup> es el último valor que toma la variable contadora; cuando el valor de la variable contadora supere este valor, el ciclo termina. <bloque instrucciones> es el conjunto de instrucciones que se ejecuta en cada iteración, mientras la variable contadora no sobrepase el <lim_sup>.
  • 24. Casos: • Cuando <lim_inf> es menor que <lim_sup> ocurre lo siguiente: 1. La variable contadora se vuelve igual a <lim_inf> 2. Se ejecuta <bloque de instrucciones> 3. Se incrementa automáticamente en 1 la variable contadora del ciclo. 4. Si el valor de contador del ciclo es menor o igual que <lim_sup> se vuelve de nuevo al paso 2. De otro modo se abandona el ciclo. • Es de anotar que el valor final de la variable contadora queda incrementada por encima del <lim_sup> para que pueda finalizar el ciclo para variable:= lim_inf, hasta lim_sup ENTRADA SALIDA 14 • Cuando <lim_inf> es mayor que <lim_sup> el ciclo termina sin ejecutarse nunca el <bloque de instrucciones>. Tenga en cuenta que no se genera error al correr el programa Ejemplo: para (x:=5 hasta 4) hacer. Esta línea de código nunca se ejecuta. • Es de anotar que los lenguajes de programación tienen una variable a esta instrucción para que el valor pueda ir en descenso. • Tanto <lim_inf> como <lim_sup> pueden ser expresiones como en el siguiente ejemplo: para(j:=x+1 hasta 2*y) hacer. En este caso se calculan primero los valores de las expresiones (x+1) y (2*y) empleando para esto los valores actuales de x y y para utilizarlos como <lim_inf> y <lim_sup> respectivamente.
  • 25. Ejemplos: Ejemplo 1. El problema de calcular la suma de los números naturales desde 1 hasta n (enunciado anteriormente), se puede solucionar usando el ciclo para, a continuación se muestra el algoritmo solución: Nótese que se requieren menos instrucciones que en las anteriores estructuras dado que el incremento de i se hace automáticamente en la instrucción 7 al repetir el ciclo.
  • 27. Ejemplo 2. Calcular las primeras tres filas de la tabla de multiplicar de un número dado. ANALISIS DEL PROBLEMA: ESPECIFICACIÓN: DISEÑO: Primera División: División Final:
  • 28. Diagrama de flujo: 2.. TIPO DE VARIABLES ÚTILES PARA LA ITERACIÓN Cuando se diseñan algoritmos que incluyen estructuras de control repetitivas, existen ciertas variables que cumplen una función específica en cada iteración del ciclo, las más comunes son: • Las variables contadoras • Las variables acumuladoras • Las variables bandera.
  • 29. 2..1 VARIABLES CONTADORAS Como su nombre lo indica estas variables se usan fundamentalmente para contar, por lo tanto deben ser de tipo entero. Un ejemplo de este tipo de variables es la variable de control en un ciclo para. Una variable contadora se incrementa (o decrementa) en un valor constante en cada iteración del ciclo. Es así como en los algoritmos presentados anteriormente para resolver el problema de calcular la suma de los números naturales desde 1 hasta n, la variable i es una variable contadora. Ejemplo. Desarrollar un algoritmo que imprima los números impares en orden descendente que hay entre 1 y 100. Algoritmo Solución En este caso i es una variable contadora, ya que en cada iteración del ciclo la variable es decrementada en una cantidad fija, 2 en este caso. 19 2..2 VARIABLES ACUMULADORAS La función de una variable acumuladora es almacenar valores numéricos que generalmente se suman (o multiplican) en cada iteración, por lo tanto la variable debe ser de tipo entero o real. Por ejemplo, en los diferentes algoritmos presentados para solucionar el problema de calcular la suma de los números naturales desde 1 hasta n, la variable suma es una variable acumuladora. Ejemplo. Calcular las suma de los cuadrados de los números entre 1 y 100.
  • 30. Algoritmo Solución En este caso suma es una variable acumuladora mientras que la variable i es una variable contadora. 2..3 VARIABLES BANDERA Una variable bandera es utilizada dentro de la condición de un ciclo, para determinar cuándo un ciclo se sigue iterando o cuando no. De esta manera una variable bandera debe ser de tipo booleano o entero. Ejemplo. Realizar un programa que lea una serie de números reales y los sume. El programa debe preguntar al usuario cuando desea ingresar un siguiente dato y si el usuario responde que no desea ingresar más datos el programa debe confirmar la respuesta. Si el usuario desea continuar ingresando datos se debe seguir solicitando datos y si el usuario confirma su deseo de salir, el programa debe mostrar la suma de los datos leídos y terminar. ESPECIFICACIÓN: Donde, datos es la colección de n números reales que el usuario ingresa hasta que decide no continuar ingresando datos y suma es la sumatoria de dichos números y pertenece a los reales.
  • 31. Algoritmo Solución Vale la pena recordar que una variable de tipo booleano toma valores de verdadero y falso. Note que la instrucción mientras (bandera) hacer es equivalente a mientras (bandera = verdadero) hacer. 3.. CORRESPONDENCIA ENTRE CICLOS En la teoría matemática de programación sólo es necesario un tipo de ciclo, en esta sección se explican las correspondencias que hacen posible esta afirmación, tomando como ciclo referencia el ciclo mientras. 3..1 Correspondencia entre el ciclo mientras y el ciclo haga-mientras La diferencia fundamental entre los ciclos mientras y haga-mientras, es que en el segundo se ejecuta por lo menos una vez el <bloque de instrucciones>, mientras que en el primero hay la posibilidad de que no se ejecute alguna vez. El ejecutar el bloque de acciones una vez antes del ciclo mientras permite modelar un ciclo haga-mientras, es decir: 3..2 Correspondencia entre el ciclo para y el ciclo mientras
  • 32. Formalmente, un ciclo para es una forma abreviada de un ciclo mientras, precedido por una asignación y que en cada iteración incrementa una variable. Por lo tanto, el siguiente ciclo para: Es la abreviación del siguiente bloque de acciones: 3..3 Cuando usar estructuras de control definido o indefinidos El ciclo para se conoce comúnmente como estructura de control definida, ya que los valores iniciales y finales especificados para la variable contadora que controla el ciclo determina de manera exacta el número de veces que se ejecuta el ciclo. Para utilizar un ciclo para al resolver un algoritmo se debe determinar el número exacto de veces que se va a ejecutar el ciclo. En el ejemplo de calcular la suma de los números de 1 hasta n. Se sabe que el ciclo se repetirá n veces. En el ejemplo de calcular el máximo común divisor de dos número naturales común divisor de dos números naturales no puede resolverse con un ciclo para, porque no se sabe de antemano cuantas veces se repetirá el ciclo. Gracias.