Autor
|
Tema: Descomponer numero en factores.. (Leído 9,394 veces)
|
ThePinkPanther
Desconectado
Mensajes: 82
|
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. /* Autor : ThePinkPanther(nick) , nombre : Santiago Díaz 12/02/2013 */ #include <iostream> #include <stdlib.h> using namespace std; int main() { int i=0; int contador=0; int *factores=NULL; int aux=0; int descomponer=0; cout<<"Factorizar un numero.."<<endl; cout<<endl<<"Numero a factorizar : " ; cin>>descomponer; aux=descomponer; factores =(int *)calloc(32,sizeof(int)); cout<<endl; for(i=2;i<=descomponer;i++) { while(descomponer%i==0) { factores[contador]=i; contador++; descomponer=descomponer/i; }; } cout<<"########"<<endl; cout<<aux<<" = " <<" "; cout<<factores[0]; int x=1; do { cout<<"."; cout<<factores[x]; x++; }while(factores[x]!=0); cout<<endl<<"########"<<endl; }
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
Mensajes: 1.211
|
factores=(int *)calloc(32,sizeof(int)); ... free(factores);
Porque usas funciones de C? Sería más apropiado usar los new y delete: factores = new int[32]; ... delete[] factores;
|
|
|
En línea
|
|
|
|
ThePinkPanther
Desconectado
Mensajes: 82
|
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
Mensajes: 1.211
|
Para reasignaciones de memoria lo mejor es usar la clase vector: #include <vector> vector<tipo> Variable;
Si quieres hacer un vector de enteros: vector<int> Variable;
Y para añadir elementos al vector: vector<int> Variable; 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: Variable.clear(); // Limpiamos los valores Variable.resize(0); // Cambiamos su tamaño a 0
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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?: #include <iostream> #include <cstdlib> using namespace std; int main(){ int i=0; int contador=0; int aux=0; int descomponer=0; int *factores=new int[32]; for (i=0;i<32;i++) factores[i]=0; cout <<"Factorizar un numero.."<<endl; cout<<endl<<"Numero a factorizar : " ; cin>>descomponer; aux=descomponer; cout<<endl; for(i=2;i<=descomponer;i++) { while(descomponer%i==0) { factores[contador]=i; contador++; descomponer=descomponer/i; } } cout<<"########"<<endl; cout<<aux<<" = " <<" "; cout<<factores[0]; int x=1; do{ cout<<"x"; cout<<factores[x]; x++; }while(factores[x]!=0); cout<<endl<<"########"<<endl; delete[] factores; return EXIT_SUCCESS; }
Saluditos!.
|
|
« Última modificación: 12 Febrero 2013, 22:26 pm por leosansan »
|
En línea
|
|
|
|
ThePinkPanther
Desconectado
Mensajes: 82
|
Yo usaba la funcion calloc de c. que automaticamente la memoria reservada es inicializada a 0 . ahora pruebo con new. Y para añadir elementos al vector: vector<int> Variable; 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: Variable.clear(); // Limpiamos los valores 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?: #include <iostream> #include <cstdlib> using namespace std; int main(){ int i=0; int contador=0; int aux=0; int descomponer=0; int *factores=new int[32]; for (i=0;i<32;i++) factores[i]=0; cout <<"Factorizar un numero.."<<endl; cout<<endl<<"Numero a factorizar : " ; cin>>descomponer; aux=descomponer; cout<<endl; for(i=2;i<=descomponer;i++) { while(descomponer%i==0) { factores[contador]=i; contador++; descomponer=descomponer/i; } } cout<<"########"<<endl; cout<<aux<<" = " <<" "; cout<<factores[0]; int x=1; do{ cout<<"x"; cout<<factores[x]; x++; }while(factores[x]!=0); cout<<endl<<"########"<<endl; delete[] factores; return EXIT_SUCCESS; }
Saluditos!. Segun mis pruebas, cuando usas new , la memoria ya es inicializada en 0. un saludo. 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
Mensajes: 1.211
|
¿otra forma más "inmediata" de inicializar factores a cero? En array estáticos se puede usar esto: char Variable[256] = {0};
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
int *factores=new int[32]; for (i=0;i<32;i++) factores[i]=0;
Segun mis pruebas, cuando usas new , la memoria ya es inicializada en 0. for (i=0;i<32;i++) 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
Mensajes: 1.314
|
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 SÍ se inicializan a cero, comprobado:int *factores=new int[32]();//con parentesis se inicializan a cero
No siendo necesario:for (i=0;i<32;i++) factores[i]=0;
Saluditos!. . .... y gracias n-ésimas amigo rir.
|
|
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
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. 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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Descomponer o factorizar un numero
Programación Visual Basic
|
Neobius
|
1
|
8,318
|
20 Abril 2006, 19:14 pm
por Robokop
|
|
|
Descomponer en factores primos
.NET (C#, VB.NET, ASP)
|
juanlulete
|
5
|
7,511
|
7 Agosto 2012, 21:33 pm
por Keyen Night
|
|
|
Descomponer un numero entero en lenguaje C.
« 1 2 »
Programación C/C++
|
NOB2014
|
10
|
13,983
|
1 Abril 2014, 20:59 pm
por eferion
|
|
|
Descomponer numero
Programación C/C++
|
sebamoron86
|
5
|
5,433
|
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,417
|
22 Noviembre 2019, 14:42 pm
por wolfbcn
|
|