Avatar billede hhdsleizer Nybegynder
20. februar 2005 - 20:16 Der er 11 kommentarer og
1 løsning

beregning med prioritet

Hej eksperter!
Jeg sidder med et lille projekt hvor jeg ville lave en lille lommeregner. I lommeregneren skal man kunne skrive et helt regnestykke i(fx: 3+4*5) og den skal så kunne fortælle resultatet. Dette kan jeg dog ikke få den til at gøre direkte og spørger derfor: Findes der en nem måde at få lavet beregninger som denne(også med flere tal:D) når selve beregningen ligger i en string og gerne skulle komme ud som et enkelt tal hvor der også er taget højde for prioritet sådan at 3+4*5 giver 23 og ikke 35

Sleizer
Avatar billede olebole Juniormester
20. februar 2005 - 20:48 #1
<ole>

Problemet er nok, du ikke kan matematik nok til at formulere opgaven. 3+5*5 er matematisk set noget vås. Du oplyser ikke programmet om, hvilken beregning ønsker du udført:
    (3+4)*5 = 35
    3+(4*5) = 23

Du må altså definere nøjagtig, hvordan der skal sættes parenteser, hvis brugeren ikke gør det ... og det skal være for samtlige beregningstyper, brugeren kan finde på at lave.
Mon ikke, det er bedre (og mere overkommeligt), at fodre programmet med korrekt matematisk syntaks?  ;o)

/mvh
</bole>
Avatar billede hhdsleizer Nybegynder
20. februar 2005 - 21:44 #2
ok.. det jeg have min lommeregner skal gøre er det samme som enhver normal lommeregner som t89 osv og som programmer som mathcad og lign. De finder selv ud af at fx division og multiplication har højere prioritet end fx noget så simpelt som at lægge 2 tal sammen. det samme vil jeg have min lommeregner til og tænkte at der måske fandtes en funktion til netop denne opgave. I disse programmer og på disse lommeregnere behøver man simpelthen ikke at indsætte paranteserne og dette vil jeg heller ikke have mine brugere skal.
Avatar billede olebole Juniormester
20. februar 2005 - 21:55 #3
Det afviger fra model til model, hvilken notation, de bygger på ... hvis du bruger en HP-lommeregner med omvend polsk notation, får du et andet resultat end du gør med en Taxas.
Det er ikke så simpelt, som du gerne vil gøre det til. Begge resultater (35 og 23) er matematisk korrekte, sålænge der ikke er sat parenteser - hvilket betyder, at både Texas' og HP's udregninger i virkeligheden er lige forkerte ... og lige rigtige.

Under alle omstændigheder kommer du på en overordentlig stor opgave, hvis du vil lave noget tilsvarende. Det er nok noget, du skal have den helt store pengepung frem for at få andre til at løse for dig  :)
Avatar billede roenving Novice
21. februar 2005 - 09:24 #4
-- man kunne også bruge eval(3+4*5) !-)
Avatar billede olebole Juniormester
21. februar 2005 - 19:42 #5
Ja, men det varmer kun i øjeblikket. Hvordan trækker jeg -4 fra 2?  :)

Taster jeg 2--4 ind på min Windows kalkulator, får jeg resultatet -2.
Prøver jeg eval(2--4) udløser det en fejl.
eval(2-(-4)) returnerer derimod helt korrekt 6
Avatar billede roenving Novice
22. februar 2005 - 01:07 #6
Mellemrum gør underværker, for det er jo klart, at fortolkeren læser det forfra, og først finder 2-- hvilket jo betyder dekrementér 2 (med 1), så står der lige pludselig et 4-tal, hvad dælen skal det bruges til ?-)

Men både eval(2- -4), eval(2 - - 4) og andre giver det (efter normale regneregler !-) korrekte resultat: 6 !o]
Avatar billede hhdsleizer Nybegynder
22. februar 2005 - 16:27 #7
fandt selv denne fantastiske funktion eval() gennem en google søgning mandag morgen hvor jeg sad med problemet. mht problemet med at trække et negativt tal fra et tal så er der ingen problemer da folk der vil anvende lommeregneren er gymnasieelver der er udmærket klar over at man ikke skriver 2--4 men derimod 2-(-4) eller 2+4. I dette tilfælde skal man bruge parantes eller ændre fortegn men i situationen 3+4*5 ser jeg ingen problemer med ikke at anvende parantes. Kan dog være at samtlige af mine lærere gennem tiden op gennem folkeskolen og gymnasiet på alle niveauer har taget fejl eller bare været for dovne..

hvis roenving ville ligge et svar så kan du få dine points

Sleizer
Avatar billede roenving Novice
22. februar 2005 - 16:50 #8
Oki '-)
Avatar billede roenving Novice
22. februar 2005 - 17:11 #9
-- og tak for point ;~}
Avatar billede olebole Juniormester
23. februar 2005 - 02:34 #10
Om dine lærere har taget fejl eller været for dovne - eller om du måske skulle have misforstået dem - kan jeg ikke afgøre. Derimod er jeg sikker på, at 3+4*5 ikke giver entydig, matematisk mening ... hvilket mit første indlæg jo også tydeligt viste.

Årsagen til misforståelsen kan evt. ligge samme sted som din brug af formen 'ligge' i den sidste linie.
Jeg formoder, dine lærere op gennem folkeskolen og gymnasiet alle har været helt på linie med dansklæreren 'Many', der i sin blog har oprettet dette dokument til ære for det omsiggribende syntaktiske problem:
  http://many.dk/pic/dkuv.gif  ;o)
Avatar billede roenving Novice
23. februar 2005 - 16:49 #11
>>ole

-- det er ikke rigtig, at 3+4*5 ikke giver entydig matematisk mening, for der er entydige prioriteringsregler, når forskellige operatorer bruges syntaktisk ligestillet !-)

-- og f.eks. i ovenstående eksempel er det i matematikken fastlagt, at en multiplikation har større prioritet, og derfor skal udføres før sammenlægningen ...

-- paranteserne har du _kun_ brug for, hvis du vil udføre noget i en anden rækkefølge, end den, som fremgår af reglerne !o]
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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