Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Efterår 2009VVU-IT: Softwarekonstruktion1 Velkommen til Softwarekonstruktion Aase Bøgh, Systemudvikling Martin Siegumfeldt,

Lignende præsentationer


Præsentationer af emnet: "Efterår 2009VVU-IT: Softwarekonstruktion1 Velkommen til Softwarekonstruktion Aase Bøgh, Systemudvikling Martin Siegumfeldt,"— Præsentationens transcript:

1 Efterår 2009VVU-IT: Softwarekonstruktion1 Velkommen til Softwarekonstruktion Aase Bøgh, aabo@noea.dk:aabo@noea.dk Systemudvikling Martin Siegumfeldt, mars@noea.dk: Programmering og databasermars@noea.dk

2 Agenda Opsamling fra sidste gang –Forgreninger, –Løkker –Arrays –Metoder –Opgaver Algoritmeskabeloner: –Sweep-algoritmer –Søge-algoritmer Efterår 2009VVU-IT: Softwarekonstruktion2

3 if-sætningen int etTal=3, etAndetTal=7; if(etTal>7){ Console.WriteLine("Tal er større end 7"); } else{ if(etTal<7){ Console.WriteLine("Tal er mindre end 7"); } else { Console.WriteLine("Tal er lige med 7"); } } if((etTal==7) && (etAndetTal != 3)) Console.WriteLine(”Hallo.”); else Console.WriteLine(”Hello.”); Efterår 20093VVU-IT: Softwarekonstruktion

4 switch – en variant af if-sætningen Mange forgreninger Valg styret af en simpel værdi F.eks. månedsnavn ud fra månedsnummer: //indlæs månedsnummer i int nr switch(nr){ case 1: Console.WriteLine(”Januar”); break; case 2: Console.WriteLine(”Februar”); break; //fortsættes case 3: Console.WriteLine(”Marts”); break; //osv.….. case 12: Console.WriteLine(”December”); break; default: Console.WriteLine(”Ikke en måned”); } Efterår 20094VVU-IT: Softwarekonstruktion

5 Specielt ved fejl (exceptions) Hvis der sker en fejl, kan der kastes en exception, f.eks try{ double d= System.Convert.ToDouble(s); //en hel masse kode med d } catch{ System.Console.WriteLine(”Ikke et decimaltal); } Hvis s ikke er et gyldigt decimaltal, så kastes en exception fra …ToDouble(-) Hvis der kom en exception springes til catch-blokken Efterår 20095VVU-IT: Softwarekonstruktion

6 for eller while? Normalt bruges while, hvis man ikke ved hvor mange gange løkken skal løbes igennem, f.eks: –Led efter den første 7’er i et spil kort int i=1; do { Console.WriteLine(”Tal er ”+i); i++; }while(i<5); int i=1; while(i<5) { Console.WriteLine(”Tal er ”+i); i++; }; En variant af while er do–while: do-while udføres mindst én gang Efterår 20096VVU-IT: Softwarekonstruktion

7 for eller while ? for-sætningen bruges normalt når man ved hvor mange gange løkken skal køre, f.eks; –Tæl antal 7’ere i en kort-hånd (Du er nødt til at undersøge alle kort) Hvis man skal igennem en mængde af data kan man bruge foreach –Se eksempel med array om lidt Efterår 20097VVU-IT: Softwarekonstruktion

8 Array Æske-metaforen: Du kan betragte et array som en æske med et antal skillerum med samme størrelse. I hvert rum kan ligge en variabel af samme datatype. Rummene nummeres fra 0 til antal-1. Erklæring af et array: –int [] mitArray = {1,2,3,4,5}; //Opret og tildel værdier på een gang eller: –int [] mitArray = new int[5]; //Gør plads til 5 skillerum mitArray[0]=1; mitArray[1]=2; osv. Aflæs værdi fra arrayet: –int etTal = mitArray[3], //etTal får så værdien 4, hvorfor? Tildel værdi til en celle i arrayet: –mitArray[3]=etTal*2; //Nu står der 8 på den fjerde plads Efterår 20098VVU-IT: Softwarekonstruktion

9 Eksempel: Summen af alle tal i et array Eksempel med foreach: int sum=0; foreach( int tal in mitArray) sum=sum+tal; Console.WriteLine("Summen er "+sum); Sæt summen til nul For hvert element i arrayet: Aflæs tallet i arrayet, og læg det til summen. Eksempel med for: int sum=0; for( int i=0; i< mitArray.Length; i++) sum=sum+mitArray[i]; Console.WriteLine("Summen er "+sum); Løber hele arrayet igennem. For hvert gennemløb indlæses det næste element i tal Length fortæller længden på arrayet Efterår 20099VVU-IT: Softwarekonstruktion

10 Metoder Metoder kan betragtes som funktioner til et objekt. Metoder kan bruges til kode, der skal kaldes flere gange Metoder gør koden lettere at forstå og vedligeholde. Dette er en del af det begreb, der kaldes indkapsling WriteLine(..) er et eksempel på en metode i Console En metode kan kendes på, at der er parenteser! Man skelner mellem private og public metoder: –”public” metoder kan tilgås udenfor objektet: –”private” metoder kan ikke tilgås udefra, men bruges internt i objektet Er Length en metode på et array? Efterår 200910VVU-IT: Softwarekonstruktion

11 Eksempel: tælleriet fra før class EnKlasse { static void Main(string[] args) { for(int i=1; i<5;i++) UdskrivTal(i); } private static void UdskrivTal(int n) { Console.WriteLine("Tal er "+n); } Efterår 200911VVU-IT: Softwarekonstruktion Returtype Parameter

12 Et andet eksempel: sum class Sum { static void Main(string[] args) { int [] mitArray={12,3,4,7,3,1,7,8,7,9,10}; Console.WriteLine("Summen er " + beregnSum(mitArray)); } private static int beregnSum(int [] etArray) { int sum=0; foreach (int etTal in etArray) sum+=etTal; return sum; } Returner summen som en int Hvordan kan man se det er en int? Efterår 200912VVU-IT: Softwarekonstruktion

13 Opgaver Alle følgende opgaver tager udgangspunkt i eksemplet med summen af tallene i et array: 1.Lav en metode, som beregner gennemsnittet af tallene i et array. 2.Lav en metode, som tæller antal forekomster af værdien 7 i et array. 3.Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. 4.Generaliser opgave 2 og 3, så der kikkes efter en vilkårlig værdi (ind-parameter til metoderne) i stedet for 7 og 3 resp. Efterår 200913VVU-IT: Softwarekonstruktion

14 Agenda Opsamling fra sidste gang –Forgreninger, –Løkker –Arrays –Metoder –Opgaver Algoritmeskabeloner : –Sweep-algoritmer –Søge-algoritmer Efterår 2009VVU-IT: Softwarekonstruktion14

15 Algoritmeskabeloner Mange forskellige problemer kan løses af algoritmer, som har et fælles mønster, en fælles struktur. Denne struktur kan genbruges med klarere og mindre fejlbehæftede programmer til følge Skabelonen har et navn, så man kan snakke om den Vi vil kigge på to: –Sweep-algoritmer: gennemløber altid hele datamængden og gør noget ved (nogen af) elementerne –Søge-algoritmer: leder efter et element med en bestemt egenskab og stopper når et (det første) element med egenskaben er fundet. Efterår 200915VVU-IT: Softwarekonstruktion

16 Gennemløber altid hele datamængden og gør noget ved (nogen af) elementerne INIT, DONE, SELECT, REMOVE afhænger af sættets data repræsentation Konkretiseringen af DO og DO_INIT afhænger ydermere af den konkrete opgave Sweep – en algoritmeskabelon ; while { ; } Efterår 200916VVU-IT: Softwarekonstruktion

17 INIT, DONE, SELECT og REMOVE kan konkretiseres til en tæller i, der Indikerer starten af det ubesøgte sæt (US) Indsættes dette i skabelonen, fås: Konkretisering af skabelonen på et array (int[ ] a) ; int i = 0; while ( i < a.length ) { ; i++; } // end while INIT: i = 0 DONE: i >= a.length SELECT: a[i] REMOVE: i++ Efterår 200917VVU-IT: Softwarekonstruktion

18 I C# - simplere med for-løkke: Opgave konkretisering: Nul-tælling DO_INIT:int result= 0; DO:if(a[i]==0) result++ ; for (int i=0 ; i<a.Length ; i++ ) { ; } // end for int result= 0; for (int i=0 ; i<a.Length ; i++){ if (a[i] = = 0) result++; } // end for int result= 0; foreach (int x in a){ if (x = = 0) result++; } // end for Efterår 200918VVU-IT: Softwarekonstruktion Kun, hvis x ikke skal ændres

19 Opgaver (fra før) – er der nogle sweeps? Alle følgende opgaver tager udgangspunkt i eksemplet med summen af tallene i et array: 1.Lav en metode, som beregner gennemsnittet af tallene i et array. 2.Lav en metode, som tæller antal forekomster af værdien 7 i et array. 3.Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. 4.Generaliser opgave 2 og 3, så der kikkes efter en vilkårlig værdi (ind-parameter til metoderne) i stedet for 7 og 3 resp. Efterår 200919VVU-IT: Softwarekonstruktion

20 Leder efter et element med en bestemt egenskab og stopper når et (det første) element med egenskaben er fundet. INITIER, KM  Ø, UDVÆLG, SPLIT afhænger af sættets data repræsentation Søgeskabelonen ; bool found= false; while ( ! found && ) { ; if ( k==m ) found = true; else { }//end if-else } // end while Kandidatmængde:KM Målelement:m Kandidatelement:k Efterår 200920VVU-IT: Softwarekonstruktion

21 INITIER:int i = 0 UDVÆLG:k = a[i] KM  Ø:i < a.Length SPLIT:i ++ int k; int i= 0; bool found= false; while ( !found && i<a.Length ) { k = a[I]; if (k == m) found= true; else i ++; } // end while Efterår 200921VVU-IT: Softwarekonstruktion Konkretisering af skabelonen på et array (int[ ] a) Igen kan flere skridt konkretiseres til en tæller i, der indikerer starten af det ubesøgte sæt (US)

22 Opgaver (fra før) – er der nogle søgninger? Alle følgende opgaver tager udgangspunkt i eksemplet med summen af tallene i et array: 1.Lav en metode, som beregner gennemsnittet af tallene i et array. 2.Lav en metode, som tæller antal forekomster af værdien 7 i et array. 3.Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. 4.Generaliser opgave 2 og 3, så der kikkes efter en vilkårlig værdi (ind-parameter til metoderne) i stedet for 7 og 3 resp. Efterår 200922VVU-IT: Softwarekonstruktion

23 Algoritmeskabeloner - opsummering Algoritmeskabeloner kan (gen)bruges til at løse mange forskellige problemer En god implementering karakteriseres ved –Tydelig identifikation af de enkelte skridt –Tydelig skelnen mellem traversering af datasæt og udførsel af den specifikke opgave Efterår 200923VVU-IT: Softwarekonstruktion

24 Opgaver i løkker og skabeloner For alle opgaverne skal det overvejes hvilken skabelon, der benyttes, og hvordan operationerne er konkretiseret: 1.Lav en metode, som returnerer antallet af lige tal i et int[ ]. Test den. (Vink: et tal er lige, hvis rest ved division med 2 er 0) 2.Lav en metode, som returnerer antallet af tal i et double[ ], som ligger mellem 10,0 og 20,0. Test den. 3.Lav en metode, som tager en int x som parameter, og returnerer true, hvis x findes i et int [ ]. Ændr metoden, så index på første forekomst af x i arrayet returneres. Hvad hvis x ikke findes i array’et? 4.Lav en metode, som finder første forekomst af et tegn i et char[ ]. 5.Lav en metode, som finder antallet af vokaler i et char[ ]. (Vink: lav først en metode, som tager et bogstav som parameter, og returnerer true, hvis bogstavet er en vokal, ellers false.) Efterår 200924VVU-IT: Softwarekonstruktion


Download ppt "Efterår 2009VVU-IT: Softwarekonstruktion1 Velkommen til Softwarekonstruktion Aase Bøgh, Systemudvikling Martin Siegumfeldt,"

Lignende præsentationer


Annoncer fra Google