C/Visual C - Programa en C. ¿Por qué me salen estos símbolos?

   
Vista:

Programa en C. ¿Por qué me salen estos símbolos?

Publicado por Raúl Pleitez racsoraul@gmail.com (2 intervenciones) el 08/06/2012 06:01:00
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:
[IMG]http://i1061.photobucket.com/albums/t461/racsoraul/EnLinux.png[/IMG]


Aquí les muestro lo que me saca en Windows:
[IMG]http://i1061.photobucket.com/albums/t461/racsoraul/EnWindows.png[/IMG]

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 fué el Code::Blocks, el mismo utilicé en Windows para compilar el código.


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

Programa en C. ¿Por qué me salen estos símbolos?

Publicado por Tom (479 intervenciones) el 08/06/2012 10:29:50
Ummm ¿ Qué codificación de caracteres usas en Window$ ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa en C. ¿Por qué me salen estos símbolos?

Publicado por Tom (479 intervenciones) el 08/06/2012 10:49:25
En todo caso para hacer una prueba rápida ... cambia:
1
return(a->dato-48);

por
1
return(a->dato-'0');


y

1
if(dato>=48 && dato<=57)

por
1
if((dato >= '0') && (dato <= '9'))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa en C. ¿Por qué me salen estos símbolos?

Publicado por Raúl Pleitez racsoraul@gmail.com (2 intervenciones) el 09/06/2012 01:31:56
Probé haciendo esos cambios pero no me ha funcionado :S
Pues la codificación de Windows no estoy seguro, pero la de Ubuntu es UTF-8. Y pues lo que quiero es de que independientemente de la codificación que use Windows, debiera de funcionar, pero nada :S
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar