Avatar billede menthos Nybegynder
24. februar 2007 - 17:09 Der er 9 kommentarer og
1 løsning

hjælp til lommeregner

jeg er ved at lave en lommeregner, og vil gerne have at man kan skrive en hel linje f.eks. 2+3*4/4093*sin(34)/ln(3)
men hvordan får jeg den til at regne det ud?
jeg har indtil videre kun lavet en som der virker ved at man skriver hvad man vil gøre, en ting ad gangen:
#include <stdio.h>

main() {
    char line[100];
    int result;
    char operat;
    int value;
    result = 0;
    while (1) {
          printf("result: %d\n", result);
          printf("enter operator and number: ");
         
          fgets(line, sizeof(line), stdin);
          sscanf(line, "%c %d", &operat, &value);
         
          if ((operat == 'q') || (operat == 'Q'))
          break;
          switch (operat) {
                case '+':
                      result += value;
                      break;
                case '-':
                      result -= value;
                      break;
                case '*':
                      result *= value;
                      break;
                case '/':
                      if (value == 0) {
                        printf("error: divide by zero\n");
                        printf("  operation ignored\n");
                      } else
                        result /= value;
                        break;
                default:
                      printf("unknown operator %c\n", operat);
                      break;
                }
          }
return(0)
}

den er meget simpel lige nu men vil jo ikke begynde og lave videre på den når den skal laves helt om hvis den skal regne det hele ud på en linje
Avatar billede arne_v Ekspert
24. februar 2007 - 17:53 #1
det er jo en klassiker

metoden er:

1) konvertere streng til array af items
2) konverter array af items fra infix til postfix
3) evaluer
Avatar billede arne_v Ekspert
24. februar 2007 - 17:54 #2
2+3*4/4093*sin(34)/ln(3)

skal udregnes som

2 3 4 * 4093 / 34 sin * 3 ln / +
Avatar billede arne_v Ekspert
24. februar 2007 - 17:54 #3
hvis du kender HP lommeregnere giver det mening
Avatar billede kdt217 Nybegynder
24. februar 2007 - 17:55 #4
Du kan jo blot bruge google.com :-)

2 + ((((3 * 4) / 4 093) * sin(34)) / ln(3)) = 2.00141195

i søgefeltet.
Avatar billede menthos Nybegynder
24. februar 2007 - 18:24 #5
arne v: har du en tutorial der kan hjælpe mig for kan ikke helt følge dig i hvad du mener?
jeg har prøvet at ligge det hvad brugeren skriver ind i en "char regne[200];" men ved ikke helt hvordan jeg kan komme videre derfra...
Avatar billede arne_v Ekspert
24. februar 2007 - 18:39 #6
det kan faktisk godt være lidt heftigt

jeg har noget gammelt kode liggende her http://www.vajhoej.dk/arne/eksperten/expre/

tutorial ?

http://www.codepedia.com/1/Art_Expressions_p1 måske
Avatar billede menthos Nybegynder
24. februar 2007 - 18:42 #7
dit øverste link virker ikke
men vil begynde og læse det andet link du sendte
Avatar billede arne_v Ekspert
24. februar 2007 - 23:06 #8
Avatar billede menthos Nybegynder
25. februar 2007 - 12:50 #9
ja det hjalp lidt.. vil prvøe og kigge lidt på det...
fandt også nogle dokumenter om hvordan man converter infix til post fix og hvordan man evaluerer postfix, så det må jeg læse lidt på :)
http://www.cis.temple.edu/~koffman/cis223/InfixToPostfix.doc
http://www.cis.temple.edu/~koffman/cis223/EvaluatingPostfix.doc

men smid et svar, så får du point
Avatar billede arne_v Ekspert
25. februar 2007 - 14:39 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester