Noter til C# Programmering Iteration

Relaterede dokumenter
Noter til C# Programmering Selektion

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Forelæsning Uge 2 Mandag

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Forelæsning Uge 2 Torsdag

Programmering for begyndere Lektion 2. Opsamling mm

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Python programmering. Per Tøfting. MacFest

Forelæsning Uge 2 Mandag

Kapitel 3 Betinget logik i C#

Forelæsning Uge 2 Mandag

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit if (indkomst > ) topskat = (indkomst ) * 0.

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Forelæsning Uge 2 Mandag

Kapitel 4 Løkker i C#

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

Sproget Rascal (v. 2)

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Kontrol-strukturer i PHP

JavaScript. nedarvning.

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Forelæsning Uge 4 Torsdag

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

Start på Arduino og programmering

Programmering i C. Lektion oktober 2008

Programmering i C. Lektion september 2009

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Forelæsning Uge 4 Torsdag

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

5. Kontrolstrukturer - Motivation og Oversigt

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Klasse 1.4 Michael Jokil

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

BOSK F2011, 1. del: Udsagnslogik

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Undtagelseshåndtering i C#

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Kursusarbejde 2 Grundlæggende Programmering

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Python 3 Matematik Programmerings kursus:

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n n (log n) 2. n 2 + log n 3 n. n n (log n)

Kursusarbejde 3 Grundlæggende Programmering

Spil Master Mind. Indledning.

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Introduktion til funktioner, moduler og scopes i Python

Forelæsning Uge 4 Mandag

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Programmering I Java/C#

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

BOSK F2012, 1. del: Prædikatslogik

Algoritmer og invarianter

Bevisteknikker (relevant både ved design og verifikation)

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Danmarks Tekniske Universitet

At klippe en streng over på det mest hensigtsmæssige sted

// Definition af porte og funktioner

Lær Python - Dag 3, modul 1 Læse og skrive filer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

$ %' ) * %' +,! - Myarray %' /0 / /0 /0

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

DM507 Algoritmer og datastrukturer

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Programmering i Javascript

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Ligningsløsning som det at løse gåder

Abstrakte datatyper C#-version

Forelæsning Uge 4 Mandag

Regulære udtryk, 2. del

Forelæsning Uge 1 Torsdag

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

C Programmering V1.37

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Dynamisk programmering

Excel-6: HVIS-funktionen

Programmering i C. Lektion november 2008

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

SWC eksamens-spørgsmål. Oversigt

Ghostbusters. Introduktion. Scratch. Du skal lave et fangelegsspil med spøgelser! Arbejdsliste. Test dit Projekt. Gem dit Projekt

Transkript:

Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de samme data Iteration At iterere vil sige at udføre den samme handling igen og igen. I C# findes grundlæggende tre løkkestrukturer, som vi skal se nærmere på. Hver især besidder de forskellige egenskaber, der kvalificerer dem til forskellige problemstillinger. Mulighederne for at modificere og skræddersy de tre løkker er imidlertid så omfattende, at alle tre løkkestrukturer kan bringes til at ligne hinanden. while-løkke En while-løkke får programmet til at udføre en kodeblok, sålænge startbetingelsen er sand. I det følgende eksempel bliver løkkeinstruktionen udført (tælleren blev opskrevet) indtil tælleren er lig med 5. while(tæller < 5) // Test om betingelsen er sand continue and break Nogle gange ønsker man at returnere til toppen af løkken uden at hele kodeblokken bliver afviklet. Dette kan gøres med continue, idet continue-sætningen springer tilbage til toppen af løkken. while(tæller < 10) // Test om betingelsen er sand if (tæller % 2!= 0) continue; Programmet udskriver de lige tal mellem 1 og 10. Hvorfor? Prøv at lave et program med en while-løkke, der udskriver de lige tal mellem 1 og 10 uden brug af continue. Prøv med en for-løkke, se senere Iteration side 1 af 5

Betingelsen, som evalueres i en while-løkke, skal være et boolsk udtryk. En while-løkke vil udføres, sålænge udtrykket er sandt. Det efterfølgende eksempel viser en uendelig løkke, der dog termineres vha. nøgleordet break. Brugen af break er den eneste mulighed for at undslippe denne løkke. while(true) // Betingelsen er altid sand if (tæller >= 5) break; Ovenstående eksempel svarer til de to første eksempler i denne note. do while løkke I en almindelig while-løkke kan det ske, at den indeholdte kodeblok aldrig bliver genneløbet, fordi startbetingelsen er falsk allerede inden det første gennemløb. Til at overkomme dette problem kan man gøre brug af strukturen do while. De to nedenstående eksempler viser hhv. effekten af while og do while (Prøv at indtaste forskellige tal) tæller = int.parse(console.readline()); while(tæller > 0) // Test betingelsen tæller = tæller - 1; (Prøv at indtaste forskellige tal) tæller = int.parse(console.readline()); do tæller = tæller - 1; while(tæller > 0); // Test betingelsen Læg mærke til, at uanset hvilken værdi, der indtastes i det sidste eksempel, så gennemløbes løkken mindst én gang. continue og break virker begge i do while-løkken præcis som de virker i while-løkken. Den eneste forskel mellem de to løkke-typer er tidspunktet for test af betingelse. Et typisk eksempel på brugen af do while er følgende, hvor man udfører en programstump, indtil brugeren takker nej på spørgsmålet om, hvorvidt han ønsker at fortsætte. Iteration side 2 af 5

: for løkke int resultat; double tal; do Console.Write("Indtast et tal: "); tal = double.parse(console.readline()); Console.WriteLine("Kvadratroden af " + tal + " er " + Math.Sqrt(tal)); Console.Write("Tast 1, hvis du vil prøve igen: "); resultat = int.parse(console.readline()); while(resultat!= 1); // Test betingelsen I en while-løkke opstilles en startbetingelse, der testes hvorvidt denne er sand, og endelig opskrives eller på anden vis ændres en tællevariabel for hvert løkkegennemløb. Lad os betragte endnu et eksempel på en while-løkke. int tæller = 0; while(tæller < 5) Console.WriteLine("Itererer..."); Startbetingelsen sættes i anden linje, tæller initialiseres til 0. I næste linje testes betingelsen er tæller mindre end 5, og endelig i første sætning i while-løkken opskrives tælleren tæller. Herefter udskrives et mindre intelligent budskab, men denne blok kunne også indeholde mere vigtig kode. En for-løkke sammenfatter alle tre trin i ét, altså initialisering, test og opskrivning i ét enkelt hug. Syntaksen er nøgleordet for efterfulgt af en parentes indeholdende 3 sætninger adskilt af semikoloner. Den første sætning er initialiseringen. Den næste er test af stopbetingelse, og her skal et boolsk udtryk indpasses. Den tredje sætning er selve handlingen. Denne er typisk en opskrivning eller nedskrivning af en variabel, men her kan enhver gyldig C#-sætning indpasses. Bemærk at den anden sætning skal være et boolsk udtryk, dvs. en sætning som returnerer enten sand eller falsk (true eller false). Lad os betragte et eksempel. for (tæller = 0; tæller < 5; tæller++) Console.WriteLine("Itererer..."); for-løkker er særdeles fleksible og kraftfulde. De udføres i følgende tre trin: Operationen i initialiseringsdelen udføres Stopbetingelsen evalueres Hvis betingelsen er sand, så udføres handlingen samt kodeblokken i selve løkken. Iteration side 3 af 5

Herefter gentages trin 2 og 3. Advancerede for-løkker for-løkker kan som sagt være særdeles fleksible, hvilket vil fremgå af de næste eksempler Multipel initialisering og opskrivning Det er muligt, at lade for-løkken håndtere mere end én variabel. Betragt følgende eksempel. Prøv at indtast koden og kør den. Hvad sker der? for (int i = 0, j = 0; i < 3; i++, j++) Console.WriteLine("i: " + i + " j: " + j); Tom for-løkke-sætning Det er muligt at udelade en eller flere af for-løkkens sætninger (Initialisering, test af betingelse og handling). int tæller = 0, max; max = int.parse(console.readline()); for (;;) // Uendelig for-løkke if (tæller < max) // Test else break; Tom for-løkke Ligesom det er muligt at udelade en eller flere af for-løkkens sætninger, er det muligt at undlade at have sætninger i selve løkken. for (int i = 0; i < 5; i++, Console.Write(".")) ; Indlejrede for-løkker for-løkker kan også indlejres, hvilket følgende eksempel illustrerer. for (int i = 0; i < 5; i++) for (int j = 0 ; j < 10; j++) Console.WriteLine(); Iteration side 4 af 5

Afrunding Som eksemplerne i det foregående har vist, så er alle tre løkketyper, while, do while og for-løkken så fleksible, at de alle tre vha. continue og break kan formes til at udføre den samme handling. Hvornår skal man så benytte hvilken? Der findes ingen forskrifter, men en tommelfingerregel kunne være: Brug for-løkker, når antallet af iterationer på forhånd er kendt, ellers Brug while-løkker, når startbetingelsen skal evalueres inden kodeblokken i selve løkken skal afvikles Brug do while-løkker, når kodeblokken i selve løkken skal afvikles én gang før startbetingelsen evalueres. Iteration side 5 af 5