[caption id="attachment_927" align="aligncenter" width="678"] Separar numeros primos y perfectos[/caption]
Capturar por teclado los datos de un vector de enteros de n datos (n dado por teclado y 1<n<200) y clasificar los datos del vector en dos vectores uno con los números primos y otro con los números perfectos.
Un número es primo si solo tiene dos divisores, 1 y él mismo, ejemplos 1,2,3,5,7,11 etc.
Un número es perfecto si la suma de sus divisores propios es igual a él mismo. Ejemplo el 6,28, etc.
Por ejemplo para un vector dado por teclado como el siguiente
2 | 40 | 25 | 7 | 40 | 28 | 17 | 45 | 6 | 0 | 4 | 5 |
Los datos clasificados en el vector de primos es:
2 | 7 | 17 | 5 |
Y el vector de perfectos es
28 | 6 |
[cpp]
/*
<div>Capturar por teclado los datos de un vector de enteros de n datos (n dado por teclado y 1<n<200) y clasificar los datos del vector en dos vectores uno con los números primos y otro con los números perfectos.</div>
<div></div>
<div>Un número es primo si solo tiene dos divisores, 1 y él mismo, ejemplos 1,2,3,5,7,11 etc.</div>
<div>Un número es perfecto si la suma de sus divisores propios es igual a él mismo. Ejemplo el 6,28, etc.</div>
Por ejemplo para un vector dado por teclado como el siguiente
2 40 25 7 40 28 17 45 6 0 4 5
Los datos clasificados en el vector de primos es:
2 7 17 5
Y el vector de perfectos es
28 6
*/
#include< conio.h >
#include< stdio.h >
void portada();
void final();
bool perfecto(int n)
{
int c=0;
for(int i=1;i< n;i++)
{
if(n%i==0)
c=c+i;
}
if(c==n)
return true;
else
return false;
}
bool primo(int n)
{
for(int i=2;i< n;i++)
{
if(n%i==0)
return false;
}
return true;
}
void llenar(int t,int v[])
{
for(int i=0;i< t;i++)
{
printf("v[%d]:",i);
scanf("%d",&v[i]);
}
}
void llenar2(int t,int v[])
{
for(int i=0;i< t;i++)
{
v[i]=-1;
}
}
void dividir(int t,int v[],int pe[],int pri[])
{
//Contadores para ir moviendome en los vectores de numeros primos y perfectos
int cper=0,cpri=0;
for(int i=0;i< t;i++)
{
//Tomo el numero a evaluar
int aux=v[i];
if(perfecto(aux)==true)
{
pe[cper]=aux;
cper++;
}
if(primo(aux)==true)
{
pri[cpri]=aux;
cpri++;
}
}
}
void imprimir(int t,int v[])
{
printf("\n");
for(int i=0;i< t;i++)
{
if(v[i]!=-1)
{
printf("%d |",v[i]);
}
}
}
main()
{
portada();
int t;
printf("Por favor digite tamano del vector:");
scanf("%d",&t);
if(t >0 && t< =200)
{
//Vector general con todos los datos
int v[t];
//Lleno el vector
llenar(t,v);
//Vectores que contrendan los numero perfector y primos
int per[t],pri[t];
//Esta funcion me llena los vectores de -1, es simplemente de guia
llenar2(t,per);
llenar2(t,pri);
//Funcion que me llena los dos vectores anteriores
dividir(t,v,per,pri);
printf("\n Vector General");
imprimir(t,v);
printf("\n Vector Primos");
imprimir(t,pri);
printf("\n Vector Perfectos");
imprimir(t,per);
}
final();
getch();
return 0;
}
void portada(){
printf("...............................................................................\a\n");
printf("................******.*****.** **.*****.****.*****.*****..**................\a\n");
printf("................ ** .** **.*** ***.** **.** .** **.**.**.***................\a\n");
printf("................ ** .*****.*******.*****.****.*****.*****..**................\a\n");
printf("................ ** .** **.** * **.** .** .*** ....**..**................\a\n");
printf("................**** .** **.** **.** .****.** **....**.****...............\a\n");
printf("..............................jamper91.hostei.com............................\a\n");
printf("\n");
};
void final(){
printf("-------------------------------------------------------------------------------\a\n");
printf ("******************************************************************************\a\n");
printf (" Creado por jamper91@hotmail.com\n");
printf (" Cucuta Campeon\n");
printf ("******************************************************************************\a\n");
printf("-------------------------------------------------------------------------------\a\n");
};
[/cpp]
0 comentarios :
Publicar un comentario