You are on page 1of 5

Tipos de Estructuras Iterativa

1- La Estructura de Repeticin for Esta estructura de repeticin es ms utilizada cuando sabemos el nmero de repeticiones que deseamos ejecutar. La notacin de esta estructura es sencilla y se detalla a continuacin for ( condicin de inicio ; expresin ; accin despus de cada iteracin ) { sentencia (s); } La condicin de inicio quiere decir que podemos inicializar una variable que vayamos a utilizar dentro el cuerpo de la estructura for. La expresin nos indica que se seguir iterando(repitiendo) mientras la condicin sea verdadera. La accin despus de cada iteracin viene a ser lo que queremos hacer variar despus de cada iteracin, esta variacin podra ser un incremento en la variable definida en la condicin de inicio. Al igual que las dems estructuras de control el cuerpo de la estructura for lleva llaves si este contiene ms de una sentencia o instruccin. Ejemplo 6.1 Un ejemplo sencillo puede ser que quiero cantar 10 veces la cancin del elefante, el cdigo sera algo as: #include <iostream> using namespace std; void main() { int i; for( i = 1 ; i<=10 ; i++) { cout<<i<<" elefante(s) se balanceaba(n) sobre la tela de una araa\n; cout<<como vea(n) que resista(n) fueron a llamar a otro elefante\n "; } }

El cdigo anterior emitir por pantalla 10 veces el mensaje de 1 elefante ....... hasta 10 elefantes...... El ejemplo anterior es muy sencillo pero nos muestra el funcionamiento de la estructura for. * Practica los problemandos 37 al 49

2- Estructura de repeticin do while Esta estructura de control es muy parecida a la estructura while lo que la hace diferente es que siempre ejecuta por lo menos una ves el cuerpo de la estructura, por eso el do, y luego valida una expresin y en funcin a este resultado vuelve a iterar o no. La notacin de esta estructura es como sigue: do { sentencias o instrucciones } while ( expresin ); Las estructura do/while lleva punto y coma a diferencia de la estructura while.

Ejemplo 6.2

Un ejemplo para este caso es el siguiente: Se desea ingresar por lo menos un nombre de un estudiante por teclado hasta que el usuario presione '0' para salir o cualquier otro nmero para continuar. #include <iostream> using namespace std; void main() { char nom[20]; //Cadena que puede contener 20 caracteres int rpta=0; do { cout<<"Ingrese el nombre de un estudiante \n"; cin>>nom; cout<<"Desea continuar ingresando nombres: para salir '0'"; cin>>rpta; } while(rpta != 0); }

* Practica los problemandos 50 y 51

3- Estructura de repeticin while Dicha estructura repite una serie de acciones mientras se cumpla una condicin.

while ( expresin ) { sentencia (s); } La estructura while trabaja de la siguiente manera:

1. Evala la expresin o condicin 2. Si el resultado de esta evaluacin es verdadero la sentencia o sentencias se ejecutan, es decir, se ejecuta el cuerpo de la estructura. Luego se vuelve a evaluar la expresin 3. Si el resultado de esta evaluacin es falso no se ejecuta la sentencia o sentencias y sale del ciclo while. Por ejemplo tengo que apagar 10 velas cuando cumpla 10 aos, es decir, tengo que soplar 10 veces, entonces el problema escrito en Pseudocdigo sera: Inicio edad <- 0 mientras edad != 10 aos soplar vela edad = edad + 1 Fin Mientras Fin Ejemplo 6.3 Otro ejemplo que nos demostrar iteraciones con lmite conocido es: Tengo que mostrar la tabla de multiplicar del 9 por pantalla #include <iostream> using namespace std; void main() { int nro=1;

while(nro <= 10 ) { cout<<"9 * "<<nro<<" = "<<nro*9; nro++; }

Este programa nos mostrar lo siguiente: 9 9 9 9 9 9 9 9 9 9 iteraciones. * * * * * * * * * * 1=9 2 = 18 3 = 27 4 = 36 5 = 45 6 = 54 7 = 63 8 = 72 9 = 81 10 = 90

Se dice que tiene un lmite conocido porque nunca ir ms all del 10, realizar exactamente 10

Ejemplo 6.4 Un ejemplo con lmite desconocido sera invertir un nmero entero ingresado por teclado. #include <iostream> using namespace std; void main() { int nro=0, aux=0, rpta=0; cout<<"Ingrese un numero entero"; cin>>nro; while(nro > 0) { aux = nro % 10; nro = nro / 10; rpta = (rpta * 10) + aux; } cout<<"El numero invertido es: "<<rpta; } Este problema tiene un lmite desconocido porque no puedo decir con exactitud el nmero de iteraciones que har, eso depende del nmero de cifras que tenga el nmero ingresado por teclado. Si el nmero ingresado tiene 3 cifras se harn 3 iteraciones y si tiene 6 se harn 6 iteraciones. En otras palabras el lmite depende de la expresin que se evala. Funciones Las funciones se declaran y se definen exactamente igual que en C, y, al igual que en ste, se puede utilizar prototipo (prototype). Un prototipo es un modelo limitado de una entidad ms completa que aparecer despus. En el caso de funciones, la funcin es la entidad completa que vendr despus, y la declaracin de dicha funcin es el prototipo. El prototipo da un modelo de la interface a la funcin. Veamos un ejemplo: # include <iostream.h> void do_stuff (int wings, float feet, char eyes); main() { int arm = 2; float foot = 1000.0; char lookers = 2;

do_stuff (3, 12.0, 4); do_stuff (arm, foot, lookers); } void do_stuff (int wings, float feet, char eyes) { cout << "There are " << wings << "wings." << '\n'; cout << "There are " << feet << "feet. " << '\n'; cout << "There are " << int(eyes) << "eyes." << '\n'; } La salida de este programa ser: There are 3 wings. There are 12 feet. There are 4 eyes. There are 2 wings. There are 1000 feet. There are 2 eyes. Cada llamada a la funcin do_stuff() debe verificar: El nmero de parmetros debe ser exactamente tres. Los tipos deben ser compatibles con los de la declaracin (ms adelante explicaremos qu son tipos compatibles).

Ntese que cuando llamamos a la funcin, la comprobacin de tipo la hace el compilador basndose en el prototipo (en la declaracin) puesto que la funcin todava no ha sido definida. Los nombres de variables que aparecen en el prototipo son opcionales y actan casi como comentarios al lector del programa, ya que son completamente ignorados por el compilador. Tipos compatibles Son compatibles cualquiera de los tipos simples (definidos en C++) que pueden ser convertidos de uno a otro de manera significativa. Por ejemplo, si llamamos con un entero a una funcin que est esperando un nmero real como parmetro, el sistema lo convertir automticamente, sin mencionarlo al usuario. Esto tambin es cierto de float a char, o de char a int. En cambio, si pasamos un puntero a un entero a una funcin que estaba esperando un entero, no habr conversin de tipo, ya que son dos variables completamente distintas. De la misma forma, un tipo definido por el usuario (estructura o clase) no puede ser convertido automticamente a un long float, a un array o incluso a otra estructura o clase diferente, porque son tipos incompatibles y no puede realizarse la conversin de manera significativa. Sin embargo, el tipo devuelto por la funcin, void en el ejemplo anterior, debe ser compatible con el tipo que se espera que devuelva en la funcin de llamada, o el compilador dar un warning. Pequeos cambios Volvamos al ejemplo anterior. Veamos qu sucede cuando hacemos pequeos cambios:

Llamamos a la funcin con do_stuff (12.2, 13, 12345). No se produce ningn error durante la compilacin, pues estamos trabajando con tipos compatibles. La salida del programa es: There are 12 wings. There are 13 feet. There are 57 eyes. There are 2 wings. There are 1000 feet. There are 2 eyes.

Llamamos a la funcin con slo dos parmetros: do_stuff (12.2, 13). El compilador lanzar un mensaje de error: 11:error: In this statement, "do_stuff(1.22e1, 13)" supplies 2 arguments, but 3 are expected. En la segunda llamada a la funcin, ponemos un & delante del nombre de una de las variables, do_stuff (arm, &float, lookers). El mensaje de error es el siguiente: 13:error:In this statement, "&lookers" is of type "pointer to char", and may not be converted to "char". Cambiemos, en el prototipo, void por int, int do_stuff(int wings, float feet, char eyes);. Entonces, al compilar:

16:error:In this declaration, the type of "do_stuff" is not compatible with the type of previous declaration of "do_stuff". Si ahora modificamos adems el tipo devuelto en la declaracin de la funcin, int do_stuff (int wings, float feet, char eyes) { ...}, obtenemos: 16:warning:Non-void function "do_stuff" does not contain a return statement.

Podemos cambiar la declaracin de la funcin por: void do_stuff (int, float, char); Esto no dar ninguna diferencia respecto al programa original. Esto demuestra que los nombres de las variables en el prototipo son tratados como comentarios por el compilador de C++.

La funcin podra haber sido declarada de la siguiente forma: void do_stuff (int wings, //Number of wings float feet, //Number of feet char eyes, //Number of eyes Esto hace que la cabecera de la funcin sea autoexplicatoria. Sin embargo, debe recordarse que los comentarios nunca deben usarse en lugar de nombres significativos para las variables.

El uso de prototipos no supone coste alguno en tiempo ni en velocidad de ejecucin. El prototipo se verifica durante la compilacin. Ralentiza sta, debido a que es una comprobacin extra que el compilador debe hacer, pero es despreciable el tiempo que necesita. El prototipo slo alarga el tamao del cdigo.

You might also like