Prioridad y asociatividad de los operadores en C. (Programa propio)

Ver el tema anterior Ver el tema siguiente Ir abajo

Prioridad y asociatividad de los operadores en C. (Programa propio)

Mensaje por Daniel-fgets el Vie Abr 11, 2014 10:50 pm

Hola a todos y que tengan un muy buen día.
Como es mi primer consulta me voy a presentar::
Soy de Argentina y tengo 62 años, como comprenderán no voy a la facultad y la gente que conozco no tiene la más mínima idea lo que es la computadora y menos programar por lo tanto mi aprendizaje se basa en el libro con el cual estoy estudiando, google y mucha pero mucha consulta en los foros.-
El primer caso que voy a exponer es un programa que estoy haciendo para emular lo que hace el compilador cuando se declara una variable como esta.

Código:
int a = 3 * 5 + (9 - 2) + 5;

Esto es lo que logré hasta el momento:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#define MAS +

int main(void){
 char *cadena = "3 * 5 + (9 - 2) + 5", auxiliar[100]={'\0'}, aux[10][10], *inicio=NULL, *final=NULL, op;
 int i=0, longitud=0, j=0, resultado=0, k=0;
 
if ((inicio = strchr(cadena, '(')) && (final = strchr(inicio, ')'))){
 longitud = sprintf(auxiliar,"%.*s", (int) (final - (inicio +1)), inicio+1);
 for(; i<longitud; i++){
 if (auxiliar[i]!=' '){
 auxiliar[j] = auxiliar[i];
 j++;
}
 }
 auxiliar[j] = '\0';
 
}

 i=0;
 for (j=0,k=0;auxiliar[j];j++){
 if (isdigit(auxiliar[j])){
 aux[k][i]=auxiliar[j];
 i++;
 }
 if (!isdigit(auxiliar[j])){
 op=auxiliar[j];
 aux[k][i]='\0';
 i=0,k++;
 }
 }
 aux[k][i]='\0';

 switch(op){
 case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
 break;
 case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
 break;
 case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
 break;
 case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
 break;
 case'%':resultado = atoi(aux[0]) % atoi(aux[1]);
 break;
 }
 printf("\n resultado = %d", resultado);
 
i = k = -5;
 i = i MAS k;
 printf("\n resultado = %d", i);
 
printf("\n\n");
 return 0;
}

Lo que quiero hacer es reemplazar esta parte de tú código:

Código:
switch(op){
     case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
 break;
     case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
 break;
     case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
 break;
     case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
 break;
     case'%':resultado = atoi(aux[0]) % atoi(aux[1]);
 break;
}

Por algo como lo que pongo a continuación, voy a poner un ejemplo sólo como referencia (por supuesto no es la correcta).-

Código:
int operador[]={+,-,*,/,%};

Y llamarlo desde op.-

Espero que puedan interpretar lo que quiero hacer.

Saludos.
Daniel

Daniel-fgets
Cimarron
Cimarron

Mensajes : 1
Fecha de inscripción : 11/04/2014

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.