C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18 Olav Dæhli - C#-kurs høsten 2017 1
Løkker Dagens temaer Inkrementering/dekrementering Løkkebetingelser Løkketyper Nøstede løkker Escape-sequences Debugger Olav Dæhli - C#-kurs høsten 2017 2
Loop (løkker) C# tilbyr følgende løkker (loops): for-løkker while-løkker (pretest) og do-while (posttest) foreach-løkker Olav Dæhli - C#-kurs høsten 2017 3
Tilordnings- og inkrementeringsoperatorer Olav Dæhli - C#-kurs høsten 2017 4
Aktuelle sammeligningsoperatorer En logisk test (true/false) avgjør løkkas avslutning: < <= > >= ==!= (t2 >= t1) (t2 større eller lik t1?) (t2 == t2) (t1 lik t2?) (t1!= t2) (t1 forskjellig fra t2?) Alle uttrykkene returnerer enten true eller false Olav Dæhli - C#-kurs høsten 2017 5
Kombinatoriske uttrykk && (AND-operator, som betyr både og) if (age > 6) && (age < 16) //Begge må bli //true, for at uttrykket som helhelt skal bli true Husk at følgende ikke er lov (typisk feil): if age > 6 && < 16 Olav Dæhli - C#-kurs høsten 2017 6
Kombinatoriske uttrykk (OR-operator, som betyr enten eller) if (age < 6 age > 60) //age mellom 6 og 60! (inverterer verdien) if (! (age > 16)) blir identisk med if (age <= 16) true blir til false og false blir til true Samlet uttrykk blir her true dersom age <= 16 Olav Dæhli - C#-kurs høsten 2017 7
for-løkker for (<initialization>;<condition>;<operation>) { <code>; }; Olav Dæhli - C#-kurs høsten 2017 8
Initialverdi (Startverdi) Eksempel: for-løkker for (int i = 0; i <= 10 ; i++) { }; <code>; Fortsetter så lenge betingelsen (i <= 10) er True Inkrementerer med verdien 1 (i = i + 1) Olav Dæhli - C#-kurs høsten 2017 9
Initial-verdi (startverdi) Eksempel: for-løkker for (int i = 100; i >=0 ; i -= 5) { }; <code>; Fortsetter så lenge betingelsen (i >= 0) er true Dekrementerer med verdien 5 (i = i - 5) Olav Dæhli - C#-kurs høsten 2017 10
Datatype: double Eksempel: for-løkker Fortsetter så lenge betingelsen (i <= 100.0) er true for (double i = 0.0; i <= 100.0 ; i += 2.5) { }; <code>; Intitialverdi (Startverdi) Inkrementerer med verdien 2.5 (i = i + 2.5) Olav Dæhli - C#-kurs høsten 2017 11
for-løkke-eksempel: Datatype: int counter initieres til 0 (startverdi 0) Fortsetter så lenge betingelsen er innfridd dvs. (counter <= 9) Løkka vil telle fra 0-9 og skrive tallene til en tekstboks med et mellomrom mellom hvert tall Øker counter med 1 for hver iterasjon Olav Dæhli - C#-kurs høsten 2017 12
Escape Sequenses Eksempel på «Escape Sequenses»: \t tabulator (horisontal) \n newline (ny linje) \r return (tilbake til starten av linja) \r\n «enter» (ny linje og til starten av denne) \' Apostrof \" Anførselstegn (hermetegn / sitattegn) Det finnes også diverse andre, men ovennevnte er nyttige i forbindelse med tekst i tekstbokser Olav Dæhli - C#-kurs høsten 2017 13
Eksempel med Escape-sequenses Olav Dæhli - C#-kurs høsten 2017 14
do while (post-testing) (Test utføres etter løkkekoden) Olav Dæhli - C#-kurs høsten 2017 15
while (pre-testing) (Test utføres før løkkekoden) Olav Dæhli - C#-kurs høsten 2017 16
Når bruke for og når bruke while? for-loops Oftest benyttet når det skal iterereres («loopes») et på forhånd kjent antall ganger while-loops Oftest benyttet når det på forhånd ikke er kjent antall iterasjoner, men skal itereres så lenge en gitt betingelse er true (altså inntil den bli false) Olav Dæhli - C#-kurs høsten 2017 17
Nested loops (for-loops) Olav Dæhli - C#-kurs høsten 2017 18
Nestet loops- (i,j)-innhold Eksempel med i fra 1-3 og j fra 1-4 i = 1 i = 2 i = 3 Olav Dæhli - C#-kurs høsten 2017 19
Nested loops (while-loops) Olav Dæhli - C#-kurs høsten 2017 20
foreach foreach (datatype variabelnavn in elementsamling) { Collection Kode; (en samling elementer) } (items) //Itererer en samling elementer element for element //Verdi for verdi lagres i variabelen //Elementsamlingen kan være collection, array m.m. Olav Dæhli - C#-kurs høsten 2017 21
Datatype Egenvalgt variabelnavn foreach Collection of string-elements foreach (string animal in cboanimals.items) { txtshow.appendtext(animal + "\r\n"); } ComboBox (cboanimals) Olav Dæhli - C#-kurs høsten 2017 22
Sletter alt TextBox-innhold Datatype Variabel Dette/gjeldende objekt Samlingen komponenter (tekstbokser etc.) på skjemaet (Form) Itererer komponent for komponent Olav Dæhli - C#-kurs høsten 2017 23
foreach Fordeler/ulemper Itererer (looper) alle elementer, uten at det behøves elementangivelser eller grenseverdi Får ikke noe «indeksnummer» men kan naturligvis introdusere en egen «teller» Starter alltid med første elementet (dvs. det med indeksnr. 0), hvilket ikke kan endres Kan ikke f.eks. iterere reversert (f.eks. 10 til 0) Olav Dæhli - C#-kurs høsten 2017 24
Debugger (Nyttig for å se hvordan løkkene endrer variablenes verdier) F11 -> Step linje for linje Sett Breakpoint -> Start med F5 og step så videre linje for linje med F11, fra breakpoint Hold kursor over variabler for å se verdiene Legg til «Autos»-vinduet Legg alternativt til «Watch»-vindu(-er) Legg til variabler som ønskes vist Det finnes også andre vinduer/muligheter Olav Dæhli - C#-kurs høsten 2017 25