elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa en C : ¿Por qué me salen estos símbolos?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa en C : ¿Por qué me salen estos símbolos?  (Leído 5,828 veces)
racsoraul

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Programa en C : ¿Por qué me salen estos símbolos?
« en: 9 Junio 2012, 04:42 am »

Hola. Tengo el siguiente problema:
He creado este programa que es un Árbol de Expresión, y pues bueno, lee la expresión infija, luego la guarda en el árbol, luego realizando un recorrido en orden muestra el resultado de la expresión guardada. Pero mi problema es de que este programa lo codifiqué en Ubuntu, y ahi me corre bien luego de compilado, pero luego al probarlo en Windows, el programa me compila bien y todo, pero me muestra unos códigos extraños y además hace que la respuesta de la expresión sea errónea.
Aquí les muestro como se ve en Ubuntu:



Aquí les muestro lo que me saca en Windows:


Espero me puedan ayudar ya que es un royecto que me puede salvar la vida :S
Acá queda el código y gracias de antemano.

PD: En Ubuntu el IDE que usé para programar fue el Code::Blocks, el mismo utilicé en Windows para compilar el código.

Código
  1. /*El siguiente programa lee una expresión matemática, muestra los diferentes recorridos de la
  2. expresión (EnOrden, PreOrden y PostOrden) y luego evalúa dicha expresión mostrando el resultado final. */
  3.  
  4. #include<stdio.h>
  5. #include<conio.h>
  6. #include<stdlib.h>
  7. #include<math.h>
  8.  
  9. typedef char tipoDato;
  10.  
  11. struct nodo{
  12. tipoDato dato;
  13. struct nodo *izquierdo;
  14. struct nodo *derecho;
  15. };
  16. typedef struct nodo *Arbol;
  17.  
  18. void insExp(Arbol *a, tipoDato dato);
  19. void InOrden(Arbol a);
  20. void postOrden(Arbol a);
  21. void preOrden(Arbol a);
  22. int evaluar(Arbol a);
  23. int operar(int, int, char);
  24.  
  25. //Inicio del módulo principal.
  26. int main(){
  27. tipoDato exp[100]; int i=0,resul;
  28. Arbol raiz=NULL;
  29. printf("\nIngrese la expresion: ");
  30. while(exp[i]){
  31.     insExp(&raiz,exp[i]);
  32.     ++i;
  33. }
  34. printf("\n\nRECORRIDO POSTORDEN:\n");
  35. preOrden(raiz);
  36. printf("\n\nRECORRIDO INORDEN:\n");
  37. InOrden(raiz);
  38. printf("\n\nRECORRIDO POSTORDEN:\n");
  39. postOrden(raiz);
  40. resul=evaluar(raiz);
  41. printf("\n\nRESULTADO DE EXPRESION: %d\n\n",resul);
  42. for(i=0;i<=60;i++) printf("*");
  43. return 0;
  44. //Fin del módulo principal.
  45. }
  46.  
  47. void preOrden(Arbol a){
  48.    if(a!=NULL){
  49.    printf("%c",a->dato);
  50.    preOrden(a->izquierdo);
  51.    preOrden(a->derecho);
  52.    }
  53. }
  54.  
  55. void postOrden(Arbol a){
  56.    if(a!=NULL){
  57.    postOrden(a->izquierdo);
  58.    postOrden(a->derecho);
  59.    printf("%c",a->dato);
  60.    }
  61. }
  62.  
  63. void InOrden(Arbol a){
  64.    if(a!=NULL){
  65.    InOrden(a->izquierdo);
  66.    printf("%c",a->dato);
  67.    InOrden(a->derecho);
  68.    }
  69. }
  70. int evaluar(Arbol a){
  71.    int ope1, ope2;
  72.    if(a==NULL) return 0;
  73.    else if(a->izquierdo==NULL && a->derecho==NULL) return(a->dato-48);
  74.    else{
  75.        ope1=evaluar(a->izquierdo);
  76.        ope2=evaluar(a->derecho);
  77.        return(operar(ope1,ope2,a->dato));
  78.        }
  79. }
  80. int operar(int x, int y, char z){
  81.    int res;
  82.  
  83.    switch(z){
  84.    case '+':
  85.    res=x+y;
  86.    break;
  87.    case '-':
  88.    res=x-y;
  89.    break;
  90.    case '*':
  91.    res=x*y;
  92.    break;
  93.    case '^':
  94.    return pow(x,y);
  95.    break;
  96.    case '/':
  97.     if(y!=0)
  98. res=x/y;
  99. else
  100. puts("ERROR! division entre cero");
  101.     break;
  102.    }
  103.    return res;
  104. }
  105. //Inserción para Árbol de Expresión.
  106. void insExp(Arbol *a, tipoDato dato){
  107.    if(*a==NULL){
  108.       *a=malloc(sizeof(struct nodo));
  109.       if(*a!=NULL){
  110.           if(dato!='('){
  111.               (*a)->dato=dato;
  112.           }
  113.        (*a)->izquierdo=(*a)->derecho=NULL;
  114.       }
  115.       else printf("\nNo se pudo asignar memoria...CERRANDO APLICACION\n");
  116.    }
  117.    else{
  118.        if(dato=='('){
  119.           if((*a)->izquierdo==NULL)
  120.           insExp(&((*a)->izquierdo),dato);
  121.           else
  122.           insExp(&((*a)->derecho),dato);
  123.        }
  124.        else if(dato>=48 && dato<=57){
  125.            if((*a)->dato=='\0'){
  126.                insExp(&((*a)->izquierdo),dato);
  127.            }
  128.            else
  129.            insExp(&((*a)->derecho),dato);
  130.        }
  131.        if(dato=='*' || dato=='+' || dato=='-' || dato=='/' || dato=='^'){
  132.            if((*a)->dato=='\0' && (*a)->derecho==NULL){
  133.                if((*a)->izquierdo->dato=='\0')
  134.                insExp(&((*a)->izquierdo),dato);
  135.                else
  136.                (*a)->dato=dato;
  137.            }
  138.            else{
  139.                if((*a)->izquierdo!=NULL && (*a)->derecho!=NULL){
  140.                    if((*a)->derecho->dato=='\0')
  141.                    insExp(&((*a)->derecho),dato);
  142.                    else
  143.                    (*a)->dato=dato;
  144.                }
  145.            }
  146.        }
  147.    }
  148. }


En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #1 en: 9 Junio 2012, 14:58 pm »

pues si para empezar inicializaras a zero o a algun valor conocido cuando haces esto: *a=malloc(sizeof(struct nodo));

Dejarían de salirte caracteres raros

Saludos


En línea

racsoraul

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #2 en: 9 Junio 2012, 16:32 pm »

Pues dado a que ese "*a" es una estructura, por ejemplo a qué lo podría igualar?? Ya qué lo podría inicializar en NULL, pero con eso ya no cumpliría la condición que le sucede a esa instrucción.

También hasta donde tengo entendido, al haber usado "malloc" para asignar memoria, no debería de haber problema.
« Última modificación: 9 Junio 2012, 16:46 pm por racsoraul » En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #3 en: 9 Junio 2012, 16:42 pm »

Pues dado a que ese "*a" es una estructura, por ejemplo a qué lo podría igualar?
Ya que hasta donde tengo entendido, al haber usado "malloc" para asignar memoria, no debería de haber problema.
no hay problema si le das valor a todos los miembros de la estructura, pero si no lo haces. tendran un valor no definido. malloc no le da ningún valor especifico. Puedes usar "ZeroMemory(*a,sizeof(struct nodo))"
con esto se inicia liza toda tu estructura a zero

Saludo
En línea

racsoraul

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #4 en: 9 Junio 2012, 16:49 pm »

Pero el inconveniente en este caso es de que al inicializar en "cero" la estructura, entonces ya no me cumpliría la condición posterior.
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #5 en: 9 Junio 2012, 16:59 pm »

si tu haces esto:

Código
  1.       *a=malloc(sizeof(struct nodo));
  2.       if(*a!=NULL){
  3.       ZeroMemory(*a,sizeof(struct nodo))
  4.           if(dato!='('){
  5.               (*a)->dato=dato;
  6.           }
  7.        (*a)->izquierdo=(*a)->derecho=NULL;
  8.       }
  9.  
No tienes problema con ninguna condición. si lo decías por ese primer if, no pasaría nada porque lo que tu estas testeando es el valor del puntero a la estructura y no su contenido que es lo que modifica ZeroMemory

Saludos
En línea

racsoraul

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #6 en: 9 Junio 2012, 17:15 pm »

:O Si, lo había entendido mal, gracias. Acabo de usar esa instrucción pero al compilar me da error....Qué librería debo de incluir para usar esa función?
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #7 en: 9 Junio 2012, 17:21 pm »

pues la de windows.h
Pero si lo prefieres mas estandar, usa memset

http://www.cplusplus.com/reference/clibrary/cstring/memset/

Saludos
En línea

racsoraul

Desconectado Desconectado

Mensajes: 5



Ver Perfil
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #8 en: 9 Junio 2012, 17:31 pm »

Muchísimas gracias man, ya me ha funcionado :) Me habéis salvado la vida.

Gracias!
En línea

fary
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.023



Ver Perfil WWW
Re: Programa en C : ¿Por qué me salen estos símbolos?
« Respuesta #9 en: 10 Junio 2012, 05:00 am »

muy bueno... grande Arkangel!!!
« Última modificación: 10 Junio 2012, 16:36 pm por mDrinky » En línea

Un byte a la izquierda.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch][Solucionado] COmo se llaman y para que sirven estos simbolos? « 1 2 »
Scripting
Dany3j 12 9,059 Último mensaje 26 Enero 2012, 21:21 pm
por Dany3j
me podrian ayudar no salen estos prgramas
Ejercicios
link276 0 1,812 Último mensaje 6 Mayo 2012, 23:24 pm
por link276
¿Qué son estos símbolos?
Dudas Generales
Linton 5 3,252 Último mensaje 8 Julio 2014, 14:01 pm
por #!drvy
Como saber el codigo ascii de simbolos como estos
Programación C/C++
gibranini 5 2,354 Último mensaje 21 Noviembre 2014, 21:41 pm
por ivancea96
Duda con estos símbolos
Bases de Datos
Mercau 0 602 Último mensaje 14 Mayo 2021, 04:03 am
por Mercau
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines