elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Descomponer numero en factores..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Descomponer numero en factores..  (Leído 9,493 veces)
ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Descomponer numero en factores..
« en: 12 Febrero 2013, 00:52 am »

Hola,acá les traigo un programa que hice hace unas semanas atras, la verdad es que tiene pocas lineas de código ,pero es funcional ,para los que trabajen con las matemáticas y necesitan descomponer un numero en factores,tal vez se les resulte aburrido andar dividiéndolo , hace poco cuando estaba estudiando matemáticas me sirvió,quisas a alguien le sirva.

Código
  1. /*
  2. Autor : ThePinkPanther(nick) , nombre : Santiago Díaz
  3. 12/02/2013
  4. */
  5. #include <iostream>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9.  
  10. int main()
  11. {
  12. int i=0;
  13. int contador=0;
  14. int *factores=NULL;
  15. int aux=0;
  16. int descomponer=0;
  17.  
  18.  
  19.  
  20. cout<<"Factorizar un numero.."<<endl;
  21. cout<<endl<<"Numero a factorizar : " ; cin>>descomponer;
  22. aux=descomponer;
  23. factores=(int *)calloc(32,sizeof(int));
  24.  
  25.  
  26.  
  27. cout<<endl;
  28. for(i=2;i<=descomponer;i++)
  29. {
  30. while(descomponer%i==0)
  31. {
  32.  
  33. factores[contador]=i;
  34. contador++;
  35. descomponer=descomponer/i;
  36. };
  37. }
  38.  
  39. cout<<"########"<<endl;
  40. cout<<aux<<" = " <<" ";
  41. cout<<factores[0];
  42. int x=1;
  43. do
  44. {
  45. cout<<".";
  46. cout<<factores[x];
  47. x++;
  48.  
  49. }while(factores[x]!=0);
  50. cout<<endl<<"########"<<endl;
  51.  
  52.  
  53.  
  54. free(factores);
  55.  
  56. }
  57.  

Ejemplo entrada : 8
Salida : 2.2.2 , que esto es .. base 2 potencia 3.

Saludos.


« Última modificación: 25 Febrero 2013, 22:18 pm por ThePinkPanther » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #1 en: 12 Febrero 2013, 14:54 pm »

Código
  1. factores=(int *)calloc(32,sizeof(int));
  2. ...
  3. free(factores);

Porque usas funciones de C? Sería más apropiado usar los new y delete:

Código
  1. factores = new int[32];
  2. ...
  3. delete[] factores;


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #2 en: 12 Febrero 2013, 18:44 pm »

Quisas tengas razón , pero recien empiezo con c++ me pase de ansi a c++ , por lo que se que los operadores new y delete me permiten reservar memoria dinamica y liberarla, pero estoy acostumbrado a usar calloc o malloc porque con realloc puedo hacer una reasignación, en c++ no se como seria una reasignacion de memoria..
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #3 en: 12 Febrero 2013, 20:59 pm »

Para reasignaciones de memoria lo mejor es usar la clase vector:

Código
  1. #include <vector>
  2.  
  3. vector<tipo> Variable;

Si quieres hacer un vector de enteros:

Código
  1. vector<int> Variable;

Y para añadir elementos al vector:

Código
  1. vector<int> Variable;
  2. Variable.push_back(1); // Añade un elemento nuevo

Luego hay más funciones internas (busqueda, obtener tamaño del vector...). Las puedes consultar aquí:
http://www.cplusplus.com/reference/vector/vector/

No es necesario borrar el vector, puesto que se borra solo cuando termina su ambito. Aunque si eres un esceptico lo puedes hacer explicitamente:

Código
  1. Variable.clear(); // Limpiamos los valores
  2. Variable.resize(0); // Cambiamos su tamaño a 0
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #4 en: 12 Febrero 2013, 22:23 pm »


Porque usas funciones de C? Sería más apropiado usar los new y delete:


Como yo también soy nuevo en esto del C++, planteo una dudita; ¿otra forma más "inmediata" de inicializar factores a cero?:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. int main(){
  6.  int i=0;
  7.  int contador=0;
  8.  int aux=0;
  9.  int descomponer=0;
  10.  int *factores=new int[32];
  11.  for (i=0;i<32;i++)
  12.    factores[i]=0;
  13.   cout <<"Factorizar un numero.."<<endl;
  14.  cout<<endl<<"Numero a factorizar : " ;
  15.  cin>>descomponer;
  16.  aux=descomponer;
  17.  cout<<endl;
  18.  for(i=2;i<=descomponer;i++) {
  19.    while(descomponer%i==0) {
  20.      factores[contador]=i;
  21.      contador++;
  22.      descomponer=descomponer/i;
  23.    }
  24.  }
  25.  cout<<"########"<<endl;
  26.  cout<<aux<<" = " <<" ";
  27.  cout<<factores[0];
  28.  int x=1;
  29.  do{
  30.    cout<<"x";
  31.    cout<<factores[x];
  32.    x++;
  33.  
  34.  }while(factores[x]!=0);
  35.  cout<<endl<<"########"<<endl;
  36.  delete[] factores;
  37.  return EXIT_SUCCESS;
  38. }
  39.  

Saluditos!.
« Última modificación: 12 Febrero 2013, 22:26 pm por leosansan » En línea

ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #5 en: 12 Febrero 2013, 22:29 pm »

Yo usaba la funcion calloc de c.
que automaticamente la memoria reservada es inicializada a 0 .
ahora pruebo con new.

Citar

Y para añadir elementos al vector:

Código
  1. vector<int> Variable;
  2. Variable.push_back(1); // Añade un elemento nuevo

Luego hay más funciones internas (busqueda, obtener tamaño del vector...). Las puedes consultar aquí:
http://www.cplusplus.com/reference/vector/vector/

No es necesario borrar el vector, puesto que se borra solo cuando termina su ambito. Aunque si eres un esceptico lo puedes hacer explicitamente:

Código
  1. Variable.clear(); // Limpiamos los valores
  2. Variable.resize(0); // Cambiamos su tamaño a 0

gracias voy a tratar de familiarisarme con esto..


Como yo también soy nuevo en esto del C++, planteo una dudita; ¿otra forma más "inmediata" de inicializar factores a cero?:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. int main(){
  6.  int i=0;
  7.  int contador=0;
  8.  int aux=0;
  9.  int descomponer=0;
  10.  int *factores=new int[32];
  11.  for (i=0;i<32;i++)
  12.    factores[i]=0;
  13.   cout <<"Factorizar un numero.."<<endl;
  14.  cout<<endl<<"Numero a factorizar : " ;
  15.  cin>>descomponer;
  16.  aux=descomponer;
  17.  cout<<endl;
  18.  for(i=2;i<=descomponer;i++) {
  19.    while(descomponer%i==0) {
  20.      factores[contador]=i;
  21.      contador++;
  22.      descomponer=descomponer/i;
  23.    }
  24.  }
  25.  cout<<"########"<<endl;
  26.  cout<<aux<<" = " <<" ";
  27.  cout<<factores[0];
  28.  int x=1;
  29.  do{
  30.    cout<<"x";
  31.    cout<<factores[x];
  32.    x++;
  33.  
  34.  }while(factores[x]!=0);
  35.  cout<<endl<<"########"<<endl;
  36.  delete[] factores;
  37.  return EXIT_SUCCESS;
  38. }
  39.  

Saluditos!.

Segun mis pruebas, cuando usas new , la memoria ya es inicializada en 0. un saludo.


Código:
  for (i=0;i<32;i++)
    factores[i]=0;

no es necesario.
« Última modificación: 12 Febrero 2013, 23:03 pm por ThePinkPanther » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #6 en: 12 Febrero 2013, 23:44 pm »

¿otra forma más "inmediata" de inicializar factores a cero?
En array estáticos se puede usar esto:

Código
  1. char Variable[256] = {0};
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #7 en: 13 Febrero 2013, 02:50 am »

Código
  1. int *factores=new int[32];
  2. for (i=0;i<32;i++)
  3.   factores[i]=0;
Segun mis pruebas, cuando usas new , la memoria ya es inicializada en 0.

Código
  1. for (i=0;i<32;i++)
  2.   factores[i]=0;
no es necesario.
Es necesario (en ese caso) ya que el valor inicial de cada elemento depende de su tipo.

Una discusión algo técnica (y en ingles) donde se explica el porque y se da una alternativa es Is new int[10]() valid c++?.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #8 en: 13 Febrero 2013, 19:55 pm »


Una discusión algo técnica (y en ingles) donde se explica el porque y se da una alternativa es


En resumen, con paréntesis al final se inicializan a cero, comprobado:

Código
  1. int *factores=new int[32]();//con parentesis se inicializan a cero

No siendo necesario:

Código
  1. for (i=0;i<32;i++)
  2.    factores[i]=0;

Saluditos!.
 . .... y gracias n-ésimas amigo rir.
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: Descomponer numero en factores..
« Respuesta #9 en: 13 Febrero 2013, 22:43 pm »

Al colocar los paréntesis lo que haces es llamar al constructor por defecto. Es decir que si hay constructor predeterminado o definido por el usuario, vamos a poder inicializar la variable a la hora de declararla.

Citar
If T is a const-qualified type, or a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of const-qualified type, the program is ill-formed.
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descomponer o factorizar un numero
Programación Visual Basic
Neobius 1 8,356 Último mensaje 20 Abril 2006, 19:14 pm
por Robokop
Descomponer en factores primos
.NET (C#, VB.NET, ASP)
juanlulete 5 7,537 Último mensaje 7 Agosto 2012, 21:33 pm
por Keyen Night
Descomponer un numero entero en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 10 14,077 Último mensaje 1 Abril 2014, 20:59 pm
por eferion
Descomponer numero
Programación C/C++
sebamoron86 5 5,479 Último mensaje 9 Junio 2016, 01:49 am
por AlbertoBSD
Twitter permitirá activar la autenticación de dos factores sin número de ...
Noticias
wolfbcn 0 1,463 Último mensaje 22 Noviembre 2019, 14:42 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines