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:
- El primer ciclo lleva la cuenta de los números de 1 a n de uno por uno en la variable c
- 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
- En la variable res se guarda el residuo de dividir c / c2
- Si el residuo es cero, se incremento al contador nc
- 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
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 <<"\n\tEl 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.
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.
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.
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();
}
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.
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.
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 = %d\n",c,2*c);
}
getch();
}