Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. Detalles a tener en cuenta en el uso del for - Pueden faltar alguna de las expresiones que componen el for, pero deben permanecer los signos de punto y coma. : : i=1; suma = 0; for (;i<=10;i++) suma=suma+i; : - La condición es una expresión que puede ser de cualquier tipo según el/los operador/es usado/s. ( a >= 5) (azar >= LIM1) && (azar <= LIM2) j <= 4 * x * y // de tipo relacional // de tipo lógica // de tipo aritmética - Cuando falta la condición, se asume el valor verdadero siempre, en cuyo caso se transforma en una iteración infinita. - El contador de iteraciones y el límite de un lazo for puede ser modificado dentro del ciclo. Práctica poco recomendable. - El incremento puede ser negativo. #include <stdio.h> void main() { int i,n; printf("Ingrese n \n"); scanf("%d",&n); for (i = n; i >0 ;i--) printf("%3d\n",i) ; } Agrm. María Eugenia Marquetti de Vallvé 15 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. - Un proceso iterativo puede ser interrumpido por una proposición break o por la modificación de la/s condición/es. - El enunciado o sentencia vacía. Se usará en casos muy particulares. Ejemplo: cuenta la cantidad de caracteres en una línea de texto terminada en un punto. int cont, n; : for (n=o; getchar() != ‘.’ ; n++) ; // enunciado vacío El operador coma Es un operador binario para expresiones. De uso frecuente en la proposición for. Es una pareja de expresiones. Forma de uso: expresion1, expresión2 Se evalúa primero expresión 1 y luego expresión2. Permite hacer asignaciones múltiples de valores iniciales y procesamiento múltiple de índices. Ejemplo: que suma los primeros n números enteros pares e impares #include <stdio.h> void main() { int cont,j,k,n; int suma_par=0, suma_impar=0 ; printf("Ingrese n \n"), scanf("%d",&n); for (cont=0, j=2,k=1; cont <n; cont++, j=j+2, k=k+2) { suma_par=suma_par+j; suma_impar=suma_impar+k; } printf("%7d %7d\n",suma_par,suma_impar); } for anidados Agrm. María Eugenia Marquetti de Vallvé 16 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. Los procesos iterativos se pueden anidar. Se hace cuando un programa necesita repetir un ciclo más de una vez. Ejemplo: programa que escribe una tabla de valores de verdad #include <stdio.h> // tabladev.cpp #define EXPRESION a && b #define V 1 #define F 0 void main() { int a, b; for (a=F; a<=V;a++) { for (b=F; b<=V;b++) if (EXPRESION ) printf("%d %d Verdadero",a,b); else printf("%d %d Falso ",a,b); printf("\n"); } } Otras estructuras de control Iteración condicionalWhile A nivel diseño se relaciona con la estructura algorítmica fundamental: MIENTRAS (la condición sea verdadera) Acción; FIN_MIENTRAS; MIENTRAS la condición sea verdadera, la Acción se realizará. Sintaxis y semántica while (condición) sentencia; Donde: while: palabra reservada del lenguaje. sentencia: proposición simple o compuesta. Agrm. María Eugenia Marquetti de Vallvé 17 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. condición: expresión condicional. La sentencia se ejecutará MIENTRAS que la condición sea verdadera. Cuando la expresión condicional asume el valor falso, termina el ciclo. El ciclo se repite una cantidad NO predefinida de veces y puede no ejecutarse nunca, depende de la condición. Ejemplo: #include <stdio.h> /* MIENTRAS la variable i no supere a 100, escribe y suma */ void main() { int i=2, max = 100; while( i< max) { printf("%d\n",i); i=i+2; } } do while A nivel diseño se relaciona con la estructura algorítmica fundamental: REPETIR Acción; HASTA QUE (la condición sea falsa) La Acción se REPETIRA HASTA QUE la condición sea falsa. Sintaxis y semántica do sentencia; while (condición); Agrm. María Eugenia Marquetti de Vallvé 18 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. Donde: do , while: palabras reservadas del lenguaje. sentencia: proposición simple o compuesta. condición: expresión condicional. La sentencia se ejecutará siempre que la expresión sea verdadera, cuando la expresión asume el valor falso, termina la iteración. El ciclo se repite una cantidad NO predefinida de veces y se lleva a cabo por lo menos una vez, depende de la condición. Ejemplo: #include <stdio.h> #include <values.h> /* se repite la suma representable */ hasta alcanzar el valor del mayor entero void main() { int i=1; do { i++; } while (i < MAXINT); printf(" El mayor entero representable es: constante MAXINT = %5d\n",i,MAXINT); } %5d y la while versus do while while controla ejecuta Agrm. María Eugenia Marquetti de Vallvé controla ejecuta : 19 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. do while ejecuta controla ejecuta controla : - La iteración do while es una variante del while. - Ambos ciclos se repiten siempre que la expresión sea verdadera. Sentencias continue y goto Agrm. María Eugenia Marquetti de Vallvé 16 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. La proposición continue provoca que inicie la siguiente iteración del ciclo. Es de poco uso. La proposición goto es una bifurcación incondicional a una proposición etiquetada arbitrariamente dentro de la función. NO SE RECOMIENDA SU USO, PORQUE SUELE ROMPER LA ESTRUCTURACION DE LOS ALGORITMOS Al igual que la proposición break, es una herramienta de la programación no estructurada. La proposición break permite una salida anticipada de todos los procesos iterativos. Ambas permiten alternativas de “escape” de ciclos. Agrm. María Eugenia Marquetti de Vallvé 16