Dataprogram

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. Nedanfor skal vi sjå på kva disse orda betyr, men la oss først snakka litt om kva eit dataprogram består av.

Element

Variable: Den vanlige måten å tilnærma seg programmering på, er å læra først om variable, og kva du kan gjera med dei. 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. Når vi feks skriv a = 10, så lagrar vi heiltalet 10 i ein plass i minnet som vi kan referera til med navnet a. Seinare kan vi endra denne verdien. Hvis vi etterpå skriv a = a + 1, så reknar datamaskinen først ut uttrykket på høgre side, dvs. a + 1, som blir 11. Deretter lagrar den resultatet tilbake i variabelen a. Så variable blir heile tida endra i eit program, og det er viktig å halda rede på kva som skjer. Alle programmeringsspråk har innebygd dei vanlige matematiske operatorane, slik at vi kan addera, subtrahera, multiplisera og dividera. Som regel også potens, og noken fleire. Men om vi td. skal finna sinus til eit tal, så må vi som bruka eit bibliotek som inneheld dei funksjonanene vi treng. Eit programmeringsspråk treng også måtar å la brukaren gi inn verdiar, dvs. input / innlesing, og få ut resultatet av ein utrekning, dvs. output / utskrift.

Datatypar: Ein variabel kan innehalda ulike datatypar. Her lagra vi eit heiltal, men vi kan også lagra desimaltall eller eit tegn. I tillegg til dette fins det også meir komplekse datastrukturar som tabellar, tekststrenger mm.

Flytstruktur: Det neste ein blivande programmerar bør læra seg er å bestemma rekkefølgen ting skjer i. Den viktigaste egenskapen til eit dataprogram er at det kan hoppa til andre stader i koden avhengig av bestemte betingelsar. Vi seier at flyten forgreiner seg. Uten forgreininger kunne eit program bare utføre same lista med operasjonar før det stoppar. Hvis vi feks. skal finna kvadratrota av eit tal, så bør vi først sjekka om talet er negativt. Hvis talet er negativ vil vi skriva ut ein feilmelding. Hvis ikkje reknar vi ut svaret. Dette kan vi gjera med if-else- setning.

Dessuten kan vi ha løkker som utfører same operasjon mange gonger. Hvis vi vil skriva ut alle tal frå ein til ti, kan vi bare ha ti forskjellige utskriftssetningar. Men det er meir effektivt å gjera det i ei løkke som utfører same utskriftssetning ti gonger. Eit lite problem med løkker er at hvis vi ikkje er forsiktige 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.

Algoritme

No er det på tide med eit enkelt eksempel. Før ein begynner med å koda, så kan det vera lurt å beskriva algoritmen som vi skal bruka først. 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 ei oppgave som ein datamaskin er god på er å 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.

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 program i JavaScript skrivast nøyaktig i henhold til syntaks, dvs dei reglane som gjeld for dette 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. På mine programmeringssider kan du sjå eksempel på kode i Python, JavaScript og PHP, og samanlikna syntaksen.

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. I eksempelet vårt brukar vi ei while-løkke. Før løkka sjekkar vi verdien av variabelen i. Så lenge den er mindre eller lik N, forset vi med å summera. Men strakst den blir større enn N, så stoppar løkka. Då skriv vi ut sum og programmet stoppar.

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. Her* kan du kjøra det samme sumprogrammet som over, men no vha. PHP. Javascript-summen vart rekna ut på din maskin, men PHP-summen vart rekna ut på serveren og svaret sendt tilbake til deg. Det fins 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