Hopp til innhold
SubjectMaterialFagstoff

Fagartikkel

Algoritmer

Hva er en algoritme, og hvordan lager vi presise instruksjoner?

FooterHeaderIconFooter iconLK20

Innledning

Papirlapper i ulike former og farger med piler mellom. Foto.

En mulig visualisering av en algoritme, altså et sett av instruksjoner der rekkefølgen på instruksjonene er viktig

Du har lyst på ei brødskive med smør og tre brunostskiver. Du har en venn som du vil be om å ordne brødskiva for deg.

Vennen din er litt spesiell. Han gjør bare akkurat det du ber ham om og absolutt ingenting annet. Vennen vet godt hvordan man bruker en ostehøvel og en kniv, men han vet ikke hva det betyr å lage ei brødskive med smør og tre brunostskiver. Det nytter derfor ikke å gi ham denne instruksjonen: "Lag ei brødskive med smør og tre skiver med brunost."

Vennen må ha helt presise instruksjoner om hvordan han skal gå fram for å lage brødskivene. Instruksjonene må komme i rett rekkefølge. Først må du beskrive oppgaven/problemet.

Beskrivelse av oppgaven

På et bord ligger det

  • en pose med oppskårne brødskiver
  • en ostehøvel
  • en pakke med smør
  • en pakke med brunost klar til å skjære fra
  • en kniv

Den spesielle vennen din skal lage ei brødskive med smør og tre skiver med brunost ut fra det som ligger på bordet.

Du må nå gi vennen din en presis beskrivelse eller instruksjoner om hvordan han skal gå fram. En slik beskrivelse eller sett av instruksjoner kaller vi en algoritme.

Algoritme

En algoritme er et sett av trinnvise instruksjoner i en bestemt rekkefølge som er lagd for å oppnå noe.

Oppgave

Prøv å lage så presise instruksjoner som mulig til jobben med å lage ei brødskive med smør og tre skiver med brunost. Få noen andre til å se på instruksjonene og vurdere om de er presise nok for en som er helt uvitende til å gjøre jobben.

Løsningsforslag

Her er det ikke noe nøyaktig fasitsvar, men instruksjonsrekken, algoritmen, kan se slik ut:

  • Ta ut ei brødskive fra brødposen, og legg den med flatsiden ned.
  • Ta kniven, og overfør smør fra smørpakken til knivbladet.
  • Overfør smøret fra knivbladet til den siden av brødskiva som vender opp.
  • Ta ostehøvelen, og skjær en skive med brunost.
  • Legg brunostskiva på brødet på den siden som har smør.
  • Ta ostehøvelen, og skjær en skive med brunost.
  • Legg brunostskiven på brødet på den siden som har smør.
  • Ta ostehøvelen, og skjær en skive med brunost.
  • Legg brunostskiven på brødet på den siden som har smør.

Vi må repetere instruksjonene om å skjære en skive med brunost og å legge brunostskiven på brødet tre ganger siden vi skal ha tre brunostskiver. I et programmeringsspråk vil det heldigvis være kommandoer vi kan bruke slik at vi slipper å skrive den samme instruksjonen mange ganger.

Den ferdige instruksjonen for å lage brødskiva sier vi er en algoritme for å lage ei brødskive med smør og tre skiver med brunost.

Tenk over

Er denne algoritmen presis nok? Hvordan kan du vite at vennen din tar en passelig mengde smør på skiven? Kan du gjøre algoritmen mer presis?

Kommentar

Vi har egentlig ikke formulert problemet godt nok. Problemet vårt er at vi ønsker å få lagd ei brødskive med smør og tre skiver med brunost. "Ei brødskive med smør og tre skiver med brunost" sier ikke noe om hvor mye smør som skal brukes. Den andre instruksjonen i algoritmen ovenfor kunne kanskje ha vært slik:

  • Ta kniven, og overfør en mengde smør omtrent så stor som det ytterste leddet på langfingeren til en voksen fra smørpakken til knivbladet.

Algoritmer og dataprogrammer

Datamaskiner ligner mye på den spesielle vennen i eksempelet over. De er fenomenalt gode til å gjøre en del enkle oppgaver, som for eksempel å addere, subtrahere, multiplisere og dividere tall – og de gjør disse oppgavene raskt! Vi må gi presise kommandoer som forteller hva maskinene skal gjøre. Derfor er det viktig å sette opp gode algoritmer når vi skal programmere.

Datamaskiner har også godt minne. Dersom vi forteller en maskin at "lengde = 6" og "bredde = 8", så husker maskinen det. Etterpå kan vi be maskinen regne ut lengde multiplisert med bredde, og maskinen regner ut 6·8=48.

Et enkelt eksempel

Utgangspunkt: Vi ønsker å få datamaskinen til å regne ut 6·8 for oss. Siden vi skal øve oss på å programmere, ønsker vi å lage et program som regner ut svaret for oss.

Oppgave

Skriv instruksjonene eller algoritmen med ord om hva programmet skal gjøre, og forklar hvorfor det ikke er nok å be programmet multiplisere tallene 6 og 8 med hverandre.

Løsning

Algoritmen kan se slik ut:

  • Multipliser tallene 6 og 8 med hverandre.
  • Skriv resultatet av multiplikasjonen til dataskjermen.

Vi må ha med den andre instruksjonen, ellers får vi ikke greie på resultatet av multiplikasjonen. Det er lett å tenke at det er opplagt at svaret skal skrives til skjermen, men vi gi datamaskinen instruksjon om å gjøre det, ellers blir svaret en godt lagret hemmelighet i det indre av datamaskinen.

Det neste steget blir å lage programmet, det vil si å bruke et programmeringsspråk til å få gjort disse to instruksjonene i algoritmen. Vi sier også at vi må omsette instruksjonene til programkode. Det kan du lese mer om på siden "Variabler, matematiske operatorer og funksjonen print()". Først bør du prøve deg på oppgavene der du blir bedt om å lage algoritmer for ulike ting.

Sist oppdatert 18.08.2020
Skrevet av Bjarne Skurdal og Olav Kristensen

Læringsressurser

Grunnopplæring i algoritmer og programmering