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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Prioridad y asociatividad de los operadores en C. (Programa propio)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Prioridad y asociatividad de los operadores en C. (Programa propio)  (Leído 6,216 veces)
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #10 en: 8 Abril 2014, 20:57 pm »

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 Desconectado

Mensajes: 366



Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #11 en: 9 Abril 2014, 16:55 pm »

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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #12 en: 9 Abril 2014, 20:46 pm »

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:



Citar
9 - 2

usaría:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5.  char *s = "3 * 5 + (9 - 2) + 5",aux[10]={'\0'};
  6.  char *ini,*fin;
  7.  if ((ini = strchr(s, '(')) && (fin = strchr(ini, ')')))
  8.    sprintf(aux,"\n%.*s\n", (int) (fin - (ini +1)), ini+1);
  9.  printf("%s",aux);
  10.  return 0;
  11. }

¡¡¡¡ Saluditos! ..... !!!!






« Última modificación: 9 Abril 2014, 20:48 pm por leosansan » En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #13 en: 10 Abril 2014, 23:51 pm »

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.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. #define MAS +
  7.  
  8. int main(void){
  9. char *cadena = "3 * 5 + (9 - 2) + 5", auxiliar[100]={'\0'}, aux[10][10], *inicio=NULL, *final=NULL, op;
  10. int i=0, longitud=0, j=0, resultado=0, k=0;
  11.  
  12. if ((inicio = strchr(cadena, '(')) && (final = strchr(inicio, ')'))){
  13. longitud = sprintf(auxiliar,"%.*s", (int) (final - (inicio +1)), inicio+1);
  14. for(; i<longitud; i++){
  15. if (auxiliar[i]!=' '){
  16. auxiliar[j] = auxiliar[i];
  17. j++;
  18. }
  19. }
  20. auxiliar[j] = '\0';
  21.  
  22. }
  23.  
  24. i=0;
  25. for (j=0,k=0;auxiliar[j];j++){
  26. if (isdigit(auxiliar[j])){
  27. aux[k][i]=auxiliar[j];
  28. i++;
  29. }
  30. if (!isdigit(auxiliar[j])){
  31. op=auxiliar[j];
  32. aux[k][i]='\0';
  33. i=0,k++;
  34. }
  35. }
  36. aux[k][i]='\0';
  37.  
  38. switch(op){
  39. case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
  40. break;
  41. case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
  42. break;
  43. case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
  44. break;
  45. case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
  46. break;
  47. case'%':resultado = atoi(aux[0]) % atoi(aux[1]);
  48. break;
  49. }
  50. printf("\n resultado = %d", resultado);
  51.  
  52. i = k = -5;
  53. i = i MAS k;
  54. printf("\n resultado = %d", i);
  55.  
  56. printf("\n\n");
  57. return 0;
  58. }

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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #14 en: 11 Abril 2014, 14:25 pm »


Te funciona sin problemas:

Código
  1. i = k = -5;
  2. i = i MAS k;
  3.  
  4.  
  5. seria:-5+(-5)=-10  O.K

En tu código y con macros sería:

Código
  1. case'+':resultado = atoi(aux[0]) MAS atoi(aux[1]);
  2.  break;
  3. case'-':resultado = atoi(aux[0]) MENOS atoi(aux[1]);
  4. ................................................

¡¡¡¡ Saluditos! ..... !!!!



En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #15 en: 11 Abril 2014, 15:57 pm »

Hola a todos.
Leo no me interpretaste correctamente, lo que quiero hacer es reemplazar esta parte de tú código:

Código
  1. switch(op){
  2. case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
  3. break;
  4. case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
  5. break;
  6. case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
  7. break;
  8. case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
  9. break;
  10. case'%':resultado = atoi(aux[0]) % atoi(aux[1]);
  11. break;
  12. }

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
  1. int operador[]={+,-,*,/,%};
Y llamarlo desde op

Espero 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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Prioridad y asociatividad de los operadores en C. (Programa propio)
« Respuesta #16 en: 13 Abril 2014, 15:38 pm »

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

Código
  1. switch(op){
  2. case'+':resultado = atoi(aux[0]) + atoi(aux[1]);
  3. break;
  4. case'-':resultado = atoi(aux[0]) - atoi(aux[1]);
  5. break;
  6. case'*':resultado = atoi(aux[0]) * atoi(aux[1]);
  7. break;
  8. case'/':resultado = atoi(aux[0]) / atoi(aux[1]);
  9. break;
  10. case'%':resultado = atoi(aux[0]) % atoi(aux[1]);
  11. break;
  12. }

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
  1. int operador[]={+,-,*,/,%};
Y llamarlo desde op
Si 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
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa tu propio login puzzle al estilo del windows 8
Java
Graphixx 3 4,099 Último mensaje 26 Junio 2011, 00:30 am
por тαптяα
Programa con operadores.
Java
spyller 0 1,571 Último mensaje 3 Septiembre 2012, 02:34 am
por spyller
Operadores, Prioridad y asociatividad en lenguaje C.
Programación C/C++
NOB2014 5 3,851 Último mensaje 5 Abril 2014, 04:11 am
por NOB2014
Precargar un programa propio en imagen de Windows 10 « 1 2 »
Windows
zotter 18 7,245 Último mensaje 4 Abril 2017, 22:51 pm
por Randomize
Controlar GoPro con tu propio programa
.NET (C#, VB.NET, ASP)
Meta 0 657 Último mensaje 29 Junio 2024, 16:32 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines