Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ivancea96

#3091
Hola :D

¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Yo veo más sencillo pasar parámetros con un registro, así asegurarse de que la pila no cambia. Pero no se que es lo más "normal".

Por ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Algunas dudillas que me quedaron al programar ASM xD
#3092
Cita de: leosansan en 11 Agosto 2014, 15:13 PM
Código (cpp) [Seleccionar]
while ( i < hh )
 ( hh % i == 0 ) ? cout << i << " "  , hh /=  i : i = ( i == 2 ) ? i + 1 :i + 2 ;


sin necesidad de usar la variable "dos" ni "sqrt".  :rolleyes:

Aquí es donde hecho de menos lo que has llamado "Concursillo" donde se plantee un problema y en sucesivas réplicas y/o contra réplicas podamos ir "puliendo" un código.

Pues reserva esos comentarios para el concurso.
Usar 2 operadores ternarios en vez de if no hace el código más bonito.
#3093
Con 100, significa 100 primos eh?
#3094
A mi me funciona perfecto el detector. Ahora mismo va por el millardo, y casi una GB de txt xD
Estoy planeando pasar de ascii a binario en archivo.
#3095
Y aprobecho el mismo hilo para colgar este factorizador de números:

Código (cpp) [Seleccionar]
#include <iostream>
#include <cmath>
#include <limits.h>

using namespace std;


int main () {
   while(true){
       unsigned long long int fin=0, i=2, hh=0;
       bool dos = true;
       cout << "Pon el numero a factorizar: ";
       cin >> hh;
       while(hh<2 || hh>ULLONG_MAX-1){
           cin.clear();
           cout << "Debe ser un numero entre 2 y 18446744073709551615: ";
           cin >> hh;
           cout << endl;
       }
       cout << endl << "Numero a factorizar: " << hh << endl << 1 << " ";
       uint64_t sq = sqrt(hh);
       for(;i<=sq;){
           if(hh%i==0)
               if(hh==i){
                   break;
               }else{
                   hh=hh/i;
                   sq = sqrt(hh);
                   cout << i << " ";
               }
           else
               if(dos){
                   dos=false;
                   ++i;
               }else
                   i+=2;
       }
       cout << hh << endl << "Acabado." << endl << endl << endl;
   }
}
#3096
Solo una razón puede haber para que se quede en un bucle infinito: Ese while.

"Array[i+1]!=' '"
Array es un arreglo de enteros. ' ' es un espacio, que en ascii es 32. Estás diciendo que haga ese while hasta que Array[i+i]!=32.

Anteriormente, pusiste que num[nu] = 32. Yo no elegiría ese número, ya que a lo mejor se lo introduces por teclado tú.

Yo me replantearía esa función minimo(). Con un bucle for, llega.
#3097
Holas :D

Aquí dejo un código, más que nada curioso, que va guardando números primos en un archivo.

Información:

  • Tras cerrar el programa, retoma el último primo que generó
  • Funcionalidad para medir el tiempo que tarda (véase que con números altos empieza a tardar mucho más)
  • Se usa sólo la librería estándar

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <ctime>
#include <cmath>

using namespace std;

inline bool primo(uint64_t n){
   if(n%2==0) return false;
   uint64_t i=3;
   uint64_t sq = sqrt(n);
   for (;n%i!=0; i+=2){
       if(i>sq){
           i=n;
           break;
       }
   }
   return i==n;
}

int main () {
   while(true){
       uint64_t u=2, g=0, h=0;
       string t;
       cout << "Numero de primos a conseguir (0 para ver ultimo primo): ";
       getline(cin,t);
       g = strtoull(t.c_str(),NULL,0);
       ifstream leer("primos.txt", ios::ate);
       char n='0';
       if(leer){
           while(n!='\n'){
               leer.unget();
               n = leer.get();
               leer.unget();
           }
           leer.get();
           leer >> u;
       }
       leer.close();
       if(g==0){
           cout << "Ultimo primo conseguido: " << u << endl << endl;
           continue;
       }
       ofstream escribir("primos.txt", ios::app);
       if(u==2){
           escribir << u--;
       }
       clock_t timer = clock();
       while(h<g){
           u+=2;
           if(primo(u)){
               escribir << endl << u;
               ++h;
           }
       }
       cout << endl << "Conseguidos " << h << " primos en " << ((clock()-timer)*1000)/CLOCKS_PER_SEC << " milisegundos." << endl << endl;
   }
}


El código creo yo que es fácil de entender. Se usa fstream para manejar el archivo de primos.

Quien le quiera mejorar el algoritmo para detectar los primos, está en su derecho, por supuesto.
Quien quiera guardar los primos en binario (8 bytes para uint64_t), puede hacer fácilmente la modificación.
Y hasta quien quiera, que le ponga una barra de carga jaja

Bueno, espero que a alguien le ayude.

Byes :3
#3098
El problema de guardar un array de primos, es para números mayores a un millardo. Ahí podría empezar a consumir hasta un GB de memoria.
#3099
Scripting / Re:
10 Agosto 2014, 12:29 PM
Ya que no sabes Python, a lo mejor te interesa hacer eso en un lenguaje que sí sepas, y luego cuando aprendas Python, traducirlo :o
#3100
El break sale de bucles for, while, y sentencias switch.
El return, retorna al función. Es decir, sale de la función, y retorna el valor que sea (salvo que sea void)