Gå til innhold

Kalkulator med mer/mindre vektig


Anbefalte innlegg

God dag.

 

Har fått en oppgave på skolen om å lage en kalkulator som skal regne riktig med at 2+3*5 = 17 og ikke 25.

 

sliter litt med oppstarten her så lurte egentlig bare om noen har noen forslag til hvordan jeg kan gjøre dette!? :)

Å lage en kalkulator i seg selv er ikke noe problem, men det med at gang og dele, ifølge reglementet, skal gjøres først gjør ting litt vanskeligere. Man skal også ha mulighet til å gange og dele flere ganger forresten :)

 

Er altså ikke på jakt etter en ferdig løsning bare et lite "spark bak" ;)

 

Mvh. Sindre

Lenke til kommentar
Videoannonse
Annonse
Hint: Operatorprioritet. :whistle:

9295329[/snapback]

 

Hvordan er dette et spark bak?

 

EDIT: Trådstarter er jo klar over problemet, han sier det til og med indirekte når han sier "... skal regne riktig med at 2+3*5 = 17 og ikke 25." Han lurer vel på hvordan det kan gjøres.

Endret av Jaffe
Lenke til kommentar

I topicen skriver jeg også det med vektighet, så jeg er klar over det ja ;)

 

Lurer altså på hvordan jeg skal gjøre dette med å få kalkulatoren til FØRST regne ut 3*5 og DERETTER svar+2 :)

En kammerat vurderte noe sånnt som å putte alt inn i et array og deretter lese ut av dette og sette sammen regnestykket på riktig måte. Men jeg syntes det hørest forferdelig tungvindt ut og ikke at det blir helt riktig heller.. :(

Jah.. Et tips i riktig retning eller et forslag på hvordan løse problemt hadde vært kjekt :)

Lenke til kommentar

Jeg ser fortsatt ikke hvordan det skal gå. Hvordan skal dataene ligge i arrayet, og hvordan hjelper egentlig transform? Inndataene må fortsatt gjennomgås for å finne hva som skal gjøres først (* og /) osv., som egentlig bringer oss tilbake til utgangspunktet.

 

transform hadde kanskje egnet seg bedre om det bare var én operasjon som skulle utføres på en rekke tall.

Lenke til kommentar

Jeg tenkte at det kunne vært fint for meg å prøve dette også, for å lære litt, men for meg funker det med en gang.

 

Hvis du fortsatt sliter kan må du jo bare se på problemet rent matematisk da.

 

y = a+(b*c)

 

Bruk det formatet på formlen din og du får, med a = 2, b = 3 og c = 5, 17 som svar.

Lenke til kommentar

Jeg mener den absolutt beste løsningen på et slikt problem er å opprette et binært tre over utregningen. Jeg mener dette er kjappest, og det "riktigste" måten å løse det på.

 

Wrestling? Binære trær er da ingen heksekunst. Red/black og slikt er værre, men de binære er da ikke noe hokus pokus.

Lenke til kommentar
Jeg mener den absolutt beste løsningen på et slikt problem er å opprette et binært tre over utregningen.
Javel, jeg mener ikke det.

 

Jeg mener dette er kjappest, og det "riktigste" måten å løse det på.

9313190[/snapback]

Det vel ikke noen "riktig" måte? Og mener du at det er kjappest og skrive, eller at programmet blir kjappest?

 

Dette virker ihvertfall, og hvis du klarer og lage et program der du bruker et tre som er både kortere og raskere blir jeg mektig imponert.

#include <iostream>

using namespace std;

string  input;
char    look;
int     pos;

void next_char() {
   look = input[pos];
   pos += 1;
}

double number() {
   double value = 0;
   while (look >= '0' && look <= '9') {
       value = 10*value + (look-'0');
       next_char();
   }
   return value;
}

double muldiv() {
   double value = number();
   while ('*' == look) {
       next_char();
       value *= muldiv();
   }
   while ('/' == look) {
       next_char();
       value /= muldiv();
   }
   return value;
}

double addsub() {
   double value = muldiv();
   while ('+' == look) {
       next_char();
       value += addsub();
   }
   while ('-' == look) {
       next_char();
       value -= addsub();
   }
   return value;
}

double eval(string expr) {
   input = expr;
   pos   = 0;
   next_char();
   return addsub();
}

int main() {
   cout << eval("2+3*5") << endl;
   cout << eval("3*5+2") << endl;
   system("pause");
   return EXIT_SUCCESS;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...