C++ Bucles for

Enviado por jvilella el Lun, 23/09/2019 - 04:00

Requisitos:

for nos permite hacer repeticiones poniendo en una sola línea el valor inicial del contador, la condición y como varía (normalmente es un incremento) este valor cada vez que llega al final de una vuelta del bucle.

for (inicializacion; condicion; incremento) {
    ....
}

Por ejemplo:

for (int i=0; i<10; i=i+1) {
    cout << i << endl;
}

Es equivalente a:

int i =0;
while ( i<10) {
    cout << i << endl;
    i=i+1;
}

Todo lo que se puede hacer con while se puede hacer con for y viceversa, es solo una manera más rápida de escribirlo (y a veces más clara). Es muy habitual usar for para recorrer un vector, por ejemplo en el siguiente ejemplo se pide al usuario que introduzca todos los valores de un vector y luego los muestra por pantalla en orden inverso:

vector<int> dorsales_corredores(10);
for (int i=0; i<dorsales_corredores.size(); i++) {
    cout << "Dorsale de corredor que ha cruzado la meta: ";
    cin >> dorsales_corredores[i];
}
cout << "Clasificación de los 10 primeros ganadores en el orden en que daremos las medallas:" << endl;
for (int i=dorsales_corredores.size()-1; i>=0; i--) {
    cout << dorsales_corredores[i] << endl;
}

Fíjate que en el segundo for se recorre el vector dorsales_corredores desde la última posición a la primera, y que la última posición es dorsales_corredores.size()-1 (no dorsales_corredores.size()).

 

Nota: El último código que hemos escrito para recorrer un vector en orden inverso fallará si el vector está vacío por una razón técnica: el valor que devuelve la función .size() es de tipo entero sin signo, por lo que al restar uno al valor cero se producirá un subdesbordamiento (underflow), ya que un entero sin signo no puede tener valores negativos. Una forma de solucionar esto es hacer un cast a entero con signo:

cout << "Clasificación de los 10 primeros ganadores en el orden en que daremos las medallas:" << endl;
for (int i=((int)dorsales_corredores.size())-1; i>=0; i--) {
    cout << dorsales_corredores[i] << endl;
}

 

Printer Friendly, PDF & Email

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.