Velkommen til Softwarekonstruktion

24
Efterår 2009 VVU-IT: Softwarekonstruktion 1 Velkommen til Softwarekonstruktion Aase Bøgh, [email protected] : Systemudvikling Martin Siegumfeldt, [email protected] : Programmering og databaser

description

Velkommen til Softwarekonstruktion. Aase Bøgh , [email protected] : Systemudvikling Martin Siegumfeldt, [email protected] : Programmering og databaser. Agenda. Opsamling fra sidste gang Forgreninger, Løkker Arrays Metoder Opgaver Algoritmeskabeloner: Sweep-algoritmer Søge-algoritmer. - PowerPoint PPT Presentation

Transcript of Velkommen til Softwarekonstruktion

Page 1: Velkommen til Softwarekonstruktion

Efterår 2009 VVU-IT: Softwarekonstruktion 1

Velkommen til

Softwarekonstruktion

• Aase Bøgh, [email protected]:Systemudvikling

• Martin Siegumfeldt, [email protected]: Programmering og databaser

Page 2: Velkommen til Softwarekonstruktion

Agenda

Opsamling fra sidste gang– Forgreninger, – Løkker– Arrays– Metoder– Opgaver

Algoritmeskabeloner:– Sweep-algoritmer– Søge-algoritmer

Efterår 2009 VVU-IT: Softwarekonstruktion 2

Page 3: Velkommen til Softwarekonstruktion

if-sætningenint 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.”);

elseConsole.WriteLine(”Hello.”);

Efterår 2009 3VVU-IT: Softwarekonstruktion

Page 4: Velkommen til Softwarekonstruktion

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 2009 4VVU-IT: Softwarekonstruktion

Page 5: Velkommen til Softwarekonstruktion

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 2009 5VVU-IT: Softwarekonstruktion

Page 6: Velkommen til Softwarekonstruktion

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 2009 6VVU-IT: Softwarekonstruktion

Page 7: Velkommen til Softwarekonstruktion

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 2009 7VVU-IT: Softwarekonstruktion

Page 8: Velkommen til Softwarekonstruktion

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 2009 8VVU-IT: Softwarekonstruktion

Page 9: Velkommen til Softwarekonstruktion

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 2009 9VVU-IT: Softwarekonstruktion

Page 10: Velkommen til Softwarekonstruktion

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 2009 10VVU-IT: Softwarekonstruktion

Page 11: Velkommen til Softwarekonstruktion

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 2009 11VVU-IT: Softwarekonstruktion

Returtype

Parameter

Page 12: Velkommen til Softwarekonstruktion

Et andet eksempel: sumclass 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 2009 12VVU-IT: Softwarekonstruktion

Page 13: Velkommen til Softwarekonstruktion

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 2009 13VVU-IT: Softwarekonstruktion

Page 14: Velkommen til Softwarekonstruktion

Agenda

Opsamling fra sidste gang– Forgreninger, – Løkker– Arrays– Metoder– Opgaver

Algoritmeskabeloner:– Sweep-algoritmer– Søge-algoritmer

Efterår 2009 VVU-IT: Softwarekonstruktion 14

Page 15: Velkommen til Softwarekonstruktion

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 2009 15VVU-IT: Softwarekonstruktion

Page 16: Velkommen til Softwarekonstruktion

• 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

< DO_INIT: initialisering af DO operationen >;< INIT: initialisering af US (ubesøgte sæt) >;while < !DONE (dvs. US er ikke tomt)> { < SELECT: udvælg elementerne fra US >; < DO: operer på det udvalgte element>; < REMOVE: fjern det udvalgte element fra US>}

Efterår 2009 16VVU-IT: Softwarekonstruktion

Page 17: Velkommen til Softwarekonstruktion

INIT, DONE, SELECT og REMOVE kan konkretiseres til en tæller i, derIndikerer starten af det ubesøgte sæt (US)

Indsættes dette i skabelonen, fås:

Konkretisering af skabelonen på et array (int[ ] a)

< DO_INIT >;int i = 0;while ( i < a.length ) { < DO something to a[i]) >; i++;} // end while

INIT: i = 0DONE: i >= a.lengthSELECT: a[i]REMOVE: i++

Efterår 2009 17VVU-IT: Softwarekonstruktion

Page 18: Velkommen til Softwarekonstruktion

I C# - simplere med for-løkke:

Opgave konkretisering: Nul-tællingDO_INIT: int result= 0;DO: if(a[i]==0) result++

< DO_INIT >;for (int i=0 ; i<a.Length ; i++ ) { < DO something to a[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 2009 18VVU-IT: Softwarekonstruktion

Kun, hvis x ikke skal ændres

Page 19: Velkommen til Softwarekonstruktion

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 2009 19VVU-IT: Softwarekonstruktion

Page 20: Velkommen til Softwarekonstruktion

• 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

< INITIER KM >;

bool found= false;

while ( ! found && < KM Ø > ) {

< UDVÆLG k fra KM >;

if ( k==m )

found = true;

else {

< SPLIT KM i forhold til k og m >

}//end if-else

} // end while 

• Kandidatmængde: KM• Målelement: m• Kandidatelement: k

Efterår 2009 20VVU-IT: Softwarekonstruktion

Page 21: Velkommen til Softwarekonstruktion

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 2009 21VVU-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)

Page 22: Velkommen til Softwarekonstruktion

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 2009 22VVU-IT: Softwarekonstruktion

Page 23: Velkommen til Softwarekonstruktion

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 2009 23VVU-IT: Softwarekonstruktion

Page 24: Velkommen til Softwarekonstruktion

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 2009 24VVU-IT: Softwarekonstruktion