Download int main() - fc

Document related concepts

Ordenamiento de burbuja wikipedia , lookup

Transcript
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
falso
sentencias
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
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 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;
}
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
Determinar los primos de 1 a 100
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;
punto fijo
cout << fixed << setprecision( 2 );
for ( int anio = 1; anio <= 10; anio++ ) {
precisión
monto = principal * pow( 1.0 + tasa, anio );
cout << setw( 4 ) << anio << setw( 21 ) << monto << endl;
}
return 0;
}
ancho del
campo
Salida del programa
Anio
1
2
3
4
5
6
7
8
9
10
Monto del depósito
1050.00
1102.50
1157.63
1215.51
1276.28
1340.10
1407.10
1477.46
1551.33
1628.89
Suma de series
Es común el tener que sumar series de valores.
Por ejemplo:
4 4 4
4     ...
3 5 7
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
x3 x5 x7
sen x  x     ...
3! 5! 7!
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
x2 x4 x6
cos x  1     ...
2! 4! 6!
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
falso
verdadero
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 =
fx =
fx =
fx =
fx =
raiz
-1 dfx = 2 x = 0.5
-0.127105 dfx = 1.48411 x = 0.585644
-0.00401128 dfx = 1.3901 x = 0.588529
-4.62025e-006 dfx = 1.3869 x = 0.588533
-6.16098e-012 dfx = 1.3869 x = 0.588533
= 0.588533