Tag Archives: ciclos

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

Encontrar el número mayor de un conjunto

Es en realidad muy simple, se trata de pedir un conjunto de números e ir comparandalos para obtener el mayor. Un problema es que no sabemos la cantidad de números que se van a pedir, por lo que al principio del programa tenemos que pedir este valor.

#include<iostream>
using namespace std;

int main()
{
  int n_num=0,num=0,elmayor=0,c=0;
  cout <<"Introduce el numero de numeros: "; cin >> n_num;
  for(c=1;c<=n_num;c++)
  {
    cout <<"nIntroduce el numero " << c <<": "; cin >> num;
    if(num>elmayor)
    {
      elmayor=num;
    }
  }
  cout <<"ntEl numero mayor fue el " << elmayor;
  cin.get();cin.get();

  return 0;
}

Una parte importante es la estructura del ciclo:
for(c=1;c<=n_num;c++)
Significa que el ciclo va de 1 hasta ‘lo-que-nos-diga-el-usuario’.

Otra cosa es que usamos iostream y no usamos conio.h.

Como usar ciclo While en C++

Ya dijimos en el post anterior que los ciclos infinitos for son muy parecidos a los ciclos while, pero quedó en duda cómo es un ciclo while.

While” significa “mientras“, así que nuestro ciclo while se repetira mientras una cierta condición siga siendo verdadera.El ejemplo del post anterior quedaría así:

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

En español el programa dice: “Mientras end sea diferente de y voy a seguir preguntando si quieres salir.

Mas adelante veremos más programas que utilicen ciclos while.

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.

Programa: Porcentaje de Hombres y Mujeres

Supongamos que nos preguntan qué porcentaje de hombres y qué porcentaje de mujeres hay un salón de clases. Lo primero que tenemos que hacer es preguntar el total de personas que hay, luego hacer un ciclo que en cada iteración pregunte el sexo de cada alumno. En base a esos datos se calculan los porcentajes.

El programa en c++ sería así:

#include<stdio.h>
#include<conio.h>
int main()
{
  float total=0,ciclo=0,conta_h=0,conta_m=0,porc_h=0,porc_m=0;
  char mof;
  gotoxy(5,5);printf("Cuantos alumnos hay en este grupo?: ");scanf("%f",&total);
  for(ciclo=1;ciclo<=total;ciclo++)
  {
    clrscr();
    PREG: gotoxy(10,6);printf("Sexo de alumno %.f? (M o F): ",ciclo);scanf("%c",&mof);
    if(mof=='m' || mof=='M')
      conta_h++;
    else if(mof=='f' || mof=='F')
      conta_m++;
    else
      goto PREG;
   }
  //Calculos
  porc_h=conta_h/total*100;
  porc_m=conta_m/total*100;
  //
  gotoxy(5,5);printf("El porcentaje de hombres es %.1f (%.f de %.f)",porc_h,conta_h,total);
  gotoxy(5,6);printf("El porcentaje de mujeres es %.1f (%.f de %.f)",porc_m,conta_m,total);
  getch();
}

Programa: Recuadros en C++

Ya que sabemos usar los ciclos for y el gotoxy, vamos a hacer un programa que muchos profesores encargan: un recuadro en c++, es decir, un margen o contorno para darle mas presentación a un programa.

En realidad es muy sencillo:

#include<stdio.h>
#include<conio.h>

int main()
{
  int x=0;
  for(x=1;x<=80;x++)
  {
    gotoxy(x,1);printf(".");
    gotoxy(x,22);printf(".");
    gotoxy(4,23);printf("Nombre:  Programa:  Numero:     ");
    gotoxy(x,24);printf(".");
    if(x<=24)
    {
      gotoxy(1,x);printf(".");
      gotoxy(80,x);printf(".");
    }
  }
  getch();
}

Modifíquenlo, échenle imaginación. Yo use puntos (.), pero ustedes pueden usar cualquier otro caracter.

Programa: Tabla ASCII en C++ (sencillo)

Bien, ahora que ya vimos algo de teoría y práctica sobre ciclos en c++, vamos a hacer un programa que nos muestre el código ASCII del 1 al 256. Por si no los saben, las computadoras solo ‘entienden’ números, así que cada letra y cada caracter es en realidad un número; eso es el código ASCII.

Así que el programa sería así:

#include<stdio.h>
#include<conio.h>

int main() {
  int ascii=0,col=1,ren=1;
  for(ascii=1;ascii<=256;ascii++) {
    gotoxy(col,ren);printf("%i: %c  ",ascii,ascii);
    if(ren==24) { ren=0; col+=12; }
    if(col>=80) { getch(); clrscr(); ren=0; col=1; }
    ren++;
  }
  getch();
}

Variables:

  • ascii -> Controla el ciclo desde 1 hasta 256
  • ren -> Controla los renglones
  • col -> Controla las columnas

Cuando ren==24, los renglones comienzan en cero de nuevo y se empieza en una nueva columna; cuando col>=80, se detiene el transcurso del ciclo, luego se limpia la pantalla y se reinician los renglones y las columnas.

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();
}

Entendiendo los ciclos en c++

ciclo
Como les dije en el programa anterior (¿Aprobó o no aprobó?), los ciclos son algo que un buen programador debe tener muy bien dominado. Pero…

¿Qué es un ciclo?

Un ciclo, aquí y en China, es algo que se repite constantemente. Por ejemplo:

  • Si vamos a la papelería y sacamos 5 copias de una hoja, cada vez que se imprime una hoja se completa un ciclo y se repite hasta completar las cinco repeticiones
  • Si saben algo de guitarra, abran oído del ‘círculo de sol’; son cuatro acordes que se repiten constantemente a lo largo de una canción, cada vez que tocas los cuatro acordes se completa un ciclo
  • Si ponen un CD de música en un reproductor, cada vez que suenen todas las canciones del disco se completa un ciclo

¿Cómo serían los programas de esos ejemplos?

Para sacar copias

Desde x=1 hasta 5
{
imprimir
}

Para tocar el circulo de Sol

Desde x=1 hasta fin de la canción
{
tocar Sol
tocar Mi menor
tocar La menor
tocar Re 7
}

Para tocar CD

Desde x=1 hasta número de canciones
{
tocar canción x
}

Los primeros dos están muy fáciles de entender: las acciones dentro de las llaves {} se repiten determinado número de veces y ese valor puede ser constante (como las copias) o variable (como el fin de la canción). El tercer ejemplo tiene algo complicado, pero que es la ‘escencia’ de los ciclos.

Supongamos que ese disco tiene 5 canciones, podríamos programarlo así:

tocar canción 1
tocar canción 2
tocar canción 3
tocar canción 4
tocar canción 5

O así:

Desde x=1 hasta 5
{
tocar canción x
}

Esta es la verdadera utilidad de los ciclos, ahorrar código.