Repetiti Vas 2
Repetiti Vas 2
Estructuras de Repetición
CONTENIDO
9.1. Introducción
9.2. Estructura de repetición while.
9.3. Números aleatorios
9.4. Estructura de repitición do...while.
9.5. Estructura de repetición for.
9.6. Problemas resueltos.
ACTIVIDAD
while( condicion )
accion;
while( condicion ){
accion1;
accion2;
.
.
.
accion3;
}
IN T R O D U C CIÓ N A L A A L G O R I T M IA 3
do
accion;
while( condicion );
do{
accion1;
accion2;
.
.
.
accion3;
}while( condicion );
inicializacion
F
condicion
accion
incremento
for(inicio;condicion;incremento)
accion;
for(inicio;condicion;incremento){
accion1;
accion2;
.
.
.
accionn;
}
Ejemplo 9.1
Son operadores que permiten asignar a una variable el valor de la variable mas,
menos, por o entre el valor de otra variable.
Ejemplo 9.2
9.7. CONTADORES
contador++;
contador--;
9.8. ACUMULADORES
acumulador += cantidad;
acumulador -= cantidad;
Ejemplo 9.3
int n = 0;
while( n <= 50 ){
cout << n << endl;
n++;
}
b. while que imprime los números: 100, 99, 98, ..., 13, 12, 11, 10
int n = 100;
while( n >= 10 ){
cout << n << endl;
n--;
}
c. while que imprime los números: 10, 12, 14, 16, ..., 98, 99, 100
int n = 10;
while( n <= 100 ){
cout << n << endl;
n += 2;
}
d. while que imprime los números: 100, 97, 94, 91, ..., 18, 15, 12, 9
int n = 100;
while( n >= 9 ){
IN T R O D U C CIÓ N A L A A L G O R I T M IA 7
Ejemplo 9.4
int n = 0;
do{
cout << n << endl;
n++;
}while( n <= 50 );
f. do - while que imprime los números: 100, 99, 98, ..., 13, 12, 11, 10
int n = 100;
do{
cout << n << endl;
n--;
}while( n >= 10 )
g. do - while que imprime los números: 10, 12, 14, 16, ..., 98, 99, 100
int n = 10;
do{
cout << n << endl;
n += 2;
}while( n <= 100 );
h. do - while que imprime los números: 100, 97, 94, 91, ..., 18, 15, 12, 9
int n = 100;
do{
cout << n << endl;
n -= 3;
}while( n >= 9 )
Ejemplo 9.5
j. for que imprime los números: 100, 99, 98, ..., 13, 12, 11, 10
k. for que imprime los números: 10, 12, 14, 16, ..., 98, 99, 100
l. for que imprime los números: 100, 97, 94, 91, ..., 18, 15, 12, 9
10 30
11 29
12 28
13 27
14 26
15 25
16 24
17 23
18 22
19 21
20 20
Nota
El contador del for puede ser declarado dentro del mismo for, en cuyo caso se
considera como variable local al for, no siendo accesible fuera de él. De esta manera,
en una misma función dos o más for, no anidados, pueden declarar contadores con el
mismo nombre. Cada contador existe dentro del for en el que fue declarado.
n = min + random(max-min+1);
La secuencia de números generados por random se repiten cada vez que se vuelve a
ejecutar el programa, por eso se denominan números pseudoaleatorios. Para que esto
no suceda y los números sean verdaderamente aleatorios, debe llamarse previamente
a la función randomize en la forma:
randomize();
Problema 9.1
int main() {
int n, termino = 1;
// Imprime la serie
while( termino <= n ){
cout << termino << endl;
termino++;
}
system("pause");
return 0;
}
int main() {
// Imprime la serie
do{
cout << termino << endl;
termino++;
}while( termino <= n );
system("pause");
return 0;
}
int main() {
// Imprime la serie
for(int termino = 1; termino <= n; termino++)
cout << termino << endl;
system("pause");
return 0;
}
10
Problema 9. 2
x3 3x 1
y
x2 2
int main() {
// Imprime la cabecera
cout << setw(15) << "x" << setw(15) << "y" << endl;
// Imprime la tabla
while( x <= 10 ){
y = (x*x*x + 3*x + 1)/(x*x + 2);
cout << setw(15) << x << setw(15) << y << endl;
x += 0.25;
}
system("pause");
return 0;
}
int main() {
// Imprime la cabecera
cout << setw(15) << "x" << setw(15) << "y" << endl;
// Imprime la tabla
do{
y = (x*x*x + 3*x + 1)/(x*x + 2);
IN T R O D U C CIÓ N A L A A L G O R I T M IA 11
system("pause");
return 0;
}
int main() {
// Imprime la cabecera
cout << setw(15) << "x" << setw(15) << "y" << endl;
// Imprime la tabla
for(double x = 0; x <= 10; x++){
y = (x*x*x + 3*x + 1)/(x*x + 2);
cout << setw(15) << x << setw(15) << y << endl;
x += 0.25;
}
system("pause");
return 0;
}
Problema 9.3
int main() {
numerador += 2;
denominador += 3;
// Imprime la suma
cout << "Suma : " << suma << endl;
system("pause");
return 0;
}
int main() {
// Imprime la suma
cout << "Suma : " << suma << endl;
system("pause");
return 0;
}
int main() {
// Imprime la suma
cout << "Suma : " << suma << endl;
system("pause");
return 0;
}
Problema 9.4
Solución
#include <iostream>
#include <iomanip>
#include <cstdlib>
int main() {
// Declaraciones locales
int numero, c1=0, c2=0, c3=0, c4=0, c5=0, c6=0, c7=0, c8=0, c9=0;
randomize();
system("pause");
return 0;
}
Problema 9.5
Diseñe un programa que simule varios lanzamientos simultáneos de dos dados hasta
obtener 6 en ambos dados e informe cuántos lanzamientos simultáneos fueron
necesarios efectuar.
Solucíón
#include <iostream>
#include <iomanip>
#include <cstdlib>
int lanzarDado();
int main() {
system("pause");
return 0;
}
int lanzarDado(){
return random(6) + 1;
}
IN T R O D U C CIÓ N A L A A L G O R I T M IA 15
Problema 9.6
Diseñe un programa que genere números aleatorios en el intervalo de -1000 a 1000
hasta obtener un número par menor que 500 pero mayor que -500. ¿Cuántos números
fueron necesarios generar y cuáles fueron el mayor y el menor número generados?.
Solución
#include <iostream>
#include <cstdlib>
int main() {
// Generación de números
do{
// Imprime resultados
cout << "Cantidad de numeros generados : " << conta << endl;
cout << "Mayor numero generado : " << mayor << endl;
cout << "Menor numero generado : " << menor << endl;
system("pause");
return 0;
}
Problema 9.7
Un método para obtener el cociente y el resto de dos números enteros es por restas
sucesivas. El método consiste en restar sucesivamente el divisor del dividendo hasta
obtener un resultado menor que el divisor, que será el resto de la división; el número
de restas efectuadas será el cociente. Diseñe un algoritmo que determine el cociente y
el resto de dos números enteros.
Solución
#include <iostream>
#include <cstdlib>
int main() {
system("pause");
return 0;
}
Problema 9.8
Diseñe un programa que lea un número entero positivo n mayor que 10 e imprima
todos los puntos del plano cartesiano que cumplan con la condición: x + y < n.
Solución
#include <iostream>
#include <iomanip>
#include <cstdlib>
int main() {
// Lee el número n
do{
cout << "Ingrese un numero entero mayor que 10: ";
cin >> n;
if(n <= 10)
cout << "El numero ingresado es incorrecto" << endl;
}while(n <= 10);
// Imprime los puntos del plano solicitados
cout << setiosflags(ios::left);
system("pause");
return 0;
}
IN T R O D U C CIÓ N A L A A L G O R I T M IA 17
Problema 9.9
**********
**********
**********
**********
**********
Solución
#include <iostream>
#include <cstdlib>
int main() {
// Imprime el rectángulo
for( int i = 0; i < n; i++ ){
for( int j = 0; j < m; j++ )
cout << "*";
cout << endl;
}
system("pause");
return 0;
}
Problema 9.10
Diseñe un programa que muestre por pantalla todos los números de 4 cifras que
cumplen con la condición de que la suma de las cifras pares es igual a la suma de las
cifras impares. Muestre también la cantidad de números encontrados.
Solución
#include <iostream>
#include <cstdlib>
int main() {
// Declaración de variables
int sumaCifPares, sumaCifImpares, cifra, copiaNumero, cantidad=0;
sumaCifPares=0;
do{
cifra = copiaNumero%10;
if(cifra%2==0)
sumaCifPares+=cifra;
else
sumaCifImpares+=cifra;
copiaNumero /= 10;
}while(copiaNumero!=0);
system("pause");
return 0;
}
Problema 9.11
Solución
#include <iostream>
#include <cstdlib>
int main() {
// Ingresa el número
cout << "CANTIDAD DE DIVISORES PARES DE UN NÚMERO ENTERO" << endl;
cout << "Ingrese el numero............: " ;
cin >> numero;
system("pause");
return 0;
}
Problema 9.12
Solución
#include <iostream>
#include <cstdlib>
int main() {
randomize();
system("pause");
return 0;
}
Problema 9.13
Valide la edad (para estar en el rango de 1 a 80 años) y el sexo (para ser m ó f).
20
Solución:
#include <iostream>
#include <conio>
int main(){
char sexo;
int edad, varones=0, mujeres=0, visitas=0, varmay=0, mujmay=0, suma=0;
double promedio=0;
do{
clrscr();
cout << "REGISTRO DE VISITANTES AL MUSEO\n\n";
do{
cout << "Visitante No. " << (visitas+1);
cout << "\n \n";
cout << "Ingrese su edad : ";
cin >> edad;
}while( (edad != -1) && (edad < 1 || edad > 80) );
if( edad != -1 ){
do{
cout << "Ingrese su sexo (f o m) : ";
cin >> sexo;
}while( sexo != 'm' && sexo != 'f' );
visitas++;
suma += edad;
if( sexo == 'f' ){
mujeres++;
if( edad >= 18 )
mujmay++;
}
else{
varones++;
if( edad >= 18 )
varmay++;
}
cout << "\nGracias por registrar su visita";
cout << "\nPulse una tecla para continuar...";
getch();
}
}while( edad != -1 );
if( visitas != 0 )
promedio = suma*1.0/visitas;
Problema 9.14
Diseñe un programa que permita ingresar los promedios pomnderados de 10 alumnos
y determine cuantos alumnos son de cada una las categorías A, B y C. Las categorñia
dependen del promedio ponderado de acuerdo a la siguiente tabla:
Solución:
#include <iostream>
#include <cstdlib>
int main(){
// Declaración de variables
double promPond;
int numCatA = 0, numCatB = 0, numCatC = 0;
// Reporte
cout << "Numero de alumnos de la categoria A : " << numCatA << endl;
cout << "Numero de alumnos de la categoria B : " << numCatB << endl;
cout << "Numero de alumnos de la categoria C : " << numCatC << endl;
system("pause");
return 0;
}
Problema 9.15
Diseñe un programa que permita ingresar las notas de una práctica calificada de una
sección, de una en una. Para finalizar la entrada de notas, se ingresará una nota igual
a -1. Mostrar luego un reporte indicando lo siguiente:
22
Solución:
#include <iostream>
#include <cstdlib>
int main(){
// Declaración de variables
double nota, promedio;
int cannot=0, sumnot=0, mayor=21, menor=-1, canapro=0, candesa=0;
// Procesa la nota
if(nota != -1){
cannot++;
sumnot += nota;
Problemas propuestos
Actividad
1. Diseñe un programa que imprima la siguiente serie en una columna a razón de un
término por fila.
1, 2, 3, 4, 5, 6, 7, 8, ..., 200
3. Diseñe un programa que imprima y sume 100 términos de la siguiente serie. Los
términos serán mostrados en una columna a razón de un término por fila.
6. Diseñe un programa que genere números aleatorios enteros del intervalo de -50 a
50 hasta obtener un número igual a –25 o igual a +25. Muestre los números
conforme se vayan generando y, el mayor y el menor números que fueron
generados.
7. Diseñe un programa que ingrese números enteros del intervalo de -50 a 50 hasta
ingresar un número igual a -25 ó igual a +25. Muestre luego el mayor y el menor
números que fueron ingresados.
8. Diseñe un programa que genere números aleatorios enteros del intervalo de100 a
900 hasta obtener un número par que cumpla con ser menor que 300 ó mayor
que 700. Muestre los números generados, la suma de todos los números
generados, el mayor número generado y el menor número generado.
9. Diseñe un programa que ingrese números enteros del intervalo de 100 a 900
hasta ingresar un número par que cumpla con ser menor que 300 ó mayor que
700. Muestre luego la suma de todos los números ingresados, el mayor número
ingresado y el menor número ingresado.
10. Diseñe un programa que genere aleatoriamente las notas de una práctica
calificada para 45 alumnos de una sección y determine la nota promedio de la
sección y, las notas máxima y mínima generadas.
24
11. Diseñe un programa que genere tres notas aleatorias para cada uno de los 40
alumnos de una sección e imprima un reporte como el siguiente:
12. Diseñe un programa que genere aleatoriamente las notas de una práctica
calificada de 30 alumnos de una sección e imprima por cada nota tantos
asteriscos como indique la nota.
Nota Histograma
10 **********
8 ********
5 *****
15 ***************
4 ****
1 *
20 ********************
.
.
.
7 *******
3 ***
14. Diseñe un programa que determine la cantidad de divisores de cada uno de los
números del 2 al 100.
15. Diseñe un programa que genere números aleatorios del intervalo de 1 a 1000
hasta obtener un número con cuatro divisores. El programa mostrará un listado
como el siguiente:
121 3
881 2
60 12
978 8
964 6
22 4
Autoevaluación
1. Diseñe un programa que halle la suma de todos los números enteros naturales
múltiplos de 3 pero no de 5 que sean menores o iguales que n.
1, 2, 3, 5, 8, 13, 21, …
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10 = 30
3 x 11 = 33
3 x 12 = 36
10. Diseñe un programa que tenga determine la potencia mn siendo m un número real
y n un número entero. Considere que n puede ser positivo, negativo o cero. No
use ningúna función del lenguaje C++.
h = 50 + 200t + 5t²
12. Dado un número entero mayor que 1, diseñe un programa que determine el
mayor divisor del número que sea diferente del número. Así, por ejemplo, dado el
número 45, su mayor divisor distinto de 45 es 15.
13. Un número perfecto es un entero positivo, que es igual a la suma de todos sus
divisores (excepto el mismo). El primer número perfecto es 6, ya que sus divisores
son 1, 2, 3 y suman 6. Diseñe un programa que lea un entero positivo y determine
si es o no es perfecto.
15. Diseñe un programa que genere números aleatorios del intervalo de 10 a 99 hasta
obtener un número cuya suma de sus cifras sea igual a a 4 ó 6. Muestre los
números conforme se vayan generando y muestre al final:
16. Diseñe un programa que ingrese números enteros del intervalo de 10 a 99 hasta
ingresar un número cuya suma de sus cifras sea igual a a 4 ó 6. Luego, muestre
un reporte indicando:
17. Diseñe un programa que genere números aleatorios del intervalo de -1000 a 1000
hasta obtener un número del intervalo de -500 a 500 o hasta obtener 100
números, lo que ocurra primero. Muestre los números conforme se vayan
generando y muestre al final:
18. Diseñe un programa que ingrese números enteros del intervalo de -1000 a 1000
hasta ingresar un número del intervalo de -500 a 500 o hasta ingresar 100
números, lo que ocurra primero. Luego, muestre un reporte indicando:
El sueldo promedio.
El sueldo máximo.
El sueldo mínimo.
El número de empleados ganan un sueldo inferior a S/. 1000.
20. Diseñe un programa que genere una serie de números aleatorios en el intervalo
de 1 a 10 hasta obtener dos números seguidos iguales e imprima cuantos
números fueron necesarios generar.
21. Diseñe un programa que simule el lanzamiento simultáneo de tres dados hasta
obtener 6 en los tres dados y determine cuantos lanzamientos simultáneos fueron
necesarios efectuar.
22. Diseñe un programa que determine el revés de un número natural cuya cifra de
las unidades es distinto de 0. Así, si se ingresa el número 1734, el programa
imprimirá 4371.
23. Diseñe un programa que determine si todas las cifras de un número natural son o
no consecutivas de izquierda a derecha o de derecha a izquierda. Así, por
ejemplo: 1234 tiene todas sus cifras consecutivas de izquierda a derecha, 765432
tiene todas sus cifras consecutivas de derecha a izquierda; pero 82432 no tiene
todas sus cifras consecutivas
24. Diseñe un programa que lea un número entero positivo n y determine cuantos
números aleatorios deben generarse, en el intervalo de 1 a n, para obtener una
suma mayor que 500.
25. Simule un juego en el cual dos jugadores tirarán los dados. El jugador A empieza
con S/.15 y el jugador B con S/.23. Cuando hacen sus tiros, el jugador con la
puntuación más alta gana S/.1. Continúan jugando hasta que uno de los dos
pierda todo su dinero o hasta completar 100 juegos, lo que ocurra primero.
Muestre un mensaje adecuado al final.
26. Diseñe un programa que determine la suma de las cifras de un número natural.
27. Diseñe un programa que muestre todos los números primos comprendidos en el
intervalo de 1 a 100.
29. Diseñe un programa que muestre los 5 primeros números perfectos. El primer
número perfecto es el 6. Como información, el 39 avo número perfecto tiene
4053496 cifras.
30. Diseñe un programa que imprima todos los puntos del primer cuadrante del plano
cartesiano que cumplan con la inecuación: x + y < 100.
31. Diseñe un programa que genere 5 cantidades retiradas para cada uno de los 25
productos de un almacén. Los productos están codificados de 101 a 125. La
cantidad a retirar debe estar en el rango de 10 a 50 unidades. El programa deberá
mostrar un reporte como el siguiente.
101 10 20 30 10 40 120
28
102 20 25 30 10 20 105
. . . . . . .
. . . . . . .
. . . . . . .
125 10 15 20 20 10 75
3 5 7 9 11
4 6 8 10 12
5 7 9 11 13
6 8 10 12 14
. . . . .
. . . . .
IN T R O D U C CIÓ N A L A A L G O R I T M IA 29
Para recordar
La estructura while verifica primero su condición de control antes ejecutar el
cuerpo del bucle por lo que no se ejecutará nunca si a la primera vez la condición
resulta falsa.
La estructura for funciona como una estructura while controlada por contador, por
lo que el cuerpo del bucle no se ejecutará nunca si la condición del for resulta
falsa a la primera vez.