Está en la página 1de 45

Tema:

Estructuras de Repetición

Prof. Oscar Tinoco G.


FUNDAMENTACIÓN
• En ciertos problemas es necesario ejecutar una
instrucción o bloque de instrucciones más de una
vez:
Ejemplo: “Hacer un programa en C++ que calcule la
suma de N números enteros leídos desde teclado”
• En ocasiones conoceremos el número de veces
que deben repetirse y otras veces finalizará cuando
se satisfaga una condición.
• En tales circunstancias es conveniente usar
estructuras repetitivas (“bucles”)
Conceptos
• A las estructuras de repetición se les conoce
con el nombre de “bucles”.
• A cada repetición de las instrucciones de un
bucle se le denomina “iteración”.
• Así se habla de primera iteración del bucle,
segunda iteración, etc...

C++ presenta tres estructuras de control


repetitivo: while, do while y for.
Flujo básico Estructuras
Repetitivas
ESTRUCTURA PRE TEST
while (<condicion>) {
<cuerpo del bucle>
}

“Primero se pregunta y luego se


ejecuta”

ESTRUCTURA POST TEST


do {
<cuerpo del bucle>
} while (<condicion>)

“Primero se ejecuta y luego se


pregunta”
Estructura While (“Mientras”)

• Sintaxis:
while (exp_condicional) Falso(0)
bloque ¿exp?

Cierto(1)
while
Bloque
(Mientras). While permite al
programador especificar las veces que
se repita una acción (una o más Resto de
sentencias de programacion) mientras instrucciones
una condición (exp)se mantenga
verdadera.
• Ejemplo 1: “Hacer un programa en C++
que calcule la suma de N números enteros
leídos desde teclado”
• Algoritmo:
– Pedir el valor que va a tener N.
– Poner a cero una variable acumulador.
– Mientras n sea distinto de cero:
• Pedir un valor
• Acumular el valor en la variable
– Mostrar el resultado de la variable
acumulador.
#include <iostream>
using namespace std;
main(){
int N, suma, numero;
cout<<"Ingrese cantidad de numeros a leer: ";
cin>>N;

suma=0; /* guarda la suma */


while (N!=0) {
cout<<"Numero a leer: ";
cin>>numero;
suma = suma + numero;
N=N-1;
}
cout<<"La suma es: \n"<<suma;
}
• Ejemplo 2: “Hacer un programa en C++ que
muestre por pantalla la tabla de multiplicar de un
numero introducido por teclado”
• Algoritmo:
– Pedir el número.
– Poner un contador a cero.
– Mientras que el contador sea menor o igual a
10:
• Sacar por pantalla el resultado del numero
multiplicado por el contador.
• Incrementar el contador.
#include <iostream>
using namespace std;
main(){
int num,contador;
cout<<"Ingrese el numero: ";
cin>>num; /* obtener el numero */
contador=0;
cout<<"Tabla del "<<num<<" \n";
while (contador<=12) {
cout<<num<<" \t x \t"<<contador<<" =\t"<<num*contador<<endl;
contador=contador+1;
}
return 0;
}
• En ambos ejemplos se conoce cuantas veces
se debe ejecutar el bloque de instrucciones
del while. La expresión del while se
convierte normalmente en una compro-
bación del valor del contador .
(contador<=10) y (N!=0)
• Se define el contador como una variable que
se incrementa o decrementa un valor
constante en cada iteración del bucle y que
nos permite contabilizar en que iteración
nos encontramos del bucle.
En el caso que no conozcamos el número de veces
a ejecutar:
Ejemplo “Calcular la suma de números introducidos
desde teclado hasta introducir un cero”
En este caso no hay contador, no conocemos la
iteración en la que nos encontramos en cada
momento y es el valor del número introducido
el que determina el final del bucle.
En la expresión deberemos controlar el valor
del numero introducido, es decir: “Mientras
que el número sea distinto de cero”
A este controlador se le denomina “centinela”
• Algoritmo:
– Pedir el número.
– Poner a cero la variable que va a acumular los
valores.
– Mientras que el número sea distinto de cero:
• Acumular el valor del número en la variable.
• Pedir un nuevo numero
– Mostrar por pantalla el contenido de la variable
donde se han ido acumulado los números.
#include <iostream>
using namespace std;
main(){
int n,suma,numero;
cout<<"Ingrese numero: ";
cin>>numero;
suma=0;
while (numero!=0) {
suma=suma+numero;
cout<<"Ingrese numero: ";
cin>>numero;
}
cout<<"El valor de la suma es: \n";
cout<<suma<<endl;
}
“centinela”
Estructura do...while
Sintaxis:
do
bloque do Bloque
while (exp_condicional); while
Cierto(1)

¿exp?
Falso(0)

Resto de
instrucciones
Características de do while

• Se ejecuta el bloque de instrucciones al


menos una vez. Ello lo hace especialmente
indicado para validar datos de entrada. (Ver
ejemplo. siguiente)
• Aunque es parecido al while no siempre
existe una correspondencia entre ellos.
#include <iostream>
using namespace std;
main(){
int num,contador;
do {
cout<<"Ingrese numero entre 1 y 9: ";
cin>>num;
} while ((num<1)||(num>9));
contador=0;
while (contador<=12) {
cout<<num<<" x "<<contador<<" = "<<num*contador;
cout<<endl;
contador=contador+1;
}
}
Ejemplo: Generar la serie: 1, 5, 3, 7, 5, 9, 7, ..., 23

#include <iostream>
using namespace std;
int main ()
{
int serie=1;
bool sw=true;
do
{
cout<<serie<<“ “;
if (sw) serie+=4;
else serie-=2;
sw=!sw;
} while (serie<=23);
return 0;
}
1. Elaborar un programa que lea n valores enteros
positivos hasta que lea –1. Debe mostrarse el
número de valores leídos y su suma
correspondiente.

2. Elaborar un programa que obtenga el factorial de


un número ingresado por teclado.

3. Elaborar un programa que obtenga el promedio de


seis calificaciones ingresadas por teclado.
4. Elaborar un programa que obtenga los 20
primeros múltiplos de 7.

5. Elaborar un programa que determine si un número


es perfecto.

6. Elaborar un programa que permita determinar si


un número es primo
Estructura FOR
• Se suele emplear cuando se conoce el
número de iteraciones a realizar.
• Sintaxis:
for(exp1;exp2;exp3)
bloque
La exp1 suele contener inicializaciones de
variables. Las instrucciones que se encuentren
en esta parte del for sólo se ejecutarán una vez
antes de cualquier iteración del bucle.
La exp2 contiene una expresión condicional al
estilo del while que controla la ejecución o no
del bloque de instrucciones.
La exp3 contiene instrucciones que se deben
ejecutar en cada iteración del bucle. p.e. El
incremento/decremento de un contador, si
contiene más de una instrucción, deberán ir
separadas por comas. Estas instrucciones se
ejecutan al final de cada iteración.
P.e: for(i=0;i<10;i++)
for(i=0,j=N;i<N;i++,j--)
exp1

Falso(0)
¿exp2?
for Cierto(1)

bloque

exp3

Resto de
instrucciones
Ejemplo 1: Mostrar los cuadrados del 0 al 9
i=0
#include <iostream> 1
main()
{ 2
int i; 3 i<10
cout<< "nro\t"<< "cuadrado \n";
i++
for(i=0;i<10;i++)
{ <for>
cout<< i<<"\t"<<i*i<<" \n";
}
}

Sintaxis:
1 2 3
for(exp1,condición,incremento)
Tabla de Multiplicar con FOR

#include <iostream>
using namespace std;
main(){
int num,i;
cout<<"Ingrese el numero: ";
cin>>num; /* obtener el numero */
cout<<"Tabla del "<<num<<" \n";
for(i=1;i<=12;i++) {
cout<<num<<" \t x \t"<<i<<" =\t"<<num*i<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
main(){
int num, contador;
do {
cout<<"Ingresar un numero entre 1 y 9: ";
cin>>num; /* obtener el numero */
} while ((num<1)||(num>9));
for(contador=0;contador<=10;contador++)
{
cout<< num<<"\t"<<contador<<"\t"<<num*contador<<endl;
}

}
#include <iostream>
using namespace std;
main()
{
int i, fac, num;
cout<< "Ingresar nro: ";
cin>> num;
fac = 1;
for ( i = 1; i <= num; i++ )
{
F ac = fac * i;
}
cout << "El factorial de: "<< num<< " es: "<< fac;
return 0;
}
Elaborar un programa que muestre la raiz cuadrada de una serie de
números que va descendiendo de dos en dos, a partir del 16
#include <iostream>
#include <cmath>
main()
{
float n;
cout << "n raiz(n)" << endl;
for (n = 16; n >= 1; n = n - 2)
cout << n << '\t' << sqrt (n) << endl;
}
Números perfectos
Un número perfecto es igual a la suma de sus
divisores exceptuando él mismo.

6 = 1+2+3
26 = 1+2+4+7+14
496 = 1+2+4+8+16+31+62+124+248

Elaborar un programa que ingrese un número por


teclado y determine si es perfecto, emitiendo el
mensaje correspondiente
Es posible omitir el valor de inicialización en una
estructura FOR, siempre cuando se le haya definido
previamente
#include <iostream>
using namespace std;
main()
{
int sum = 0, num = 1;
for (; num < 10; num++)
{
cout<< num<<endl;
}
}
FOR ANIDADO
#include <iostream>
using namespace std;
main()
{
int fila, col;
cout << "fila x columna"<< endl;
for (fila=1; fila<=3; fila++) //Externo
{
for (col=1; col<=3; col++) //Interno
{
cout <<fila<<" x "<<col<<" = "<< fila * col <<"\t";
}
cout<< endl;
}
}
#include <iostream>
using namespace std;
main()
{
int i, num, div;
cout << "Ingrese nro: ";
Ingresar un número cin>>num;
por teclado y div = 0;
determinar si es for ( i = 2; i < num; i++ )
primo {
if ( num % i == 0 )
div = div + 1;
}
if ( div == 0 )
cout<< "es primo";
else
cout<< "no es primo";
}
#include <iostream>
main()
{
int k, i, num, div, npri, spri;
k = 1;
npri = 0, spri = 0;
while ( k < 11 ){
cout << "Ingrese nro: ";
Ingresar 10 cin>>num;
números por div = 0;
for ( i = 2; i < num; i++ )
teclado y {
determinar cuantos if ( num % i == 0 )
div = div + 1;
son primos y hallar }
su suma if ( div == 0 )
{
npri = npri + 1;
spri = spri + num;
}
k = k + 1;
}
cout<< "nprimo:"<<npri;
cout<< "\n sprimo:"<<spri;
}
#include <iostream>
#include <cmath>
main()
{
int num, i, digito, d, k = 0, tope, pos=1, c=0;
cout<<"Ingrese num: "<<endl;
cin>>num>>digito;
tope = log10(num)+1;
for(i=1; i<tope; i++)
{
d = num%10;
num = num/10;
cout<<d<<" ";
if(digito == d)
{
c = c+1;
pos = tope - i;
}
}
if(c>=1)
cout<<"El digito. "<<digito<<"aparece : "<<c<<" vez(veces)"<<endl;
cout<<"posicion: "<<pos<<endl;
NÚMEROS AMIGOS
Dos números son amigos cuando cada uno es igual a la
suma de los divisores del otro.

El menor par de números amigos es el formado por el 220 y


284:
Suma de los divisores de 220 (excepto 220):
1 + 2 + 4 + 5 + 10 + 20 + 11 + 22 + 44 + 55 + 110 = 284
Suma de los divisores de 284 (excepto 284):
1 + 2 + 4 + 71 + 142 = 220
#include <iostream>
main()
{
int i, j, m ; for (i = m - 1; i >= 1; i--)
do {
{ for (j = 1; j <= i; j++)
cout << " introduzca valor de m > 0 "; cout << j<< " ";
cin >> m; cout <<endl;
} while (m <= 0); }
for (i = 1; i <= m; i++)
{ }
for (j = 1; j <= i; j++)
cout << j<< " ";
cout <<endl;
}
Problemas
• Realizar un programa en C que calcule la
multiplicación de dos números enteros a y b
empleando sólo la operación suma.
• Realizar un programa en C que calcule a elevado b
siendo a y b enteros y empleando sólo la
operación multiplicación.
• Realizar un programa en C que calcule la a
elevado b siendo a y b enteros y empleando sólo la
operación suma.
Problema
• Hacer un programa en C que calcule el factorial
de un numero i!=i-1*i-2*i-3*…*1
• Hacer programa que calcule ex segun Tailor:

N i
x
e 
x

i  0 i!

También podría gustarte