1. LA ESTRUCTURA REPETITIVAS:
La estructura do while es otra estructura repetitiva, la cual ejecuta al menos
una vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar
el bloque.
Esta estructura repetitiva se utiliza cuando conocemos de antemano que
por lo menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while
o del for que está en la parte superior.
Representación gráfica:
El bloque de operaciones se repite MIENTRAS que la condición sea
Verdadera.
Si la condición retorna Falso el ciclo se detiene. En Java, todos los ciclos repiten
por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una
vez.
2. LA ITERACION DO – WHILE
Su sintaxis será :
do { proposición 1 ;
proposición 2 ;
...............
} while (expresión) ;
Expresado en palabras , esto significa : ejecute las proposiciones , luego repita la
ejecución mientras la expresión dé un resultado CIERTO . La diferencia
fundamental entre esta iteración y la anterior es que el DO-WHILE se ejecuta
siempre AL MENOS una vez , sea cual sea el resultado de expresión.
ITERACION FOR
El FOR es simplemente una manera abreviada de expresar un WHILE , veamos
su sintaxis :
for ( expresión1 ; expresión2 ; expresion3 ) {
proposición1 ;
proposición2 ;
..............
}
Esto es equivalente a :
expresión1 ;
while ( expresión2 ) {
proposición1 ;
proposición2 ;
..............
3. expresion3 ;
}
Ejemplo de un programa for
#include<stdio.h>
#include<math.h>
/* Programa para tabular la funcion y = Sen(x) */
main()
{
float a=0;
float b=1.6;
float c=0.1;
floatx,y;
for(x=a; x<=b; x=x+c)
{
y=sin(x);
printf("%f %f",x,y);
}
printf(" Presiona una tecla "); getch();
}
otro ejemplo:
#include<stdio.h>
#include<math.h>
/* Programa para tabular la función y = sen(x) */
main()
{
floatx,y;
4. for(x=0.0; x<=1.6; x=x+0.1)
{
y=sin(x);
printf(" x = %f y = %f",x,y);
}
printf("Presiona una tecla"); getch();
}
La expresión1 es una asignación de una ó más variables , (equivale a una
inicialización de las mismas ) , la expresión2 es una relación de algun tipo que ,
mientras dé un valor CIERTO , permite la iteración de la ejecución y expresión3 es
otra asignación , que comunmente varía alguna de las variables contenida en
expresión2 .
Todas estas expresiones , contenidas en el paréntesis del FOR deben estar
separadas por PUNTO Y COMA y NO por comas simples .
No es imprescindible que existan TODAS las expresiones dentro del paréntesis
del FOR ,pudiendose dejar en blanco algunas de ellas , por ejemplo :
for ( ; exp2 ; exp3) ó
for (exp1 ; ; ) ó
for ( ; ; )
Estas dos últimas expresiónes son interesantes desde el punto de vista de su falta
de término relacional , lo que implica que el programador deberá haber previsto
alguna manera alternativa de salir del lazo ( probablemente mediante BREAK ó
RETURN como veremos más adelante ) ya que sinó , la ejecución del mismo es
infinita ( ó tan larga como se mantenga encendida la computadora ) .
LA SENTENCIA BREAK
El BREAK , ya brevemente descripto con el SWITCH , sirve también para terminar
loops producidos por WHILE , DO-WHILE y FOR antes que se cumpla la condición
5. normal de terminación . En el EJEMPLO siguiente vemos su uso para terminar un
WHILE indeterminado.
#include<stdio.h>
#include<conio.h>
main()
{
char c ;
printf("ESTE ES UN LOOP INDEFINIDO ") ;
while(1) {
printf( "DENTRO DEL LOOP INDEFINIDO (apriete una tecla):" ) ;
if( (c = getch()) == 'Q' )
break ;
printf( "nNO FUE LA TECLA CORRECTA PARA ABANDONAR EL LOOP ") ;
}
printf("nTECLA CORRECTA : FIN DEL WHILE ") ;
}
Obsérvese que la expresión while(1) SIEMPRE es cierta , por lo que el programa
correrá imparable hasta que el operador oprima la tecla "secreta" Q . Esto se
consigue en el IF , ya que cuando c es igual al ASCII Q se ejecuta la instrucción
BREAK ,dando por finalizado el WHILE .
El mismo criterio podría aplicarse con el DO-WHILE ó con FOR , por ejemplo
haciendo
for (;;) { /* loop indefinido */
............
if( expresión )
break ; /* ruptura del loop cuando expresión sea verdadera */
}
6. LA SENTENCIA CONTINUE
La sentencia CONTINUE es similar al BREAK con la diferencia que en vez de
terminar violentamente un loop , termina con la realización de una iteración
particular y permitiendo al programa continuar con la siguiente.
LA FUNCION EXIT()
La función EXIT() tiene una operatoria mucho más drastica que las anteriores , en
vez de saltear una iteración ó abandonar un lazo de programa , esta abandona
directamente al programa mismo dándolo por terminado . Realiza también una
serie de operaciones útiles como ser , el cerrado de cualquier archivo que el
programa hubiera abierto , el vaciado de los buffers de salida , etc.
Normalmente se la utiliza para abortar los programas en caso de que se esté por
cometer un error fatal éinevitable . Mediante el valor que se le ponga en su
argumento se le puede informar a quien haya llamado al programa ( Sistema
Operativo , archivo .bat , u otro programa ) el tipo de error que se cometió.
SENTENCIA GOTO
Si Ud. se ha admirado de que C tenga la operación GOTO , recuerde que el hecho
de existir NO lo obliga a usarla , en el mismo sentido que por tener puertas los
aviones no está obligado a saltar por ellas en pleno vuelo.
El uso del GOTO implica un salto incondicional de un lugar a otro del programa .
Esta práctica hace que los programas sean muy dificiles de corregir ó mantener.
Si no quedara más remedio que usarlo, (y en programación estructurada
SIEMPRE hay remedio) debe marcarse el destino del salto mediante un nombre
seguido por dos puntos .
if( c == 0 ) goto OTRO_LADO ;
.............................
OTRO_LADO:
printf(........
7. En este caso si c es cero se saltean todas las sentencias entre el if y el destino
,continuandose con la ejecución del printf() . El destino puede ser tanto posterior
como anterior al GOTO invocante .
Estructuras de control
En lenguajes de programación, las estructuras de control permiten modificar el
flujo de ejecución de las instrucciones de un programa.
Con las estructuras de control se puede:
De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-
Then-Else y Select-Case)
Ejecutar un grupo de sentencias mientras exista una condición (Do-While)
Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until)
Ejecutar un grupo de sentencias un número determinado de veces (For-
Next)
Etc
Todas las estructuras de control tienen un único punto de entrada y un único punto
de salida. Las estructuras de control se puede clasificar en : secuenciales,
iterativas y de control avanzadas. Esto es una de las cosas que permite que la
programación se rija por los principios de la programación estructurada.
Los lenguajes de programación modernos tienen estructuras de control similares.
Básicamente lo que varía entre las estructuras de control de los diferentes
lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la
estructura.
Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos
guardados.
8. Tipos de estructura de control
Algunas estructuras de control en el lenguaje Java
Antecendentes
El término "estructuras de control", viene del campo de la ciencia computacional.
Cuando se presentan implementaciones de Java para las estructuras de control,
nos referimos a ellas con la terminología de la Especificación del lenguaje Java,
que se refiera a ella como instrucciones.
Ejecución secuencial
Pero por lo general las instrucciones se ejecutan una después de la otra, en el
orden en que están escritas, es decir, en secuencia. Este proceso se conoce como
ejecución secuencial.
Transferencia de control
En Java, como en otros lenguajes de programación por excelencia como C y/o
C++, el programador puede especificar que las siguientes instrucciones a
ejecutarse tal vez no sea la siguiente en secuencia. Esto se conoce como
transferencia de control. Hay que tener en cuenta que la instrucción goto es una
palabra reservada pero no se utiliza ni se recomienda. Un programa bien
estructurado no necesita de esta instrucción. Si sabes programar no utilizaras
goto.
Estructura de control: selección if simple
Se trata de una estructura de control que permite redirigir un curso de acción
según la evaluación de una condición simple, sea falsa o verdadera. Por ejemplo:
Escribir un programa en Java que compare dos números e indique si cuál es
mayor, menor, mayor y/o igual, menor y/o igual, o si son iguales:
9. StringstrComparacion = "";
...
if( numero1 == numero2 )
strComparacion += numero1 + " == " + numero2;
if( numero1 > numero2 )
strComparacion += numero1 + " > " + numero2;
if( numero1 < numero2 )
strComparacion += numero1 + " < " + numero2;
if( numero1 >= numero2 )
strComparacion += numero1 + " >= " + numero2;
if( numero1 <= numero2 )
strComparacion += numero1 + " <= " + numero2;
System.out.println(strComparacion);
Estructuras de decisión Contenido III. - Estructuras de decisión 3.1 Selección de
alternativas 3.2 La construcción if-then-else 3.3 Ifs anidados 3.4 C
Estructuras de Selección
LA ESTRUCTURA DE SELECCIÓN IF
La sentenciaifse la conoce como estructura de selección simple y su función es
realizar o no una determinada acción o sentencia, basándose en el resultado de la
evaluación de una expresión (verdadero o falso), en caso de ser verdadero se
ejecuta la sentencia.
10. Fig. 5.1
La estructura de selección if (que se muestra en la figura 5.1) trabaja de la
siguiente manera: si la evaluación de la expresión o expresiones es verdadera ( 1 )
entonces se ejecuta la sentencia a la cual se refiere la estructura de control if.
Si fueran varias sentencias a las que se refiere la estructura if (como se muestra
en la figura 5.2) se tiene que encerrar todas las sentencias entre llaves ( { } ) y si la
evaluación de la expresión es correcta entonces se ejecuta todas las sentencias
contenidas entre las llaves.
Fig. 5.2
Si la evaluación de la expresión o expresiones resultaría falsa (0), entonces no se
ejecuta las sentencias.
Por ejemplo si dada la edad de una persona quiero dar un mensaje de que es o no
mayor de edad, suponiendo que una persona mayor de edad tiene por lo menos
21 años, el procedimiento será el siguiente.
#include <iostream.h>
void main()
{
cout<<"¿Qué edad tienes? n";
cin>>edad
if( edad > 20 )
cout<<"Eres mayor de edad" ;
}
11. #include<iostream.h>
voidmain()
{
cout<<"¿Qué edad tienes? n";
cin>>edad
if ( edad > 20 )
{cout<<"Eres mayor de edad";
cout<<"Te estas volviendo viejo ";
}
}
En Pseudocódigo el anterior ejemplo se vería de la siguiente forma:
Inicio
Mostrar “¿Qué edad tienes?”
Leer edad
Si Edad > 20 Entonces
Mostrar “Eres mayor de Edad”
Fin Si
Fin
El diagrama de flujo de la estructura if se muestra en la Fig. 5.3, este diagrama
contiene el símbolo diamante que es llamado el símbolo de decisión, que indica
que decisión se debe tomar. El símbolo de decisión contiene una expresión, y la
evaluación de ésta será verdadera o falsa. Las flechas nos indican los dos
posibles caminos que se pueden tomar.
12. fig 5.3
El anterior diagrama de flujo funciona de la siguiente manera:
1. Si Edad es mayor que 20 (verdadero) entonces se muestra “Eres mayor de
Edad”
2. Si no entonces no hace nada
Importante. Para mantener el código legible es bueno dejar espacios o sangrías
en todas las líneas de código que están dentro de una estructura if / else o if, estas
instrucciones se las alinean un poco más a la derecha y así podemos notar
claramente que forman parte de las sentencias que componen a la estructura if.
Esta práctica se puede aplicar a cualquier estructura de control.
ESTRUCTURA DE SELECCIÓN IF / ELSE
La estructura if / else lo que hace es ejecutar una acción si el resultado de la
evaluación de la expresión es verdadera y otra acción si el resultado de la
evaluación es falsa.
La diferencia con utilizar sólo la estructura if es que si la expresión evaluada es
verdadera sólo en ese caso se ejecuta una acción de otro modo se pasa de largo.
En cambio en la estructura if / else si la expresión es falsa entonces se ejecuta
otra acción.
13. Fig. 5.4
En síntesis lo que hace esta estructura es realizar una acción si la expresión es
verdadera y otra si es falsa.
Aquí tenemos un ejemplo para ilustrar la estructura if / else.
#include <iostream.h>
void main()
{
if( edad > 20 )
cout<<"Eres mayor de edad" ;
else
cout<<"No eres mayor de edad";
}
El diagrama de flujo correspondiente a esta estructura es el siguiente:
fig. 5.5
El anterior diagrama de flujo funciona de la siguiente manera:
14. 1. Si Edad es mayor que 20 (verdadero) entonces se muestra: “Eres mayor de
Edad”.
2. Si no entonces se muestra: “NO eres mayor de Edad”.
ESTRUCTURAS CONDICIONALES ANIDADAS
Existe el caso de estructuras if, if/elseanidadas, que no es más que una estructura
if o if/else dentro de otra.
Por ejemplo se desea conocer cuál es el mayor de tres números A, B ,C.
1: #include<iostream.h>
2: voidmain()
3: {
4: int A=0, B=0, C=0;
5: cout<<"Ingrese 3 números";
6: cin>>A>>B>>C; //Lectura de valores por teclado
7:if( A > B )
8: {if(A > C )
9: cout<<"A es el número mayor";
10: else
11: cout<<"C es el número mayor";
12: }
13: else
14: {if ( B > C )
15: cout<<"B es el número mayor";
16: else
17: cout<<"C es el número mayor";
18: }
19: }
15. Para explicar el funcionamiento del problema anterior se han enumerado todas las
líneas de tal programa.
Suponiendo que los valores ingresados por teclado fueran: A=2, B=1, C=5. El
programa actuaría de la siguiente manera.
El programa se ejecuta secuencialmente hasta la línea 7 donde encuentra una
expresión. Cuando se evalúe la expresión (A > B) línea 7, el resultado es
verdadero (2 > 1), por lo tanto el programa ejecuta la línea 8, en dicha línea
encuentra otra expresión (A > C) y el resultado de evaluar dicha expresión es falso
(2 > 5) por lo que el programa salta hasta la línea 11 y muestra "C es el número
mayor". Luego va a la línea 12 y verifica el cierre de llaves y finalmente salta
hasta la línea 19 siendo la última línea de ejecución.