Autor
|
Tema: Prioridad y asociatividad de los operadores en C. (Programa propio) (Leído 6,297 veces)
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Hola a todos.- Leo, espero que no me hayas mal interpretado, lo mío era tan solo una sugerencia y te tomé como referencia porqué fue una idea del momento, lo que decís Eternal es muy cierto pero a alguien como Uds. que hacen una tarea tan loable e impagable disponiendo tanto tiempo al servicio de los demás sin más no creo que se les cruce por la cabeza el hecho de mentir, no por lo menos en este ámbito.-
Saludos. Daniel
No, seguro, pero los mismos usuarios pueden editar sus mensajes, por cierto ahora que lo veo no hay una opcion de mensaje o me confundi con otro foro o no existe, de ser lo ultimo te invito a que hagas la sugerencia en el subforo correspondiente, es buena.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola a todos. rir3760, espero me puedas explicar lo de la foto, no puedo encontrar la teoría suficiente y me parece de suma importancia aprender este trozo de sintaxis.- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Hola a todos. rir3760, espero me puedas explicar lo de la foto, no puedo encontrar la teoría suficiente y me parece de suma importancia aprender este trozo de sintaxis.-
...........................................
No soy rir pero intentaré hacerlo lo mejor posible.
La ini del final del sprintf indica desde que posición se van a incorporar los caracteres a la variable aux, mientras que (int) (fin - ini +1) da el total de caracteres que, a partir de la posición mencionada por ini, se añaden a aux.
Por ejemplo, para tener la salida:usaría:#include <stdio.h> #include <string.h> int main(void){ char *s = "3 * 5 + (9 - 2) + 5",aux[10]={'\0'}; char *ini,*fin; if ((ini = strchr(s, '(')) && (fin = strchr(ini, ')'))) sprintf(aux,"\n%.*s\n", (int) (fin - (ini +1)), ini+1); printf("%s",aux); return 0; }
¡¡¡¡ Saluditos! ..... !!!!
|
|
« Última modificación: 9 Abril 2014, 20:48 pm por leosansan »
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola a todos.- Leo, en primer lugar agradecerte por la explicación, de esa manera lo entendí perfectamente.- Lo que me trae ahora es: cómo puedo hacer para que la variable op se comporte como la macro MAS algo como. #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++){ aux[k][i]=auxiliar[j]; i++; } 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 ); return 0; }
resultado = atoi(aux[0]) MAS atoi(aux[1]); Espero que Uds. tengan alguna manera porque practiqué y busque en google y no puedo hallar la solución.- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Te funciona sin problemas:i = k = -5; i = i MAS k; seria:-5+(-5)=-10 O.K
En tu código y con macros sería:case'+':resultado = atoi(aux[0]) MAS atoi(aux[1]); break; case'-':resultado = atoi(aux[0]) MENOS atoi(aux[1]); ................................................
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola a todos. Leo no me interpretaste correctamente, lo que quiero hacer es reemplazar esta parte de tú 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).- int operador[]={+,-,*,/,%};
Y llamarlo desde opEspero que haya quedado más claro.- Saludos y un abrazo. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
lo que quiero hacer es reemplazar esta parte de tú 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).- int operador[]={+,-,*,/,%};
Y llamarlo desde opSi entiendo correctamente lo que buscas es una función similar a eval de javascript para evaluar una expresión almacenada en una cadena. En C no existe tal función, debes implementarla de forma manual con una sentencia por cada operador como vienes haciendo y para el caso puedes revisar los temas sobre evaluación de expresiones sencillas (hay varios temas relacionados en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programa tu propio login puzzle al estilo del windows 8
Java
|
Graphixx
|
3
|
4,121
|
26 Junio 2011, 00:30 am
por тαптяα
|
|
|
Programa con operadores.
Java
|
spyller
|
0
|
1,580
|
3 Septiembre 2012, 02:34 am
por spyller
|
|
|
Operadores, Prioridad y asociatividad en lenguaje C.
Programación C/C++
|
NOB2014
|
5
|
3,883
|
5 Abril 2014, 04:11 am
por NOB2014
|
|
|
Precargar un programa propio en imagen de Windows 10
« 1 2 »
Windows
|
zotter
|
18
|
7,309
|
4 Abril 2017, 22:51 pm
por Randomize
|
|
|
Controlar GoPro con tu propio programa
.NET (C#, VB.NET, ASP)
|
Meta
|
0
|
720
|
29 Junio 2024, 16:32 pm
por Meta
|
|