<div dir="ltr">Hola Giselle,<div class="gmail_extra"><br><div class="gmail_quote">2014-05-03 22:22 GMT-04:00 Giselle <span dir="ltr"><<a href="mailto:giselleskyers@gmail.com" target="_blank">giselleskyers@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Muchísiamas gracias por la ayuda y la explicación. En efecto el problema radicaba en que no había hecho el segundo bucle for para recorrer el array y mostrar los resultados. Ahora funciona perfectamente.<div>


<br></div><div>Sin embargo me ha quedado una duda sobre el uso del break. yo escribí algo así en el bucle for, quisiera por favor que me explicaran si es un buen uso o no del break y cuando es una buena opción usarlo.</div>


<div><br></div><div>   for(contador=0; contador<20; contador++)<br></div><div><span style="white-space:pre-wrap">        </span>{</div><div><span style="white-space:pre-wrap">                </span>cout<<"Ingrese un salario: "<<endl;</div>


<div><span style="white-space:pre-wrap">          </span>cin>>salario_ingresado;</div><div><span style="white-space:pre-wrap">            </span></div><div><span style="white-space:pre-wrap">         </span>if(salario_ingresado<0)</div>


<div><span style="white-space:pre-wrap">          </span>{</div><div><span style="white-space:pre-wrap">                        </span>break;</div><div><span style="white-space:pre-wrap">           </span>}</div><div><span style="white-space:pre-wrap">                </span>salarios[contador] = salario_ingresado;</div>


<div><span style="white-space:pre-wrap">  </span>}</div><div><br></div><div>Agradezco mucho su ayuda, pues si bien estoy estudiando a través de un libro de texto, lo cierto es que la experiencia siempre vale más que todo.</div>


<div><br></div></div></blockquote><div><br></div><div>Bueno. Esto ya lo expliqué en el correo-e anterior, pero adaptaré la explicación al código fuente que nos mandas.</div><div><br></div><div>En este caso, vemos que hay dos formas de salir del bucle 'for'. La forma "natural" es por "su condición": contador < 20. El problema es que hay otra posibilidad de salir del bucle, que no es tan aparente, porque está contenida en el bucle. Nos interesa leer la información que controla el bucle en su cabecera. Sin embargo, sólo vemos una condición y no las dos que controlan el bucle.</div>
<div><br></div><div>En general, no deberíamos usar 'break', por muy fácil que sea su uso. Nos interesa escribir un código legible, porque su mantenimiento es mucho más fácil a largo plazo; y así seremos menos propensos a cometer errores. A veces, por legibilidad, sí elegimos usar 'break', o incluso por razones importantes de optimización; pero no es la norma.</div>
<div><br></div><div>Para el código anterior, nos interesa escribir ambas condiciones en la cabecera del bucle 'for' para ver rápida y claramente cuáles son los criterios que gobiernan el bucle. Reescribiríamos el código reordenando las sentencias. Esto es el comportamiento que queremos,</div>
<div><br></div><div><div>cout << "Ingrese un salario: " << endl;</div><div>cin >> salario_ingresado;</div></div><div>if( salario_ingresado<0 )<br></div><div>{</div><div>  terminar</div><div>
}</div><div><div><span style="white-space:pre">else</span></div><div><span style="white-space:pre">  </span>salarios[0] = salario_ingresado;<br></div></div><div><div><div><br></div><div>cout << "Ingrese un salario: " << endl;</div>
<div>cin >> salario_ingresado;</div></div><div>if( salario_ingresado<0 )<br></div><div>{</div><div>  terminar</div><div>}</div><div><span style="white-space:pre">else</span></div><div><span style="white-space:pre">  </span>salarios[1] = salario_ingresado;<br>
</div></div><div>...</div><div><div>cout << "Ingrese un salario: " << endl;</div><div>cin >> salario_ingresado;</div><div>if( salario_ingresado<0 )</div><div>{</div><div>  terminar</div><div>
}</div><div><span style="white-space:pre">else</span></div><div>  salarios[19] = salario_ingresado;</div></div><div><br></div><div>Lo que hacemos es ver el patrón de las sentencias después de leer el salario. También cambiamos la condición escrita: salario_ingresado<0 para que sea falsa en el bucle 'for', para así seguir iterando; esto es,</div>
<div><br></div><div><div>cout << "Ingrese un salario: " << endl;</div><div>cin >> salario_ingresado;</div></div><div><br></div><div>for( contador=0; contador<19 && salario_ingresado>=0; contador++ )<br>
</div><div><div>{</div><div><span style="white-space:pre">  </span>salarios[contador] = salario_ingresado;<br></div><div><div><br></div><div>  cout << "Ingrese un salario: " << endl;</div><div>  cin >> salario_ingresado;</div>
</div><div>}</div></div><div><br></div><div>// Caso especial: contador = 19</div><div>if( 19 == contador && salario_ingresado>=0 )<br></div><div><div><span style="white-space:pre"> </span>salarios[19] = salario_ingresado;<br>
</div><div></div></div><div><br></div><div><br></div><div>Aparte del uso de 'break' en bucles, se considera buena práctica usar 'break' para salir de cualquier caso en una sentencia 'switch/case'; por ejemplo,</div>
<div><br></div><div>int eleccion;</div><div><br></div><div>cin >> eleccion;</div><div><br></div><div>switch( eleccion )<br>{<br>  case 0:</div><div>    cout << "elegiste 0" << endl;</div><div>  break;<br>
<div><br></div><div>  case 1:</div><div>    cout << "elegiste 1" << endl;</div>  break;</div><div><div><br></div><div>  case 2:</div><div>    cout << "elegiste 2" << endl;</div>
<div>  break;<br></div></div><div>}</div><div><br></div><div>Sin el uso de 'break', este uso de 'switch/case' sería algo complicado e ilegible, dificultando el mantenimiento del código.</div><div><br></div>
<div><br></div><div>Espero que esto aclare un poco más el tema.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>