sábado, 6 de octubre de 2012

Estructuras Repetitivas en C: for


Ésta es la orden que usaremos habitualmente para crear partes del programa que se repitan un cierto número de veces. El formato de “for” es
for (valorInicial; CondiciónRepetición; Incremento)
  Sentencia;
Así, para contar del 1 al 10, tendríamos 1 como valor inicial, <=10 como condición de repetición, y el incremento sería de 1 en 1. Por tanto, el programa quedaría:


#include <stdio.h> int main() { int contador; for (contador=1; contador<=10; contador++) printf("%d ", contador); return 0; }
Recordemos que “contador++” es una forma abreviada de escribir “contador=contador+1”, de modo que en este ejemplo aumentamos la variable de uno en uno.

En un “for”, realmente, la parte que hemos llamado “Incremento” no tiene por qué incrementar la variable, aunque ése es su uso más habitual. Es simplemente una orden que se ejecuta cuando se termine la “Sentencia” y antes de volver a comprobar si todavía se cumple la condición de repetición.
Por eso, si escribimos la siguiente línea:
for (contador=1; contador<=10; )
la variable “contador” no se incrementa nunca, por lo que nunca se cumplirá la condición de salida: nos quedamos encerrados dando vueltas dentro de la orden que siga al “for”.
Un caso todavía más exagerado de algo a lo que se entra y de lo que no se sale sería la siguiente orden:
for ( ; ; )

Los bucles “for” se pueden anidar (incluir uno dentro de otro), de modo que podríamos escribir las tablas de multiplicar del 1 al 5 con:
 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); return 0; }
 
En estos ejemplos que hemos visto, después de “for” había una única sentencia. Si queremos que se hagan varias cosas, basta definirlas como un bloque (una sentencia compuesta) encerrándolas entre llaves. Por ejemplo, si queremos mejorar el ejemplo anterior haciendo que deje una línea en blanco entre tabla y tabla, sería: 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) { for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); printf("\n"); } return 0; }
Al igual que ocurría con "if" y con "while", suele ser buena costumbre incluir siempre las llaves, aunque haya una única orden que se repita en el "for", para evitar funcionamientos incorrectos si después hay que añadir más sentencias que deban repetirse y se olvida incluir las llaves en ese momento.

Para “contar” no necesariamente hay que usar números. Por ejemplo, podemos contar con letras así:
 

#include <stdio.h> int main() { char letra; for (letra='a'; letra<='z'; letra++) printf("%c", letra); return 0; }
 
En este caso, empezamos en la “a” y terminamos en la “z”, aumentando de uno en uno.

Si queremos contar de forma decreciente, o de dos en dos, o como nos interese, basta indicarlo en la condición de finalización del “for” y en la parte que lo incrementa:
 

#include <stdio.h> int main() { char letra; for (letra='z'; letra>='a'; letra-=2) printf("%c", letra); return 0; }
Ésta es la orden que usaremos habitualmente para crear partes del programa que se repitan un cierto número de veces. El formato de “for” es
for (valorInicial; CondiciónRepetición; Incremento)
  Sentencia;
Así, para contar del 1 al 10, tendríamos 1 como valor inicial, <=10 como condición de repetición, y el incremento sería de 1 en 1. Por tanto, el programa quedaría:
 

#include <stdio.h> int main() { int contador; for (contador=1; contador<=10; contador++) printf("%d ", contador); return 0; }
 
Recordemos que “contador++” es una forma abreviada de escribir “contador=contador+1”, de modo que en este ejemplo aumentamos la variable de uno en uno.

En un “for”, realmente, la parte que hemos llamado “Incremento” no tiene por qué incrementar la variable, aunque ése es su uso más habitual. Es simplemente una orden que se ejecuta cuando se termine la “Sentencia” y antes de volver a comprobar si todavía se cumple la condición de repetición.
Por eso, si escribimos la siguiente línea:
for (contador=1; contador<=10; )
la variable “contador” no se incrementa nunca, por lo que nunca se cumplirá la condición de salida: nos quedamos encerrados dando vueltas dentro de la orden que siga al “for”.
Un caso todavía más exagerado de algo a lo que se entra y de lo que no se sale sería la siguiente orden:
for ( ; ; )

Los bucles “for” se pueden anidar (incluir uno dentro de otro), de modo que podríamos escribir las tablas de multiplicar del 1 al 5 con:
 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); return 0; }
 
En estos ejemplos que hemos visto, después de “for” había una única sentencia. Si queremos que se hagan varias cosas, basta definirlas como un bloque (una sentencia compuesta) encerrándolas entre llaves. Por ejemplo, si queremos mejorar el ejemplo anterior haciendo que deje una línea en blanco entre tabla y tabla, sería: 

#include <stdio.h> int main() { int tabla, numero; for (tabla=1; tabla<=5; tabla++) { for (numero=1; numero<=10; numero++) printf("%d por %d es %d\n", tabla, numero, tabla*numero); printf("\n"); } return 0; }
 
Al igual que ocurría con "if" y con "while", suele ser buena costumbre incluir siempre las llaves, aunque haya una única orden que se repita en el "for", para evitar funcionamientos incorrectos si después hay que añadir más sentencias que deban repetirse y se olvida incluir las llaves en ese momento.

Para “contar” no necesariamente hay que usar números. Por ejemplo, podemos contar con letras así:
 

#include <stdio.h> int main() { char letra; for (letra='a'; letra<='z'; letra++) printf("%c", letra); return 0; }
 
En este caso, empezamos en la “a” y terminamos en la “z”, aumentando de uno en uno.

Si queremos contar de forma decreciente, o de dos en dos, o como nos interese, basta indicarlo en la condición de finalización del “for” y en la parte que lo incrementa:
 

#include <stdio.h> int main() { char letra; for (letra='z'; letra>='a'; letra-=2) printf("%c", letra); return 0; }

Fuente:

-Curso de Programación en C por Nacho Cabanes

1 comentario :

  1. Excelente material.

    Estamos esperando el video explicando este tema.

    Kenlly Acosta.

    ResponderEliminar