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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 [347] 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 ... 401
3461  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 17:37 pm
Dicho esto, supongo que amchacon se refería a hacerlo por cualquier método menos por el método de sumar.



Tenía pendiente hacer esto. Aquí está:

Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. class factorial{
  7.    vector<uint32_t> mul, div;
  8.    bool divided;
  9.  
  10.    public: static void f(vector<uint32_t> &v, uint32_t n){
  11.        for(uint32_t i=2; i<(n/2)+1;)
  12.            if(n%i==0){
  13.                v.push_back(i);
  14.                n/=i;
  15.            }else ++i;
  16.            v.push_back(n);
  17.    }
  18. public:
  19.    factorial():divided(false){mul.clear(); div.clear();}
  20.  
  21.    int getMulCount()const{return mul.size();}
  22.    uint32_t getMul(int n)const{if(n>=0 && n<mul.size()) return mul[n]; else return 0;}
  23.    vector<uint32_t> getMul()const{return mul;}
  24.    void addMul(uint32_t m){mul.push_back(m);divided=false;}
  25.    void addMulFactorial(uint32_t f){if(f)for(int i=1; i<=f; i++) mul.push_back(i);divided=false;}
  26.  
  27.    int getDivCount()const{return div.size();}
  28.    uint32_t getDiv(int n)const{if(n>=0 && n<div.size()) return div[n]; else return 0;}
  29.    vector<uint32_t> getDiv()const{return div;}
  30.    void addDiv(uint32_t d){div.push_back(d);divided=false;}
  31.    void addDivFactorial(uint32_t f){if(f)for(int i=1; i<=f; i++) div.push_back(i);divided=false;}
  32.  
  33.    void fact(){factMul();factDiv();}
  34.    void factMul(){
  35.        vector<uint32_t> temp(mul);
  36.        mul.clear();
  37.        for(int i=0; i<temp.size(); i++)
  38.            f(mul, temp[i]);
  39.        for(int i=0; i<mul.size();)
  40.            if(mul[i]==1)
  41.                mul.erase(mul.begin()+i);
  42.            else ++i;
  43.    }
  44.    void factDiv(){
  45.        vector<uint32_t> temp(div);
  46.        div.clear();
  47.        for(int i=0; i<temp.size(); i++)
  48.            f(div, temp[i]);
  49.        for(int i=0; i<div.size();)
  50.            if(div[i]==1)
  51.                div.erase(div.begin()+i);
  52.            else ++i;
  53.    }
  54.    void divide(){
  55.        fact();
  56.        for(int i=0; i<mul.size(); i++)
  57.            for(int j=0; j<div.size(); j++)
  58.                if(mul[i]==div[j]){
  59.                    mul.erase(mul.begin()+i);
  60.                    div.erase(div.begin()+j);
  61.                    --i; --j;
  62.                    break;
  63.                }
  64.        divided=true;
  65.    }
  66.    uint64_t get(){
  67.        uint64_t t=1;
  68.        if(!divided) divide();
  69.        for(int i=0; i<mul.size(); i++)
  70.            t*=mul[i];
  71.        for(int i=0; i<div.size(); i++)
  72.            t/=div[i];
  73.        return t;
  74.    }
  75.    void clear(){mul.clear(); div.clear();divided=false;}
  76. };
  77.  
  78. void FilaTrianguloPascal(uint64_t *&arr, uint32_t n){
  79.    factorial f;
  80.    arr = new uint64_t[n+1];
  81.    for(int i=0; i<=n; i++){
  82.        f.addMulFactorial(n);
  83.        f.addDivFactorial(i);
  84.        f.addDivFactorial(n-i);
  85.        f.divide();
  86.        arr[i] = f.get();
  87.        f.clear();
  88.    }
  89. }
  90.  
  91. int main(){
  92.    uint64_t *v;
  93.    for(int i=0; i<10; i++){
  94.        FilaTrianguloPascal(v, i);
  95.        for(int j=0; j<=i; j++)
  96.            cout << v[j] << " ";
  97.        if(i) delete[] v;
  98.        else delete v;
  99.        cout << endl;
  100.    }
  101. }
3462  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 17:14 pm
Opino lo mismo que Eferion. Cierto es, que muchas cosas se pueden tratar como recursivas.
Para evitar esto, se pone un límite: Las recursivas son las que se llaman a si mismas.
3463  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 16:44 pm
El reto era devolver la línea, no el triángulo.
3464  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 16:29 pm
En programación, una función es recursiva si tiene una condición de retorno, y en los demás retornos se llama a si misma ·_·
3465  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 16:05 pm
No es recursividad. Guardo datos en una variable, y accedo a ellos. No llamo a la función.
3466  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 15:44 pm
Acaso eso es recursividad?
3467  Programación / Programación C/C++ / Re: De minúscula a mayúscula a nivel de bits (lenguaje C.) en: 20 Marzo 2014, 15:37 pm
Sinó puedes hacer un XOR para ese bit, que quedaría "var ^ 32;" si no me equivoco.
3468  Programación / Programación C/C++ / Re: Binomio de Newton, y triángulo de Pascal en: 20 Marzo 2014, 15:05 pm
¿Así?

Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void FilaTrianguloPascal(uint64_t *&arr,int n){
  7.    if(n<0) return;
  8.    static vector< vector<uint64_t> > v;
  9.    if(v.size()<=n)
  10.        for(uint32_t i=v.size(); i<=n; i++){
  11.            v.push_back(vector<uint64_t>());
  12.            for(uint32_t j=0; j<=i; j++)
  13.                if(j==0 || j==i)
  14.                    v[i].push_back(1);
  15.                else
  16.                    v[i].push_back(v[i-1][j]+v[i-1][j-1]);
  17.        }
  18.    arr = new uint64_t[n+1];
  19.    for(int i=0; i<=n; i++)
  20.        arr[i] = v[n][i];
  21. }
  22.  
  23. #define NUM 10
  24.  
  25. int main(){
  26.    uint64_t *v;
  27.    FilaTrianguloPascal(v, NUM);
  28.    for(int i=0; i<=NUM; i++)
  29.        cout << v[i] << " ";
  30. }

Usé unsigned long long, sinó no entran los valores.
También puse una puntero al array, para que se haga la petición de memoria desde la misma función. Es se puede cambiar si se desea :3
3469  Programación / Desarrollo Web / Re: en: 20 Marzo 2014, 08:17 am
Siempre puedes analizar el nombre del archivo. O el contenido incluso.

Enviado desde mi ST21i mediante Tapatalk
3470  Programación / Programación C/C++ / Re: problemas con else no puedo compilar en: 19 Marzo 2014, 19:35 pm
al componerse el for de dos líneas sí son necesarias y obligatorias las llaves, así no:
Código
  1. for( i=1; i<=n;i++);
  2. if (n%i==0)c++;

En realidad, el "IF", y todo el código que entra dentro de este, es como solo 1 instrucción para el "FOR". Ya tiene sus propias llaves. Era correcto.
Páginas: 1 ... 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 [347] 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 ... 401
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines