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

#931
Cita de: digitalx2 en 22 Septiembre 2013, 22:31 PM
mi input es:

5 6 9 + 8 5 *
esto quedaria como
5 11 40

O se me ha olvidado sumar o esto debería quedar tal que:
5 15 40

Es importante porque si no puedes ponerte a buscar errores donde no los hay.

Más cosillas. Como norma general los índices se tiende a incrementarlos despues de añadir el elemento al vector... no antes. Básicamente porque si se produce un problema mientras añades el elemento al vector al final tienes que acordarte de volver a reducir el valor del puntero... y es preferible perder un dato a recuperar un valor no inicializado. Esto te lo digo por el uso que haces de index.


ptr = strtok( s, s2);    /* Primera llamada => Primer token*/
printf( "%s\n", ptr );
while( (ptr = strtok( NULL, s2 )) != NULL )    /*Posteriores llamadas*/


El problema que te va a generar esta estructura es que el primer token lo vas a perder... prueba a meter esta secuencia 5 5 +... no funciona.

Si quieres convservar el primer token, que imagino que sí, usa un bucle dowhile...


ptr = strtok( s, s2);    /* Primera llamada => Primer token*/
printf( "%s\n", ptr );
                do
                {
                  // Aqui aun conservas el primer token, en las siguientes pasadas
                  // tendras los siguientes tokens

                 // ...
                }
while( (ptr = strtok( NULL, s2 )) != NULL )    /*Posteriores llamadas*/


Otra cosa más. La función 'isdigit' solamente comprueba un caracter... luego si tienes pensado permitir la entrada de números de dos o más dígitos tendrás que comprobar todo el token para evitar errores.

Y para terminar un último fallo:


stackEntry pop(Stack*s)
{
if(isEmpty(*s)){printf("error: stack empty\n"); return -1;}
printf("\npop: %d\n",s->data[s->index--]);
return 1;

}


Mola esta función... imagínate una pila con elementos aleatorios... haz un pop y te adivino lo que te va a devolver esta función: siempre 1... bueno, al menos mientras queden elementos en el stack.

ese return 1 no debería estar así... la función más bien debería tener una forma tal que:


stackEntry pop(Stack*s)
{
if(isEmpty(*s)){printf("error: stack empty\n"); return -1;}
        stackEntry dato = s->data[s->index--];
printf("\npop: %d\n",dato);
return dato;
}


Y para rematar unos consejos:

* no pongas varias instrucciones en la misma línea... queda feo, generas código menos legible y que además es más complicado de depurar y no vas a ganar espacio. Una línea, una instrucción... hazme caso que lo vas a agradecer.

* Elimina variables sin uso: no aportan nada al código y dificultan su lectura: i, op2, type.

Un saludo.

#932
Programación C/C++ / Re: imprimir basura
22 Septiembre 2013, 08:54 AM
Cita de: m@o_614 en 21 Septiembre 2013, 00:07 AM
Saludos eferion ya pude por fin descubrir cual era el error, y es uno bien tonto porque cuando declare el vector lo declare como v[10] cuando en realidad le estaba diciendo que queria un vector con 11 elementos, que idiota!!

Como te dije... el código que ponías, por si solo, no provocaba fallos.

Me alegro de que hayas encontrado el fallo.

Un saludo.
#933
Y como haces para poder usar números tan grandes??

Ningún tipo nativo de c soporta tantas cifras... has programado tu el tipo nuevo o estás usando una librería externa??
#934
la librería no es propia de ningún entorno... es propia de cada compilador y de un sistema operativo ( windows )

si has instalado codeblocks con el compilador mingw... entonces tendrás la librería conio válida para dicho compilador... si has instalado codeblocks sin compilador tendrás que instalarte un compilador y, junto con el compilador, generalmente, tendrás las librerías.

Todo esto suponiendo que estés programando en windows... si estás en linux... mala suerte, tendrás que buscarte otra librería compatible.
#935
Programación C/C++ / Re: imprimir basura
20 Septiembre 2013, 17:37 PM
te sigo diciendo lo mismo... es código lo más que te puedo decir es que es extraño... tener un bucle (el de i) que solo va a tener una iteración... imagino que será por las pruebas que estás haciendo... pero no ayuda en absoluto.

El código que tienes ahí, por sí solo, no es dañino ni falla... otra cosa es el contenido de v y de n... y para eso dependerá de cómo se haya creado v y de cómo estés guardando los datos... además de cómo estás calculando n.
#936
Programación C/C++ / Re: imprimir basura
20 Septiembre 2013, 08:46 AM
Con solo este código es complicado decirte qué está mal... ya que esto son únicamente accesos a memoria... solo con eso no se puede saber si los accesos son correctos o no.
#937
A ese nivel se te presenta un problema: arquitecturas big endian vs little endian.

Si tomamos por ejemplo el número 0x10203040, en memoria se guardará así:

* big endian: 0x10 0x20 0x30 0x40
* little endian: 0x40 0x30 0x20 0x10

Si tu accedes a los registros con un tipo char 8 bits... notarás la diferencia porque en ese caso la memoria la vas a recorrer siempre de forma secuencial... mientras que si manejas tipos de 32 bits no vas a notar diferencias.
#938
En la práctica, y para lo que importa, no hay diferencias.

Te puedes encontrar con problemas a la hora de utilizar "tipos compuestos" (long long por ejemplo ) al usar el cast funcional ( el segundo tipo ).


long long dato = long long(variable); // error


En cualquier caso, si estás trabajando en c++ evita este tipo de cast y céntrate en los cast propios de c++, son más seguros y limpios.
#939
Programación C/C++ / Re: [Opiniones] Máquina virtual
18 Septiembre 2013, 07:15 AM
te has dado cuenta de que este foro concreto es de C / C++ y que tú estás poniendo ensamblador??
#940
Por cada new que pongas en tu código... tienes que poner otro delete. Lo que significa que la memoria no se va a liberar de forma automática y que cada nodo lo vas a tener que borrar tu de forma manual.

Puedes automatizar el proceso con un bucle... pero poco más.