Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20...
-
Upload
desiderio-sergio -
Category
Documents
-
view
123 -
download
3
Transcript of Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20...
![Page 1: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/1.jpg)
Estructuras de repetición
Computación
![Page 2: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/2.jpg)
Motivación
Suponga que se desea sumar una lista de 20 números y obtener el promedio.
Sin estructuras de repetición habría que escribir 20 sentencias de entrada o declarar 20 variables diferentes.
Algo como:
int n,suma =0;
cout << “tecle n: “;
cin >> n;
suma = suma + n;
…
Repetir 20 veces
int n1,n2, … ,n20, suma = 0;cout << “tecle los 20 valores “;cin >> n1>>n2>>…>n20;
suma = n1 + n2 + …+ n20;
Para estos casos existen las repeticiones.
![Page 3: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/3.jpg)
Ciclo whileLa sentencia while permite repetir un bloque de instrucciones.
La sintaxis del ciclo while es:
while(condición)
sentencia o bloque;
Si la condición se cumple se ejecutan las sentencias del bloque y se regresa el flujo de control a evaluar nuevamente la condición. El proceso se repite hasta que la condición sea falsa.
El ciclo puede ejecutarse 0 veces si la condición no se cumple al entraren él.
condición sentencias
verdadero
falso
![Page 4: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/4.jpg)
EjemploCálculo de el promedio de 20 números.
#include <iostream.h>
int main(){ float suma = 0.0, num, promedio; int contador = 0; while(contador < 20){ cout << "Teclee un número:"; cin >> num; suma = suma + num; contador = contador + 1; } promedio = suma/20; cout << "\nEl promedio es: " << promedio << endl; system(“PAUSE”);}
![Page 5: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/5.jpg)
Ejemplo mejorado#include <iostream.h>
int main(){ float suma = 0.0, num, promedio; int contador = 0; cout << "****************************************"<<endl; cout << "* Calcula el promedio de 20 valores *"<<endl; cout << "****************************************"<<endl; while(contador < 20){ cout << "Teclee el número "<<contador+1<<" de 20: "; cin >> num; suma = suma + num; contador = contador + 1; } promedio = suma/20; cout << "****************************************"<<endl; cout << "El promedio es: " << promedio << endl; cout << "****************************************"<<endl; system("PAUSE");}
![Page 6: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/6.jpg)
TareaEscriba un programa que lea un número entero n y luego lea n números reales y calcule la suma de los números reales. Considere el caso en que el número n es positivo.
![Page 7: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/7.jpg)
Ciclos controlados por centinelaSi no se conoce de antemano el número de datos, se utiliza un valor de entrada especial como una bandera o centinela para terminar la entrada de datos.
En el caso del promedio el centinela puede ser -1.
Algoritmo
1. Solicitar un nuevo valor para promediar
2. Mientras valor diferente de -1 hacer
3. Acumular suma e incrementar contador
4. Solicitar nuevo valor para promediar
5. Fin ciclo
6 si contador > 0
7. Calcular promedio e imprimir
![Page 8: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/8.jpg)
ciclo controlado por centinelaCálculo de el promedio de N (desconocido) números. Se utiliza un valor especial para detener la entrada de datos.
int main(){ float suma = 0.0, num, promedio; int contador = 0; cout << "Teclee un número (-1 = fin):"; cin >> num; while(num != -1){ suma = suma + num; contador = contador + 1; cout << "Teclee un número (-1 = fin):"; cin >> num; } if(contador>0){ promedio = suma/contador; cout << "\nEl promedio es: " << promedio << endl; } else cout << "\nNo se teclearosn valores" << endl; getch();}
![Page 9: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/9.jpg)
EjemploSe desea un programa para leer las calificaciones de un grupo de alumnos y calcular el promedio general, así como el número de alumnos aprobados y reprobados.
No conocemos el número de alumno, por tanto es adecuado el esquema del centinela.
Primer esbozo de algoritmo
Leer siguiente calificación
Mientras calificación diferente de -1
acumular suma
si calificación>= 6
incrementar aprobados
sino
incrementar reprobados
Incrementar total de alumnos
Leer siguiente calificación
Fin ciclo
Calcular promedio
Imprimir resultados
![Page 10: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/10.jpg)
Variables:
contador – contador de calificaciones
aprobados – contador de aprobados
reprobados – contador de reprobados
cal – calificación
suma – suma de calidficaciones
prom – promedio de calificaciones
Iniciación
int total = 0, aprobados = 0, reprobados = 0;
float cal, suma = 0, prom;
![Page 11: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/11.jpg)
Lectura de calificación
cout << “teclee calificacion (-1 para terminar):”;
cin >> cal;
Ciclo de lectura
while(cal != -1){
suma += cal;
if(cal >= 6)
aprobados++;
else
reprobados++;
total++;
cout << “teclee calificacion (-1 para terminar):”;
cin >> cal;
}
![Page 12: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/12.jpg)
Cálculo del promedio:
prom = suma/total;
Impresión de resultados:
cout << “Total de alumnos: “<<total<<endl;
cout << “Promedio: “ << prom << endl;
cout << “# de aprobados: “ << aprobados << endl;
cout << “# de reprobados: “ << reprobados << endl;
![Page 13: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/13.jpg)
ejemplo
Se desea un programa que funcione como una calculadora.
El programa aceptará expresiones de la forma:
numero op numero
Donde op puede ser: +, -, *, / y ^ (potencia)
Ejem.: 5.7+4.2, 6.7/2.5,
El programa terminará cuando se teclee la secuencia 0x0, donde x es cualquier carácter.
El programa puede hacerse con un esquema de ciclo con centinela.
![Page 14: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/14.jpg)
Algoritmo1. Iniciar programa
2. Leer siguiente expresión
3. Mientras expresión diferente de “0*0” hacer
4. Calcular e imprimir resultado
5. Leer siguiente expresión
6. Fin ciclo
El paso 4 sería
4. en caso de que op sea
4.1. ‘+’ sumar los dos números
4.2. ‘-’ restar los dos números
4.3. ‘+’ multiplicar los dos números
4.4. ‘/’ dividir los dos números
4.5. ‘^’ potencia de los dos números
![Page 15: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/15.jpg)
Programa#include <iostream.h>#include <math.h>main(){ float x,y,r;//datos de entrada y resultado char op;//operador cout <<">";//indicador cin >> x>> op >> y;//lectura de datos while (!(x==0&&y==0)){ switch(op){ case '+':r = x+y;break; case '-':r = x-y;break; case '*':r = x*y;break; case '/':r = x/y;break; case '^':r = pow(x,y);break; default:r=0; } cout << r << endl; cout <<">"; cin >> x>> op >> y; }}
![Page 16: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/16.jpg)
Tarea caseraEscriba programa con un ciclo controlado por centinela para leer una serie de números hasta que el usuario teclee el número 9999. Dentro del ciclo cuente los múltiplos de 2, de 3 y de 5. Imprima cuantos múltiplos se teclearon en cada caso.
Ejemplo:
Teclee un número: 6
Teclee un número: 9
Teclee un número: 15
Teclee un número: 20
Teclee un número: 8
Teclee un número: 9999
Múltiplos de 2: 3
Múltiplos de 3: 3Múltiplos de 5: 2
![Page 17: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/17.jpg)
Ciclos anidados
Muchos algoritmos se definen mediante ciclos dentro de otros ciclos.
Es posible incluir dentro de un ciclo cualquier estructura de control incluyendo otro ciclo.
![Page 18: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/18.jpg)
EjemploPrograma para imprimir un rectángulo de asteriscos (‘*’) leyendo el tamaño del lado y la altura con un máximo de 20.
Ejemplo:
Si se teclea 10 8, imprimirá
********************************************************************************
![Page 19: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/19.jpg)
Este problema puede resolverse fácilmente haciendo un ciclo dentro de otro. El algoritmo es
1. Leer el valor de n y m
2. Si n > 1 y n < 20 y m>1 y m<20
3. r = 0
4 Mientras r < m hacer
5. c = 0
6. Mientras c<n hacer
7. Imprimir “*”
8. Incrmentar c
9. Fin ciclo
10. Cambiar de línea
11. Incrementar r
12 Fin ciclo
![Page 20: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/20.jpg)
#include <iostream.h>#include <iomanip.h>main(){ int n,m,c,r; cout << "ancho del rectangulo (maximo 20):"; cin >> n; cout << "alto del rectangulo (maximo 20):"; cin >> m; if(n>1 && n<20&&m>1&&m<20){ r=0; while(r<m){ c = 0; while(c<n){ cout << '*'; c++; } cout << endl; r++; } } cout<<endl; system("PAUSE");}
![Page 21: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/21.jpg)
Tarea casera
Escriba un programa para dibujar un patrón de tablero de ajedrez de tamaño 2 a 20 como se muestra:
* * * * * * * ** * * * * * * *
Utilice ciclos anidados y sentencias de salida que impriman un asterisco y espacio en blanco.
Ayuda: note que las líneas impares comienzan con asterisco y las pares con espacio.
![Page 22: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/22.jpg)
Operadores de asignaciónEn C existen operadores para abreviar las operaciones de asignación.
Por ejemplo: c = c + 3 puede escribirse como c += 3.
En general
variable = variable operador expresión
es equivalente a
variable operador= expresión
Ojo
a *= c + d
equivale a
a = a*(c + d) no a = a*c + d
![Page 23: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/23.jpg)
Ejemplos
a = a + 3; a += 3
c = 2*c; c *= 2;
x = x – z; x –= z;
s = s*b – s*c; s *= b – c;
d = d/(f + 5); d /= f + 5;
r = r % 5; r %= 5;
![Page 24: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/24.jpg)
Operadores de Incremento y decremento
Operador Llamado Ejemplo Descripción
++ preincremento ++a Incrementa a en 1, luego utiliza el nuevo valor en la expresión en que reside a.
++ posincremento a++ Toma el valor actual de a para la expresión en que reside a, luego incrementa a.
-- predecremento --a Decrementa a en 1, luego utiliza el nuevo valor en la expresión en que reside a.
-- posdecremento a-- Toma el valor actual de a para la expresión en que reside a, luego decrementa a.
![Page 25: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/25.jpg)
Números primosUn número primo es aquel que solo es divisible entre si mismo y entre 1. Por ejemplo: 1, 2, 5, 47.
Para saber si un número es primo debemos obtener el residuo de la división del número entre todos los números desde 2 hasta su raíz cuadrada. Si el residuo es diferente de cero, el número es primo.
Algoritmo
1. Leer el numero 8. div++
2. div = 2; 9. finlazo
3. esPrimo = 1 10. si esPrimo
4. limite = raiz de numero 11 imprime “primo”
5. mientras div<limite o esPrimo 12 sino
6. si numero%div == 0 13 imprime “NO primo”
7. esPrimo = 0
![Page 26: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/26.jpg)
Determinación de número primoint main(){ int div = 2, num, esPrimo = 1, limite; cout << "Teclee un número > 2: "; cin >> num; limite = (int)sqrt(num); while(div <= limite && esPrimo){ if(num % div == 0) //es divisible entre n esPrimo = 0; div++; } if(esPrimo) cout << "\nEl número " << num << " es primo\n"; else cout << "\nEl número " << num << " NO es primo\n"; getch(); return 0;}
![Page 27: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/27.jpg)
Tarea ¿Cuál es la salida de los siguientes ciclos?
i = 0;
while(i < 10)
cout << 2*i << setw(10)<< 3*i*i;
i += 3;
}
i = 5;
while(i > -20)
cout << 2*i << setw(10)<< 2*i+1;
i -= 3;
}
![Page 28: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/28.jpg)
Tarea caseraEscriba un programa para encontrar todos los divisores de un número.
Ejemplo:
Teclee un número: 246
Los divisores de 246 son: 2, 3, 6, 41, 82, 123
![Page 29: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/29.jpg)
Ciclo forLa sentencia for permite definir fácilmente ciclos controlados por contador.
El formato general de la estructura for es:
for(expresion1; expresion2; expresion3)
instrucción;
Esta es equivalente a la siguiente sentencia while:
expresion1;
while(expresion2){
instrucción;
expresion3;
}
expresion1 = sentencia de iniciación
expresion2 = condición de terminación
expresion3 = sentencia de incremento
![Page 30: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/30.jpg)
ejemplos de lazos fora) modifica la variable de control de 1 a 100 en incrementos de 1.
for(i = 1; i <= 100; i++)
b) modifica la variable de control de 100 a 1 en decrementos de 1.
for(i = 100; i >= 1; i--)
c) modifica la variable de control de 7 a 77 en incrementos de 7.
for(i = 7; i <= 77; i += 7)
d) modifica la variable de control de 20 a 2 en decrementos de -2.
for(i = 20; i >= 2; i -= 2)
e) modifica la variable de control de 2 a 20 en incrementos de 3.
for(i = 2; i <= 20; i += 3)
f) modifica la variable de control de 99 a 0 en decrementos de -11.
for(i = 99; i >= 0; i -= 11)
![Page 31: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/31.jpg)
Cálculo de interés
El interés que otorgan los bancos por invertir un capital puede calcularse con la siguiente fórmula
I = C (1 + r)n
Donde C es el capital, r es la tasa de interés y n es el número de periodos
Ejemplo:
Si C = 20,000, r = 7% y n = 3,
I = 20000(1 + 0.07)3 = 24,500.86
![Page 32: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/32.jpg)
#include <iostream>
#include <iomanip>
#include <cmath> // permite al programa utilizar la función pow
int main() {
double monto; // monto del depósito
double principal = 1000.0; // monto principal (al inicio)
double tasa = .05; // tasa de interés
cout << "Anio" << setw( 21 ) << "Monto del depósito" << endl;
cout << fixed << setprecision( 2 );
for ( int anio = 1; anio <= 10; anio++ ) {
monto = principal * pow( 1.0 + tasa, anio );
cout << setw( 4 ) << anio << setw( 21 ) << monto << endl;
}
return 0;
}
Cálculo de interés compuesto
precisión
ancho del campo
punto fijo
![Page 33: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/33.jpg)
Salida del programa
Anio Monto del depósito 1 1050.00 2 1102.50 3 1157.63 4 1215.51 5 1276.28 6 1340.10 7 1407.10 8 1477.46 9 1551.33 10 1628.89
![Page 34: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/34.jpg)
Grafica de función seno
Podemos hacer una gráfica muy rudimentaria de una función en la pantalla de consola.
El método consiste en dibujar espacios hasta el valor de la función y luego dibujar un carácter.
Algoritmo
1. Para i = 0 hasta N
2. Para j = 0 hasta 40+valor función hacer
3. Escribir ‘ ’
4. Escribir ‘*’ y un fin de línea
5. fin
![Page 35: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/35.jpg)
Programa senoFor.cpp
#include <iostream.h>#include <math.h>main(){ int i,j; float x; for(i=0;i<50;i++){ for(j=0;j<40+20*exp(-i/20)*sin(i*3.1416/10);j++) cout <<' '; cout << '*'<<endl; } cout << endl; system("pause");}
![Page 36: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/36.jpg)
TareaEscriba un programa que despliegue las primeras 20 potencias de 2 y de 3 usando un ciclo for. Establezca el formato de números en punto fijo con 0 decimales y ajuste el ancho de los campos.
n 2^n 3^n
1 2 3
2 4 9
3 8 27
4 16 81
…
20 1048576 3486784401
![Page 37: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/37.jpg)
Tarea casera
Escriba un programa que despliegue la siguiente tabla de multiplicar. Asegúrese que las columnas estén bien alineadas.
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
...
10 20 30 40 50 60 70 80 90 100
![Page 38: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/38.jpg)
Ciclo do - while
El ciclo do-while es similar al ciclo while excepto que la prueba se realiza al final del ciclo, esto fuerza a que se ejecute por lo menos una vez.
condición
sentencias
verdadero
falso
Sintaxis
do{
sentencias;
}while(condición);
![Page 39: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/39.jpg)
Lectura con validación
El ciclo do-while puede usarse para validar la entrada de datos.
Algoritmo de validación:
1. Hacer
2. Leer datos
3. Mientras datos inválidos
![Page 40: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/40.jpg)
Ejemplo de validación
#include <iostream.h>
main(){ int a,b; do{ cout << "Teclee un número positivo para A: "; cin >> a; }while(a<=0); do{ cout << "Teclee un número positivo para B: "; cin >> b; }while(b<=0); cout <<"a * b = " << a*b << endl; system("pause");}
![Page 41: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/41.jpg)
Validación de una fechaPara validar una fecha debemos asegurar que los días caigan en el rango de 1 a 31 y los meses de 1 a 12.
Una mejora consiste en verificar los días de acuerdo al mes.
Para febrero en año bisiesto el máximo de días es 29.
Para verificar año bisiesto usamos
anyoBisiesto = (a%4==0)&&(a%100!=0);
Para los meses de 30 y 31 días:
mes30dias = (m==4 || m==6 || m==9 || m==11);
mes31dias = (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12);
Expresión para checar fecha:
fechaValida = (d<=31 && mes31dias)|| (d<=30 && mes30dias)||(d<=28 && m==2)||(d<=29&& anyoBisiesto);
![Page 42: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/42.jpg)
Programa#include <iostream.h>
main(){ int d,m,a;//día, mes, año int anyoBisiesto,mes30dias,mes31dias,fechaValida; do{ cout << "Teclee una fecha (dd mm aa): "; cin >> d >> m >> a; anyoBisiesto = (a%4==0)&&(a%100!=0);
mes30dias = (m==4 || m==6 || m==9 || m==11);mes31dias = (m==1 || m==3 || m==5 || m==7
|| m==8 || m==10 || m==12); fechaValida = (d<=31 && mes31dias)|| (d<=30 && mes30dias)||(d<=28 && m==2)||(d<=29 && anyoBisiesto); }while(!fechaValida);
![Page 43: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/43.jpg)
cout << d << " de "; switch(m){ case 1:cout << "enero";break; case 2:cout << "febrero";break; case 3:cout << "marzo";break; case 4:cout << "abril";break; case 5:cout << "mayo";break; case 6:cout << "junio";break; case 7:cout << "julio";break; case 8:cout << "agosto";break; case 9:cout << "septiembre";break; case 10:cout << "octubre";break; case 11:cout << "noviembre";break; case 12:cout << "diciembre";break; } cout << " de " << a << endl; system("pause");}
![Page 44: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/44.jpg)
tarea
Escriba un programa que lea tres números enteros positivos, el tercero de los cuales deberá ser mayor que los otros dos y menor o igual a la suma de los dos primeros.
![Page 45: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/45.jpg)
ciclo do-while controlado por centinela
Cálculo de el promedio de N números. Se utiliza un valor especial para detener la entrada de datos.
int main(){ float suma = 0.0, num, promedio; int contador = 0; do{ cout << "Teclee un número (-1 = fin):"; cin >> num; if(num != -1){ suma = suma + num; contador = contador + 1; } }while(num != -1); if(contador>0){ promedio = suma/contador; cout << "\nEl promedio es: " << promedio << endl; } else cout << "\nNo se teclearosn valores" << endl; getch();}
![Page 46: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/46.jpg)
Determinar los primos de 1 a 100int main(){ int n, num = 2, esPrimo, limite; while(num<=100){ esPrimo = 1; n = 2; limite = (int)sqrt(num); while(n <= limite && esPrimo){ if(num % n == 0) //es divisible entre n esPrimo = 0; n++; } if(esPrimo) cout << num << " "; num++; } getch(); return 0;}
lazo
inte
rno
lazo
ext
erno
![Page 47: Estructuras de repetición Computación. Motivación Suponga que se desea sumar una lista de 20 números y obtener el promedio. Sin estructuras de repetición.](https://reader035.fdocuments.ec/reader035/viewer/2022062312/5528bde3497959977d8fa56f/html5/thumbnails/47.jpg)
Tarea casera
Un número es perfecto si es igual a la suma de sus divisores, por ejemplo 6 es perfecto porque 6 = 1 + 2 + 3. Escriba un programa para encontrar todos los números perfectos entre 1 y 10000.