View
44
Download
0
Category
Tags:
Preview:
DESCRIPTION
Velkommen til Softwarekonstruktion. Aase Bøgh , aabo@noea.dk : Systemudvikling Martin Siegumfeldt, mars@noea.dk : Programmering og databaser. Agenda. Opsamling fra sidste gang Forgreninger, Løkker Arrays Metoder Opgaver Algoritmeskabeloner: Sweep-algoritmer Søge-algoritmer. - PowerPoint PPT Presentation
Citation preview
Efterår 2009 VVU-IT: Softwarekonstruktion 1
Velkommen til
Softwarekonstruktion
• Aase Bøgh, aabo@noea.dk:Systemudvikling
• Martin Siegumfeldt, mars@noea.dk: Programmering og databaser
Agenda
Opsamling fra sidste gang– Forgreninger, – Løkker– Arrays– Metoder– Opgaver
Algoritmeskabeloner:– Sweep-algoritmer– Søge-algoritmer
Efterår 2009 VVU-IT: Softwarekonstruktion 2
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
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
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
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
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
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
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
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
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
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
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
Agenda
Opsamling fra sidste gang– Forgreninger, – Løkker– Arrays– Metoder– Opgaver
Algoritmeskabeloner:– Sweep-algoritmer– Søge-algoritmer
Efterår 2009 VVU-IT: Softwarekonstruktion 14
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
• 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
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
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
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
• 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
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)
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
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
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
Recommended