estructura de repeticion.ppt

47
Estructuras de repetición Computación

Transcript of estructura de repeticion.ppt

  • Estructuras de repeticinComputacin

  • MotivacinSuponga que se desea sumar una lista de 20 nmeros y obtener el promedio.Sin estructuras de repeticin habra que escribir 20 sentencias de entrada o declarar 20 variables diferentes.Algo como:int n,suma =0;cout > n;suma = suma + n;Repetir 20 vecesint n1,n2, ,n20, suma = 0;cout > n1>>n2>>>n20;suma = n1 + n2 + + n20;Para estos casos existen las repeticiones.

  • Ciclo whileLa sentencia while permite repetir un bloque de instrucciones.La sintaxis del ciclo while es:while(condicin) sentencia o bloque;Si la condicin se cumple se ejecutan las sentencias del bloque y se regresa el flujo de control a evaluar nuevamente la condicin. El proceso se repite hasta que la condicin sea falsa.El ciclo puede ejecutarse 0 veces si la condicin no se cumple al entraren l.condicinsentenciasverdaderofalso

  • EjemploClculo de el promedio de 20 nmeros.#include

    int main(){ float suma = 0.0, num, promedio; int contador = 0; while(contador < 20){ cout > num; suma = suma + num; contador = contador + 1; } promedio = suma/20; cout

  • Ejemplo mejorado#include

    int main(){ float suma = 0.0, num, promedio; int contador = 0; cout

  • TareaEscriba un programa que lea un nmero entero n y luego lea n nmeros reales y calcule la suma de los nmeros reales. Considere el caso en que el nmero n es positivo.

  • Ciclos controlados por centinelaSi no se conoce de antemano el nmero 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.Algoritmo1. Solicitar un nuevo valor para promediar2. Mientras valor diferente de -1 hacer3. Acumular suma e incrementar contador4. Solicitar nuevo valor para promediar5. Fin ciclo6 si contador > 07. Calcular promedio e imprimir

  • ciclo controlado por centinelaClculo de el promedio de N (desconocido) nmeros. Se utiliza un valor especial para detener la entrada de datos.int main(){ float suma = 0.0, num, promedio; int contador = 0; cout > num; while(num != -1){ suma = suma + num; contador = contador + 1; cout > num; } if(contador>0){ promedio = suma/contador; cout
  • EjemploSe desea un programa para leer las calificaciones de un grupo de alumnos y calcular el promedio general, as como el nmero de alumnos aprobados y reprobados.No conocemos el nmero de alumno, por tanto es adecuado el esquema del centinela.Primer esbozo de algoritmoLeer siguiente calificacinMientras calificacin diferente de -1 acumular suma si calificacin>= 6 incrementar aprobados sino incrementar reprobados Incrementar total de alumnos Leer siguiente calificacinFin cicloCalcular promedioImprimir resultados

  • Variables:contador contador de calificaciones aprobados contador de aprobadosreprobados contador de reprobadoscal calificacinsuma suma de calidficacionesprom promedio de calificacionesIniciacinint total = 0, aprobados = 0, reprobados = 0;float cal, suma = 0, prom;

  • Lectura de calificacincout > cal;Ciclo de lecturawhile(cal != -1){ suma += cal; if(cal >= 6) aprobados++; else reprobados++; total++; cout > cal;}

  • Clculo del promedio:prom = suma/total;Impresin de resultados:cout
  • ejemploSe desea un programa que funcione como una calculadora.El programa aceptar expresiones de la forma:numero op numeroDonde 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 carcter.

    El programa puede hacerse con un esquema de ciclo con centinela.

  • Algoritmo1. Iniciar programa2. Leer siguiente expresin3. Mientras expresin diferente de 0*0 hacer4. Calcular e imprimir resultado5. Leer siguiente expresin6. Fin cicloEl paso 4 sera4. en caso de que op sea 4.1. + sumar los dos nmeros 4.2. - restar los dos nmeros 4.3. + multiplicar los dos nmeros 4.4. / dividir los dos nmeros 4.5. ^ potencia de los dos nmeros

  • Programa#include #include main(){ float x,y,r;//datos de entrada y resultado char op;//operador cout > 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 > op >> y; }}

  • Tarea caseraEscriba programa con un ciclo controlado por centinela para leer una serie de nmeros hasta que el usuario teclee el nmero 9999. Dentro del ciclo cuente los mltiplos de 2, de 3 y de 5. Imprima cuantos mltiplos se teclearon en cada caso.Ejemplo:Teclee un nmero: 6Teclee un nmero: 9Teclee un nmero: 15Teclee un nmero: 20Teclee un nmero: 8Teclee un nmero: 9999Mltiplos de 2: 3Mltiplos de 3: 3Mltiplos de 5: 2

  • Ciclos anidadosMuchos algoritmos se definen mediante ciclos dentro de otros ciclos.

    Es posible incluir dentro de un ciclo cualquier estructura de control incluyendo otro ciclo.

  • EjemploPrograma para imprimir un rectngulo de asteriscos (*) leyendo el tamao del lado y la altura con un mximo de 20.Ejemplo:Si se teclea 10 8, imprimir********** ********** ********** ********** ********** ********** ********** **********

  • Este problema puede resolverse fcilmente haciendo un ciclo dentro de otro. El algoritmo es1. Leer el valor de n y m2. Si n > 1 y n < 20 y m>1 y m
  • #include #include main(){ int n,m,c,r; cout > n; cout > m; if(n>1 && n1&&m
  • Tarea caseraEscriba un programa para dibujar un patrn de tablero de ajedrez de tamao 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 lneas impares comienzan con asterisco y las pares con espacio.

  • Operadores de asignacinEn C existen operadores para abreviar las operaciones de asignacin.Por ejemplo: c = c + 3 puede escribirse como c += 3.En generalvariable = variable operador expresines equivalente avariable operador= expresinOjoa *= c + dequivale aa = a*(c + d) no a = a*c + d

  • Ejemplosa = a + 3;a += 3c = 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;

  • Operadores de Incremento y decremento

    OperadorLlamadoEjemploDescripcin++preincremento++aIncrementa a en 1, luego utiliza el nuevo valor en la expresin en que reside a.++posincrementoa++Toma el valor actual de a para la expresin en que reside a, luego incrementa a.--predecremento--aDecrementa a en 1, luego utiliza el nuevo valor en la expresin en que reside a.--posdecrementoa--Toma el valor actual de a para la expresin en que reside a, luego decrementa a.

  • Nmeros primosUn nmero primo es aquel que solo es divisible entre si mismo y entre 1. Por ejemplo: 1, 2, 5, 47.Para saber si un nmero es primo debemos obtener el residuo de la divisin del nmero entre todos los nmeros desde 2 hasta su raz cuadrada. Si el residuo es diferente de cero, el nmero es primo.Algoritmo1. Leer el numero 8. div++2. div = 2; 9. finlazo3. esPrimo = 1 10. si esPrimo4. limite = raiz de numero11imprime primo5. mientras div
  • Determinacin de nmero primoint main(){ int div = 2, num, esPrimo = 1, limite; cout > num; limite = (int)sqrt(num); while(div
  • Tarea Cul es la salida de los siguientes ciclos?i = 0;while(i < 10) cout
  • Tarea caseraEscriba un programa para encontrar todos los divisores de un nmero.

    Ejemplo:Teclee un nmero: 246Los divisores de 246 son: 2, 3, 6, 41, 82, 123

  • Ciclo forLa sentencia for permite definir fcilmente ciclos controlados por contador.El formato general de la estructura for es:for(expresion1; expresion2; expresion3)instruccin;Esta es equivalente a la siguiente sentencia while:expresion1;while(expresion2){ instruccin; expresion3;}expresion1 = sentencia de iniciacinexpresion2 = condicin de terminacinexpresion3 = sentencia de incremento

  • ejemplos de lazos fora) modifica la variable de control de 1 a 100 en incrementos de 1.for(i = 1; i = 1; i--)c) modifica la variable de control de 7 a 77 en incrementos de 7.for(i = 7; i = 2; i -= 2)e) modifica la variable de control de 2 a 20 en incrementos de 3.for(i = 2; i = 0; i -= 11)

  • Clculo de intersEl inters que otorgan los bancos por invertir un capital puede calcularse con la siguiente frmulaI = C (1 + r)nDonde C es el capital, r es la tasa de inters y n es el nmero de periodosEjemplo:Si C = 20,000, r = 7% y n = 3,I = 20000(1 + 0.07)3 = 24,500.86

  • #include #include #include // permite al programa utilizar la funcin powint main() { double monto; // monto del depsito double principal = 1000.0; // monto principal (al inicio) double tasa = .05; // tasa de inters cout
  • Salida del programaAnio Monto del depsito 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

  • Grafica de funcin senoPodemos hacer una grfica muy rudimentaria de una funcin en la pantalla de consola.El mtodo consiste en dibujar espacios hasta el valor de la funcin y luego dibujar un carcter.Algoritmo1. Para i = 0 hasta N2. Para j = 0 hasta 40+valor funcin hacer3. Escribir 4. Escribir * y un fin de lnea5. fin

  • Programa senoFor.cpp#include #include main(){ int i,j; float x; for(i=0;i
  • TareaEscriba un programa que despliegue las primeras 20 potencias de 2 y de 3 usando un ciclo for. Establezca el formato de nmeros en punto fijo con 0 decimales y ajuste el ancho de los campos.n 2^n 3^n 1 2 32 4 93 8 274 16 81 20 1048576 3486784401

  • Tarea caseraEscriba un programa que despliegue la siguiente tabla de multiplicar. Asegrese que las columnas estn bien alineadas.1 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18 203 6 9 12 15 18 21 24 27 30...10 20 30 40 50 60 70 80 90 100

  • Ciclo do - whileEl 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.condicinsentenciasverdaderofalsoSintaxisdo{ sentencias;}while(condicin);

  • Lectura con validacinEl ciclo do-while puede usarse para validar la entrada de datos.Algoritmo de validacin:1. Hacer 2. Leer datos3. Mientras datos invlidos

  • Ejemplo de validacin#include

    main(){ int a,b; do{ cout > a; }while(a b; }while(b

  • Validacin de una fechaPara validar una fecha debemos asegurar que los das caigan en el rango de 1 a 31 y los meses de 1 a 12.Una mejora consiste en verificar los das de acuerdo al mes.Para febrero en ao bisiesto el mximo de das es 29.Para verificar ao bisiesto usamosanyoBisiesto = (a%4==0)&&(a%100!=0);Para los meses de 30 y 31 das:mes30dias = (m==4 || m==6 || m==9 || m==11);mes31dias = (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12);Expresin para checar fecha:fechaValida = (d
  • Programa#include

    main(){ int d,m,a;//da, mes, ao int anyoBisiesto,mes30dias,mes31dias,fechaValida; do{ cout > 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

  • cout
  • tareaEscriba un programa que lea tres nmeros 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.

  • ciclo do-while controlado por centinelaClculo de el promedio de N nmeros. Se utiliza un valor especial para detener la entrada de datos.int main(){ float suma = 0.0, num, promedio; int contador = 0; do{ cout > num; if(num != -1){ suma = suma + num; contador = contador + 1; } }while(num != -1); if(contador>0){ promedio = suma/contador; cout
  • Determinar los primos de 1 a 100int main(){ int n, num = 2, esPrimo, limite; while(num
  • Tarea caseraUn nmero 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 nmeros perfectos entre 1 y 10000.

    ***********************************************