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 - do-while

#221
Para mi el giga es de risa.

Me pego cuatro meses sin utilizar la tarifa de datos, y cuando realmente me hace falta, que es cuando voy a casa de mis padres y tengo que utilizar el móvil como router, el giga entero se me va en un día o día y medio y luego tengo que joderme navegando a 8KB/s. Lo peor de las tarifas es que lo que no se consume en un mes no se acumula en el siguiente... yo la tengo porque va incluida en el contrato, pero sino ni jarto vino contrataba una...

¡Saludos!
#222
¡Buenas!

Lo anterior solo funciona en C++.

Si quieres modificar un parámetro en C tienes que utilizar punteros (también funciona en C++, pero como ya han dicho ahí tienes referencias a variables).

Por si no sabes lo que es un puntero, es un tipo de variable que almacena una dirección de memoria.
Por ejemplo:

int x=5;
int *ptr_x;

ptr_x = &x;


Imagina la siguiente situación en tu RAM:


x                         ptr_x
7    8    9    10    ...  103  104  105  106
----|----|----|----| ... |----|----|----|----|
    |    |    |    | ... |    |    |    |    |
----|----|----|----| ... |----|----|----|----|


En este caso tenemos que la variable x empieza en la posición de memoria 7 y ptr_x empieza en la posición de memoria 103 (la RAM es como un conjunto de "apartamentos" de variables en el que cada una tiene su dirección, el nombre de una variable es una forma de no tener que estar recordando todo el tiempo donde se han almacenado los datos)

En el código anterior tenemos dos variables, una de ellas un entero x, y otra de tipo puntero a entero ptr_x. El puntero se declara utilizando un asterisco. En la asignación ptr_x = &x aparece otro operador relacionado con punteros y direcciones de memoria &. Este operador devuelve la dirección de memoria de la variable con la que se utiliza, en este caso estamos obteniendo la dirección de la variable x y la estamos guardando en ptr_x. Asi que el código anterior nos daría el siguiente resultado:

x                         ptr_x
7    8    9    10    ...  103  104  105  106
----|----|----|----| ... |----|----|----|----|
   0|   0|   0|   5| ... |   0|   0|   0|   7|
----|----|----|----| ... |----|----|----|----|


Y ahora entra el juego el último operador relacionado con los punteros, de nuevo el asterisco. Cuando se utiliza un asterisco con un puntero en cualquier parte del código que no se una declaración, lo que se hace es decirle al programa que trabaje con la variable que está en la dirección de memoria contenida en el puntero. Por ejemplo:

*ptr_x = 15

Ahí le estamos diciendo al programa que coja la variable que está en la dirección de memoria contenida en en el valor de ptr_x y le asigne el valor 15. En este caso toma la variable que está en la posición de memoria 7 (que corresponde a x porque a ptr_x le hemos asignado la posición en la RAM de la variable x) y le asigna el valor 15, con lo que la RAM quedaría:

x                         ptr_x
7    8    9    10    ...  103  104  105  106
----|----|----|----| ... |----|----|----|----|
   0|   0|   0|  15| ... |   0|   0|   0|   7|
----|----|----|----| ... |----|----|----|----|


Ahora viene la solución a tu problema.

Cuando se pasan parámetros a funciones en C (y C++ salvo que utilices referencias) siempre se utiliza el paso por valor, lo que quiere decir que nunca se pasan las variables en si sino copias de estas, así si modificas un parámetro dentro de una función lo que modificas es la copia, no la variable que has utilizado en la llamada. Para poder modificar variables exteriores a una función tienes que utilizar punteros, así dentro de una función siempre sabrás que posición de memoria ocupa una variable exterior y podrás modificarla con el operador asterisco (técnicamente el operador de indirección).

Así tu código quedaría:
    #include <stdio.h>
     
    void funcion1(int *numero1){
       (*numero1)=5;
    }
     
    int main(){
       int numero1=0;
       funcion1(&numero1);
       printf("%d\n",numero1);
       return 0;
     
    }


Como puedes ver, en la línea 3 estamos diciendo que la funcion1 recibe como parámetro un puntero a entero, y en la línea 9 de main estamos pasando la dirección de memoria de numero1 a la función.

En la línea 4, dentro de la función, estamos aplicando el operador de indirección al puntero numero1 para trabajar con la variable que está en la posición de memoria a la que apunta, en este caso la variable numero1 que está en main, y le estamos asignando el valor 5.

Espero que te haya quedado claro.

¡Saludos!
#223
Programación C/C++ / Re: Problemas con printf();
19 Octubre 2015, 11:58 AM
¡Buenas!

Aunque declares la variable palabra como static no vas a conseguir que listaPalabras contenga ningún dato últil fuera de la funcion. Tu error está en la línea de código 19:

listaPalabras[posListaPalabras]=palabra;


Lo que estás haciendo con esta sentencia es asignar la dirección de memoria de palabra a una de las palabras que quieres almacenar en la lista (es una asignación entre punteros), es decir, todas las palabras están apuntando a la misma variable. Si quieres almacenar el contenido de la cadena y no su dirección de memoria tienes dos opciones:

1. Asignar una longitud de forma estática a cada elemento de listaPalabras en el momento en el que la declaras.
2. Si no has hecho lo anterior listaPalabras solo será un vector de punteros, así que tendrás que asignar la memoria necesaria para almacenar la cadena de caracteres de forma dinámica dentro de propia función cargarListaPalabras.

Una vez que sepamos que cada una de los elementos de listaPalabras tiene memoria suficiente para almacenar las cadenas tendrás que hacer un strcpy o strncpy (si has declarado la cantidad de memoria de cada una de las cadenas en el momento de la declaración te recomiendo ésta segunda función para asegurarte de que no vas a sobrepasar el límite establecido) para almacenar el contenido de la variable palabra en la posición que corresponda dentro de listaPalabras.

Si vas a asignar la memoria dinámicamente asegurate de liberarla antes de que la variable que corresponde se con listaPalabras en la lista de parámetros salga de su ámbito.

¡Saludos!

Por cierto, cometes el mismo error en las líneas 30 y 36.

¡Saludos!
#224
Actualización de la noticia:

Ayer te contábamos como un número indeterminado de usuarios de sistemas con Windows 7 y Windows 8.1 fue forzado a actualizar a Windows 10. Microsoft ha reconocido el "error" y eliminará este forzado automático:

    "Como parte de nuestro esfuerzo por llevar Windows 10 a clientes de Windows 7 y Windows 8.1 la actualización puede aparecer como una actualización opcional en el panel de control de Windows Update. Este es un lugar intuitivo y de confianza donde los usuarios encuentran y descargan las actualizaciones. En la reciente actualización de Windows, esta opción fue activada por defecto. Fue un error que vamos a corregir."

Más información:
http://www.muycomputer.com/2015/10/16/actualizacion-a-windows-10-3
#225
GNU/Linux / Re: problema pantalla pixelada
15 Octubre 2015, 13:17 PM
¡Buenas!

Eso suena a algún problema con la gráfica, al menos el único caso que conozco de ese estilo fue una tarjeta gráfica que estaba a punto de morir, espero que ese no sea el caso...

Si la tarjeta gráfica que utilizas es dedicada prueba a instalar los controladores privativos (y aunque sea integrada mira a ver si existen controladores privativos). Para saber la tarjeta que usas puedes utilizar el comando "lspci | grep VGA" y como no sabemos la distro que estás utilizando te tocará buscar en Google como instalar los controladores privativos.

Si ese no es el problema no sabría por donde seguir. A ver si alguien aporta algo más.

¡Saludos!
#226
Demasiadas lineas de código :/


#include <stdio.h>
#include <string.h>

char* trim(char *s, char c)
{
    int i;

    for(i = strlen(s) - 1 ; i >= 0 && s[i] == c ; i--);
    s[++i] = '\0';

    for(i = 0 ; s[i] && s[i] == c ; i++);

    if(i)
        memmove(s , s + i , strlen(s) - i + 1);

    return s;
}
#227
¡Buenas!

Antes de hacer nada, comprueba, utilizando Google (yo no se como hacerlo pero se que hay mucha información sobre ello), si en el menú del GRUB salta de forma automática Kali, sin darte opción a elegir otro sistema. Si así fuese tendrás que modificar la configuración de GRUB para que te de la opción de elegir el sistema operativo con el que quieres arrancar. Si no es esto prueba lo siguiente.

Si no quieres añadir repositorios ajenos a la propia distro puedes intentar restaurar el GRUB a mano desde kali. Para saber como llama tu sistema al disco duro en el que están los SO tendrás que utilizar, por ejemplo, sudo fdisk -l. Te saldrá una lista de particiones que a partir de ahora y para seguir con mayor facilidad llamaré /dev/sdaX con X un número, tendrás que ver como se llaman en tu sistema y adaptar lo que sigue a tu caso. En la última columna te indica el tipo de partición, esto te servirá de guía para saber qué particiones tienen que sistema operativo. El nombre del disco duro sera el de las particiones sin el número final. Por ejemplo si kali está instalado en la partición /dev/sda2 y windows en /dev/sda5 el nombre del disco duro sera /dev/sda.

Ahora reinstalas el GRUB en el disco duro en el que tengas los sistemas operativos:

sudo grub-install /dev/sda


Y actualizas la información del GRUB:

sudo update-grub2


Hasta aquí puedo ayudarte, si el problema no es ninguno de los dos descritos no tengo ni idea de que es lo que pasa.

¡Saludos!
#228
GNU/Linux / Re: Problemas con el USB en Ubuntu 14.04
23 Septiembre 2015, 05:52 AM
Cita de: MinusFour en 20 Septiembre 2015, 01:35 AM
Me parece extraño que no tengas logs :X, sera que estas usando otro syslog aparte del journal de systemd? O quizas Ubuntu 14.04 no viene con systemd (no entiendo porque tienes journalctl entonces)? O tienes problemas con el grupo/proceso de systemd-journal... bueno muchas cosas pueden estar fallando ahí.
Creo que la versión 14.04 aún viene con upstart, lo que no se es si las últimas versiones lo incorporan o si van a esperar a la 16.04.

¡Saludos!
#229
¡Buenas!

Por mi parte hace bastante que dejé de usar como opción principal los torrents. O el archivo que buscaba tenía una demanda exagerada y podía obtenerlo en muy poco tiempo o era imposible obtener ninguna fuente. Con las redes eD2k/kad se que antes o después voy a poder completar la descarga de un archivo. Así que sigo tirando de aMule y si ahí no encuentro algo ya es cuando busco torrents. Como curiosidad, me ha hecho ilusión encontrar en aMule una recopilación de archivos que hice hace cosa de 5 o 6 años y que ya daba por perdida.

¡Saludos!
#230
Cita de: beholdthe en 16 Septiembre 2015, 02:45 AM
Eres la primera persona que conozco al que le funciona la lista esta, y mira que conozco gente que lo ha intentado por este método.

Habré tenido suerte.  :xD

Por lo que ponía en la propia página web de la lista robinson el proceso puede tardar hasta tres meses en hacerse efectivo, pero en mi caso creo que no tardo ni un mes, pase de que me tocasen las narices prácticamente a diario a vivir tranquilo.

Creo que es denunciable que una empresa no respete la lista robinson.

¡Saludos!