Ladda ner presentationen
1
10. Elementen i strukturerad programmering
Sekvens Selektion Iteration
2
Sekvens
3
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? Julkalendern med Allrams höjdarpaket 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!
4
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); }
5
Sekvens JSP Flödesdiagram bearbetning bearbetning Program
6
Sekvens, exempel public class Hello { public static void Main ()
JSP Flödesdiagram Start Skriv ut ”Hello World!” Hello Skriv ut ”Hello World!” Stopp public class Hello { public static void Main () System.Console.WriteLine(“Hello World!"); }
7
Sekvens AreaTest Inmatning Beräkning Utskrift Skriv ledtext Läs radie
area=PI * radie*radie Skriv area
8
Sekvens AreaTest Skriv ledtext Läs radie area = pi * radie * radie
Slut
9
Sekvens public class AreaTest { public static void Main ()
System.Console.WriteLine("Ange radie: "); double radie = double.Parse( System.Console.ReadLine() ); double area = * radie * radie; System.Console.WriteLine("area = " + area); }
10
Selektion
11
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
12
Booleska operatorer ! inte || eller && och
13
Booleska (logiska) operatorer
! (ICKE) && (OCH) || (ELLER) Om… a b a && b a || b !a s s s s f s f f s f f s f s s f f f f s
14
Selektion - if JSP Flödesdiagram villkor sant falskt bearbetning
Program (villkor) o
15
Selektion - if, exempel JSP Flödesdiagram SelektionsTest Start sant
Är antal=2? sant falskt Skriv ut "OK, det stämde!" Sätt antal = 2 Sätt antal = 2 antalkoll (antal = 2) o Skriv ut "OK, det stämde!" Stopp
16
Sekvens public class IfTest { public static void Main ()
int antal = 2; if (antal == 2) System.Console.WriteLine(“OK, det stämde!"); }
17
Selektion – if-else JSP Flödesdiagram villkor sant Program falskt
(villkor = falskt) bearbetning bearbetning o o bearbetning bearbetning
18
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 "OK, det stämde!" Skriv ”Nej, det blev fel!” Skriv ”Nej, det blev fel!” Stopp
19
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!");
20
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 "OK, det stämde!" Skriv ”Utanför intervallet!” Skriv "OK, det stämde!" falskt Skriv ”Utanför intervallet!” Stopp
21
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!");
22
Villkorsoperatorn Exempel: int a = 23;
Kommer ni ihåg Excel? villkor resultat om sant resultat 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… )
23
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 );
24
Används för att jämföra strängar.
CompareTo CompareTo 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
25
CompareTo ett exempel Vad skrivs ut?? string s1 = ”Bo”;
string s2 = ”Hans”; if( (s1.CompareTo(s2)) > 0 ) { System.Console.Write(”Bo”); } else System.Console.Write(”Hans”); Vad skrivs ut??
26
Selektion – if-else/switch
JSP Flödesdiagram villkor Program Alternativ 1 bearbetning Alternativ 2 bearbetning (alt 1) (alt 2) (alt 3) o o o bearbet-ning bearbet-ning bearbet-ning Alternativ 3 bearbetning
27
Selektion – if-else/switch
JSP Flödesdiagram Start SwitchTest Läs in antal Läs in antal Antal-koll antal? 1 2 (antal = 1) (antal = 2) annat 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
28
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!"); default : System.Console.WriteLine(“Hmm, så ska det inte vara!"); }
29
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!");
30
Iteration
31
Iteration JSP Flödesdiagram Stomme falskt villkor (villkor)
bearbetning * sant bearbetning
32
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
33
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);
34
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
35
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 …
36
Iteration – do-while JSP Flödesdiagram Stomme bearbetning villkor sant
* (villkor) falskt
37
Iteration – do-while, exempel
JSP Flödesdiagram Iteration – do-while, exempel 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
38
Iteration - for JSP Flödesdiagram Stomme villkor (x ggr) bearbetning *
39
Iteration – vad for gör – egentligen…
JSP Flödesdiagram - initiering initiering - (villkor) - * villkor bearbet-ning loopslut bearbet-ning loopslut
40
Iteration – men ibland kan vi uttrycka for enklare…
JSP Flödesdiagram - (100 ggr) - * 100 ggr bearbet-ning bearbetning
41
Iteration - foreach JSP Flödesdiagram Stomme villkor *
(för varje x i y) Bearbetning för varje x i y Bearbetning
42
Iteration – break, continue
43
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å)
44
Rekursiva metoder Flödesdiagram 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() villkor för varje nod i v Directories (nod, nivå + 1) Stopp
45
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!
46
Diagram för metoder JSP Flödesdiagram Max Inparametrar:
a och b (heltal) Max Inparametrar: a och b (heltal) a > b returnera r r = a r = b (a > b) o o r = a r = b Returnera r
47
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
48
Diagram för metoder JSP Flödesdiagram Inläsning av tal x Start 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 Skriv ut z Stopp
49
Fler exempel
50
Statlig inkomstskatt Definiera problemet (Ur ”Dags att deklarera”): ”Om din beskattningsbara förvärvsinkomst är lägst 100 kr men högst kr, betalar du 200 kr i statlig inkomstskatt. Om din beskattningsbara förvärvsinkomst är högre än kr, betalar du statlig inkomstskatt med 200 kr plus 25% av den del som överstiger kr.”
51
Statlig inkomstskatt Planera för lösningen
Vid körning av programmet skall man ges tillfälle att mata in den beskattningsbara förvärvsinkomsten. När användaren matat in den aktuella inkomsten skall den statliga inkomstskatten skrivas ut, föregången av texten ”Den statliga skatten blir:” Vi förutsätter att den inmatade inkomsten är ett heltal. Man ska kunna göra godtyckligt många beräkningar utan att behöva starta programmet igen. För att markera avslutning ska ett negativt belopp matas in.
52
Strukturerad Programmering
Start Mata in inkomst inkomst [>= 0] [< 0] Beräkning Slut Skriv ut skatt
53
Strukturerad Programmering
Beräkning Start inkomst [>= 0 and < 100] [>= 100 and < ] [>= ] skatt = 0 skatt = 200 skatt = % Slut
54
Strukturerad Programmering
Start Mata in inkomst inkomst [< 0] [>= 0 and < 100] [>= 100 and < ] [>= ] Slut skatt = 0 skatt = 200 skatt = % Skriv ut skatt
55
Statlig inkomstskatt o o o o Start Tills inkomst < 0 *
Mata in inkomst Kolla inkomst Skriv ut skatt negativ Avsluta [negativt tal] o ingen Skatt = 0 [< 100] o låg Skatt = 200 [>= 100och < ] o hög Skatt = % [> ] o
56
Strukturerad Programmering
Pseudokod: REPETERA Läs in inkomst OM inkomst < 0 avbryt exekveringen ANNARS OM inkomst > skatt = * (inkomst ) ANNARS OM inkomst >= skatt = 200 ANNARS skatt = 0; OM-SLUT Skriv ut "Den statliga skatten blir: " + skatt LOOP-SLUT
57
Strukturerad Programmering
int skatt, inkomst; while (true) { Console.Write ("Ange den beskattningsbara inkomsten: "); inkomst = int.Parse( Console.ReadLine() ); if (inkomst < 0) { return; } else if (inkomst > ) { skatt = (int) ( * (inkomst )); } else if (inkomst >= 100) { skatt = 200; } else { skatt = 0; } Console.WriteLine("Den statliga skatten blir: " + skatt); }
58
Strukturer - poster class Bok { public string titel;
public string författare; public float pris; } class BokTest { public static void Main ( ) Bok programmeringsbok = new Bok(); programmeringsbok.titel = ”C# från grunden”; System.Console.WriteLine(programmeringsbok.titel); }
59
Strukturer - poster * titel författare pris
Även poster kan beskrivas med strukturdiagram class Bibliotek { public Bok[] böcker; } Bibliotek class Bok { public string titel; public string författare; public float pris; } * Bok Vad är den totala inköpssumman för alla böckerna? titel författare pris
60
Strukturer - poster Summering Vi börjar med att renodla vad vi behöver använda i algoritmen. summa = 0 Bibliotek Skriv ut summa Som du ser följer vi helt enkelt den struktur som redan finns! (Så länge det finns böcker) * Bok Vad är den totala inköpssumman för alla böckerna? summa = summa + pris pris
61
Strukturer - poster Vad är den totala inköpssumman för alla böckerna?
class Bok { public string titel; public string författare; public float pris; } class Bibliotek { public static void Main() Bok[] böcker = new Bok[2]; double summa = 0; böcker[0] = new Bok( ); böcker[0].titel = "AAA"; böcker[0].författare = "AAA"; böcker[0].pris = 100; böcker[1] = new Bok( ); böcker[1].titel = "BBB"; böcker[1].författare = "BBB"; böcker[1].pris = 200; for (int i = 0; i < böcker.Length; i++) summa = summa + böcker[i].pris; } System.Console.WriteLine(summa);
62
Strukturerad Programmering
Pseudokod (exempel ”studenterna”): skriv ut rubrik sätt räknare till 0 läs in 1:a studentens resultat REPETERA så länge studentens resultat är större än eller lika med 0 läs in studentens namn skriv ut namn och resultat OM totalpoäng är mindre än 60 lägg 1 till räknaren OM-SLUT läs in studentens resultat REPETERA-SLUT skriv ut antalet underkända studenter
63
Strukturerad Programmering
Pseudokod (exempel ”studenterna”): start A resultat >= 0 falskt Skriv antal Skriv rubrik sant Läs namn start antal = 0 Skriv namn, poäng Läs 1.a resultat resultat < 60 sant antal = antal + 1 A falskt Läs resultat
64
Strukturerad Programmering
Pseudokod (exempel ”studenterna”): Start Skriv rubrik antal = 0 Läs resultat Bearbeta alla Skriv antal Bearbeta * en student Läs namn Skriv namn, resultat resultat? Läs resultat antal o = antal + 1 o ----
65
Strukturerad Programmering
class Student { public string namn; public int poäng; } class Studentpoäng public static void Main ( ) int antal; Student student = new Student(); Console.WriteLine(”Skriv ut antalet underkända studenter”); antal = 0; Console.Write("Ange studentens resultat"); student.poäng = int.Parse( Console.ReadLine() ); while (student.poäng >= 0) Console.Write("Ange studentens namn"); student.namn = Console.ReadLine(); Console.WriteLine(student.namn + ” ” + student.poäng); if (student.poäng < 60) antal++; Console.WriteLine("antalet undergända studenter är = " + antal);
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.