Está en la página 1de 9

Estructuras de Control en C++

Las estructuras de control determinan la secuencia en la que se ejecutarn las


instrucciones de un programa.
Las estructuras de control se dividen en tres categoras en funcin del flujo de
ejecucin:
Estructura secuencial.
Estructura alternativa o condicional.
Estructura iterativa o repetitiva.

1. ESTRUCTURA SECUENCIAL
La estructura secuencial est formada por una secuencia de instrucciones que se
ejecutan en orden una a continuacin de la otra.

Cada una de las instrucciones estn separadas por el carcter punto y coma (;). No
obstante, en algunos casos nos interesar agrupar en un bloque una serie de
instrucciones, como veremos al explicar las estructuras de seleccin y de iteracin. El
bloque de sentencias se define por el carcter llave de apertura ({) para marcar el
inicio del mismo, y el carcter llave de cierre (}) para marcar el final.
Ejemplo:
{
instruccin 1;
instruccin 2;
instruccin 3;
.....
instruccin N;
}

Sin embargo, en caso de que el bloque de sentencias este constituido por una nica
sentencia no es obligatorio el uso de las llaves de apertura y cierre ({ }).

2. ESTRUCTURA CONDICIONAL, SELECTIVA O ALTERNATIVA.


Las estructuras condicionales controlan si una sentencia o bloque de sentencias se
ejecutan, en funcin del cumplimiento o no de una condicin o expresin lgica.
C++ tiene dos estructuras de control para la seleccin, if y switch.

2. 1 Instruccin IF
Esta instruccin hace que se ejecuten unas sentencias u otras dependiendo del valor
que toma una condicin.

La instruccin if puede ser simple o doble:

Alternativa simple:
if (condicion)
instruccin1;

if (condicion)
{
instruccin 1;
instruccin 2;
instruccin 3;
}
Alternativa doble.
if (condicion)
instruccin1;
else
instruccin2;

if (condicion)
{
Instruccin 1;
instruccin 2;
}
else
{
instruccin 3;
instruccin 4;
}
Ejemplo de estructura condicional en C++. Programa que lee un nmero entero por
teclado y muestra si es par o impar.
#include <iostream>
using namespace std;
int main(void)
{
int num;
cout <<"Introduzca numero:";
cin >> num;
if ((num%2)==0)
cout << "PAR" << endl;
else
cout << "IMPAR" << endl;
system("pause");
}

Las instrucciones if-else se pueden anidar obtenindose una estructura condicional


mltiple:
if(condicion1)
instruccin1;
else if(condicion2)
instruccin2;
else if(condicion3)
instruccin3;
else if(condicion4)
instruccion4;
else
instruccin5;

instruccin 6;
instruccin 7;
......
En este caso se evala la condicion1; si es cierta, se ejecuta la instruccin1 y se
contina por la instruccin 6 despus del bloque de if-else anidados. Si la condicin1
es falsa, se evala la condicion2, y as sucesivamente.

En caso de no ser cierta ninguna de las condiciones, la sentencia que se ejecuta es la


del ltimo else, es decir, la instruccin 5.

Ejemplo de estructura condicional mltiple en C++. Programa que lee un nmero


entero que corresponde a una hora y muestra un mensaje segn la hora que se haya
ledo.
#include <iostream>
using namespace std;
int main(void)
{
int hora;
cout << "\nIntroduzca una hora (entre 0 y 24): ";
cin >> hora;
if ((hora >= 0) and (hora < 12))
cout << "\nBuenos dias\n";
else if ((hora >= 12) and (hora < 18))
cout << "\nBuenas tardes\n";
else if ((hora >= 18) and (hora < 24))
cout << "\nBuenas noches\n";
else
cout << "\nHora no vlida\n";
system("pause");
}
Otro ejemplo de estructura condicional mltiple en C++. Programa que lee la
calificacin numrica obtenida por un alumno en un examen y muestra la nota
equivalente en texto.
#include <iostream>
using namespace std;
int main(void)
{
unsigned int nota;
cout << "Introduzca una calificacion numerica entre 0 y 10:";
cin >> nota;
cout << "La calificacion del alumno es" << endl;
if (nota == 10)
{
cout << "Matricula de Honor" << endl;
}
else if (nota >= 9)
{
cout << "Sobresaliente" << endl;
}
else if (nota >= 7)
{
cout << "Notable" << endl;
}
else if (nota >= 5)
{
cout << "Aprobado" << endl;
}
else
{
cout << "Suspenso" << endl;
}
system("pause");
}
2.2 Instruccin switch
La sentencia switch selecciona una de entre mltiples alternativas.
La forma general de esta expresin es la siguiente:
switch (expresin)
{
case constante1:
instrucciones;
break;
case constante 2:
instrucciones;
break;

default:
instrucciones;
}
En una instruccin switch, expresin debe ser una expresin con un valor entero, y
constante1, constante2, ..., deben ser constantes enteras, constantes de tipo carcter
o una expresin constante de valor entero. Expresin tambin puede ser de tipo char,
ya que los caracteres individuales tienen valores enteros.

Dentro de un case puede aparecer una sola instruccin o un bloque de instrucciones.

La instruccin switch evala la expresin entre parntesis y compara su valor con las
constantes de cada case. Se ejecutarn las instrucciones de aquel case cuya constante
coincida con el valor de la expresin, y contina hasta el final del bloque o hasta una
instruccin que transfiera el control fuera del bloque del switch (una instruccin break,
o return). Si no existe una constante igual al valor de la expresin, entonces se
ejecutan las sentencias que estn a continuacin de default si existe (no es obligatorio
que exista, y no tiene porqu ponerse siempre al final).

Ejemplo de uso de la instruccin switch en C++. Programa que lee dos nmeros y una
operacin y realiza la operacin entre esos nmeros.

#include <iostream>
using namespace std;
int main(void)
{
int A,B, Resultado;
char operador;
cout << "Introduzca un numero:";
cin >> A;
cout << "Introduzca otro numero:";
cin >> B;
cout <<"Introduzca un operador (+,-,*,/):";
cin >> operador;
Resultado = 0;
switch (operador)
{
case '-' : Resultado = A - B;
break;
case '+' : Resultado = A + B;
break;
case '*' : Resultado = A * B;
break;
case '/' : Resultado = A / B; //suponemos B!=0
break;
default : cout << "Operador no valido"<< endl;
}
cout << "El resultado es: ";
cout << Resultado << endl;
system("pause");
}
Otro ejemplo de uso de switch en C++. Programa que determina si un carcter ledo
es o no una vocal. En ese caso como la sentencia a ejecutar por todas las
etiquetas case es la misma, esta sentencia se pone una nica vez al final:
#include <iostream>
using namespace std;
int main(void)
{
char car;
cout << "Introduzca un caracter: ";
cin >> car;
switch (car)
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U': cout << car << " es una vocal" << endl;
break;
default : cout << car << " no es una vocal" << endl;
}
system("pause");
}
3. ESTRUCTURAS REPETITIVAS O ITERATIVAS.
C++ dispone de tres estructuras repetitivas:
while,
do-while
for.
3.1 Instruccin while.
while (condicion)
{
instruccin 1;
..............
instruccin N;
}
Ejecuta una instruccin o un bloque de instrucciones cero o ms veces, dependiendo
del valor de la condicin.

Se evala la condicin, y si es cierta, se ejecuta la instruccin o bloque de


instrucciones y se vuelve a evaluar la condicin; pero si la condicin es falsa, se pasa a
ejecutar la siguiente instruccin despus del while.

Ejemplo de instruccin while en C++. Programa que lee nmeros enteros hasta que se
lee un nmero negativo. Se muestra la suma de todos los nmeros leidos excepto el
nmero negativo.
/*Programa que lee nmeros hasta que se lee un negativo y muestra la
suma de los nmeros ledos */
#include <iostream>
using namespace std;
int main(void)
{
int suma, num;
suma = 0;
cout << "Introduzca un numero: ";
cin >> num;
while (num >= 0)
{
suma = suma + num;
cout << "Introduzca un numero: ";
cin >> num;
}
cout << endl << "La suma es: " << suma << endl;
system("pause");
}

3. 2 Instruccin do .. while.
do
{
instruccin 1;
..............
instruccin N;
} while (condicion);

Ejecuta una instruccin o un bloque de instrucciones, una o ms veces, dependiendo


del valor de la condicin.

Se ejecuta la instruccin o bloque de instrucciones y a continuacin se evala la


condicin. Si la condicin es cierta, se vuelve a ejecutar la instruccin o bloque de
instrucciones, y si es falsa, pasa a ejecutarse la siguiente instruccin despus del do-
while.

Cuando se utiliza una instruccin do-while el bloque de instrucciones se


ejecuta al menos una vez, ya que la condicin se evala al final. En cambio,
con una instruccin while, puede suceder que el bloque de instrucciones no
llegue a ejecutarse nunca si la condicin inicialmente es falsa.

Ejemplo de instruccin do while en C++. Programa que lee un nmero entero. El


nmero debe estar comprendido entre 1 y 100.
/* lee un nmero entre 1 y 10 */
#include <iostream>
using namespace std;
int main(void)
{
int numero;
do
{
cout << "Introduzca un numero entre 1 y 100: ";
cin >> numero;
}
while (numero < 1 || numero > 100);
}

3.3 Instruccin for.


Un bucle for hace que una instruccin o bloque de instrucciones se repitan un nmero
determinado de veces mientras se cumpla la condicin.

for(inicializacin; condicion; incremento/decremento)


{
instruccin 1;
...........
instruccin N;
}
A continuacin de la palabra for y entre parntesis debe haber siempre tres zonas
separadas por punto y coma:

zona de inicializacin
zona de condicin
zona de incremento decremento.

En alguna ocasin puede no ser necesario escribir alguna de ellas. En ese caso se
pueden dejar en blanco, pero los punto y coma deben aparecer.

El funcionamiento de un bucle for el siguiente:


1. Se inicializa la variable o variables de control.
2. Se evala la condicin.
3. Si la condicin es cierta se ejecutan las instrucciones. Si es falsa, finaliza la ejecucin
del bucle y contina el programa en la siguiente instruccin despus del for
4. Se actualiza la variable o variables de control (incremento/decremento)
5. Se pasa al punto 2).
Esta instruccin es especialmente indicada para bucles donde se conozca el nmero de
repeticiones que se van a hacer.
Como regla prctica podramos decir que las instrucciones while y do-while se utilizan
generalmente cuando no se conoce a priori el nmero de pasadas, y la instruccin for
se utiliza generalmente cuando s se conoce el nmero de pasadas.
Ejemplo de instruccin for en C++. Programa que muestra los nmeros del 1 al 10.

/* muestra los nmeros de 1 a 10 */


#include <iostream>
using namespace std;
int main(void)
{
int n;
for (n = 1; n <= 10; n++)
{
cout << n << endl;
}
system("pause");
}

Ejemplo de instruccin for en C++. Programa que muestra los nmeros del 10 al 1:
/* muestra los nmeros de 10 a 1 */
#include <iostream>
using namespace std;
int main(void)
{
int n;
for (n = 10; n >=1; n--)
{
cout << n << endl;
}
system("pause");
}
Se ha de tener cuidado y al escribir el punto y coma (;) despus del parntesis final
del bucle for.
Por ejemplo el bucle:
#include <iostream>
using namespace std;
int main(void)
{
int i;
for (i = 1; i <= 100; i++);
{
cout << "Hola" << endl;
}
system("pause");
}
no muestra "Hola" 100 veces. En realidad se muestra una vez "Hola", ya que la
sentencia for es una sentencia vaca al terminar con un punto y coma (;).
La sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas
iteraciones, se ejecuta la sentencia cout.
BUCLES ANIDADOS.
Hablamos de bucles anidados cuando se incluyen instrucciones for, while o do-while
unas dentro de otras.
Ejemplo de bucles anidados en C++. Programa que muestra el primer nmero perfecto
mayor que 100. Un nmero es perfecto cuando la suma de sus divisores excepto l
mismo es igual al propio nmero. Por ejemplo 6 es perfecto ya que sus divisores son
1, 2 ,3 y suman 6
#include <iostream>
using namespace std;
int main(void)
{
int numero, cont, suma;
bool encontrado;
encontrado = false;
numero = 101;
while (!encontrado)
{
suma = 1;
for (cont = 2; cont < numero; cont++)
{
if (numero % cont == 0)
{
suma = suma + cont;
}
}
if (suma == numero)
{
encontrado = true;
}
else
{
numero++;
}
}
cout << "El primero numero perfecto mayor que 100 = " << numero <<
endl;
system("pause");
}

También podría gustarte