Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Excerpt

if-kontrollstrukturen bruker en betingelse for å styre om en eller flere setninger blir utført.

Den vanligste kontrollstrukturen er setninger som utføres i Standardkontrollstrukturen er sekvens, som i følgende kodeillustrert under:

PlantUML Macro
start
:skriv ut 
Code Block
languagepython
print('Hvor gammel er du?')
age = int(input())
print(;
:les inn alder (som et tall);
:skriv ut 'Neste år blir du ' + str(agealder + 1) + ' år!');
stop

Illustrasjon av koden med et flytskjema. Kontrollflyten går nedover fra boks til boks. 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.

 

 


 

Code Block
languagepython
titlePython
PlantUML Macro
start
:print('Hvor gammel er du?');
:age = int(input());
:print('Neste år blir du ' + str(age + 1) + ' år!');
stop

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

)
Code Block
languagejava
titleJava
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!");


 

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. Det vil være Derfor kan det vært lurt å bare utføre den siste linja hvis sjekke gyldigheten og utføre ulike setninger avhengig av om input-en faktisk er et tall eller ikke:

 

 

code

language

 

PlantUML Macro
start
:skriv ut 
python
print('Hvor gammel er du?')
ageString = input();
:les inn alder (som en tekst);
if (ageString.isdigit()):
    print(alder er et tall) then (sann)
	:skriv ut 'Neste år blir du ' + str(int(ageString)alder + 1) + ' år!')

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

PlantUML Macro
start
:print('Hvor ...');
:ageString = input();
if (ageString.isdigit()) then (true)
	:print('Neste år ...');
else (false)
	:skriv ut alder + ' er ikke et tall!';
endif
stop

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

...

 

 

Code Block
languagepython
titlePython
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!')

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

Code Block
languagejava
titleJava
Scanner scanner = new Scanner(System.in);
System.out.println("Hvor gammel er du?");
String ageString = scanner.nextLine
PlantUML Macro
start
:print('Hvor ...');
:ageString = input();
if (ageString.isdigit(matches("[0-9]+")) then (true)
	:print('Neste år ...');
else (false)
	:print{
	int age = Integer.valueOf(ageString);
	System.out.println("Neste år blir du " + (age + 1) + " år!");
}
else
	System.out.println(ageString + '" er ikke et tall!');
endif
stop
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 er sann. I Python brukes innrykk for å knytte setninger til true/sann- og false/usann-greinene. I Java tillates bare én setning eller gruppe med setninger i hver grein, og derfor må en gruppere setninger med { og }.

 

 

if-en angir en kontrollstruktur som kalles betinget utførelse. Betingelsen kan være hvilket som helst uttrykk som gir en logisk verdi, altså true/sant eller false/usant. Det finnes flere varianter av if-kontrollstrukturen. I eksemplet over skal det gjøres forskjellige ting avhengig av om betingelsen er true/sann eller false/usann, slik at det blir to greiner, mens det noen ganger bare er behov for én grein. Da utelater en bare else-delen.

Noen ganger ønsker man å velge mellom flere enn to greiner. Dette kan gjøres ved å ha en ny if inni else-delen. Man tar altså først et valg mellom to greiner og i den ene andre greina gjør en et nytt valg. Eksemplet under, hvor en karakter (grade) settes basert på en poengsum (score), illustrerer dette:

PlantUML Macro
start
if (score >= 85) then (true)
	:grade = 'A';
else (false)
	if (score > 75) then (true)
		:grade = 'B';
	else (false)
		if (score > 60) then (true)
			:grade = 'C';
		else (false)
			if (score > 50) then (true)
				:grade = 'D';
			else (false)
				if (score > 40) then (true)
					:grade = 'E';
				else (false)
					:grade = 'F';
				endif
			endif
		endif
	endif
endif
:print(grade);
stop
Code Block
languagepython
titlePython
score = 67
grade = ''
if score >= 85:
    grade = 'A';
else:
    if score >= 75:
        grade = 'B';
    else:
        if score >= 60:
            grade = 'C';
        else:
            if score > 50:
                grade = 'D';
            else:
                if score > 40:
                    grade = 'E';
                else:
                    grade = 'F';
print(grade)
Code Block
languagejava
titleJava
int score = 67;
char grade;
PlantUML Macro
start
if (score >= 85)
   then (true)
	:grade = 'A';
else (false){
	if (score >= 75)
  then  (true)
		:grade = 'B';
	else (false){
		if (score >= 60)
 then (true)
   			:grade = 'C';
		else (false){
			if (score > 50)
   then (true)
				:grade = 'D';
			else (false){
				if (score > 40)
   then (true)
					:grade = 'E';
				else (false)
	
    				:grade = 'F';
				endif}
			endif}
		endif}
	endif
endif
:print}
System.out.println(grade);
stop

Slike nøstede if-else-setninger Noen ganger blir det mange slike spørringer nøstet, og det blir fort forvirrende. En bedre løsning er da å bruke else-if-strukturen. Her kan man oppgi flere betingelser i hver sin else-if-grein, og den første som gir true/sann vil bli fulgt. I diagrammet nedenfor kan man tenke seg at man går fra venstre mot høyre, og følger den første pilen som passer.

;elsif;elsif;elsif;elsif;;(*) --> "if .." "if .." -->[score > 90] "" --> (*) "if .." -->[score > 80] ""--> (*) "if .." -->[]""--> (*) "if .." -->[]""--> (*) "if .." -->[]"" -->(*) "if .." -->[else] "" --> (*)
PlantUML Macro
start
if (score >= 85) then (true)
	:grade = 'A';
elseif (score > 75) then (true)
	:grade = 'B';
elseif (score > 60) then (true)
	:grade = 'C';
elseif (score > 50) then (true)
	:grade = 'D';
elseif (score > 40) then (true)
	:grade = 'E';
else (false)
	:grade = 'F';
endif
:print(grade);
stop

 


 

 

Code Block
languagepython
titlePython
score = 67
grade = ''
if score >= 85:
    grade = 'A'

elif score >= 75:
    grade = 'B'

elif score >= 60:
    grade = 'C'

elif score > 50:
    grade = 'D'

elif score > 40:
    grade = 'E'

else:
    grade = 'F'

print(grade)
PlantUML Macro
Code Block
languagejava
titleJava
int score = 67;
char grade;
if (score >= 85)
    grade = 'A'
;
else if (score >= 75)
    grade = 'B'
;
else if (score >= 60
)
    
grade = 'C'
;
else if (score > 50
)
    
grade = 'D'
;
else if (score > 40
)
    
grade = 'E'
;
else
    grade = 'F'
;
System.out.println(grade);

Gruppering av setninger

En kan godt ha flere setninger i then- og/eller else-delen, og de fleste programmeringsspråk har en måte å gruppere setninger på. I Java grupperes setninger ved at en har { og } rundt, mens en i python bruker innrykket for å angi hvilke setninger som hører til de ulike greinene.

...