Tag Archives: for

Declarar variable dentro de un ciclo for

En el programa anterior use la “técnica” de declarar una variable dentro de un ciclo for y luego de publicarla me di cuenta de que algunas personas podrían encontrar eso algo confuso.

Es casi exactamente lo mismo escribir esto:
int i=0;
for(i=0; i<=10; i++)
{
printf("%i", i);
}

…que esto:
for(int i=0; i<=10; i++)
{
printf("%i", i);
}

La única diferencia es que en el primero ‘i’ es una variable como cualquier otra y en el segundo ‘i’ solo sirve dentro del ciclo for. Esto mas que ser una desventaja es una ventaja, ya que te permite usar la misma variable en todos lo ciclos que quieras en el mismo programa. Yo en lo personal siempre uso ‘i’ como la variable que controla cualquier ciclo, si llegara a haber un ciclo dentro de otro, uso ‘ii’.

Advertisements

Números primos en un rango

La idea es imprimir en pantalla los números primos entre 1 y un dato introducido por el usuario. Creo que es la primera vez que usamos un ciclo dentro de otro ciclo en este blog. Pero en realidad es muy sencillo:

#include<iostream>
using namespace std;

int main()
{
  int n=0,c=0,c2=0,res=0,nc=0;
  cout<<"Introduce el limite de numeros: "; cin>>n;
  for(c=1;c<=n;c++)
  {
    for(c2=1;c2<=c;c2++)
    {
      res=c%c2;
      if(res==0)
      {
        nc=nc+1;
      }
    }
    if(nc==2)
    {
      cout<<" "<<c;
    }
    nc=0;
  }
}

El operador % obtiene el residuo de la división de dos números. Por ejemplo:
10 % 3 = 1
Porque el 3 cabe 3 veces en el 10 y le sobra 1.

Explicación:

  1. El primer ciclo lleva la cuenta de los números de 1 a n de uno por uno en la variable c
  2. Luego se inicia un ciclo de 1 a c en la variable c2. Este ciclo se hará n veces porque está dentro de el primer ciclo
  3. En la variable res se guarda el residuo de dividir c / c2
  4. Si el residuo es cero, se incremento al contador nc
  5. Si al terminarse el segundo ciclo el contador nc es igual a 2, significa que el número es primo y lo imprime

Recuerden que los números primos son los que únicamente se dividen (sin dejar residuo) entre 1 y entre si mismos

El break y el ciclo infinito

Ya vimos hace poco el ciclo for, y vimos que su estructura era así:

for ( inicio ; fin ; aumento )

¿Qué pasa si no ponemos ni inicio ni fin? Pues obtenemos un ciclo infinito, así:

for(;;)

¿Y cómo se detiene? Pues con un break, así:

for(;;)
{
break;
}

¿Y esto de que me sirve? Pues la idea es repetir las instrucciones hasta que el usuario quiera, es decir:

#include<stdio.h>
#include<conio.h>
int main()
{
  char end=0;
  for(;;)
  {
    gotoxy(5,5);printf("Ya quieres salir? (y/n): ");scanf("%c",&end);
    if(end=='y')
      break;
    clrscr();
  }
}

Creo que no les había mencionado que si dentro de una condición if sólo va una instrucción no es necesario poner llaves, y también aplica con los ciclos.

Si el usuario no introduce una ‘y’, el programa nunca se detendrá. Luego vamos a ver que las propiedades de un ciclo for infinito son muy parecidas a las del ciclo while que veremos más adelante.

Ciclos for en C++

Bien, ya que entendimos un poco la teoría de los ciclos en c++, ahora vamos a practicar sobre como usar el ciclo for.

¿Cómo hacer un ciclo en C++?

#include<stdio.h>
#include<conio.h>
int main()
{
  int x=0;
  for(x=0;x<=5;x++)
  {
    printf("%d ",x);
  }
  getch();
}
//Este programa mostrará en pantalla 0 1 2 3 4 5

Como ven, necesitamos una variable exclusiva para el ciclo (en este caso ‘x’) y éste empieza con la palabra for, su sintáxis es la siguiente:

for ( variable = inicio-del-ciclo ; condición-que-indica-el-final ; aumento de x )

Por partes:

  • x=0 -> Indica el inicio del ciclo. Puede ser cualquier variable y cualquier valor de inicio.
  • x<=5 ->Indica el fin del ciclo. Cuando la condición deja de cumplirse el ciclo termina. Cuando el ciclo no es menor o igual a 5 el ciclo termina.
  • x++ -> Indica que la variable ‘x’ aumenta de uno en uno. Para aumentar de dos en dos: x+=2, de tres: x+=3.

Otro ejemplo, la tabla de multiplicar del 2 en C++:

#include<stdio.h>
#include<conio.h>
int main()
{
  int c=0;
  for(c=1;c<=10;c++)
  {
    printf("2 x %d = %dn",c,2*c);
  }
 getch();
}