Dette semesteret har jeg blant annet C++ programmering og jeg bestemte meg derfor for å ta opp ett prosjekt jeg begynte på for en god tid tilbake. En standard komandolinje kalkulator.
Ikke veldig spennende, men artig nok å programmere. Litt mer givende en oppgavene vi får i lekse.
Anyway, nå har jeg kommet til ett lite dilemma, for jeg lurer litt på prioritering og slik. Jeg følger matematiske regler, men jeg kom til å tenke over dette stykket:
1/2(1+5)
Normalt står det jo gangetegn mellom 2 og parentes. Skal dette dermed tolkes slik:
(1/2)*(1+5)
Eller slik:
1/(2*(1+5))
Vil det være en praktisk forskjell på:
1/2(1+5) og 1/2*(1+5)?
C++ kalkulator
Moderators: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa
1/2(1+5) skal alltid tolkes som [tex]\frac12(1+5)[/tex]
1/2(1+5) og 1/2*(1+5) er nøyaktig det samme.
1/2(1+5) og 1/2*(1+5) er nøyaktig det samme.
http://projecteuler.net/ | fysmat
Ah, sweet! Det var det jeg trodde. Da slipper jeg å legge inn unntaksregler i forhold til måten det løses på nå. Takker 

Fry: Hey, professor. Which course do you teach?
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.
Er ikke så veldig ofte det problemet oppstår, siden man gjerne vet hva som ganges og deles og hva som er brøker, men hvis man får dette regnestykke.
1/2*3
Er det da
0.5*3 = 1.5
eller
1/6 [symbol:tilnaermet] 0.16667?
Multiplikasjon og divisjon er likestilte operasjoner, og det skal ikke ha noe å si hvilken rekkefølge man gjør dem i (som vanligvis stemmer). Dette tilfellet er egentlig en svakhet i notasjonen vi bruker.
Det som regnes som riktig er det første tilfellet, og hvis man sikter til det andre, skal det markeres med parenteser. Altså er
1/2*3 = (1/2)*3 = 3/2 og 1/(2*3) = 1/6
Litt verre blir det hvis vi står oppstilt med følgende:
1/2(3)
Slår du inn dette på en grafisk kalkulator, vil den utføre multiplikasjonen 2*3 siden parenteser regnes før multiplikasjon/divisjon. Da vil du altså få 1/6 som svar.
Slår du inn dette på maple derimot, får du igjen 3/2, antagelig fordi den tolker 1/2 som en brøk.
Den store moralen er at man alltid bør samle regneoperasjoner i nevnere (eller divisorere) i egne parenteser.
Men det blir et litt nytt problem for den stakkaren som skal lage en C++ kalkulator.
1/2*3
Er det da
0.5*3 = 1.5
eller
1/6 [symbol:tilnaermet] 0.16667?
Multiplikasjon og divisjon er likestilte operasjoner, og det skal ikke ha noe å si hvilken rekkefølge man gjør dem i (som vanligvis stemmer). Dette tilfellet er egentlig en svakhet i notasjonen vi bruker.
Det som regnes som riktig er det første tilfellet, og hvis man sikter til det andre, skal det markeres med parenteser. Altså er
1/2*3 = (1/2)*3 = 3/2 og 1/(2*3) = 1/6
Litt verre blir det hvis vi står oppstilt med følgende:
1/2(3)
Slår du inn dette på en grafisk kalkulator, vil den utføre multiplikasjonen 2*3 siden parenteser regnes før multiplikasjon/divisjon. Da vil du altså få 1/6 som svar.
Slår du inn dette på maple derimot, får du igjen 3/2, antagelig fordi den tolker 1/2 som en brøk.
Den store moralen er at man alltid bør samle regneoperasjoner i nevnere (eller divisorere) i egne parenteser.
Men det blir et litt nytt problem for den stakkaren som skal lage en C++ kalkulator.

An ant on the move does more than a dozing ox.
Lao Tzu
Lao Tzu
Jeg trodde det var slik at hvis det var to med lik prioritet ved siden av hverandre, så praktiserte man venstre til høyre.
Min kalkulator regner ihvertfall 1/2(3) "riktig", altså 1.5
</skryt>
Min kalkulator regner ihvertfall 1/2(3) "riktig", altså 1.5

</skryt>
Fry: Hey, professor. Which course do you teach?
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.
Du kan godt ta det fra venstre til høyre, fordi vanligvis har det ingenting å si hvilken rekkefølge man tar det i.
3*8/2
24/2 = 12
eller
3*4 = 12
Du har forresten også matlab som krever at man skal ha med operasjoner. Du får m.a.o feilmelding på
1/2(3)
Men 1/2*(3) = 1.5 i matlab, som er vanlig konvensjon på så og si alle programmer.
3*8/2
24/2 = 12
eller
3*4 = 12
Du har forresten også matlab som krever at man skal ha med operasjoner. Du får m.a.o feilmelding på
1/2(3)
Men 1/2*(3) = 1.5 i matlab, som er vanlig konvensjon på så og si alle programmer.
An ant on the move does more than a dozing ox.
Lao Tzu
Lao Tzu
Interessant. Det kunne jo være artig å legge inn syntaks-sjekk, i stedenfor å auto-fullføre slik programmet gjør nå. Den legger inn * tegn automatisk forran parentes hvis ikke annet er oppgitt, og legger til parenteser i slutten dersom ikke alle er avsluttet.Markonan wrote: Du har forresten også matlab som krever at man skal ha med operasjoner. Du får m.a.o feilmelding på
1/2(3)
Men 1/2*(3) = 1.5 i matlab, som er vanlig konvensjon på så og si alle programmer.
Takker for tips

Fry: Hey, professor. Which course do you teach?
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.
Professor Hubert Farnsworth: Mathematics in quantum neutrino fields. I chose the name myself to scare away any students.