290 likes | 677 Views
Estructuras de repetición. Curso Propedéutico Maestría en Ingeniería Electrónica. Ciclo while. La sentencia while permite repetir un bloque de instrucciones. La sintaxis del ciclo while es: while(condición) sentencia o bloque;
E N D
Estructuras de repetición Curso Propedéutico Maestría en Ingeniería Electrónica
Ciclo while La 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. verdadero condición sentencias falso
Ejemplo Cá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 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; 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ón En 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
Determinación de número primo int 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 100 int 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 interno lazo externo
Tarea #5 Escriba 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 for La 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 for a) 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)
Cálculo de interés compuesto #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; } punto fijo precisión ancho del campo
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 series Es común el tener que sumar series de valores. Por ejemplo: La serie anterior es igual a p. 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 potencias Evaluemos la serie de potencias del seno de un ángulo 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 #6 Escriba un programa que lea un ángulo en grados y calcule el coseno del ángulo utilizando la serie de potencias
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. Sintaxis do{ sentencias; }while(condición); sentencias condición verdadero falso
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 newton Se 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.5 fx = -0.127105 dfx = 1.48411 x = 0.585644 fx = -0.00401128 dfx = 1.3901 x = 0.588529 fx = -4.62025e-006 dfx = 1.3869 x = 0.588533 fx = -6.16098e-012 dfx = 1.3869 x = 0.588533 raiz = 0.588533