Estructuras de repetición
description
Transcript of Estructuras de repetición
Estructuras de repetición
Curso Propedéutico
Maestría en Ingeniería Electrónica
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
EjemploCálculo de el promedio de 10 números.
#include <iostream.h>#include <conio.h>
int main(){ float suma = 0.0, num, promedio; int contador = 0; while(contador < 10){ cout << "Teclee un número:"; cin >> num; suma = suma + num; contador = contador + 1; } promedio = suma/contador; cout << "\nEl promedio es: " << promedio << endl; getch();}
ciclo controlado por centinelaCá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; 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();}
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
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.
Determinación de número primoint main(){ int n = 2, num, esPrimo = 1, limite; cout << "Teclee un número > 2: "; cin >> num; limite = (int)sqrt(num); while(n <= limite && esPrimo){ if(num % n == 0) //es divisible entre n esPrimo = 0; n++; } if(esPrimo) cout << "\nEl número " << num << " es primo\n"; else cout << "\nEl número " << num << " NO es primo\n"; getch(); return 0;}
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
Tarea #5Escriba un programa para encontrar todos los divisores de un número.
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.
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
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)
#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
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
Suma de seriesEs común el tener que sumar series de valores.
Por ejemplo:...
74
54
34
4
La serie anterior es igual a .
El siguiente trozo de código evalúa 1000 términos la serie anterior.
serie = 4;
signo = -1;
for(int i = 3; i <=1000 ; i +=2){
serie += signo*4/i;
signo = -signo;
}
Serie de potenciasEvaluemos la serie de potencias del seno de un ángulo
...!7!5!3
sen753
xxxxx
Se requiere una variable para almacenar la potencia de x, otra para el factorial y otra para el signo.
seno = x;
signo = -1;
fact = 1;
pot = x;
for(int i = 3; i <=50 ; i +=2){
fact *= (i-1)*i;
pot *= x*x;
serie += signo*pot/fact;
signo = -signo;
}
Tarea #6Escriba un programa que lea un ángulo en grados y calcule el coseno del ángulo utilizando la serie de potencias
...!6!4!2
1cos642
xxxx
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);
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();}
Método de newtonSe desea calcularla raíz de la ecuación sen(x) – e-x = 0 por el método de Newton.
#include <iostream.h>#include <conio.h>#include <math.h> int main() { double x, xOld, fx, dfx; x = 0.5; do{ xOld = x; fx = sin(x)-exp(-x); dfx = cos(x)+exp(-x); x = xOld - fx/dfx; cout << "fx = " << fx << " dfx = " << dfx << " x = " << x << endl; }while(fabs(fx)>1e-6); cout << "raiz = " << x << endl; getch(); return 0; }
Resultado del método de Newton
fx = -1 dfx = 2 x = 0.5fx = -0.127105 dfx = 1.48411 x = 0.585644fx = -0.00401128 dfx = 1.3901 x = 0.588529fx = -4.62025e-006 dfx = 1.3869 x = 0.588533fx = -6.16098e-012 dfx = 1.3869 x = 0.588533raiz = 0.588533