Вы находитесь на странице: 1из 12

Estructuras de control (continuacin)

3.2) Con cantidad no fija y desconocida de veces, dependiendo de que se cumpla o no,
determinada condicin
Para esta situacin, tenemos 2 estructuras de repeticin posibles, las cuales, no siempre tienen
sus correspondientes implementaciones en todos los lenguajes de programacin.
Para ver las caractersticas de ambas, vamos a resolver el mismo ejemplo con cada una de
ellas.
Ejemplo: Se dispone de las edades (valor entero) de los alumnos de una comisin de 1er. ao.
!o se sabe cu"ntos alumnos posee la comisin. Se solicita calcular e in#ormar la cantidad de
alumnos $ue poseen m"s de 1% aos.
Para resolver este problema, en ambos casos, debemos establecer un #in de ingreso de datos,
&a $ue el enunciado del problema nos dice $ue no se sabe cu"ntos alumnos son en total.
3.2.1) Estructura de iteracin mientras
'tili(aremos la siguiente sinta)is para escribir en los algoritmos, este tipo de iteracin.
mientras (condicin)
accion!es
fin"mientras
*as acciones dentro de la estructura se ejecutar"n mientras la e)presin lgica (condicin) d+
como resultado ,E-./.E-01 en caso contrario, se terminar" la estructura & se continuar"
con el #lujo del programa.
*a2s variable2s $ue intervienen en la e)presin lgica deben ser modi#icadas por las acciones
para $ue la condicin pueda, en alg3n momento, adoptar el valor 4/*S0.
*o primero $ue se eval3a en una estructura 5mientras es la condicin. Si el resultado es
,E-./.E-0 se ejecutan las acciones & a continuacin se vuelve a evaluar la condicin. Pero
si el resultado de la e)presin resulta 4/*S0, se termina la estructura de repeticin.
/ntes de ver cmo $ueda resuelto nuestro ejemplo utili(ando esta estructura de repeticin,
veremos un nuevo concepto $ue ser" necesario aprender, para poder reali(ar la #inali(acin del
ingreso de datos.
Concepto de fin de datos # $ato centinela
El #in de datos es un valor especial de la variable de entrada $ue le indica al algoritmo $ue no
e)isten m"s datos a ingresar. Este valor debe ser tal $ue no pertene(ca al conjunto de datos
3tiles, pero debe ser del mismo tipo de dato, $ue los datos $ue se ingresan. Slo sirve para
indicar $ue no 6a& m"s datos a procesar. / este dato se lo denomina dato centinela.
Para nuestro ejemplo, acordaremos $ue la finali%acin del in&reso de datos se producir"
cuando se ingrese una edad igual a 7, &a $ue este valor seguramente no puede ser una edad
posible.
,eamos entonces, cmo $ueda el algoritmo $ue resuelve nuestro ejemplo, con esta estructura
de repeticin.
1
/lgoritmo E./.ES
entero E./., 80!9
:nicio
80!9 7
escribir(5:ngrese la edad del alumno (7;4in de ingreso):<)
leer (E./.)
mientras (E./.=>7)
si (E./.>1%) entonces
80!9 80!9 ? 1
#in@si
escribir (5:ngrese la edad del alumno (7;4in de ingreso):<)
leer (E./.)
#in@mientras
escribir (5*a cantidad de alumnos con m"s de 1% aos es: 5, 80!9)
4in
2
Concepto 'andera
/ continuacin desarrollaremos el concepto 5bandera< $ue no necesariamente se debe
relacionar con la estructura de repeticin 5mientras<. *o introducimos a$u, pues 6aremos
algunos ejemplos en los cuales aplicaremos este concepto.
'na bandera (#lag) es una variable $ue puede tomar solamente dos valores e)clusivos durante
la ejecucin de un programa (bandera en alto, arriba 2 bandera baja).
Se usa para conservar el estado de una condicin. !ormalmente cada valor tiene asignado un
signi#icado. :ndica el estado de un evento o situacin. Se usa para controlar el #lujo de un
programa.
9ambi+n se conoce este concepto bajo el t+rmino interruptor (sAitc6), conmutador o marca.
!ormalmente suelen tomar los valores 7 o 1, o bien, valores lgicos (booleanos) del tipo
verdadero (true) o #also (#alse). .ependiendo de las posibilidades del lenguaje de
programacin, en cuanto a tipos de dato, se usar" de una #orma o de otra.
El nombre de interruptor surge justamente de cuando toma los valores 7 o 1, simulando un
interruptor abierto2cerrado o encendido2apagado.
Casos en los cuales puede ser (til usar una )andera
- Repetir una serie de acciones mientras que una determinada condicin sea verdadera.
(Para salir de un ciclo de repeticin cuando algo ha sucedido)
Supongamos $ue se desea saber si un conjunto de 17 n3meros reales est" ordenado en #orma
ascendente.
/lgoritmo ES9/@0@!0@0-.E!/.0
entero 8/!9, B/!.
real !-0, /!9
:nicio
B/!. 7
escribir (5:ngrese un n3mero real: <)
leer (!-0)
8/!9 1
/!9 !-0
mientras (8/!9 = 17 & B/!.;7)
escribir (5:ngrese un n3mero real: <)
leer (!-0)
si (!-0=/!9) entonces
B/!. 1
sino
/!9 !-0
#in@si
8/!9 8/!9 ? 1
#in@mientras
si (B/!. ; 7) entonces
escribir (5El conjunto est" ordenado<)
sino
escribir (5El conjunto no est" ordenado<)
#in@si
4in
3
- Realizar un conjunto especfico de acciones si se cumple determinada condicin, una vez
que se cumple dicha condicin, no realizar m!s dichas acciones.
("a#er si se ha pasado por un determinado punto del algoritmo)
Supongamos $ue se dispone de un conjunto de C7 n3meros enteros todos distintos de 7, salvo
un valor. Se desea saber cu"ntos n3meros pares 6a& antes de la aparicin del 7, & cu"ntos
n3meros pares 6a&, despu+s de la aparicin del 7.
/lgoritmo 8'/!90S
entero 8/!91, 8/!92, !-0, :
logico B/!.
:nicio
B/!. verdadero
8/!91 7
8/!92 7
para : 1, C7
escribir (5:ngrese un n3mero entero:<)
leer (!-0)
si (!-0;7) entonces
si (B/!.) entonces (D)
B/!. #also
#in@si
sino
si resto(!-0,2);7 entonces
si (B/!.) entonces (D)
8/!91 8/!91 ?1
sino
8/!92 8/!92 ?1
#in@si
#in@si
#in@si
#in@para
escribir (58antidad de n3meros pares antes del 7: 5, 8/!91)
escribir (58antidad de n3meros pares despu+s del 7: 5, 8/!92)
4in
(D) !otar, $ue preguntar:
si (B/!.) entonces
es lo mismo $ue preguntar:
si (B/!.;verdadero) entonces
&a $ue si B/!. contiene el valor verdadero, verdadero;verdadero resulta en verdadero, $ue
justamente es el valor de B/!.,
& si B/!. contiene el valor #also, #also;verdadero resulta en #also, $ue justamente es el valor
de B/!..
4
Corte de control
El corte de control es un m+todo en el cual se utili(a la estructura de repeticin 5mientras< 2 o
m"s veces.
Se aplica este m+todo cuando se tiene un grupo de datos a procesar, agrupados por uno de
dic6os datos, con#ormando subgrupos dentro del grupo, & se $uieren sacar resultados del tipo
totales, valor mnimo, valor m")imo, promedio, etc., a nivel de los subgrupos & a nivel del grupo
general.
'n corte de control se produce cuando cambia el valor del dato en base al cual, est"n
agrupados todos los datos a procesar. 8uando se produce el corte, se altera el #lujo de
programa $ue se estaba ejecutando para eventualmente terminar de calcular & mostrar, si as
lo re$uiere el problema, los resultados solicitados.
-esulta necesario determinar el momento preciso en el cual #inali(a el ingreso de los datos de
un subgrupo & el comien(a el ingreso de datos del siguiente.
En #orma gen+rica podramos decir $ue un algoritmo $ue apli$ue el m+todo de corte de control
debe tener el siguiente es$uema:
/lgoritmo EEE
declaracin de las variables necesarias
:nicio
2 :niciali(acin
1) acciones para el preFprocesamiento del grupo G contadores & acumuladores
H del grupo
2) escribir (5IIIIIII<)
leer (variable2s)
3) mientras (no acabe el grupo) 2
G -esguardo valor anterior
*) acciones para preFprocesamiento del subgrupo G del dato $ue agrupa
G :niciali(acin contadores &
H acumuladores del subgrupo
+) mientras (no cambie de subgrupo)
2 :ncremento de contadores,
,) acciones para el procesamiento del subgrupo G acumuladores, etc.
H
-) escribir (5IIIIIII<)
leer (variable2s)
.) #in@mientras
2 8"lculo & e)6ibicin
G de los resultados del
/) acciones para el postFprocesamiento del subgrupo G subgrupo
G :ncremento de contadores,
H acumuladores del grupo
10) #in@mientras
2 8"lculos & e)6ibicin
11) acciones para el postFprocesamiento del grupo G de los resultados del
H grupo
4in
5
$%plicacin del m&todo'
1) 8omo se dijo al inicio de este tema, normalmente ser" necesario calcular e in#ormar totales a
nivel de todo el grupo. Para ello 6abr" $ue iniciali(ar contadores &2o acumuladores antes de
comen(ar con el procesamiento de todos los datos del grupo.
2) Se comien(a con la lectura de los datos.
3) Se controla $ue no se acabe el grupo, comparando el valor ledo del dato en base al cual se
agrupan todos los datos, contra el valor establecido como #in de dato (dato centinela). Si no
coincide, se comien(a con las acciones contenidas dentro de esta estructura de iteracin.
*) / medida $ue se van ingresando los datos a procesar, con cada nueva lectura se pisa el
valor almacenado en la lectura anterior. *uego, es necesario resguardar en una variable
au)iliar, el valor del dato en base al cual est"n agrupados los subgrupos, para poder
compararlo con el siguiente valor, & as detectar, si se contin3a o no procesando datos del
mismo subgrupo.
/dem"s, es necesario iniciali(ar en esta instancia, todos los contadores &2o acumuladores $ue
se necesiten para obtener los resultados solicitados a nivel de cada subgrupo.
+) Se controla $ue no se acabe el subgrupo, controlando el valor ledo del dato en base al cual
se agrupan todos los datos, contra el valor resguardo.
,) Si coincide, se comien(a con las acciones contenidas dentro de esta estructura de iteracin
$ue tienen $ue ver con las actuali(aciones de los contadores & acumuladores del subgrupo.
-) Se contin3a con la lectura de nuevos datos.
.) /l alcan(arse el #in@mientras del subgrupo, se retorna a controlar de la condicin del
mientras correspondiente, & si la condicin se sigue cumpliendo, se vuelve a iterar. 8uando la
condicin no se cumple m"s, signi#ica $ue los datos reci+n ledos se corresponden con los de
un nuevo subgrupo o bien, $ue se alcan( el #in del grupo, con lo cual, se abandona la
estructura de iteracin del subgrupo & se contin3a ejecutando las acciones siguientes.
/) Se reali(an c"lculos en caso de ser necesario (por ejemplo, se obtiene un promedio), se
actuali(an contadores &2o acumuladores generales (a nivel del grupo), & se e)6iben los
resultados del subgrupo recientemente #inali(ado.
10) /l alcan(arse el #in@mientras del grupo, se retorna a controlar la condicin del mientras
correspondiente, & si la condicin se sigue cumpliendo se vuelve a iterar, con las acciones
indicadas en el punto *). 8uando la condicin no se cumple m"s, signi#ica $ue se 6a alcan(ado
el #in de datos (no 6a& m"s datos para ingresar & procesar), con lo cual se abandona la
estructura de iteracin del grupo & se contin3a ejecutando las acciones siguientes.
11) Se reali(an c"lculos en caso de ser necesario (por ejemplo, se obtiene un promedio), & se
e)6iben los resultados del grupo general.
,eamos un ejemplo para entender m"s #"cilmente el m+todo de corte de control.
Ejemplo: Se dispone de los registros de las lluvias cadas mensualmente en distintas regiones
de un pas. 8ada registro contiene los siguientes datos: cdigo de regin, mes & cantidad de
milmetros cados. *os datos vienen agrupados por cdigo de regin, & cuando no llueve
durante un mes, no se registra in#ormacin (o sea, $ue no todos los grupos de regiones tienen
la misma cantidad de registros).
!o se sabe cu"ntos registros son en total. Slo se sabe $ue el ingreso de datos #inali(a cuando
se ingresa un cdigo de regin igual a 7.
Se pide in#ormar el total de lluvias cado por regin & el total de lluvias cado en todo el pas. E
in#ormar adem"s, la regin & la cantidad de lluvia correspondiente, en la cual llovi m"s, en
todo el ao. Si 6ubiera m"s de una regin con igual cantidad, in#ormar la primera $ue se
encuentra.
6
/lgoritmo **',:/S
entero -EJ, KES, KK, /!9, 9-EJ, 9P/:S, K/E-EJ, K/EKK, B/!.
:nicio
B/!. 7
9P/:S 7
escribir (5:ngrese regin, mes & milmetros llovidos (-egin 7;4in ingreso:<)
leer (-EJ, KES, KK)
mientras (-EJ => 7)
/!9 -EJ
9-EJ 7
mientras (-EJ ; /!9)
9-EJ 9-EJ ? KK
escribir (5:ngrese regin, mes & milmetros llovidos (-egin 7;4in ingreso:<)
leer (-EJ, KES, KK)
#in@mientras
escribir (5El total de lluvias cado en la regin 5, /!9, 5 es: 5, 9-EJ)
si (B/!. ; 7) entonces
K/E-EJ /!9
K/EKK 9-EJ
B/!. 1
sino
si (9-EJ > K/EKK) entonces
K/E-EJ /!9
K/EKK 9-EJ
#in@si
#in si
9P/:S 9P/:S ? 9-EJ
#in@mientras
escribir (5El total de lluvias cado en el pas es: 5, 9P/:S)
escribir (5En la regin 5, K/E-EJ, 5 ca& ma&or cantidad de lluvia 5, K/EKK)
4in
Se puede 6abar de corte de control simple & de corte de control compuesto.
El ejemplo $ue acabamos de ver se corresponde con un corte de control simple, pues se
controla el cambio de valor de un solo dato, para el cambio de subgrupo.
El corte de control compuesto sucede cuando se debe controlar m"s de un dato para detectar
el cambio de subgrupo. En este caso, van a e)istir tantas estructuras de control repetitivas
anidadas dentro de la estructura general como cortes de control 6a&a.
En nuestro ejemplo anterior, sera necesario usar un corte de control compuesto, si por ejemplo
los datos, en lugar de estar detallados por mes a nivel de la regin, estuvieran detallados por
n3mero de da, de un determinado mes, de una determinada regin. .e este modo, dentro del
subgrupo de regin, tendramos subgrupos de meses. El agrupamiento entonces, debera ser
por cdigo de regin & n3mero de mes.
Lueda como tarea, modi#icar el algoritmo anterior, partiendo a6ora de la siguiente consigna.
*os datos a procesar son: cdigo de regin, n3mero de mes, n3mero de da & cantidad de
milmetros cados.
7
M como resultados, $ueremos adem"s, calcular & mostrar, el total de lluvia por mes, dentro de
cada regin (&a $ue a6ora ese dato no es un dato de entrada, si no $ue debe calcularse a partir
de la suma de los milmetros cados durante dic6o mes).
8
3.2.2) Estructura de iteracin repetir
'tili(aremos la siguiente sinta)is para escribir en los algoritmos, este tipo de iteracin.
repetir
accion!es
1asta (condicin)
*as acciones dentro de la estructura repetir de ejecutan 6asta $ue la e)presin lgica
(condicin) d+ como resultado ,E-./.E-01 en caso contrario, se continua dentro de la
estructura de repeticin.
*a2s variable2s $ue intervienen en la e)presin lgica deben ser modi#icadas por las acciones
para $ue la condicin pueda, en alg3n momento, adoptar el valor ,E-./.E-0.
,eamos entonces, cmo $ueda el algoritmo $ue resuelve nuestro ejemplo inicial, con esta
estructura de repeticin.
/lgoritmo E./.ES
entero E./., 80!9
:nicio
80!9 7
repetir
escribir (5:ngrese la edad del alumno (7;4in de ingreso):<)
leer (E./.)
si (E./.>1%) entonces
80!9 80!9 ? 1
#in@si
6asta (E./.;7)
escribir (5*a cantidad de alumnos con m"s de 1% aos es: 5, 80!9)
4in
/ veces, puede suceder $ue el dato ledo como #in de dato, no corresponda ser procesado.
*uego, una alternativa de solucin a esto, utili(ando esta estructura de repeticin, sera agregar
al algoritmo, el ingreso de otro dato $ue sirva para determinar si se contin3a ingresando nuevos
datos o se #inali(a.
8on esta alternativa, modi#icaramos la solucin a nuestro ejemplo, de la siguiente #orma.
/lgoritmo E./.ES
entero E./., 80!9
car"cter -ESP
:nicio
80!9 7
repetir
escribir (5:ngrese la edad del alumno:<)
leer (E./.)
si (E./.>1%) entonces
80!9 80!9 ? 1
#in@si
escribir (5N8ontin3a ingresando m"s datosO (S2!)<)
leer (-ESP)
6asta (-ESP;P!P)
escribir (5*a cantidad de alumnos con m"s de 1% aos es: 5, 80!9)
4in
9
$iferencias entre la estructura mientras y la estructura repetir
F *a estructura 5mientras< termina cuando la condicin es #alsa, mientras $ue 5repetir< termina
cuando la condicin es verdadera.
F *as acciones contenidas dentro de la estructura de repeticin 5repetir< se ejecutan al menos
una ve(, &a $ue el control de la condicin se reali(a al #inal de la estructura. En cambio, en la
estructura de repeticin 5mientras<, el control de la condicin se reali(a al comien(o de la
misma, con lo cual, las acciones contenidas dentro de ella, pueden llegar a no ejecutarse
nunca, si la condicin evaluada resulta #alsa desde un comien(o.
Por lo tanto, la eleccin de un tipo de estructura u otra, depender" de la situacin problem"tica
$ue se deba resolver. Siempre alguna resultar" mejor $ue otra.
/nalicemos cu"l es la ptima para nuestro ejemplo, comparando la solucin usando 5mientras<
con la primera de las soluciones usando 5repetir<.
8on la estructura 5repetir<, cuando se ingrese la 3ltima de las edades, o sea 7, la misma ser"
comparada contra 1% para evaluar si debe contarse o no & #inalmente se comparar" dic6a edad
contra 7 & al resultar igual, reci+n entonces #inali(ar" la iteracin.
8on la estructura 5mientras<, cuando se ingrese la 3ltima de las edades, o sea 7, la misma se
evaluar" en la condicin del 5mientras< & al ser igual a 7, se abandonar" la iteracin, con lo cual
no ser" comparada contra 1%. Por ende est" 3ltima estructura es la ptima.
'ucle infinito
'n conjunto de acciones contenidos dentro de una estructura de repeticin $ue itera
inde#inidamente se considera bucle in#inito o sin #in. Esto se dara si la condicin $ue controla la
repeticin no se modi#ica nunca.
2alidacin de datos
Siempre $ue se ingresan datos a procesar por un programa es importante validarlos, esto es,
veri#icar $ue los mismos son valores v"lidos pertenecientes a un dominio de valores esperados,
pues de no ser as, se podra generar un error en la ejecucin del programa, al utili(ar un dato
no v"lido. *a idea es comparar el valor ingresado con lo esperado & slo continuar con el
procesamiento del mismo, si el valor es v"lido, caso contrario se lo debe volver a ingresar.
*a estructura de iteracin 5mientras< & la estructura de iteracin 5repetir< se utili(an siempre $ue
se desee validar el ingreso de datos. / continuacin veremos su uso en un ejemplo.
Ejemplo: Se dispone de las notas (valor real) de los alumnos Q7 alumnos de una comisin de
1er. ao. Se solicita calcular e in#ormar el promedio de notas.
10
Usando la estructura mientras para validar.
/lgoritmo P-0KE.:0
entero R
real !09/, S'K/
:nicio
S'K/ 7
para R 1, Q7
escribir (5:ngrese la nota del alumno 5, R, 5: <)
leer (!09/)
mientras (!09/=7 o !09/>17)
escribir (5:ngrese la nota del alumno 5, R, 5: <)
leer (!09/)
#in@mientras
S'K/ S'K/ ? !09/
#in@para
escribir (5El promedio de notas es: 5, S'K/2Q7)
4in
Usando la estructura repetir para validar.
/lgoritmo P-0KE.:0
entero R
real !09/, S'K/
:nicio
S'K/ 7
para R 1, Q7
repetir
escribir (5:ngrese la nota del alumno 5, R, 5: <)
leer (!09/)
6asta (!09/>;7 & !09/=;17)
S'K/ S'K/ ? !09/
#in@para
escribir (5El promedio de notas es: 5, S'K/2Q7)
4in
/ simple vista se nota $ue la estructura de iteracin 5repetir< es m"s cmoda para 6acer la
validacin, &a $ue permite escribir cdigo m"s corto. .e todos modos, la eleccin de una u otra
va a depender de las posibilidades $ue brinde el lenguaje de programacin, &a $ue como
mencionamos anteriormente, algunos lenguajes no implementan ambas posibilidades.
11
Estructuras de control anidadas
Es posible escribir las estructuras de control una dentro de otra, en una especie de anidacin.
Sa& $ue tener presente $ue la estructura interna debe estar totalmente contenida dentro de la
e)terna & no puede e)istir solapamiento.
8orrecto 8orrecto :ncorrecto
12

Вам также может понравиться