Beruflich Dokumente
Kultur Dokumente
Contenido
Introduccin
Estructuras de Seleccin
Sentencia if
Sentencia switch
Estructuras de Iteracin
Sentencia while
Sentencia do-while
Sentencia for
Ejemplos
Ejercicios
1. INTRODUCCIN
Los programas definidos hasta este punto se ejecutan de modo secuencial, es decir, una
sentencia despus de otra. La ejecucin comienza con la primera sentencia del programa y
prosigue hasta la ltima sentencia, cada una de las cuales se ejecuta una sola vez. Esta forma
de programacin es adecuada para programas sencillos. Sin embargo, para la resolucin de
problemas de tipo general se necesita la capacidad de controlar cules son las sentencias que
se ejecutan, y en qu momentos. Las estructuras de control o construcciones de control
controlan la secuencia o flujo de ejecucin de las sentencias. Las estructuras de control se
dividen en tres grandes categoras en funcin del flujo de ejecucin: secuencia, seleccin e
iteracin.
Hasta este momento slo se ha usado el flujo secuencial. Cada una de las sentencias que se
utilizan en C++ estn separadas por el carcter punto y coma (;). No obstante, en algunos
casos nos interesar agrupar en un bloque una serie de sentencias, 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:
Sentencia1;
sentencia2;
...
sentencian;
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 ({ }), aunque si
recomendable.
2. ESTRUCTURAS DE SELECCIN
Las estructuras de seleccin o condicionales controlan si una sentencia o secuencia 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.
a) Sentencia if: La sentencia if elige entre varias alternativas en base al valor de una o ms
expresiones lgicas.
Las formas ms sencillas de esta sentencia, que se corresponden con las vistas en el
pseudolenguaje de Elementos de Programacin SI-ENTONCES-ENOTROCASO, son la
sentencia de seleccin simple y la sentencia de seleccin doble:
Seleccin simple
if (<expres_log>)
{
<sec_sent>
}
Seleccion doble
if (<expres_log>)
{
<sec_sent>
}
else
{
<sec_sent>
}
#include <iostream>
#include <iostream>
using namespace std;
int main()
{
int num;
cout <<"Introduzca numero:"; cin >> num;
if ((num%2)==0)
{
cout << "PAR" << endl;
}
system("pause");
}
Salida:
Introduzca un numero: 8
PAR
Seleccin doble
#include <iostream>
#include <iostream>
if ((num%2)==0)
{
cout<< "El numero "<<num;
cout<<"es PAR" << endl;
}
else
{
cout<<"IMPAR"<<endl;
}
system("pause");
}
Salida:
Introduzca un numero: 8
El numero 8 es PAR
En caso de que el bloque ste formado por dos o ms sentencias ya es necesario usar las
llaves ({ }) para marcar el inicio y el fin del bloque. Sin embargo, es aconsejable usar
siempre llaves incluso con bloques formados por una nica sentencia para evitar errores
como el siguiente
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int num1, num2;
cout << "Escribe un numero:";
cin >> num1;
cout << "Escribe otro nmero:";
cin >> num2;
if (num1==num2)
cout << "Iguales" << endl;
else
cout << "Distintos" << endl;
cout << "pues no son iguales" << endl;
}
Escribe un numero: 3
Escribe otro numero: 3
Iguales
pues no son iguales
Las sentencias if mostradas hasta el momento implementan decisiones que implican una
o dos alternativas. Sin embargo, tambin es posible utilizarlas para implementar
decisiones que impliquen diferentes alternativas. Una sentencia if es anidada cuando la
sentencia de la rama verdadera o de la rama falsa es a su vez otra sentencia if. Una
sentencia if anidada se puede utilizar para implementar decisiones con varias
alternativas o multi-alternativas. Una estructura tpica if-else anidada sera la siguiente:
if (<expres log>)
{
<sec sent>
}
else if (<expres log>)
{
<sec sent>
}
else if (<expres_log>)
{
<sec sent>
}
else
{
<sec sent>
}
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
unsigned int nota;
cout << "Introduzca una calificacin numrica:";
cin >> nota;
cout << "La calificacin 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;
}
}
Salida:
#include <iostream>
#include <iostream>
Salida:
Introduzca un numero: 7
IMPAR
b) Sentencia switch: La sentencia switch es una sentencia de C++ que se utiliza para
seleccionar una de entre mltiples alternativas. Esta sentencia es especialmente til
cuando la seleccin se basa en el valor de una variable de un tipo simple o de una
expresin de un tipo simple denominada expresin de control o selector.
La sintaxis de la sentencia, que se corresponden con la sentencia CASO estudiada en el
pseudolenguaje de Elementos de Programacin, es la siguiente:
switch (selector)
{
case <etiqueta> : <sec_sent>
break;
case <etiqueta> : <sec_sent>
break;
.
.
.
case <etiqueta> : <sec_sent>
break;
default : <sent> //opcional
}
La expresin selector debe ser un tipo ordinal (por ejemplo int, char, bool pero no float,
double o string). El tipo de cada etiqueta debe ser el mismo que el de la expresin selector.
Las expresiones estn permitidas como etiquetas, pero nicamente si cada operando de
la expresin es en si mismo una constante (ej. 4+8, c*20 si c ha sido definido
anteriormente como constante). Ejemplo:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int A,B, Resultado;
char operador;
cout << "Introduzca un numero:";
cin >> A;
Salida:
Introdusca un numero: 7
Introdusca otro numero: 6
Introduzca un operador ( + ,-,*,/): +
El resultado es: 13
#include <iostream>
#include <cstdlib>
Salida:
Introdusca un carcter: U
U es una vocal
if (a >= b)
if (b != 0.0)
c = a/b;
if (a >= b)
if (b != 0.0)
c = a/b;
else
c = 0.0;
En principio se podra plantear la duda de a cul de los dos if corresponde la parte else del
programa. Los espacios en blanco las indentaciones de las lneas parecen
indicar que la sentencia que sigue a else corresponde al segundo de los if, y as es en
realidad, pues la regla es que el else pertenece al if ms cercano. Sin embargo, no se
olvide que el compilador de C++ no considera los espacios en blanco (aunque sea muy
conveniente introducirlos para hacer ms claro y legible el programa), y que si se quisiera
que el else perteneciera al primero de los if no bastara cambiar los espacios en blanco,
sino que habra que utilizar llaves, en la forma:
if (a >= b)
{
if (b != 0.0)
c = a/b;
else
}
c = 0.0;
Recurdese que todas las sentencias if e if...else, equivalen a una nica sentencia por
la posicin que ocupan en el programa.
3. ESTRUCTURAS DE ITERACIN
Adems de bifurcaciones, en el lenguaje C++ existen tambin varias sentencias que permiten
repetir una serie de veces la ejecucin de unas lneas de cdigo. Esta repeticin se realiza, bien
un nmero determinado de veces, bien hasta que se cumpla una determinada condicin de tipo
lgico o aritmtico. De modo genrico, a estas sentencias se les denomina bucles. Las tres
estructuras del lenguaje C++ para realizar bucles son el while, el for y el do...while.
control. Si la condicin es falsa, entonces el cuerpo no se ejecuta. Hay que hacer notar
que si la condicin es cierta inicialmente, la sentencia while no terminar nunca (bucle
infinito) a menos que en el cuerpo de la misma se modifique de alguna forma la
condicin de control del bucle. Una sentencia while se ejecutar cero (condicin de
control inicialmente falsa) o ms veces. La sintaxis de la sentencia es la siguiente:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int sum, i;
cout << "Introduzca nmeros y termine con un negativo:";
cin >> i; //lectura adelantada
sum = 0;
while (i >= 0)
{
sum = sum + i;
cin >> i; //actualizacin
}
cout << "El resultado es:";
cout << sum << endl;
system(pause);
}
Salida
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int n=20;
int contador;
contador=0; //inicializacin
while(contador < n)
{
cout << "* ";
contador++; //incremento
}
system(pause);
}
Salida
********************
do
{
<sec_sent>
}
while (<expres_log>);
En esta sentencia, el cuerpo del bucle se ejecuta hasta que sea falsa la expresin lgica
(<expres_log>) (que ha de ir encerrada entre parntesis). Esto supone una
diferencia con la sentencia REPETIR del pseudolenguaje en la que el cuerpo del bucle se
ejecutaba hasta que la expresin lgica fuese verdadera.
El cuerpo de una sentencia do-while siempre se ejecuta al menos una vez. Cuando esto
deba ocurrir en un programa (el cuerpo del bucle tenga que ejecutarse una o ms veces),
es conveniente el uso de la sentencia do-while en lugar de la sentencia while. Por
ejemplo, en lugar de escribir:
#include <iostream>
#include <cstdlib>
podemos escribir:
#include <iostream>
#include <cstdlib>
using namespace std;
void main()
{
int numero;
do
{
cout << "Introduzca un numero entre 1 y 10";
cin >> numero;
}
while ((numero < 1) || (numero > 10));
}
Existen dos formas de implementar la sentencia for: (i) formato ascendente, en el que la
variable de control se incrementa, y (ii) formato descendente, en el que la variable de
control se decrementa. A continuacin mostramos dos ejemplos de formato ascendente
y descendente:
Formato ascendente
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
// formato ascendente int n;
int n;
for (n = 1; n <= 10; n++) //incrementa de 1 en 1
{
cout << n << endl;
}
}
Salida
1
2
3
4
5
6
7
8
9
10
Formato descendente
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
// formato descendente int n;
int i;
for (i = 9; i >= 0; i-=3) //decrementa de 3 en 3
{
cout << i << endl;
}
}
Salida
9
6
3
En0el ejemplo de formato ascendente la variable de control es n y su valor inicial es 1, el
valor lmite es 10 y la expresin de incremento es n++. Esto significa que el bucle
ejecuta la sentencia del cuerpo del bucle una vez por cada valor de n en orden
ascendente de 1 a 10, por tanto el bucle se ejecutar 10 veces. En la primera iteracin n
tomar el valor 1, en la segunda el valor 2, y as sucesivamente hasta el valor 10. El
ejemplo de formato descendente inicializa la variable de control i a 9. El bucle se
ejecuta mientras i no sea negativo, y como la variable de control del bucle se
decrementa en 3, el bucle se ejecutar 4 veces con el valor de la variable de control i, 9,
6, 3 y 0.
C++ permite declarar la variable de control de bucle al mismo tiempo que se inicializa,
sin embargo nosotros siempre la declararemos en la zona de declaraciones al principio
del programa. La variable de control se puede incrementar o decrementar en valores de
tipo int, pero tambin es posible en valores de tipo double , y por tanto estaramos
#include <iostream>
#include <cstdlib>
#include <cmath>
Es necesario incluir la librera <cmath> para poder hacer uso de funciones matemticas.
En el ejemplo anterior: sqrt - raz cuadrada y pow - potencia.
Salida
x es ahora igual a 8
x es ahora igual a 2,82843
#include <iostream>
#include <cstdlib>
Este ejemplo produce una secuencia infinita de enteros ya que en cada iteracin, la
expresin (limite++) incrementa limite en 1, antes de que i++ incremente
a i. A consecuencia de esto, la condicin del bucle (i <= limite) siempre es
cierta.
Se ha de tener cuidado a la hora se situar el punto y coma (;) despus del parntesis
final del bucle for. Por ejemplo el bucle:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i;
for (i = 1; i <= 10); // Atencin al ;
{
cout<< "Elementos de Programacin" << endl;
}
}
#include <iostream>
#include <cstdlib>
4. EJEMPLOS
Sentencia if
a) Un administrador de una cabina de telfonos desea calcular el costo de llamada de la
siguiente manera: una llamada telefnica cuesta S/. 0,5 por los primeros 3 minutos o
menos. Cada minuto adicional a los tres minutos cuesta S/. 0,1. Calcular el costo de una
llamada
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
float M, C;
cout<<"Calculo del costo de una
llamada telefonica \n";
cout<<"Minutos trascurridos:";cin>>M;
if(M<=3)
{
C=0.5;
}
else
{
C=0.5+(M-3)*0.1;
}
cout<<"El costo de la llamada es: ";
cout<<C<< soles<<endl;
//cout<<"\n";
system("pause");
return 0;
}
Salida
b) Calcule el nmero de pulsaciones que debe tener una persona por cada 10 segundos de
ejercicio aerbico. La frmula que se aplica es:
Para el sexo femenino (F,f) : (220 Edad)/10
Para el sexo masculino (M,m): (210 Edad)/10
Controle para que cuando el valor ingresado sea diferente a M, m, f, F, el programa de
un mensaje de error.
#include <cstdlib>
#include <iostream>
using namespace std;
main()
{
int Edad; float Npulsac;
char Sex;
cout<<PULSACIONES DE UNA PERSONA POR CADA 10 SEGUNDOS;
cout<<" INGRESE LA EDAD DE LA PERSONA : ";
cin>>Edad;
cout<<" INGRESE EL SEXO DE LA PERSONA (M/F) : ";
cin>>Sex;
if (Sex == 'F' || Sex == 'f' || Sex == 'M'|| Sex == 'm')
{
if (Sex == 'F' || Sex == 'f' )
{
Npulsac= (220 - Edad)/10.0;
cout<<"Pulsaciones de la persona de sexo F es: ";
cout<<Npulsac;
}
else
{
Npulsac= (210 - Edad)/10.0;
cout<<"Pulsaciones de la persona de sexo M es: ";
cout<<Npulsac;
}
}
else
{
cout<<" EL SEXO INGRESADO NO ES VALIDO";
}
cout<<"\n";
system("pause");
return 0;
}
Salida
Sentencia switch
a) Desarrolle el problema anterior usando la estructura switch y pruebe con los mismos
valores.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int Edad, Npulsac;
char Sex;
cout<<" INGRESE LA EDAD DE LA PERSONA : ";
cin>>Edad;
cout<<" INGRESE EL SEXO DE LA PERSONA (M/F) : ";
cin>>Sex;
switch (Sex)
{
case 'F':
Npulsac= (220 - Edad)/10;
cout<<"Pulsaciones de la persona de sexo F es:";
cout<<Npulsac<<"\n";
break;
case 'f':
Npulsac= (220 - Edad)/10;
cout<<"Pulsaciones de la persona de sexo F es:";
cout<<Npulsac<<"\n";
break;
case 'M':
Npulsac= (210 - Edad)/10;
cout<<"Pulsaciones de la persona de sexo M es:";
cout<<Npulsac<<"\n";
break;
case 'm':
Npulsac= (210 - Edad)/10;
cout<<"Pulsaciones de la persona de sexo F es:";
cout<<Npulsac<<"\n";
break;
default: cout<<"El sexo ingresado no es valido \n";
}
system("pause");
return 0;
}
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int i,n,F;
cout<<"Ingrese un Numero: ";cin>>n;
F=1; i=1;
while(i<=n)
{
F=F*i;
i++;
}
cout<<"El factorial de "<<n<<" es:"<<F<<endl;
system("pause");
}
Salida
Ingrese un Numero: 5
El factorial de 5 es: 120
#include <iostream>
#include <iostream>
Salida
Ing. Edwing A. Maquera Flores
Ingrese un Numero: 2011
Ing. Richard Carrin Abollaneda Pagina 21 de 26
El numero 2011 es PRIMO
Metodologa de la Programacin - UNAJMA
#include <iostream>
#include <cstdlib>
#include<cmath>
using namespace std;
int main()
{
float S, F, i;
int k, N;
cout<<"Calculo de la Serie:
S=1+2^2/3!+3^3/5!+...+N^N/(2N-1)! \n";
cout<<"--------------------\n";
cout<<"Numero final de la serie N:";cin>>N;
S=1;
for(i=2;i<=N;i++)
{
F=1;
for(k=1;k<=(2*i-1);k++)
{F=F*k;}
S=S+pow(i,i)/F;
}
cout<<"La sumatoria es: "<<S<<endl;
cout<<"\n";
system("pause");
return 0;
}
Salida
int main()
{
// Zona de declaracin de variables del programa principal
int intento, cont, suma;
bool encontrado;
encontrado = false;
intento = 29;
while(!encontrado)
{
suma = 1;
for (cont = 2; cont < intento; cont++)
{
if (intento % cont == 0)
{
suma = suma + cont;
}
}
if (suma == intento)
{
encontrado = true;
}
else
{
intento = intento + 1;
}
}
cout<<" El Numero perfecto mayor que 28 es igual a";
cout<< intento;
cout<< endl;
system("Pause"); //Hacer una pausa
return 0; //Valor de retorno al S.O.
}
//Implementacin de procedimientos y funciones
Salida
Aunque existe otra forma ms ptima de resolver este problema, el programa anterior
nos da una visin de cmo se pueden utilizar conjuntamente las distintas estructuras de
control vistas en esta seccin. Conviene hacer hincapi principalmente en que los
anidamientos de estructuras tienen que ser correctos, es decir, que una estructura
anidada dentro de otra lo debe estar totalmente. Por esto hay que tener mucho cuidado
con las llaves ({}) a lo largo de un programa.
5. EJERCICIOS
PROVINCIA &
TIPO DE OPERACION &
NUMERO DE OPERACION &&
En caso de que el nmero no tenga exactamente cuatro dgitos, en lugar del mensaje
anterior, habr que imprimir en pantalla el siguiente mensaje de error:
Elabore un programa que lea de teclado los dos ltimos valores del contador (es decir, el
valor que tena el contador el mes pasado y el valor que tiene este mes), y calcule e
imprima en pantalla el importe total a pagar. Ejemplo:
Nmeros impares: 5
Suma de los 5 primeros nmeros impares: 25
d) Disear e implementar un programa que cuente el nmero de sus entradas que son
positivas, negativas y cero.
Utilice una estructura repetitiva distinta para cada caso. Cual es ms apropiada?
f) Dado un nmero entero que representa una determinada cantidad de dinero, escriba un
programa que lea dicho nmero del teclado y lo desglose para saber cuantas monedas de
500, 100, 50, 25, 5 y 1 pesetas se necesitan. Ejemplo:
g) Escriba un programa que lea un nmero N e imprima una pirmide de nmeros con N
filas como en la siguiente figura:
1 1
1 2 1 2 1
1 2 3 1 2 3 2 1
.. ..
.. ..
1 2 ... N 1 2 .. N .. 2 1
1 1 2 3 .. N
2 1 1 2 3
3 2 1 ...
...
1 2
N 2 1 1
h) Calcule e imprima en pantalla los N primeros nmeros primos, siendo N un nmero que
se introduce por teclado. Ejemplo:
Ingrese el valor de N: 5
Los 5 primeros nmeros primos son:
1
2
3
5
7