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

#31
Cita de: NOB2014 en  9 Junio 2016, 03:02 AM
¿hay alguna diferencia en hacerlo de una manera u otra?

Ambos son equivalentes el primer caso es redundante no es necesario pasar un puntero a un array esto se hace por defecto el array siempre decae a puntero al primer elemento cuando lo pasas como parámetro a una función.

Un saludo.
#32
Programación C/C++ / Re: Descomponer numero
8 Junio 2016, 19:30 PM
Cita de: sebamoron86 en  8 Junio 2016, 15:38 PM
Con ese ejemplo funciona pero si pongo 123444, queda asi
4441 (en vez de 4442)
31

No entiendo porque no funciona

Se debe a la conversión que ocurre al asignar un double a un entero donde se produce un redondeo, debes usar ceil() en ambos casos.

Código (cpp) [Seleccionar]
acupar += ceil(digitos[i ]* pow(10,par));
acuimpar += ceil(digitos[i] * pow(10,impar));


#33
Los compiladores alinean automaticamente los datos, insertando bytes de relleno para asegurar que cada miembro este alineado correctamente para un acceso mas rapido a ellos.

typedef struct
{
    char a;
    char relleno[3]; // para completar 4 bytes
    int b;
    char c;
    char relleno[3]; //para completar 4 bytes
} A;

typedef struct
{
    char a;
    char c;
    char relleno[2]; //para completar 4 bytes
    int b;
} B;


Una instancia de una estructura tendra la alineacion de su miembre de mayor número bytes. Puedes evitar la alineación usando la directiva #pragma pack(1) pero no es recomendable porque podría tener un severo impacto en el rendimiento
#34
Cita de: class_OpenGL en  4 Junio 2016, 21:27 PM
En 32 bits sí que sería lo mismo XDD

En 64 bits no, pues la primera se incrementa en 4 y la segunda en 8 :P

Gracias :D

Supongamos el siguiente arreglo:

int arreglo[8];

arreglo es de tipo int* un puntero al primer elemento de arreglo
&arreglo es de tipo int (*)[8] un puntero a un arreglo de 8 enteros

Por lo tanto si hacemos arreglo + 1 incrementara 4 bytes (suponiendo int == 4 bytes) pero &arreglo + 1 sabiendo que es un puntero a arreglo de 8 ints el incremento sera 4 * 8 = 32 saltamos 8 bytes justo despues del final de arreglo. Puedes comprobar esto haciendo:

#include <stdio.h>

int main()
{
    int array[8];
    int n = *(&array + 1) - array;
    printf("Size array = %d\n", n); //Debe imprimir 8

    return 0;
}

#35
No es coincidencia el estándar garantiza que arreglo y &arreglo siempre apuntaran a la misma dirección (el primer elemento del array) pero tienen tipos diferentes no es lo mismo hacer

Código (cpp) [Seleccionar]
arreglo + 1
Y
Código (cpp) [Seleccionar]
&arreglo + 1
#36
Cita de: AlbertoBSD en  1 Junio 2016, 23:42 PM
O si prefieres usar un arreglo bidimencional y complicar  el calculo un poco tenemos que

Porqué no?  :silbar:

Código (cpp) [Seleccionar]
int ascendente = 1;
int descendente = M*N;

matriz_decendente[i][j] = descendente--;
matriz_ascendente[i][j] = ascendente++;
#37
Una posible solución
int main()
{
    int i, j, n = 16;
    char array[n][n];

    srand (time(NULL));

    for( i = 0; i < n; i++ )
        for( j = 0; j < n; j++ )
            array[i][j] = i==j ? "*/+-%&$"[rand()%7] : 1+rand()%9+'0';
    //Imprimir aqui
    return 0;
}
#38
Cita de: class_OpenGL en 29 Mayo 2016, 20:57 PM
"se ha perdido la referencia a esa memoria dinámica"

Eso no pasa al menos en los sistemas operativos modernos porque estos realizan un seguimiento de toda la memoria reservada por un programa y cuando este finaliza (por cualquier razón) sin haber liberado la memoria el sistema procede a recuperar toda la memoria asignada
#39
while( i <= MAX )

Estas accediendo fuera de los límites del array con <= cambialo por < o reservar size + 1
#40
Donde esta el código que produce ese error?