Algoritmar
Innleiing
Du har lyst på ei brødskive med smør og tre brunostskiver. Du har ein ven som du vil be om å ordne brødskiva for deg.
![Papirlappar i ulike former og fargar med piler mellom. Foto.](https://api.ndla.no/image-api/raw/C9iQwCSn.jpg?width=1024)
Venen din er litt spesiell. Han gjer berre akkurat det du ber han om og absolutt ingenting anna. Venen veit godt korleis ein bruker ein ostehøvel og ein kniv, men han veit ikkje kva det betyr å lage ei brødskive med smør og tre brunostskiver. Det nyttar derfor ikkje å gi han denne instruksjonen: "Lag ei brødskive med smør og tre skiver med brunost."
Venen må ha heilt presise instruksjonar om korleis han skal gå fram for å lage brødskivene. Instruksjonane må kome i rett rekkjefølgje. Først må du beskrive oppgåva/problemet.
Beskriving av oppgåva
På eit bord ligg det
- ein pose med oppskorne brødskiver
- ein ostehøvel
- ein pakke med smør
- ein pakke med brunost klar til å skjere frå
- ein kniv
Den spesielle venen din skal lage ei brødskive med smør og tre skiver med brunost ut frå det som ligg på bordet.
Du må no gi venen din ei presis beskriving eller instruksjonar om korleis han skal gå fram. Ei slik beskriving eller sett av instruksjonar kallar vi ein algoritme.
Algoritme
Ein algoritme er eit sett av trinnvise instruksjonar i ei bestemd rekkjefølgje som er laga for å oppnå noko.
Oppgåve
Prøv å lage så presise instruksjonar som mogleg til jobben med å lage ei brødskive med smør og tre skiver med brunost. Få nokon andre til å sjå på instruksjonane og vurdere om dei er presise nok for ein som er heilt uvitande til å gjere jobben.
Løysingsforslag
Her er det ikkje noko eksakt fasitsvar, men instruksjonsrekkja, algoritmen, kan sjå slik ut:
- Ta ut ei brødskive frå brødposen, og legg ho med flatsida ned.
- Ta kniven, og overfør smør frå smørpakken til knivbladet.
- Overfør smøret frå knivbladet til den sida av brødskiva som vender opp.
- Ta ostehøvelen, og skjer ei skive med brunost.
- Legg brunostskiva på brødet på den sida som har smør.
- Ta ostehøvelen, og skjer ei skive med brunost.
- Legg brunostskiva på brødet på den sida som har smør.
- Ta ostehøvelen, og skjer ei skive med brunost.
- Legg brunostskiva på brødet på den sida som har smør.
Vi må repetere instruksjonane om å skjere ei skive med brunost og å leggje brunostskiva på brødet tre gonger sidan vi skal ha tre brunostskiver. I eit programmeringsspråk vil det heldigvis vere kommandoar vi kan bruke slik at vi slepp å skrive den same instruksjonen mange gonger.
Den ferdige instruksjonen for å lage brødskiva seier vi er ein algoritme for å lage ei brødskive med smør og tre skiver med brunost.
Tenk over
Er denne algoritmen presis nok? Korleis kan du vite at venen din tek ei passeleg mengde smør på skiva? Kan du gjere algoritmen meir presis?
Kommentar
Vi har eigentleg ikkje formulert problemet godt nok. Problemet vårt er at vi ønskjer å få laga ei brødskive med smør og tre skiver med brunost. "Ei brødskive med smør og tre skiver med brunost" seier ikkje noko om kor mykje smør som skal brukast. Den andre instruksjonen i algoritmen ovanfor kunne kanskje ha vore slik:
- Ta kniven, og overfør ei mengde smør omtrent så stor som det ytste leddet på langfingeren til ein vaksen frå smørpakken til knivbladet.
Algoritmar og dataprogram
Datamaskiner liknar mykje på den spesielle venen i eksempelet over. Dei er fenomenalt gode til å gjere ein del enkle oppgåver, som til dømes å addere, subtrahere, multiplisere og dividere tal – og dei gjer desse oppgåvene raskt! Vi må gi presise kommandoar som fortel kva maskinene skal gjere. Derfor er det viktig å setje opp gode algoritmar når vi skal programmere.
Datamaskiner har òg godt minne. Dersom vi fortel ei maskin at "lengde = 6" og "breidde = 8", så hugsar maskina det. Etterpå kan vi be maskina rekne ut lengde multiplisert med breidde, og maskina reknar ut .
Eit enkelt eksempel
Utgangspunkt: Vi ønskjer å få datamaskina til å rekne utfor oss. Sidan vi skal øve oss på å programmere, ønskjer vi å lage eit program som reknar ut svaret for oss.
Oppgåve
Skriv instruksjonane eller algoritmen med ord om kva programmet skal gjere, og forklar kvifor det ikkje er nok å be programmet multiplisere tala 6 og 8 med kvarandre.
Løysing
Algoritmen kan sjå slik ut:
- Multipliser tala 6 og 8 med kvarandre.
- Skriv resultatet av multiplikasjonen til dataskjermen.
Vi må ha med den andre instruksjonen, elles får vi ikkje greie på resultatet av multiplikasjonen. Det er lett å tenkje at det er opplagt at svaret skal skrivast til skjermen, men vi må gi datamaskina instruksjon om å gjere det, elles blir svaret ein godt lagra løyndom i det indre av datamaskina.
Det neste steget blir å lage programmet, det vil seie å bruke eit programmeringsspråk til å få gjort desse to instruksjonane i algoritmen. Vi seier òg at vi må setje om instruksjonane til programkode. Det kan du lese meir om på sida "Variablar, matematiske operatorar og funksjonen print()". Først bør du prøve deg på oppgåvene der du blir bedd om å lage algoritmar for ulike ting.