Laboration 2 - Funktioner
Datorns ettor och nollor
I filen binary.m finns ett programskelett för att arbeta med binära tal.
Laborationen och det arbete du utför gör du i filen binary.m
.
Börja därför med att kopiera den till ditt konto och läs igenom filen noga.
I filen finns kommentarer för att vägleda ditt arbete.
OBS! Du behöver bara göra för positiva heltal!
Uppgift 1: Konvertera ett decimalt positivt heltal till ett binärt och vice versa
Under den andra övningen delades papper ut om det binära och det decimala talsystemet, läs igenom det.
Har du inte pappret så finns det i en låda i utdelningsrummet BREDVID studentexp. på Osquars backe 2, plan 2.
I filen ser du att funktionerna dec2bin
och bin2dec
anropas i huvudfunktionen binary
.
Lite längre ned i filen är funktionerna påbörjade och din uppgift är nu att skriva färdigt dem.
Till exempel så är det decimala talet 11
i det binära talsystemet 1 0 1 1
.
I detta program representeras de binära talen av vektorer. Detta innebär att anropet dec2bin(23)
returnerar vektorn [1 0 1 1 1]
OBS! Du behöver bara göra för positiva heltal!
Testa dina funktioner vartefter de blir klara. Redovisa vilka test du gjort och motivera ditt val av testdata.
Gör också en omvandling decimalt -> binärt -> decimalt
tal.
Programmeringstips:
När man skrivit färdigt en funktion testar man den. Dokumentera testerna noga!
Lägg märke till att funktionernas kommentarer beskriver vad respektive funktion gör INTE hur.
Uppgift 2: Addition av binära tal
Skriv nu funktionen binAdd
som adderar två binära tal och returnerar summan.
Exempelvis ger anropet binAdd([1 0 1 1],[1 0 1 1])
vektorn [0 1 0 1 1 0]
i retur.
Räknereglerna för binär addition är:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0
och 1
i minnet
Observera att den sista additionen är att jämföra med t.ex. 7+8
i det decimala talsystemet då vi
får 5
och sparar ett i minnet för tio-talet.
Låt de binära talen ha 6 positioner i vektorn. De binära talen sägs då bestå av 6 bitar.
En bit är antingen noll eller ett. Inför 6 bitars vektor i funktionen binAdd
, dvs om additionen utförs av
talet [1 0 1 1]
så förlängs vektorn med nollelement till vektorn: [0 0 1 0 1 1]
.
Testa funktionen där den motsvarande decimala addition är 11 + 3
, 7 + 23
och 45 + 45
.
Stämmer resultaten? Motivera varför!
Uppgift 3: Typmärkning
För att tydliggöra att vi arbetar med binära tal låter vi typmarkera dem.
I detta fall innebär det att siffran 2
markerar ett binärt tal. I praktiken förlängs varje binär vektor med typen (=2)
som läggs i vektorns första position och som följs av talets värde.
I denna uppgift arbetar vi med 6 bitars binära tal.
Till exempel blir det decimala talet 23
med den typmarkerade 6-bitars respresentationen
[2 0 1 0 1 1 1]
och det decimala talet
11
blir [2 0 0 1 0 1 1]
.
Till vår hjälp har vi de tre grundfunktionerna makeNumber
, getType
och getValue
.
Skriv funktionen makeBin
med hjälp av makeNumber
.
Anropet makeBin([1 0 1 1])
resulterar i [2 0 0 1 0 1 1]
.
Skriv funktionen getBinary
med eventuell hjälp av grundfunktionerna.
Anropet getBinary([2 0 0 1 0 1 1])
resulterar i [0 0 1 0 1 1]
.
Uppgift 4: Addition av binära tal, del 2
Skriv en ny funktion som adderar två binära tal som använder den nya typrepresentationen från uppgift 3.
Uppgift 5: Ändra representation
Istället för att representera ett binärt tal med typ och värde ändras nu representationen till värde och typ.
Genomför nödvändiga ändringar i koden!
Får du samma resultat som tidigare? Motivera noga!!!
Om du är tvungen att ändra på många ställen i koden har du gjort fel och måste göra om!
Tänk noga igenom fördelar och nackdelar med vad du gjort, hur du använt funktioner, gjort tester och dokumenterat.
Laboration 2 har gjorts av
namn ..................................................................persnr.............................som godkänts av .............................................................. den .................
Upp till kurssidan.
Sidansvarig: carina snabela nada.kth.se
Senast ändrad 10 september 2009
Tekniskt stöd: <webmaster@nada.kth.se>