Dataprogram

27 mars 2015

Eit dataprogram er ein samling av instruksjonar til ein datamaskin. Sagt på ein litt vanskeligare måte kan vi sei at det er ein algoritme som er skrive i eit bestemt programmeringsspråk i henhold til bestemte ein bestemt syntaks. La oss sjå litt på kva disse orda betyr.

Algoritme

Ein algoritme kan kallast for ein mekanisk og fullstendig beskrivelse av løysinga av eit problem. Det typiske eksempelet er ei matoppskrift. Mekanisk betyr det same som automatisk. Det vil sei at vi kan bruka ein datamaskin for å løysa det. Og eit typisk eksempel på ei oppgave som ein datamaskin er god på er td. å finna summen av alle naturlige tal frå 1 til N, altså sum = 1 + 2 + 3 + .... + N. Ein algoritme for dette* kan skrivast:


    Les N frå brukar
	sum = 0
	i = 1
    Så lenge i er mindre eller lik enn N, utfør {
		sum = sum + i	
		i = i + 1
	}
	Skriv ut sum
	

Dette er skrive i det som kallast pseudokode. Det ein blanding av programkodeliknande instruksjonar og vanlig språk, og har ingen bestemte reglar sidan den bare skal lesast av mennesker. Men dei som bruker det må likevel vera enige om reglane. Så her må vi då td. vera enige om at alt som er mellom klammeparentesane blir utført så lenge i er mindre enn N.

Flytdiagram

Av og til kan det vera nyttig å beskriva algoritmen ved hjelp av eit flytdiagram. Så la oss gjera det med sum-algoritmen vår:

flytdiagram

Legg merke til at vi bruker ulike typar boksar for ulike funksjonar. Praksis kan variera, men her har vi brukt ovale boksar for start og stopp, rektangel for vanlig beregning mens innlesing og utskriving av data er representert ved parallellogram. Merk spesielt spørsmålsboksen med forgreining der vi spør om i er større enn N. Hvis svaret er ja går vi til høgre og stoppar. Hvis svaret er nei forset vi nedover. Etter den nederste boksen går vi opp i gjen til spørsmålsboksen. Dermed har vi laga ei løkke som fortset så lenge i ikkje er større enn N. Det blir det same som å sei "så lenge i er mindre eller lik N", som vi sa over.

Element

Det er ein del viktige element i eit program som vi skal merka oss:

Variable: Ein variabel er ein navngitt del av minnet der vi kan lagra ein verdi. Når vi gir ein variabel verdi, så seier vi at vi tilordnar variabelen denne verdien. Variablane i eksempelet vårt er N, sum og i. N blir gitt av brukaren, mens sum og i blir initialisert som henholdsvis 0 og 1. Når vi skriv sum = sum + i betyr at programmet først hentar verdiane av sum og i, adderer dei og legg svaret tilbake i sum. Etterpå blir verdien av i auka med 1. Dette kan i mange programmeringsspråk skrivast på ein meir kompakt måte. Datatypar: Ein variabel kan innehalda ulike datatypar. Her lagrar vi heiltal, men det kan også vera desimaltall eller eit tegn. I tillegg til dette fins det også meir komplekse datastrukturar som tabellar, tekststrenger mm.

Flytstruktur: Den kanskje viktigaste egenskapen til eit dataprogram er at det kan hoppa til andre stader i koden avhengig av bestemte betingelsar. Nærmare bestemt ser vi i eksempelet at vi sjekkar verdien av variabelen i. Hvis den er større enn N skriv vi ut sum og programmet stoppar. Hvis ikkje forset vi med å summera. Vi seier at flyten forgreiner seg. Uten forgreininger kunne eit program bare utføre same lista med operasjonar før det stoppar. No kan vi ha løkker som utfører same operasjon mange gonger, og vi kan ha ulike operasjonar som blir utført bare når spesielle betingelsar er oppfylt. Ei ulempe er at hvis ein ikkje er forsiktig kan ein kan programmet havna i ei evig løkke og aldri stoppa.

Funksjonar: Hvis vi finn ut at ein del av koden blir brukt mange stader i samme program, eller kanskje av mange ulike program, så er det lurare å putta den inn i ein funksjon. Ein funksjon treng som regel data inn, og gir oss data i retur. Vi kan feks tenkja oss ein funksjon som finn antal dagar i ein månad. La oss kalla den mndlengde(). Input til denne funksjonen kan då vera månadens nummer, altså eit tal mellom 1 og 12. (I verkeligheten treng vi år også, pga evt skuddår) Output vil då vera eit tal mellom 28 og 31. No kan vi kallar funksjonen vår med talet 3 som input: lengde = mndlengde(3) Då vil variabelen lengde få verdien 31.

Programmeringsspråk

Det fins mange programmeringsspråk. Eit av dei mest vanlige er javascript. Slik kan eksempelet vårt sjå ut i javascript:


	<script>
		var sum = 0
var i = 1 var N N = prompt("Skriv inn n") while (i <= N){ sum = sum + i i = i + 1 } document.write("<p> Summen er: " + sum) </script>

Her legg vi først merke til at måten javascript får input på er vha. funksjonen prompt, og ein måte å skriva ut svaret på er vha. document.write. Du kan kjøra dette programmet her. Men det som er viktigast å forstå er at, i motsetning til pesudokoden over, så må eit javascript skrivast nøyaktig i henhold til syntaks, dvs dei reglane som gjeld for språket. Kvart programmeringsspråk har sin egen syntaks, men det er ofte mange likheter slik at har du lært ett språk skikkelig, så vil du som regel læra eit nytt ganske greit. Du kan læra meir om javascript på w3scools.**

Scriptspråk vs kompilerte språk

For å kunna kjørast på ein datamaskin må eit program tolkast / oversettast slik at datamaskinen forstår det. Dette kan skje ved at ein overset (kompilerer) programmet til eit maskinspråk, dvs eit maskinlesbart språk, som så blir lagra som ei såkalt eksekverbar (direkte kjørbar) fil. .exe filer er slike program som du bare kan dobbeltklikka på så kjører dei.  Dei fleste kommersielle nytteprogram, og dei fleste tradisjonelle datasystem er av denne typen. Dei er ofte skrivne i ein eller annan variant av C eller java. Den andre måten er at programmet blir oversatt eller tolka direkte, dvs. uten at det blir mellomlagra som ei fil. Slike program kallast ofte scriptprogram. Javascript er eit eksempel på det. Eit anna er PHP som blir ofte brukt for å laga dynamiske nettsider. Begge disse blir kjørt via andre program. Javascript kan kjørast i nettlesaren din, mens PHP blir kjørt av ein webserver. Men så fins det også / programmeringsspråk, som det populære Python, som både kan fungera som skript og som kompilert utgave. Ein fordel med kompilerte program er at dei kjører fortare, mens ein ulempe er at det kan vera litt meir jobb å utvikla og finna feil. Men heldigvis fins det gode verktøy som lettar arbeidet.

EKSTERNE LENKER

* Her bryr vi oss ikkje om at det fins ein enkel formel for denne summen.
** javascript på w3scools
Algoritme Norsk Wikipedia
Algorithm Engelsk Wikipedia
Computer program Engelsk Wikipedia