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 - DarK_FirefoX

#501
Ahora que lo dices, tienes razón, creo que eso es lo que ví. Creo que el add-on te reconoces los códigos de LaTeX y realmente lo postea como imágenes. Las crea dinámicamente y en sí, sería algo costoso. Bueno, solo fue algo que me vino a la mente, gracias por aclararlo.

Aunque cabe destacar que sería algo realmente útil. Ojala hubiera otra forma de renderizar el contenido de LaTeX y que no fuera tan costoso.

Saludos
#502
Esto es algo que me venía rondando la cabeza hace rato. Quería saber, pues estuve buscando, si existe y conocen de algun add-on de LaTeX para foros SMF. Sería un add-on bastante interesante al foro, aunque el foro no está tan orientado a las matemáticas, muchas veces es necesarío introducir fórmulas y hay que subir imágenes. Entonces si tienes que explicar un proceso tiens que subir muchas imágenes lo cual se hace tedioso.

No se si esto será útiles para muchos, pero es algo que queria decir a ver que opinan los demás.

Salu2s
#503
Ya te había dejado una idea, aquí te vá más completa:

Utilizando un recorrido en pre-orden recursivamente o iterativamente puedes ir contando la cantidad de "dragones" hasta llegar a una hoja. Esa hoja la almacenas en algún lado y vas llevando el control de la cantidad de "dragones" en el camino a esa hoja, luego sigues el recorrido de todo el arbol. Si encuentras una hoja con una cantidad de "dragones" hacia ella menor, pues la cambias por la que habias guardado, junto con la cantidad de dragones hasta esa hoja.

Salu2s. Espero que te ayude.
#504
Track Down, tambien conocida como Takedown, creo que en España se conoció como El asalto final (Hackers 2: Operación Takedown) gira entorno a la vida de Kevin Mitnick.

En lo personal me encantó cuando la vi por primera vez, de ves en cuando la veo de nuevo.

Salu2s
#505
alhuertis, aqui no se resuelven ejercicios, tienes que pensar y comenzar a hacer tus ejercicios y cuando te atasques, hacer alguna pregunta en concreto, pero no esperes que hagamos los ejercicios por ti.

Puedes ir pensando en hacer un recorrido en pre-orden para recorrer el arbol. Vaya puedes ir comenzando por ahí. Lo demás es cuestión de comprobar y guardar los datos

Salu2s
#506
5 - Hallar el número primo más cercano a un número

Esté código sirve para encontrar el número primo más cercano a un entero n. En éste código utilizamos el código para encontrar un número primo expuesto anteriormente (Lo añado aquí para que no tengan que ir a buscarlo al post anterior.

Código (csharp) [Seleccionar]
public static bool EsPrimo(int a)
       {
           int raizDelNumero = (int)Math.Sqrt(a);
           for (int i = 2; i <= raizDelNumero; i++)
               if (a % i == 0)
                   return false;
           return true;
       }


La idea del método es comprobar si el número entrado es primo, si lo es, entonces el mismo es el primo más cercano, sino tendremos dos variables, numeroDer y numeroIzq, lo que podemos interpretarlas y usarlas para almacenar los números que hay a la izquierda y a la derecha del número n de la entrada. El objetivo es iterar por los números a la izquierda/derecha del número de la entrada y contar las distancia que tienen entre el y el número n de la entrada. Cuando encontremos un número primo a la derecha tendremos almacenado ese número y la distancia al número n, luego haremos lo mismo hacia la izquierda. Al final comprobaremos las distancias respectivas y devolveremos el número que tenga menor distancia.

Nota: Sabemos que un número primo es un número mayor que 1 tal que tiene únicamente dos divisores naturales distintos: él mismo y el 1. Por lo que si la entrada n viene dada por un número menor o igual que 1, tendrá como primo mas cercano al 2.

Código (csharp) [Seleccionar]
public static int PrimoMasCercano(int n)
       {
           int contadorDer = 0;
           int contadorIzq = 0;
           int numeroDer = n;
           int numeroIzq = n;
           if (n <= 1) return 2;
           if (EsPrimo(n)) return n;
           else
           {
                   while (!EsPrimo(numeroDer))
                   {
                       numeroDer++;
                       contadorDer++;
                   }  
                   while (!EsPrimo(numeroIzq))
                   {
                       numeroIzq--;
                       contadorIzq++;
                   }              
           }
           if (contadorPos < contadorNeg) return numeroDer;
           return numeroIzq;
             
       }





6 - Hallar el máximo común divisor de un número (MCD)

El siguiente código muestra como hallar el MCD de un número utilizando el Método de Euclides, que utiliza el algoritmo de la división. Voy a mostrarlo de manera iterativa y de manera recursiva. En la manera iterativa utilizo una función auxiliar Swap(int a, int b), para hacer un intercambio de valores de dos variables

Código (csharp) [Seleccionar]
static void Swap(int a, int b)
       {
           int temp = b;
           b = a;
           a = temp;
       }


Forma iterativa

El método recibe las dos variables entre las cuales queremos el MCD. El MCD es el mayor número entero que los divide a ambos sin dejar resto.

(No voy a explicar cómo funciona el algoritmo de Euclides ni el algoritmo de la división. Asumo que lo conocen)

Lo primero que debemos hacer es comprobar si los números son iguales, en ese caso, el mismo es el MCD. Sino, comprobamos y determinamos cuál de los dos es el mayor, para comenzar con el mayor como dividendo. Luego planteamos nuestra división teniendo los términos definidos, dividendo, divisor y resto. El resto viene dado por:

Código (csharp) [Seleccionar]
int resto = dividendo % divisor

Luego vamos a ir "dividiendo" mientras el resto sea distinto de 0. Para cada iteración se van a ir cambiando los valores de los términos de la división. El dividendo pasa a ser el divisor, el divisor pasa a ser el resto, y el resto pasa a ser el nuevo resto (nuevo dividendo % nuevo divisor).
Por último, vamos a signarle a la variable answer el valor del resto si este es distinto de 0, para así garantizar que cuando termine el ciclo, esta variable (que es la que se va a devolver) tenga asignado el MCD, que el algoritmo de Euclides define como el último resto distinto de 0.

Código (csharp) [Seleccionar]
public static int MCD(int a, int b)
       {
           if(a==b) return a;
           if(b>a)
               Swap(a,b);
           int dividendo = a;
           int divisor = b;
           int resto = dividendo % divisor;
           int answer = a;
           while (resto!=0)
           {
               dividendo = divisor;
               divisor = resto;
               resto = dividendo % divisor;
               if (resto != 0) answer = resto;
           }
           return answer;
       }


Forma recursiva

Gracias a la recursividad tenemos un método mucho más limpio y corto. Básicamente, el método realiza lo mismo. Comprobamos inicialmente si el resto entre ellos es 0, y si lo es retornamos b (utilizada como divisor). En caso contrario llamamos recursivo, esta vez utilizamos a b (divisor) como dividendo, y utilizamos al resto entre a y b (resto) como divisor, y así recursivamente.

Nota: Pueden preguntarse ¿Por qué no se comprueba cual es el mayor para hacer el Swap? El caso es que si a es menor que b, al realizarse la comprobación nos damos cuenta que el resto entre a y b va a ser a, entonces no va a ser 0, por lo tanto va a llamar recursivo, con b (la variable mayor) como a, y al resto entre a y b (que era a) como b

Código (csharp) [Seleccionar]
static int MCD(int a, int b)
       {
           if (a % b == 0) return b;
           return MCD(b, a % b);
       }





7 - Descomposición de un número en factores primos

Descomponer un número en factores primos consiste en descomponer un número compuesto en divisores no triviales primos que multiplicados den el número.

En este código muestro como descomponer un número n en factores primos.

Nota - 1: Utilizo el método EsPrimo(), explicado anteriormente.
Nota - 2: En este código muestro el resultado en consola utilizando:

Código (csharp) [Seleccionar]
Console.WriteLine()

Pueden modificarlo para que se almacenen en una lista.

Primero que todo comprobamos si el número es primo, en caso de que lo sea, no tiene otros divisores, por lo tanto, devolvemos el único divisor primo que tiene, él mismo.

Ahora, lo que vamos a hacer es ir iterando con una variable desde 2 hasta que encontremos un número que sea primo y que divida al número. En caso de que se cumplan esas dos condiciones, vamos a dividir el número por la variable i (con la cual se está iterando), vamos a devolver el valor de i pues este es el primer factor primo encontrado, y vamos a volver a hacer la variable i de nuevo 2. En caso de que el alguna de las condiciones no se cumpla, se incrementará la variable i y se realizaran las mismas comprobaciones con este nuevo valor. Estas comprobaciones se van a realizar mientras la variable numero sea distinta de 1. Como vemos, al estar dividiendo esta variable va a ir disminuyendo su valor hasta llegar a 1. En este caso terminará el ciclo.


Código (csharp) [Seleccionar]
public static void DescomposicionPrimos(int n)
       {
           if (EsPrimo(n)) Console.WriteLine(n);
           else
           {
               int i = 2;
               int numero = n;
               while (numero!=1)
               {
                   if (EsPrimo(i))
                   {
                       if (numero % i == 0)
                       {
                           numero = numero / i;
                           Console.WriteLine(i);
                           i = 2;
                       }
                       else i++;
                   }
                   else i++;
               }
           }
           
       }


8 - Comprobar si un número es perfecto

Un número perfecto es un número natural que es igual a la suma de sus divisores positivos, sin incluirse a si mismo.

Nota: Aquí utilizamos también el método EsPrimo, puesto que si el número n de la entrada es primo entonces no es perfecto.

La variable suma va a ir controlando la suma de los divisores de n. Esta siempre va a comenzar ya con 1 pues el 1 divide a todos los números, por lo tanto siempre se cuenta. Vamos iterar desde 2 hasta la mitad del número. Puesto que ningún número mayor que la mitad va a dividir al número. Entonces lo que haremos es comprobar que la variable sobre la cual se está iterando deje resto 0 con n y se lo sumamos a la variable suma. una vez que termine el ciclo, devolvemos true en caso de que suma sea igual a n, o falso en caso contrario

Código (csharp) [Seleccionar]
public static bool EsPerfecto(int n)
       {
           if (EsPrimo(n)) return false;
           int suma = 1;
           for (int i = 2; i <= n / 2; i++)
               if (n % i == 0)
                   suma += i;
           return suma == n;
       }


Esto son los otros 4 que he ido terminando. Seguiré luego.

Salu2s
#507
Librería de Códigos - C#

Me he decido a crear este tema con el objetivo de ayudar a las personas a las cuales les pueda ser útil estos códigos. Mi idea es ir posteando códigos que de una manera u otra son útiles para personas que estén aprendiendo a programar en C# y tengan alguna duda. No hay otra manera de explicarlo así que voy a comenzar:

1 - Hallar el máximo número entero de un array de enteros

Aquí introducimos como parámetro al método un array de enteros llamando "numeros", aquí estará la colección de numeros en la cual queremos buscar el máximo (Dígase máximo al número más grande). Para que entiendan:

int.MinValue es una constante dentro de la clase Int32 que representa el menor valor posible representable por un entero. Este valor es: -2,147,483,648. Por lo tanto, cualquier entero representable con el tipo de dato int, será mayor o igual que la constante MinValue.
Lo que hacemos es recorrer el array de int números y vamos indexando y comprobando cada posición del array con la variable maximo (int.MinValue en un principio), en caso de que el número sea mayor le asignamos a esa variable el valor en la posición i del array (o sea, la que se está comprobando) y seguimos recorriendo el array hasta que se hayan comprobado todos los elementos del array. Luego, la variable maximo tendrá almacenado el valor máximo del array. Lo que hacemos es devolverlo.

Código (csharp) [Seleccionar]
public static int Maximo(int[] numeros)
       {
           int maximo = int.MinValue;
           for (int i = 0; i < numeros.Length; i++)
           {
               if (numeros[i] > maximo)
                   maximo = numeros[i];
           }
           return maximo;
       }





2 - Hallar el segundo mayor elemento en un array de enteros

La idea es parecida a como hallar el mayor elemento, de hecho, lo que se va a hacer es recorer el array e ir buscando el mayor elemento, pero cuando se encuentre uno mayor del que ya se encontró, ese que ya se había encontrado se va a guardar en otra variable. Entonces vamos a tener dos variables, una "mayor" y otra "sMayor" (segundo mayor). La idea es el que se encuentre se pone en la variable mayor y lo que estaba en la variable mayor se pone en la variable sMayor. De esta manera vamos llevando control de las dos variables. Hay que tener en cuenta que la comparación se realiza primero si el elemento indexado es mayor que "mayor", sino, hay que comprobar si es mayor que "sMayor" pues puede darse el caso que existan elementos entre las dos una vez después que se haya asignado los valores una vez y este elemento vendría a ser el segundo mayor.
Una vez recorrido todo el array solo resta devolver la variable "sMayor"

Código (csharp) [Seleccionar]
public static int SegundoMayor(int[] numeros)
       {
           int mayor = int.MinValue;
           int sMayor = int.MinValue;
           for (int i = 0; i < numeros.Length; i++)
           {
               if (numeros[i] > mayor)
               {
                   sMayor = mayor;
                   mayor = numeros[i];
               }
               else if (numeros[i] > sMayor)
                   sMayor = numeros[i];
           }
           return sMayor;
       }





3 - Invertir los elementos de un array

Invertir los elementos viene siendo como hacer un Reverse (Invertir el orden de los elementos del array). Voy a exponer como hacerlo de dos maneras, que es prácticamente lo mismo con la diferencia que en un método modificamos el mismo array y en el otro devolvemos un array nuevo.

Modificando el mismo array

Aquí, recibimos como parámetro de entrada un array (en este caso es un array de int, esto puede servir para otros tipos de datos, o incluso se podría haber hecho genérico, lo expongo con int para simplificar). Básicamente vamos a recorrer el array hasta la mitad, utilizando la facilidad de indexar un array podemos cambiar los valores. Pues el primer elemento del array sería 0 y el último a.Length -1. Lo que utilizando la variable i del ciclo, podemos ir aumentando y disminuyendo a la vez de una forma desde afuera hacia adentro y haciendo lo que se conoce como Swap (intercambio) en esos elementos. Si nos damos cuenta el último elemento siempre nos vamos a referir como a[a.Length-1-i], puesto que i va aumentando ese valor va a ir reduciéndose. Por lo tanto el objetivo es: Cambiar el primero con el último, el segundo con el penúltimo, y así sucesivamente. Este método es void, puesto que no devolvemos nada, solamente trabajamos sobre el mismo array.

Nota: Para hacer el Swap lo que hacemos es crear una variable temporal donde asignamos uno de los valores, luego en esta variable que ya guardamos, ponemos el otro elemento a intercambiar, por último, el elemento que guardamos en la variable temporal se lo asignamos a la variable de donde sacamos el valor a intercambiar.

Código (csharp) [Seleccionar]
public static void InvierteV(int[] a)
       {
           for (int i = 0; i < a.Length / 2; i++)
           {
               int temp = a[i]; //Asignamos valor a la variable temporal
               a[i] = a[a.Length - 1 - i]; //Copiamos el valor de la parte trasera del array a la frontal
               a[a.Length - 1 - i] = temp; //Copiamos el valor guardado en la variable temporal a la parte trasera del array
           }
       }


Devolviendo un nuevo array

Código (csharp) [Seleccionar]
public static int[] InvierteN(int[] a)
       {
           int[] newInt = new int[a.Length];

           //Copiamos los elementos del array al nuevo array
           for (int i = 0; i < a.Length; i++)
               newInt[i] = a[i];

           for (int i = 0; i < newInt.Length/2; i++)
           {
               int temp = newInt[i]; //Asignamos valor a la variable temporal
               newInt[i] = newInt[newInt.Length - 1-i]; //Copiamos el valor de la parte trasera del array a la frontal
               newInt[newInt.Length - 1-i] = temp; //Copiamos el valor guardado en la variable temporal a la parte trasera del array
           }
           return newInt;
       }


Esta forma funciona casi idéntico, solo que hacemos primero una copia del array en un array nuevo con la misma longitud y los mismos valores, para luego trabajar sobre este array y después devolverlo tras realizarle el proceso de invertir los elementos explicados en la forma anterior.

Nota: El proceso de crear la copia del array lo hago inicializando un array de la misma longitud que el que entra como parámetro y recorriendo este array y copiando los valores a este nuevo array. Quería destacar que para hacer la copia del array podíamos usar el método Array.Copy(), pasándole el array desde donde se quiere copiar, el array a donde se va a copiar y la cantidad de elementos a copiar, en este caso todos. Hubiera sido algo así:

Código (csharp) [Seleccionar]
Array.Copy(a, newInt, a.Length);

De esta forma nos hubiéramos ahorrado el primer ciclo del método (aunque en términos de eficiencia es prácticamente lo mismo)




4 - EsPrimo

Básicamente esto es algo bastante utilizado, aunque esta manera de implementarlo es "sencilla" a simple vista, puede ser un proceso extremadamente largo para números muy grandes.

Código (csharp) [Seleccionar]
public static bool EsPrimo(int a)
       {
          int raizDelNumero = (int)Math.Sqrt(a);
           for (int i = 2; i <= raizDelNumero; i++)
               if (a % i == 0)
                   return false;
           return true;
       }


Lo que hacemos es calcular la raiz del numero y guardarla en una variable. Utilizamos el metodo .Sqrt dentro de la clase Math. El cuál calcula la raíz cuadrada de un número. Este método devuelve un double, por eso le hacemos un cast a int (cast es una conversión forzada a un tipo de datos). El objetivo del método es recorrer todos los números desde 2 hasta la raíz del número y ver si alguno de esos números divide al número (o sea, deja resto 0 con el número). En caso de que alguno de esos números divida al número, implica que el número no es primo. Si el ciclo termina sin devolver false, entonces devolvemos true pues el numero es primo.





Bueno, aquí les dejo los cuatro primeros, luego sigo añadiendo más de acuerdo al tiempo que tenga libre. Si alguien quiere aportar sean libres de hacerlo. Esto son cosas sencillas, pero que para personas que están aprendiendo pueden ser muy útiles. Recuerden, si añaden, comentar los códigos y/o explicarlos.

Salu2s

#508
Cita de: Mad Antrax en 17 Mayo 2015, 13:04 PM
Aquí en España el salario mínimo es de 756,70 EUR = 866.196 USD = 12,998.56 MXN

Y es una vergüenza, con ese dinero no se puede vivir.

Con eso aqui vivo genial!!! ;D ;D

Cita de: engel lexdonde estás tú?

En Cuba!

Cita de: daryo en 17 Mayo 2015, 17:53 PM
es de cuba , pero no estoy seguro que quieria contarlo  :silbar:
perdon si era asi xD


No hay ningún problema daryo :D ;)
#509
¿El equipo tiene alguna pantalla? ¿Como sabes que solo muestra 999 canciones? ¿Revisaste si soporta los formatos de los archivos de las canciones que añadiste?
#510
Cita de: daryo en 17 Mayo 2015, 21:23 PM
siempre puedes probarlo desde live cd es decir sin necesidad de instalar nada ni borrar nada ,

pones el cd de linux(live cd) inicias desde ahi el sistema operativo, se carga desde la memoria ram sin tocar el disco duro y cuando reinicias el computador es como si no hubieras hecho nada y entras a windows normalmente

Exactamente, esta creo que es la opción más "sana". El cambio brusco de sistema operativo te complicará un poco las cosas. Deberías probarlo con un Live CD y te vas familiarizando.

Salu2s