Skip to content

Instantly share code, notes, and snippets.

@bruno-galdino
Last active December 28, 2018 16:04
Show Gist options
  • Select an option

  • Save bruno-galdino/71f6f56cc459c8f57b4888c02d2bdd39 to your computer and use it in GitHub Desktop.

Select an option

Save bruno-galdino/71f6f56cc459c8f57b4888c02d2bdd39 to your computer and use it in GitHub Desktop.

Revisions

  1. Bruno Soares Galdino revised this gist Dec 28, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions eval.c
    Original file line number Diff line number Diff line change
    @@ -62,7 +62,7 @@ int *eval( char *begin, char *end )
    switch(*operator )
    {
    case '*': *result = *parcial1 * *parcial2; break;
    case '/': *result = if(!*parcial2) exit(0); *parcial1 / *parcial2; break;/*fecha o programa em divisão por zero*/
    case '/': if(!*parcial2) exit(0); *result = *parcial1 / *parcial2; break;/*fecha o programa em divisão por zero*/
    case '+': *result = *parcial1 + *parcial2; break;
    case '-': *result = *parcial1 - *parcial2; break;
    }
    @@ -80,7 +80,7 @@ int *eval( char *begin, char *end )
    int main(int argc, char const *argv[])
    {

    char exp[ ] = "40-3*6";/*não utilizar espaços em branco, a rotina não trata isso por enquanto*/
    char exp[ ] = "40-3*6/0";/*não utilizar espaços em branco, a rotina não trata isso por enquanto*/
    int *ret = eval( exp, exp + sizeof exp );

    if( ret )
  2. Bruno Soares Galdino revised this gist Dec 28, 2018. 1 changed file with 8 additions and 2 deletions.
    10 changes: 8 additions & 2 deletions eval.c
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,10 @@

    /*
    Bruno Soares Galdino
    avaliação de expressões aritméticas - em desenvolvimento
    */

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    @@ -56,7 +62,7 @@ int *eval( char *begin, char *end )
    switch(*operator )
    {
    case '*': *result = *parcial1 * *parcial2; break;
    case '/': *result = *parcial1 / *parcial2; break;/*tratar divião por 0*/
    case '/': *result = if(!*parcial2) exit(0); *parcial1 / *parcial2; break;/*fecha o programa em divisão por zero*/
    case '+': *result = *parcial1 + *parcial2; break;
    case '-': *result = *parcial1 - *parcial2; break;
    }
    @@ -74,7 +80,7 @@ int *eval( char *begin, char *end )
    int main(int argc, char const *argv[])
    {

    char exp[ ] = "40-3*6";
    char exp[ ] = "40-3*6";/*não utilizar espaços em branco, a rotina não trata isso por enquanto*/
    int *ret = eval( exp, exp + sizeof exp );

    if( ret )
  3. Bruno Soares Galdino created this gist Dec 28, 2018.
    86 changes: 86 additions & 0 deletions eval.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,86 @@

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <ctype.h>

    bool isValue( const char *exp )
    {
    while(isdigit(*exp++) );
    return !*(exp-1);
    }

    char *findNextOperator( char *exp )
    {
    char *aux = NULL;

    while( *exp )
    {
    if( *exp == '+' || *exp == '-' )
    {
    return exp;
    }
    else if( !aux && (*exp == '*' || *exp == '/') )
    {
    aux = exp;
    }
    exp++;
    }

    return aux;
    }

    int *eval( char *begin, char *end )
    {
    char temp = *end;
    *end = '\0';
    int *result = NULL;
    int *parcial1,*parcial2;
    char *operator;

    if( isValue(begin) )
    {
    result = malloc(sizeof(int) );
    *result = atoi(begin);
    }
    else
    {
    operator = findNextOperator( begin );

    if( operator )
    {
    result = malloc(sizeof(int) );
    parcial1 = eval( begin, operator);
    parcial2 = eval( operator + 1, end);

    switch(*operator )
    {
    case '*': *result = *parcial1 * *parcial2; break;
    case '/': *result = *parcial1 / *parcial2; break;/*tratar divião por 0*/
    case '+': *result = *parcial1 + *parcial2; break;
    case '-': *result = *parcial1 - *parcial2; break;
    }

    free( parcial1);
    free( parcial2);
    }

    }

    *end = temp;
    return result;
    }

    int main(int argc, char const *argv[])
    {

    char exp[ ] = "40-3*6";
    int *ret = eval( exp, exp + sizeof exp );

    if( ret )
    {
    printf("%d",*ret);
    }

    return 0;
    }