650 likes | 853 Views
10. Elementen i strukturerad programmering. Sekvens Selektion Iteration. Sekvens. Sekvens. En sekvens beskriver något som kan delas upp i en bestämd tidsföljd, t.ex 19.00 Kulturnyheterna 19.10 Regionala nyheter 19.30 Filmkrönikan eller 06.00 Gomorron Sverige
E N D
10. Elementen i strukturerad programmering Sekvens Selektion Iteration
Sekvens En sekvens beskriver något som kan delas upp i en bestämd tidsföljd, t.ex 19.00 Kulturnyheterna 19.10 Regionala nyheter 19.30 Filmkrönikan eller 06.00 Gomorron Sverige 06.45 Klappar på kredit kan bli dyr affär, 06.50 Svensk hockey på hal is? 07.15 Julkalendern med Allrams höjdarpaket 07.30 Gomorron Sverige 07.49 Boktips för barn 08.10 Är Rumänien redo för EU? 08.20 Möt männen bakom Hipphipp! 09.30 Om barn 10.00 Alla sinnen tillåtna!
Sekvens public class JSPTest { public static void Main () { int a = 2; int b = 3; int c = 4; a = a + b + c; b = a + b + c; c = a + b + c; System.Console.WriteLine("a = " + a); System.Console.WriteLine("b = " + b); System.Console.WriteLine("c = " + c); } }
Program bearbetning bearbetning Sekvens JSP Flödesdiagram
Hello Skriv ut ”Hello World!” Sekvens, exempel JSP Flödesdiagram Start Skriv ut ”Hello World!” Stopp public class Hello { public static void Main () { System.Console.WriteLine(“Hello World!"); } }
Sekvens AreaTest Inmatning Beräkning Utskrift area=PI * radie*radie Skriv ledtext Läs radie Skriv area
Sekvens AreaTest Skriv ledtext Läs radie area = pi * radie * radie Skriv area Slut
Sekvens public class AreaTest { public static void Main () { System.Console.WriteLine("Ange radie: "); double radie = double.Parse( System.Console.ReadLine() ); double area = 3.1415 * radie * radie; System.Console.WriteLine("area = " + area); } }
Relationsoperatorer == Lika med != Inte lika med (Skilt från) > Större än >= Större än eller lika med < Mindre än <= Mindre än eller lika med
Booleska operatorer ! inte || eller && och
Booleska (logiska) operatorer !(ICKE) && (OCH) || (ELLER) Om… a b a && b a || b !a s s s s f s ff s f f s f s s fff f s
villkor sant bearbetning falskt Program bearbetning Selektion - if JSP Flödesdiagram (villkor) o
Sätt antal = 2 Är antal=2? sant Skriv ut "OK, det stämde!" falskt Selektion - if, exempel JSP Flödesdiagram SelektionsTest Start Sätt antal = 2 antalkoll (antal = 2) o Skriv ut "OK, det stämde!" Stopp
Sekvens public class IfTest { public static void Main () { int antal = 2; if (antal == 2) { System.Console.WriteLine(“OK, det stämde!"); } } }
Selektion – if-else JSP Flödesdiagram villkor sant Program falskt (villkor = sant) (villkor = falskt) bearbetning bearbetning o o bearbetning bearbetning
Selektion – if-else, exempel JSP Flödesdiagram Start SelektionsTest Läs in antal Läs in antal antalkoll Är antal=2? sant Skriv "OK, det stämde!" (antal = 2) falskt o o Skriv ”Nej, det blev fel!” Skriv "OK, det stämde!" Skriv ”Nej, det blev fel!” Stopp
Sekvens public class IfTest { public static void Main () { int antal = int.Parse( System.Console.ReadLine() ); if (antal == 2) { System.Console.WriteLine(“OK, det stämde!"); } else { System.Console.WriteLine(“Nej, det blev fel!"); } } }
Selektion – if-else, exempel JSP Flödesdiagram SelektionsTest3 Start Läs in antal Läs in antal antalkoll sant antal = 1 eller 2? (antal = 1 eller 2) o o Skriv ”Utanför intervallet!” Skriv "OK, det stämde!" Skriv "OK, det stämde!" falskt Skriv ”Utanför intervallet!” Stopp
Selektion – if-else public class IfTest { public static void Main () { int antal = int.Parse( System.Console.ReadLine() ); if (antal == 1 || antal == 2) { System.Console.WriteLine(“OK, det stämde!"); } else { System.Console.WriteLine(“Utanför intervallet!"); } } }
Villkorsoperatorn Kommer ni ihåg Excel? villkorresultat om santresultat om falskt Villkorsoperatorn i C/C++/Java/C#: villkor?resultat om sant:resultat om falskt ; Exempel: int a = 23; string b =a >= 10?“större”:“mindre”; System.Console.WriteLine( b ); (Nu har vi nämnt villkorsoperatorn, men använd hellre if-satser… )
if - else Villkorsoperatorn i C/C++/Java/C#: int a = 23; string b =a >= 10?“större”:“mindre”; System.Console.WriteLine( b ); Kan lika gärna (hellre?) använda en if-else-sats: int a = 23; string b = null; if (a >= 10) { b = “större”; } else { b =“mindre”; } System.Console.WriteLine( b );
CompareToCompareTo Används för att jämföra strängar. Uttrycket s1.CompareTo(s2) ger följande resultat: <0 om s1 är mindre än s2 =0 om s1 är lika med s2 >0 om s1 är större än s2 Tecken för tecken jämförs
CompareTo ett exempel string s1 = ”Bo”; string s2 = ”Hans”; if( (s1.CompareTo(s2)) > 0 ) { System.Console.Write(”Bo”); } else { System.Console.Write(”Hans”); } Vad skrivs ut??
Selektion – if-else/switch JSP Flödesdiagram villkor Program Alternativ 1 bearbetning Alternativ 2 bearbetning (alt 3) (alt 1) (alt 2) o o o bearbet-ning bearbet-ning bearbet-ning Alternativ 3 bearbetning
Selektion – if-else/switch JSP Flödesdiagram Start SwitchTest Läs in antal Läs in antal Antal-koll antal? 1 2 annat (antal = 1) (antal = 2) o o o Skriv ut ”Nu är det galet igen” Skriv ut ”OK, det stämde” Skriv ut ”Hmm, så ska det inte vara” Skriv ut ”Nu är det galet igen” Skriv ut ”OK, det stämde” Skriv ut ”Hmm, så ska det inte vara” Stopp
Sekvens – switch public class SwitchTest { public static void Main () { int antal = int.Parse( System.Console.ReadLine() ); switch ( antal ) { case 1 : System.Console.WriteLine(“Nu är det galet igen!"); break; case 2 : System.Console.WriteLine(“OK, det stämde!"); break; default : System.Console.WriteLine(“Hmm, så ska det inte vara!"); break; } } }
Sekvens – if-else public class IfTest { public static void Main () { int antal = int.Parse( System.Console.ReadLine() ); if (antal == 1 ) { System.Console.WriteLine(“Nu är det galet igen!"); } else if (antal == 2) { System.Console.WriteLine(“OK, det stämde!"); } else { System.Console.WriteLine(“Hmm, så ska det inte vara!"); } } }
Iteration JSP Flödesdiagram Stomme falskt villkor (villkor) sant bearbetning * bearbetning
JSP WhileLoop summa=0 antal =0 Läs in tal Talstomme medel = summa / antal Skriv ut medel Tal-bearbetning * (tal <> 999) summa = summa + tal antal = antal +1 Läs in tal Flödesdiagram Start tal = 999 Medel = summa / antal Skriv ut medel sant summa = 0 falskt antal = 0 Läs in tal summa = summa + tal Stopp antal = antal +1 Läs in tal
Iteration – while public class WhileLoop { public static void Main () { double summa = 0; int antal = 0; int tal = int.Parse( System.Console.ReadLine() ); while ( tal != 999 ) { summa = summa + tal; antal++; tal = int.Parse( System.Console.ReadLine() ); } double medel = summa / antal; System.Console.WriteLine(“Medel = “ + medel); } }
Ett återkommande mönster Standarditeration Iterationen i exemplet Initiering av uttrycket för villkoret - Inläsning av tal - iteration * iteration * (villkor) (tal är inte 999) ... Förändring av uttrycket för villkoret ... ... Inläsning av tal
Ett återkommande mönster Initiering av uttrycket för villkoret Inläsning av tal villkor tal = 999 sant sant falskt falskt … … Förändring av uttrycket för villkoret Inläsning av tal …
Iteration – do-while Flödesdiagram JSP Stomme bearbetning villkor sant * bearbetning (villkor) falskt
Iteration – do-while, exempel JSP Flödesdiagram Start Sätt fortsätt till ’n’ DoLoop Sätt fortsätt till ’n’ Skriv ut datum (fortsätt = y) * Läs in fortsätt Skriv ut datum Läs in fortsätt fortsätt y n Stopp
Iteration - for JSP Flödesdiagram Stomme villkor (x ggr) x ggr bearbetning * bearbetning
Iteration – vad for gör – egentligen… JSP Flödesdiagram - initiering initiering - * - villkor (villkor) bearbet-ning loopslut bearbet-ning loopslut
Iteration – men ibland kan vi uttrycka for enklare… JSP Flödesdiagram - (100 ggr) * - 100 ggr bearbet-ning bearbetning
Iteration - foreach JSP Flödesdiagram Stomme villkor * (för varje x i y) Bearbetning för varje x i y Bearbetning
Rekursiva metoder JSP Inparametrar: rot, av typen DirectoryInfo nivå, heltal Directories Skapa en sträng indent med längden nivå Skriv ut indent och DirectoryInfo v = rot.GetDirectories() Rekursiv Iteration (för varje nod i v) * Directories (nod, nivå)
Rekursiva metoder Inparametrar: rot av typen DirectoryInfo nivå, heltal Flödesdiagram Directories Skapa en sträng indent med längden nivå Skriv ut indent och DirectoryInfo v = rot.GetDirectories() villkor för varje nod i v Directories (nod, nivå + 1) Stopp
Fällor • Har du nollställt de variabler du använder innan du går in i en ny iteration? • Tänk särskilt på vad det är för värden i de variabler som ingår i olika villkor. • I synnerhet i villkorssatser för iterationer, eftersom du annars kan hamna i en oändlig loop! • Skrivbordstesta!
Diagram för metoder JSP Flödesdiagram Max Inparametrar: a och b (heltal) Inparametrar: a och b (heltal) Max a > b returnera r r = a r = b (a > b) o o r = a r = b Returnera r
Diagram för metoder JSP Flödesdiagram Inparametrar: a och b (heltal) Start Max Inparametrar: a och b (heltal) Max a > b (a > b) o o Returnera a Returnera b Returnera a Returnera b
Diagram för metoder JSP Flödesdiagram Inläsning av tal x Start Main Main Inläsning av tal y z = Max(x, y) Inläsning av tal x Inläsning av tal y z = Max(x, y) Skriv ut z Stopp Skriv ut z
Statlig inkomstskatt • Definiera problemet (Ur ”Dags att deklarera”): ”Om din beskattningsbara förvärvsinkomst är lägst 100 kr men högst 209 100 kr, betalar du 200 kr i statlig inkomstskatt. Om din beskattningsbara förvärvsinkomst är högreän 209 100 kr, betalar du statlig inkomstskatt med 200 kr plus 25% av den del som överstiger 209 100 kr.”