Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructuras
Estructuras
Estructura y Contenidos
4.1. ESTRUCTURA SECUENCIAL.
4.2. ESTRUCTURAS DE SELECCIN.
4.2.1. Seleccin simple ( if ).
4.2.2. Seleccin binaria ( if ... else ).
4.2.3. Seleccin mltiple ( switch ).
4.2.4. Anidamientos.
4.3. ESTRUCTURAS DE REPETICIN O ITERATIVAS. BUCLES.
4.3.1. Estructuras no deterministas ( while, do...while ).
4.3.2. Estructuras deterministas ( for ).
4.3.3. Las sentencias break y continue.
4.3.4. Diseo de bucles: anidamientos y bucles infinitos.
Fundamentos de Informtica
Tema 4:
Estructuras de Control
OBJETIVOS
Fundamentos de Informtica
Fundamentos de Informtica
ESTRUCTURA SECUENCIAL
Fundamentos de Informtica
ESTRUCTURA SECUENCIAL
Inicio
Inicio
V
Sentencia
Seleccin
Sentencias
Sentencias
Sentencia
Sentencia
Sentencias
Fin
Estructura Secuencial
F
Fin
Iteracin
Estructura no Secuencial
Fundamentos de Informtica
Fundamentos de Informtica
ESTRUCTURAS DE SELECCIN
if
Seleccin Binaria
if ... else
Seleccin Mltiple
switch
Fundamentos de Informtica
SELECCIN SIMPLE
NO condicin
SI
sentencias_si
if (<condicin>)
{
<sentencias_si>
}
<sentencias_fuera>
sentencias_fuera
Fundamentos de Informtica
SELECCIN BINARIA
NO condicin
sentencias_no
SI
sentencias_si
sentencias_fuera
if (<condicin>)
{
<sentencias_si>
}
else
{
<sentencias_no>
}
<sentencias_fuera>
Fundamentos de Informtica
SELECCIN MTIPLE
switch ( <selector> )
{
case <valor_1>:<Sentencias_1>
break;
case <valor_2>:<Sentencias_2>
break;
case <valor_3>:<Sentencias_3>
break;
default:
<Sentencias_df>
}
Fundamentos de Informtica
SELECCIN MTIPLE
/* Ejemplo de un men muy simple */
#include <iostream>
using namespace std;
int main()
{
int opcion;
cout << 1.Espaa\n 2.Francia\n 3.Italia\n;
cout << 4.Inglaterra << endl;
cout << Selecciona una opcin: ; cin >> opcion;
switch (opcion)
{
case 1: cout << Hola\n;
break;
case 2: cout << Allo\n;
break;
case 3: cout << Pronto\n; break;
case 4: cout << Hello\n; break;
}
return 0;
}
Fundamentos de Informtica
SELECCIN MTIPLE
/* Ejemplo de cmo englobar varios casos */
#include <iostream>
using namespace std;
int main()
{
char letra;
cout << Introduce una letra: ; cin >> letra;
switch (letra) /* Aqu el selector es una variable */
{ case a:
/* de tipo carcter*/
case e:
case i:
case o:
case u: cout << Es una vocal minscula\n; break;
case A: case E: case I: case O:
case U: cout << Es una vocal mayscula\n;
break;
default: cout << No es vocal\n;
}
return 0;
}
Fundamentos de Informtica
ANIDAMIENTOS
Fundamentos de Informtica
ANIDAMIENTOS
Seleccin Mltiple
SI
cond_1
accin_1
NO
SI
cond_2
accin_2
NO
cond_3
SI
accin_3
NO
M
Fundamentos de Informtica
ANIDAMIENTOS
/*caso binario especial*/
if (cond_1)
accin_1;
else
if (cond_2)
accin_2;
else
if (cond_3)
accin_3;
...
Importante la indentacin!
/* sintaxis abreviada */
if (cond_1)
accin_1;
else if (cond_2)
accin_2;
else if (cond_3)
accin_3;
...
if (nota<5)
cout << Suspenso;
else if (nota<7)
cout << Aprobado;
else if (nota<9)
cout << Notable;
else
cout << Sobresaliente;
Fundamentos de Informtica
ANIDAMIENTOS
switch (operador)
{
case + : resultado = a+b;
break;
case - : resultado = a-b;
break;
case * : resultado = a*b;
break;
case / : resultado = a/b;
break;
default: cout <<\nIndefinido;
Es ms legible
que...
Fundamentos de Informtica
if (operador == +)
resultado = a+b;
else
if (operador == -)
resultado = a-b;
else
if (operador == *)
resultado = a*b;
else
if (operador == /)
resultado = a/b;
else
cout << \nIndefinido;
ESTRUCTURAS DE SELECCIN
Desarrolla un programa que lea los coeficientes de una
ecuacin de segundo grado y calcule e imprima sus
soluciones.
Deben contemplarse todos los posibles casos que se puedan
dar.
Disea primero el algoritmo mediante diagramas de flujo
Desarrolla un programa que lea tres nmeros naturales,
correspondientes al da, mes y ao de una fecha, e indique
si es una fecha vlida del siglo XX
Desarrolla un programa que lea cinco letras que
corresponden a una hora en formato 24h (hh:mm) e imprima
la hora en formato 12h acompaada de AM o PM segn
proceda ( p.e. 09:35 -> 09:35 AM ; 18:15 -> 06:35 PM)
Fundamentos de Informtica
Fundamentos de Informtica
ESTRUCTURAS DE REPETICIN
Sentencias
a repetir
Fundamentos de Informtica
Controla el nmero
de repeticiones
BUCLES NO DETERMINISTAS
do{
SI
condicin
<sentencias>
}while(<condicin>);
<sentencias_fuera>
NO
sentencias_fuera
BUCLES NO DETERMINISTAS
4
contador
Hola
----
Fundamentos de Informtica
BUCLES NO DETERMINISTAS
x2
x3
=1 + x +
+
+ ...
2!
3!
cin >> x;
cont=0; serie=0.0;
fact=1.0; pot=1.0;
do{
serie = serie + pot / fact;
cont++;
fact = fact * (float)cont;
pot = pot * x;
}while(pot/fact > 0.000001 );
Hasta aportacin de
cada trmino menor
que 0.000001
Fundamentos de Informtica
BUCLES NO DETERMINISTAS
Fundamentos de Informtica
Validar nmero
de mes
Validar da
de mes
BUCLES NO DETERMINISTAS
/* Calcula el nmero positivo ms grande de una lista. La
entrada se realiza mientras los nmeros sean mayores que
cero */
#include <iostream>
using namespace std;
int main()
{ int num, max=0;
do{
cout << Introduce un nmero: ;
cin >> num;
if( num > max )
max = num;
}while( num > 0 );
if( max!=0 )
cout << El nmero ms grande es << max;
else
cout << No se han introducido nmeros;
return 0;
}
Fundamentos de Informtica
BUCLES NO DETERMINISTAS
NO
SI
sentencias
SI
sentencias_fuera
while(<condicin>)
{
<sentencias>
}
<sentencias_fuera>
BUCLES NO DETERMINISTAS
Fundamentos de Informtica
BUCLES NO DETERMINISTAS
i=0;
/*Inicializacin*/
while(i<=10) /*comprobacin*/
{
<sentencias>
i++;
/*actualizacin*/
}
Fundamentos de Informtica
En este tipo de
bucles usaremos la
sentencia for
BUCLES NO DETERMINISTAS
Fundamentos de Informtica
BUCLES NO DETERMINISTAS
Bucle contador
BUCLES NO DETERMINISTAS
/*Ejemplo de bucle contador: calculo de la media de una
lista de nmeros hasta introducir el cero */
#include <iostream>
using namespace std;
int main()
{
int i=0; float x, suma=0.0;
cout << Introduce un nmero: ;
cin >> x;
while ( x != 0 )
{
suma = suma + x;
i++;
cout << Introduce un nmero: ;
cin >> x;
}
if ( i != 0 )
cout << La media es << suma/(float)i;
else
cout << No se han introducido nmeros\n;
return 0;
}
Fundamentos de Informtica
BUCLES DETERMINISTAS
El bucle for
for (<inicializacin>;<condicin>;<actualizacin>)
{
<sentencias>
}
inicializacin
condicin
NO
SI
sentencias
expresiones
En C la asignacin se considera un
operador, y, por tanto, las
asignaciones son expresiones.
Fundamentos de Informtica
actualizacin
BUCLES DETERMINISTAS
El bucle for
Lo usaremos cuando el nmero de veces que se repite el
bucle se puede determinar a priori
Tendremos siempre una variable de control del bucle (vcb)
En el cuerpo del bucle, vcb puede usarse, NUNCA cambiarse
for(i=1;i<10;i++)
for(i=2;i<=128;i*=2)
for(j=10;j>0;j--)
Fundamentos de Informtica
BUCLES DETERMINISTAS
Fundamentos de Informtica
BUCLES DETERMINISTAS
/* Tabla de multiplicar */
#include <iostream>
using namespace std;
int main()
{
int i, num;
cout << Introduce un nmero :;
cin >> num;
for(i=1; i<=10; i++)
{
cout << num << x << i << = << num*i;
cout << endl;
}
return 0;
}
Fundamentos de Informtica
Introduce numero: 5
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
BUCLES DETERMINISTAS
Fundamentos de Informtica
BREAK y CONTINUE
La sentencia break se utiliza para forzar la salida de un
bucle independientemente de que se cumpla o no la condicin
de terminacin.
La sentencia continue termina la iteracin en curso y
vuelve a evaluar de nuevo la condicin de terminacin del
bucle.
En programacin estructurada, no es recomendable el uso de
este tipo de sentencias y por lo tanto NO LAS USAREMOS
"Se demuestra que todo problema que pueda resolverse en un numero finito de
pasos puede expresarse usando nicamente 3 tipos de estructuras o bloques
fundamentales, con una sola entrada y una sola salida para organizar dichos pasos:
Un proceso secuencial.
ANIDAMIENTOS DE BUCLES
Bucle
ms
externo
Fundamentos de Informtica
Bucle anidado
ANIDAMIENTOS DE BUCLES
/*Escribe un rectngulo de asteriscos*/
#include <iostream>
using namespace std;
int main()
bucle exterior
{
int i, j;
for(i=1;i<=3;i++)
bucle interior
{
for(j=1;j<=8;j++)
cout << *;
cout << \n;
}
********
********
return 0;
********
}
Fundamentos de Informtica
ANIDAMIENTOS DE BUCLES
/*Escribe un rectngulo de asteriscos*/
#include <iostream>
using namespace std;
int main()
bucle exterior
{
int i, j;
for(i=1;i<=3;i++)
bucle interior
{
for(j=1;j<= i ;j++)
cout << *;
cout << \n;
}
*
**
return 0;
***
}
Fundamentos de Informtica
ANIDAMIENTOS DE BUCLES
Basndote en el
cdigo anterior,
modifica el
programa para que
obtenga los
ejemplos adjuntos.
La altura del
tringulo se pide por
teclado.
Fundamentos de Informtica
Introduce altura: 3
1
12
123
Introduce altura: 4
1
121
12321
1234321
ANIDAMIENTOS DE BUCLES
/* Encuentra el primer nmero perfecto mayor que 28.
Un nmero es perfecto si coincide con la suma de sus
divisores, sin contarse el mismo.
Ej: 6 = 1+2+3 */
#include <iostream>
using namespace std;
int main()
{int encontrado = 0, intento, cont, suma;
intento = 29; /* empiezo con el siguiente de 28 */
while(!encontrado)
{
suma=1; /* el 1 es divisor de todos los numeros */
for (cont=2; cont<intento; cont++ )
if ((intento%cont)==0) /* si cont es divisor */
suma+=cont;
/* lo sumo */
if (suma == intento )
encontrado = 1; /* si coincide lo hemos encontrado */
else
intento++;
/* sino, probamos con el siguiente */
}
cout << Nmero perfecto mayor que 28 = << intento;
return 0;
}
Fundamentos de Informtica
BUCLES INFINITOS
N++;
suma = 0;
N = 0;
while (N <= 100)
suma = suma + N;
cout << suma;
suma = 0;
N = 0;
while (N <= 100);
{
suma = suma + N;
N++;
}
cout << suma;
Fundamentos de Informtica
EJERCICIOS
Desarrolla un programa que lea una secuencia
de nmeros naturales terminada en cero e
indique la posicin de la primera y ltima
ocurrencia del nmero doce.
Desarrolla un programa que, dado un nmero
natural ledo por teclado, indique si es o no
nmero primo. El programa preguntar si se
quiere repetir de nuevo el proceso.
Desarrolla un programa que, dada una
secuencia de ceros y unos terminada en un
punto, muestre por pantalla el tamao de
todas las subcadenas de unos e indique cual
es la mayor.
Fundamentos de Informtica
Tema 4:
Estructuras de Control
Fundamentos de Informtica