1 / 24

Velkommen til Softwarekonstruktion

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.

annick
Download Presentation

Velkommen til Softwarekonstruktion

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Velkommen tilSoftwarekonstruktion • Aase Bøgh, aabo@noea.dk: Systemudvikling • Martin Siegumfeldt, mars@noea.dk: Programmering og databaser VVU-IT: Softwarekonstruktion

  2. Agenda Opsamling fra sidste gang • Forgreninger, • Løkker • Arrays • Metoder • Opgaver Algoritmeskabeloner: • Sweep-algoritmer • Søge-algoritmer VVU-IT: Softwarekonstruktion

  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.”); VVU-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”); } VVU-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 VVU-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; while(i<5) { Console.WriteLine(”Tal er ”+i); i++; }; do-while udføres mindst én gang int i=1;do { Console.WriteLine(”Tal er ”+i); i++; }while(i<5); En variant af while er do–while: VVU-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 VVU-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 skillerummitArray[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 VVU-IT: Softwarekonstruktion

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

  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; } } Hvordan kan man se det er en int? Returner summen som en int VVU-IT: Softwarekonstruktion

  13. Opgaver • Alle følgende opgaver tager udgangspunkt i eksemplet med summen af tallene i et array: • Lav en metode, som beregner gennemsnittet af tallene i et array. • Lav en metode, som tæller antal forekomster af værdien 7 i et array. • Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. • 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. VVU-IT: Softwarekonstruktion

  14. Agenda Opsamling fra sidste gang • Forgreninger, • Løkker • Arrays • Metoder • Opgaver Algoritmeskabeloner: • Sweep-algoritmer • Søge-algoritmer VVU-IT: Softwarekonstruktion

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

  16. Sweep – en algoritmeskabelon • 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 < DO_INIT: initialiseringaf DO operationen >; < INIT: initialiseringaf US (ubesøgtesæt) >; while < !DONE (dvs. US erikketomt)> { < SELECT: udvælgelementernefra US >; < DO: opererpådetudvalgte element>; < REMOVE: fjerndetudvalgte element fra US> } VVU-IT: Softwarekonstruktion

  17. Konkretisering af skabelonen på et array (int[ ] a) 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: INIT: i = 0 DONE: i >= a.length SELECT: a[i] REMOVE: i++ < DO_INIT >; int i = 0; while ( i < a.length ) { < DO something to a[i]) >; i++; } // end while VVU-IT: Softwarekonstruktion

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

  19. Opgaver (fra før) – er der nogle sweeps? • Alle følgende opgaver tager udgangspunkt i eksemplet med summen af tallene i et array: • Lav en metode, som beregner gennemsnittet af tallene i et array. • Lav en metode, som tæller antal forekomster af værdien 7 i et array. • Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. • 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. VVU-IT: Softwarekonstruktion

  20. Søgeskabelonen • 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 • Kandidatmængde: KM • Målelement: m • Kandidatelement: k < 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  VVU-IT: Softwarekonstruktion

  21. 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) 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 INITIER: int i = 0 UDVÆLG: k = a[i] KM¹ Ø: i < a.Length SPLIT: i ++ VVU-IT: Softwarekonstruktion

  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: • Lav en metode, som beregner gennemsnittet af tallene i et array. • Lav en metode, som tæller antal forekomster af værdien 7 i et array. • Lav en metode, som returnerer sand, hvis værdien 3 findes i et array og falsk hvis ikke. • 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. VVU-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 VVU-IT: Softwarekonstruktion

  24. Opgaver i løkker og skabeloner • For alle opgaverne skal det overvejes hvilken skabelon, der benyttes, og hvordan operationerne er konkretiseret: • 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) • Lav en metode, som returnerer antallet af tal i et double[ ], som ligger mellem 10,0 og 20,0. Test den. • 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? • Lav en metode, som finder første forekomst af et tegn i et char[ ]. • 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.) VVU-IT: Softwarekonstruktion

More Related