You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 40 Next »

En kontrollstruktur styrer hvilken slags kode som kjører når. Denne siden oppsummerer de viktigste kontrollstrukturene og peker videre til sider som tar for seg hver type.

Sekvens

Et prosedyreorientert program består av setninger som utføres i sekvens, så uten noen spesielle konstrollstrukturer vil all koden bli utført én og bare én gang. Koden under illustrerer poenget:

 

 

Illustrasjon av koden med et flytskjema. Kontrollflyten går nedover fra boks til boks.

 

skriv ut 'Hvor gammel er du?'les inn alder (som et tall)skriv ut 'Neste år blir du ' + (alder + 1) + ' år!'


 

 

Først skrives spørsmålet ut, venter programmet på input (som bør være et tall) fra brukeren og til slutt skrives en ny melding ut.

 

Python
print('Hvor gammel er du?')
age = int(input())
print('Neste år blir du ' + str(age + 1) + ' år!')
Java
Scanner scanner = new Scanner(System.in);
System.out.println("Hvor gammel er du?");
int age = scanner.nextInt();
System.out.println("Neste år blir du " + (age + 1) + " år!");


 

Betingelser med if-then-else

En kommer imidlertid fort bort i situasjoner hvor kode bare skal utføres i bestemte tilfelle. F.eks. vil koden over kræsje hvis input-en ikke er et gyldig tall. Derfor kan det vært lurt å sjekke gyldigheten og utføre ulike setninger avhengig av om input-en er et tall eller ikke:

 

 

 

skriv ut 'Hvor gammel er du?'les inn alder (som en tekst)alder er et tallsannfalseskriv ut 'Neste år blir du ' + (alder + 1) + ' år!'skriv ut alder + ' er ikke et tall!'

Kontrollflyten har en forgreining, hvor verdien av betingelsen (true eller false) avgjør hvilken grein som tas.

 

 

 

Her brukes if-nøkkelordet for å angi at print-setningen kun skal utføres hvis betingelsen ageInput.isdigit() er sann.

 

Python
print('Hvor gammel er du?')
ageString = input()
if (ageString.isdigit()):
    print('Neste år blir du ' + str(int(ageString) + 1) + ' år!')
else:
    print(ageString + ' er ikke et tall!')

 

 

 

Java
Scanner scanner = new Scanner(System.in);
System.out.println("Hvor gammel er du?");
String ageString = scanner.nextLine();
if (ageString.matches("[0-9]+")) {
	int age = Integer.valueOf(ageString);
	System.out.println("Neste år blir du " + (age + 1) + " år!");
}
else
	System.out.println(ageString + " er ikke et tall!");

 

I Java må en gruppere setninger med { og } for å kunne ha flere av dem.

 

 

Dette kalles gjerne betinget utførelse, siden setningene i de to greinene utføres bare hvis en bestemt betingelse er true/sann eller false/usann. Det finnes flere varianter, f.eks. kan en utelate else-delen eller ha en ny if i else-delen for å håndtere flere tilfeller.

Les mer om dette her: if-kontrollstrukturen

while-løkke

Løkker er kode som utføres flere ganger. Det er vanlig å skille mellom while-løkker og for-løkker. En while-løkke sjekker en betingelse, og gjennomfører koden inni løkka så lenge denne betingelsen er sann. Man må være forsiktig når man skriver while-løkker; dersom ikke betingelsen er formulert riktig kan man ende opp med det som kalles en "uendelig løkke". Hvis man vil stille spørsmålet om alder helt til man får et ordentlig svar, så vil det se slik slik ut:

skriv ut 'Hvor gammel er du?'les inn alder (som en tekst)skriv ut alder + ' er ikke et tall, skriv det inn på nytt!'les inn alder (som en tekst)usannalder er et tallsannskriv ut 'Neste år blir du ' + (alder + 1) + ' år!'
Python
print('Hvor gammel er du?')
ageString = input()
while (! ageString.isdigit()):
	print(ageString + ' er ikke et tall, skriv det inn på nytt!')
	ageString = input()
print('Neste år blir du ' + str(int(ageString) + 1) + ' år!')   
Java
Scanner scanner = new Scanner(System.in);
System.out.println("Hvor gammel er du?");
String ageString = scanner.nextLine();
while (! ageString.matches("[0-9]+")) {
	System.out.println(ageString + " er ikke et tall!");
	ageString = scanner.nextLine();
}
int age = Integer.valueOf(ageString);
System.out.println("Neste år blir du " + (age + 1) + " år!");

 

 

 

Det finnes varianter hvor man ikke tester løkke-betingelsen på forhånd, men etterpå, og hvor betingelsen snus på. Noen språk har også muligheten til å hoppe ut av løkka fra innsiden.

Les mer om dette her: while-kontrollstrukturen

For-each-løkker

I en del løkker er poenget å behandle et sett med data, så betingelsen koker ned til om det er mere data igjen. Istedenfor å gjøre det manuelt med en teller som øker og sjekkes mot antall data-elementer, så har en del språk en egen kontrollstruktur som gjerne kalles for-each, for å gå gjennom alle data-elementer i en samling:

 

Unntakshåndtering

Unntak er hendelser i et program som helst ikke skal skje. Dersom man har en liste med 4 elementer,  og man spør om hva som er det 5. elementet vil det i de fleste programmeringsspråk oppstå et unntak. Det er god programmering å skrive kode slik at man i høyest mulig grad unngår unntak. I eksempelet over betyr det å sjekke om listen inneholder 5 elementer før man spør etter det 5. elementet.

Det finnes også mekanismer som fanger opp unntak og behandler disse. Dette kan ses på som en spesiell betingelse: hvis et unntak oppstår, så kjør denne koden. Unntak kan også nøstes, slik at man har en blokk tilhørende ethvert unntak som kan oppstå. 

  • No labels