Föreläsning 4: for, while, do-while

Save this PDF as:
 WORD  PNG  TXT  JPG

Storlek: px
Starta visningen från sidan:

Download "Föreläsning 4: for, while, do-while"

Transkript

1 TDA 545: Objektorienterad programmering Föreläsning 4: for, while, do-while Magnus Myréen Chalmers, läsperiod 1,

2 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (year%4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

3 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (year%4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

4 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (300 % 4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

5 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if ( 0 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

6 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (true) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

7 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: if (true) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; nu vet vi att första { körs och else raderas Anta att minnet är: variabel, dvs en minnesplats 300 namn: year

8 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

9 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

10 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 300 % 100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

11 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 0 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

12 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (true) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

13 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (true) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

14 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

15 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

16 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (300 % 400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

17 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 300 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

18 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (false) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

19 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (false) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

20 Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: return false; variabel, dvs en minnesplats 300 namn: year resultatet är att metoden/funktionen returnerar false, mera om metoder senare

21 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först evalueras deklarationen Anta att minnet är: variabeler, dvs minnesplatser: int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5;

22 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först evalueras deklarationen int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: minnesplatsen är tom namn: thismonth

23 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nu har deklarationen körts då raderar vi den int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

24 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

25 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

26 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; variabeler, dvs minnesplatser: en ny minnesplats skapas med 1987 som värde namn: thismonth 1987 namn: thisyear

27 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear

28 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear

29 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

30 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

31 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

32 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = ; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

33 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1988; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

34 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1988; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

35 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

36 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

37 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = ; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

38 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1993; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

39 Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth koden har kört klart 1987 namn: thisyear 1993 namn: nextyear

40 Beräkningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Öva på egenhand på papper t.ex.

41 or-satsen 8; i = i+1) { i + ); --- (på en rad) ch <= 'z'; ch++) { n(ch); en per rad 50; tal=2*tal){ n(tal); med 8, 16, 32 while loopar Loopar med okänt antal varv=while Loopar med okänt antal varv=while Blocket utförs noll eller flera gånger. Syntax Blocket utförs noll eller flera gånger. while (<boolean expression>) { Syntax Informell semantik while (<boolean expression>) <statements> { 1: beräkna <boolean expression> <statements> 2: om det blev true, kör <statements> Informell Semantik och fortsätt från steg 1 igen. 1. Loopvillkoret (boolean expression) evalueras. Informell Semantik 3: om det blev false, då är while klart, 1. Loopvillkoret (boolean expression) evalueras. dvs programmet fortsätter köra koden 2. Om det är sant exekveras satserna inuti loopen (<statements>) en gång varefter 1-2 utförs igen. som kommer efter 2. Om det är sant exekveras satserna inuti loopen (<statements>) en gång varefter 1-2 Tips utförs I igen. beräkningar skall man alltid ersätta 3. Om while villkoret (<bool- exp>) är falskt görs { satser ingenting dvs loopen terminerar (stannar). 3. Om villkoret är falskt görs ingenting dvs loopen terminerar (stannar). int i = 0; int p = 4; while (i < 10 && p > 2) { satser... i = i+1; // end loop if (<bool- exp>) { int satser; i = 0; int while p = 4; (<bool- exp>) { satser while (i < 10 && p > 2) { satser... viktigt att i eller p ändras så loopen

42 Exempel för while int i = 0; while (i < 3) {

43 Exempel för while int i = 0; while (i < 3) {

44 Exempel för while while (i < 3) { namn: i 0

45 Exempel för while while (i < 3) { namn: i 0

46 Exempel för while if (i < 3) { while (i < 3) { namn: i 0

47 Exempel för while if (i < 3) { while (i < 3) { namn: i 0

48 Exempel för while if (0 < 3) { while (i < 3) { namn: i 0

49 Exempel för while if (true) { while (i < 3) { namn: i 0

50 Exempel för while while (i < 3) { namn: i 0

51 Exempel för while while (i < 3) { namn: i 0

52 Exempel för while while (i < 3) { namn: i 0

53 Exempel för while System.out.print(0 + " "); while (i < 3) { namn: i 0

54 Exempel för while System.out.print("0 "); while (i < 3) { namn: i 0

55 Exempel för while System.out.print("0 "); while (i < 3) { namn: i 0

56 Exempel för while while (i < 3) { namn: i Utskrift (output): 0 0

57 Exempel för while while (i < 3) { namn: i Utskrift (output): 0 0

58 Exempel för while i = 0 + 1; while (i < 3) { namn: i Utskrift (output): 0 0

59 Exempel för while i = 1; while (i < 3) { namn: i Utskrift (output): 0 0

60 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

61 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

62 Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

63 Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

64 Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

65 Exempel för while namn: i 1 if (1 < 3) { while (i < 3) { Utskrift (output): 0

66 Exempel för while namn: i 1 if (true) { while (i < 3) { Utskrift (output): 0

67 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

68 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

69 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0 1

70 Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0 1

71 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

72 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

73 Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

74 Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

75 Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

76 Exempel för while namn: i 2 if (true) { while (i < 3) { Utskrift (output): 0 1

77 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

78 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

79 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1 2

80 Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1 2

81 Exempel för while while (i < 3) { namn: i Utskrift (output):

82 Exempel för while while (i < 3) { namn: i Utskrift (output):

83 Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output):

84 Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output):

85 Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output):

86 Exempel för while if (3 < 3) { while (i < 3) { namn: i Utskrift (output):

87 Exempel för while namn: i 3 detta betyder att koden mellan { inte körs if (false) { while (i < 3) { Utskrift (output): 0 1 2

88 Exempel för while namn: i 3 Utskrift (output): koden har kört klart

89 Exempel 2 vad händer om vi ändrar koden så här? int i = 0; while (i = 3) { System.out.print(i + " ); i = i + 2; och så här?

90 Exempel 2 int i = 0; while (i == 3) { System.out.print(i + " ); i = i + 2; Utskrift (output): osv

91 Exempel 2 Loopar av denna stil är mycket vanliga: deklaration och utgångsvärde int i = 0; villkor för while while (i < 3) { beräkning som inte ändrar på i justering av variabeln i Dessa loopar kan skrivas med for-satsen: deklaration och utgångsvärde villkor för while justering av variabeln i for (int i = 0; i < 3; i = i + 1) { beräkning som inte ändrar på i

92 int i = 0; while (i < 3) { for (int i = 0; i < 3; i = i + 1) { Tips For av formen for (<init>, <bool>, <chg>) { <stmts> är precis samma som <init>; while (<bool>) { <stmts>; <chg>

93 case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; // return => no break needed case 4: case 6: case 9: case 11: return 30; case 2: F3 10 Loopar med känt antal varv = for Syntax for(<init>; <boolexpr>; <change>) { if (leapyear(year)) { return 29; else { return 28; // dålig indentering <statements> Informell Semantik 1. init uttrycket beräknas (sker bara en gång). Vanligen initialiserar man bara en räknare till dess startvärde. 2. <stmts> boolexpr beräknas. Så länge det är sant kommer default: return -1; // end switch // end daysinmonth 3. loopens satser (statements) att beräknas. 4. uttrycket change beräknas. Vanligen ökar man räknaren med ett. Gå till punkt 2. räknaren skall deklareras. Om det görs i loopen <stmts>; så är den inte känd utanför loopen räknaren bör inte ändras i loopens satser init, boolexpr, change kan uteslutas init och change kan vara flera kommaseparerade satser Loopar med känt antal varv = for Syntax for(<init>; <boolexpr>; <change>) { for satsen: loopar med känt antal varv <statements> Tips For av formen for (<init>, <bool>, <chg>) { är precis samma som <init>; while (<bool>) { <chg> Informell Semantik 1. init uttrycket beräknas (sker bara en gång). Vanligen initialiserar man bara en räknare till dess startvärde. 2. boolexpr beräknas. Så länge det är sant kommer 3. loopens satser (statements) att beräknas. 4. uttrycket change beräknas. Vanligen ökar man räknaren med ett. Gå till punkt 2. räknaren skall deklareras. Om det görs i loopen så är den inte känd utanför loopen räknaren bör inte ändras i loopens satser init, boolexpr, change kan uteslutas init och change kan vara flera kommaseparerade satser Inget av de två sista rekommenderas F3 12

94 Exempel på for-satsen for (int i = 0; i <= 8; i = i+1) { System.out.print(i + ); // (på en rad) for (char ch = 'a'; ch <= 'z'; ch++) { System.out.println(ch); // a b c... z med en per rad for(int tal=1; tal<=50; tal=2*tal){ System.out.println(tal); // tal blir 1, 2, 4, 8, 16, 32 använd endast den här formen Keep it simple

95 ( Loopar med okänt antal varv = do-while ) Blocket utförs en eller flera gånger *** Ovanligt att man vill göra det *** do-while loopar ( Loopar ( Loopar med med okänt okänt antal antal varv varv = = Syntax do-while ) ) Vanliga fel vid konstr loopar Vanliga f Lämpar sig för inläsning från en användare Blocket utförs en eller flera gånger Blocket utförs do en { Blocket utförs en eller eller flera flera gånger gånger *** Ovanligt att man vill göra det *** De vanligaste felen är *** Ovanligt att <statements> man vill göra det *** De *** Ovanligt att man vill göra det Lämpar sig för inläsning Lämpar från sig en för användare oändliga *** De vanligaste fe while inläsning (<boolean från en expression>); loopar och off-by-o användare oändliga Lämpar sig för inläsning från en användare oändliga loopa Syntax Syntax Informell Semantik Syntax (pseudo-) oändlig (pseudo-) loop: do { oän do { 1. Satserna (statements) utförs en (pseudo-) gång oänd do { int i = 0; int i = 0; <statements> <statements> 2. Loopvillkoret (boolean while (i expr.) < 10) beräknas. int i = 0; <statements> while { (i < while (<boolean expression>); while (<boolean expression>); while (i < 1 while (<boolean expression>); Om det är sant utförs satser 1-2 igen... satser. Informell Semantik Informell Semantik satser.. i = i-1; Informell Semantik3.Om villkoret är falskt i = görs i-1; ingenting 1. Satserna (statements) 1. Satserna utförs (statements) en gång utförs en gång i dvs = i-1; 1. Satserna (statements) loopen utförs terminerar. en gång 2. Loopvillkoret (boolean expr.) beräknas. För att komma 2. Loopvillkoret (boolean expr.) beräknas. För att komma ur en oändlig lo 2. Loopvillkoret int (boolean n = 0; expr.) beräknas. För att komma Om det är sant utförs 1-2 igen dvs control-c, <stmts> Om det är sant utförs 1-2 igen do { dvs control-c, håll in tangenten Om det är sant utförs 1-2 igen dvs 3.Om villkoret är falskt görs ingenting dvs på control-c, C h 3.Om villkoret är falskt görs ingenting println( Mata dvs på Cett tal >5 ); 3.Om villkoret loopen terminerar. är falskt görs ingenting dvs på C loopen terminerar. n = in.nextint(); int loopen n = terminerar. 0; off-by-one: (f int n = 0; while ( n<=5 ); int do n = { 0; off-by-one: (fält off-by-one: kommer int[] pnr1t sena (fä do { // gör jobbet här, println( Mata in ett tal >5 int[] inte ); pnr1to9 i loopen do { int[] for = new (int pnr1to int[ i= println( Mata println( Mata n ett = in.nextint(); tal >5 ); ett tal >5 for ); (int i=0; i<=9; pnr1to9[ i=i+ <stmts> F3 for (int 15 i=0 n = in.nextint(); n = while in.nextint(); ( n<=5 pnr1to9[i] = pnr1to9[i läs tal while ( n<=5 ); while // gör ( n<=5 jobbet ); här, inte i loopen // end lo Tips do-while av formen do { while (<bool- exp>); är precis samma som <stmts>; while (<bool- exp>) {

96 Scanner (används i nästa ex.) Klassen java.util.scanner förser oss med inmatningsprimitiver så vi kan läsa tokens" från tangentbordet: (en token kan vara ett tal eller en sträng) import java.util.scanner;... Scanner in = new Scanner(System.in); String str; while (in.hasnext()) { str = in.next(); System.out.println(str); Metoder i Scanner: (ersätt X med t.ex. Int) in.hasnextx() finns det ett X in.hasnext() finns det någonting in.nextx() ger nästa X in.next() ger nästa token som sträng in.nextline() ger hela raden som en sträng

97 do-while exempel int n = 0; do { println( Mata in ett tal >5 ); n = in.nextint(); while (n <= 5); precis samma som: int n = 0; println( Mata in ett tal >5 ); n = in.nextint(); while (n <= 5) { println( Mata in ett tal >5 ); n = in.nextint();

98 Vanliga fel vid konstruktion av loopar De vanligaste felen är oändliga loopar och off-by-one fel. (pseudo-)oändlig loop: int i = 0; while (i < 10) { satser... i = i- 1; För att komma ur en oändlig loop tryck: control-c (dvs håll in tangenten ctrl och tryck på C) off-by-one: (arrays kommer senare) int[] array = new int[9]; for (int i=0; i<=9; i=i+1) { array[i] = läs tal från användaren försöker läsa index 9 som inte finns

99 Kontrollstrukturer Kontrollstrukturer Kontrollstrukturer När använder man vad? När När använder använder man man vad? vad? Några generella tips: Några generella tips: for: Några generella tips: for: for: Loopar med känt antal varv Loopar med Loopar känt antal med varv känt antal varv keep it simple - det bör vara nåt i stil while med keep for it (int simple i=0, - det i<10; bör vara i++) nåt... i stil med använd for annars (int en i=0, while i<10; i++)... använd annars en while keep it simple - det bör vara nåt i stil med for (int i=0, i<10; i++)... använd annars en while while Loopar while med okänt antal varv noll Loopar eller med flera while okänt varv antal varv do-while Loopar med okänt antal varv noll eller flera varv noll eller flera varv Loopar do-while med okänt antal varv ett Loopar eller med flera okänt varv (ovanligt antal varv - undvik) for: Kontrollstrukturer När använder man vad? Några generella tips: Loopar med känt antal varv D De flesta De flesta satserna satsern är Ea Ett program Ett program byggs byggs huvudsak deklarationer deklarationer och sa Enkla satser Enkla satser (enkla satser avslutas med (enkl ";") (enkla satser avslutas med Tilldelning Tilldelning Till Metodanrop (av void metod Metodanrop (av void Me break ("Kortslutning" av loo return break <uttryck> ("Kortslutning" bre (För return att avsluta <uttryck> underprog ret resultat (För från att avsluta funktioner) unde ; (Gör resultat ingenting från ) funkti ; (Gör ingenting ) keep it simple - det bör vara nåt i stil m for (int i=0, i<10; i++)... använd annars en while Loopar med okänt antal varv noll eller flera varv do-while Loopar med okänt antal varv Sammansatta satser ett eller flera varv (ovanligt - undvik) Enkla ; (avslutas Sammansatta INTE med ";" satser utom do Villkorsats (avslutas (if) INTE med ";" Sam ut Flervalsats Villkorsats (switch) (if)

100 for: Loopar med känt antal varv med. De flesta satserna är avklarade keep it simple - det bör vara nåt i stil med for (int i=0, i<10; i++)... använd annars en while De flesta satserna är avklarade Ett program byggs huvudsakligen upp av deklarationer och satser De flesta satserna är avklarade Enkla satser while Loopar med Ett program okänt antal byggs varv huvudsakligen upp av noll eller flera varv deklarationer och satser Enkla satser (enkla satser avslutas med ";") Tilldelning do-while (enkla satser avslutas med ";") Tilldelning Loopar med okänt antal varv Metodanrop (av void metoder) ett eller flera varv (ovanligt - undvik) break ("Kortslutning" av loop/switch sats) Metodanrop (av void metoder) break ("Kortslutning" av loop/switch sats) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) ; (Gör ingenting ) ; F3 (Gör ingenting 17 ) Enkla satser (enkla satser avslutas med ";") Tilldelning Metodanrop (av void metoder) break ("Kortslutning" av loop/switch sats) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) ; (Gör ingenting ) Sammansatta satser (avslutas INTE med ";" utom do-while ) Villkorsats (if) Flervalsats (switch) Iterationssatser (for, while och do-while) Blocksats ( {satser ) F3 18 Sammansatta satser Sammansatta satser (avslutas INTE med ";" utom do-while ) Villkorsats (if) Flervalsats (switch) (avslutas INTE med ";" utom do-while ) Villkorsats (if) Kompilering och länkning 1. Från anteckningarna skapas en sk källtext med hjälp av ett editeringsprogram tex emacs. Källtexten utgör den för oss läsbara beskrivningen av det vi vill att programmet skall göra. Program,

101 F3 17 F3 18 F3 17 F3 18 Kompilering och länkning Kompilering Kompilering och länkning och länkning 1. Från anteckningarna 1. Från anteckningarna skapas en skapas källtext en sk med källtext hjälp med av ett hjälp av ett editeringsprogram editeringsprogram tex emacs. tex Källtexten emacs. Källtexten utgör den utgör för oss den läsbara för oss läsbara beskrivningen beskrivningen av det vi vill av det att programmet vi vill att programmet skall göra. skall Program, göra. Program, programtext programtext och källprogram och källprogram är andra benämningar är andra benämningar på källtext. på källtext. Vanligen slutar Vanligen källtextens slutar källtextens namn på något namn som på något avslöjar som vilket avslöjar språk vilket språk som använts, som tex använts,.ada,.java, tex.ada,.c (C),.java,.p (Pascal),.c (C),.p.asm (Pascal), (assembler).asm (assembler) osv. osv. 2. Källtexten 2. Källtexten kan vi ge som kan vi indata ge som till indata en kompilator. till en kompilator. En kompilator En kompilator översätter, översätter, den för oss den begripliga för oss begripliga men för datorn men för obegripliga, datorn obegripliga, texten tilltexten t maskinkod maskinkod som datorn som förstår. datorn förstår. Detta kallas Detta alltså kallas kompilering. alltså kompilering. I I Javas fall så Javas översätts fall så källtexten översätts källtexten till en mellanform, till en mellanform, ett slags ett slags maskinspråk maskinspråk för alla datorer, för alla som datorer, kallas som bytekod. kallas Kompilatorn bytekod. Kompilatorn analyserar analyserar också texten också och texten kontrollerar och kontrollerar om programmet om programmet vi skrivit ärskrivit är ett språkligt ett korrekt språkligt program. korrekt Om program. det tex Om förekommer det tex förekommer syntaxfel syntaxfel eller eller typfel i källtexten typfel i källtexten så meddelar så meddelar kompilatorn kompilatorn detta och detta stannar. och stannar. 3. Som resultat 3. Som av resultat kompileringen av kompileringen får vi ett program får vi ett som program innehåller som innehåller de d genererade genererade bytekodinstruktionerna. bytekodinstruktionerna. Detta lagras Detta i en lagras fil som i en heter fil som heter samma som samma källtexten som källtexten men med men appendix med appendix.class..class. 4. Varje dator 4. Varje har sedan dator har en bytekod sedan en bytekod interpreter interpreter som som som översätter som översätter till den aktuella till den datorns aktuella maskinkod. datorns maskinkod. Detta program Detta är program på är på maskinkodsform maskinkodsform men alla referenser men alla referenser (adresser) (adresser) är inte upplösta är inte upplösta (kända). Det (kända). innebär Det att innebär vissa andra att vissa programmoduler andra programmoduler (som tex (som tex java.lang) java.lang) inte är kända inte ännu är kända eftersom ännu de eftersom kompilerats de kompilerats separat. separat. 5. Nästa steg 5. Nästa är att steg kalla är på att länkaren kalla på som länkaren bestämmer som bestämmer var var instruktionerna instruktionerna skall ligga skall i minnet ligga och i minnet fyller och i alla fyller referenser i alla referenser mellan mellan modulerna. modulerna. Om vi länkar Om ihop vi länkar våra ihop objektprogram våra objektprogram och andraoch andra referenser referenser så får vi ett så exekverbart får vi ett exekverbart program, program, ett laddprogram. ett laddprogram. 6. Ett laddprogram 6. Ett laddprogram är färdigt är att färdigt ladda att in ladda i datorn in för i datorn att köras. för att I detta köras. I de program är program alla referenser är alla referenser upplösta. upplösta. 7. När vi exekverar 7. När vi exekverar programmet programmet får vi eventuellt får vi eventuellt förse det med förse indata det med indata och får (eventuellt) och får (eventuellt) ett resultat ett (utdata). resultat Vi (utdata). kan exekvera Vi kan exekvera programmet programmet genom att genom namnet att ge på namnet källtextfilen på källtextfilen utan appendix. utan appendix. Dessa faser Dessa måste faser dessutom måste dessutom gås igenom gås varje igenom gång varje man gång ändrar man något ändrar i något källtexten källtexten

7 GRUNDERNA I PROGRAMMERING

7 GRUNDERNA I PROGRAMMERING Grunderna i programmering 7 GRUNDERNA I PROGRAMMERING Detta kapitel är bokens största kapitel och kanske det viktigaste. Vi kommer här att gå igenom grunderna för sekventiell programmering. Det vi går

Läs mer

Heltal(int) Programmeringsteknik 54

Heltal(int) Programmeringsteknik 54 Heltal(int) Datatypen int används tillsammans med char, short int och long int för att lagra heltal i C. Matematisk sett finns det oändligt många heltal. På en dator måste det införas en begränsning på

Läs mer

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Föreläsning 3

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Föreläsning 3 Föreläsning 3 3.3 for-satsen I programmering talar man om tre sätt på vilket ett programflöde kan vara beskaffat: 1. Saker kan hända efter varandra, i sekvens. 2. Flödet kan innebära att ett val görs,

Läs mer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer Föreläsning 4 Metodanrop switch-slingor Rekursiva metoder Repetition av de första föreläsningarna Inför seminariet Nästa föreläsning Metodanrop - primitiva typer Vid metodanrop kopieras värdet av en variabel

Läs mer

PROV. 10 Uppräknade datatyper

PROV. 10 Uppräknade datatyper 10 10.1 10.2 Definition 10.3 Användning och regler 10.4 switch-satsen 10.5 Iteration över samtliga värden 10.6 Instansvariabler och instanstjänster 10.7 Värdespecifika implementationer 10.1 Hur ser vi

Läs mer

Föreläsning 5 Mer om funktioner, villkor

Föreläsning 5 Mer om funktioner, villkor Föreläsning 5 Mer om funktioner, villkor Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 15.9.2011 Varför? Det finns sammanhang där ett

Läs mer

Barnhack! kom igång med Scratch del 1

Barnhack! kom igång med Scratch del 1 Måns Jonasson Barnhack! kom igång med Scratch del 1 välkommen till kom igång med scratch! 3 Om den här kursen 3 Vad är Scratch? 3 grunderna i scratch vad är vad? 3 block script i olika kategorier 5 Rörelse

Läs mer

Roboten Karel lär sig Java

Roboten Karel lär sig Java Verónica Gaspes Högskolan i Halmstad 23 augusti 2010 Roboten Karel lär sig Java Tacksägelse Detta är en översättning och en anpassning till Högskolan i Halmstads programmeringsmiljö av delar av Karel the

Läs mer

For-sats/slinga. Notis

For-sats/slinga. Notis Notis I koden för exemplen förekommer kommentarer. Kommentarer i Matlabkoden identieras med prexet %. Kommentarer är text/kod som Matlab bortse från. Alltså all text/kod som ligger till höger och på samma

Läs mer

Texas Instruments Sverige 1997 Printed in Sweden by Gumm essons Tryckerier AB

Texas Instruments Sverige 1997 Printed in Sweden by Gumm essons Tryckerier AB Förord Detta häfte innehåller ett a ntal mat ematikp roblem inom olika områden av den mat ematik som behandlas inom de olika ku rsern a på g ymnasieskolan. Vi har, i de flesta fall, inte delat upp i nnehållet

Läs mer

Träningsprogram för att bli av med tvångssyndrom

Träningsprogram för att bli av med tvångssyndrom Träningsprogram för att bli av med tvångssyndrom Programmet bygger på Kognitiv biobeteendeterapeutisk självhjälpsmanual för tvångssyndrom av Jeffrey Schwartz. Texten har översatts av Susanne Bejerot. Texten

Läs mer

Word och Excel. - en kort handledning Av Dag Kihlman och Martin Gellerstedt

Word och Excel. - en kort handledning Av Dag Kihlman och Martin Gellerstedt Word och Excel - en kort handledning Av Dag Kihlman och Martin Gellerstedt Innehållsförteckning 1 Microsoft Word... 1 1.1 Formatering av stilar (eller rättare sagt formatmallar)... 1 1.1.1 Vad är en formatmall?...

Läs mer

Talmönster och algebra. TA

Talmönster och algebra. TA Talmönster och algebra. TA Diagnoserna i området avser att kartlägga om eleverna kan upptäcka talmönster samt på olika sätt bearbeta algebraiska uttryck och ekvationer. Förståelse av koordinatsystem och

Läs mer

Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering

Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering Programmergsmetodik DV1 Programkonstruktion 1 Moment 10 Om sidoeffekter In/utmatng och imperativ programmerg Referentiell transparens I ren funktionell programmerg kan man byta lika mot lika utan att programmets

Läs mer

TITEL. Johannes Hedberggymnasiet. Laborantens namn: Medlaboranters namn: Klass: Skola: Påbörjad: Inlämnad:

TITEL. Johannes Hedberggymnasiet. Laborantens namn: Medlaboranters namn: Klass: Skola: Påbörjad: Inlämnad: Johannes Hedberggymnasiet Ha gärna med skolans namn högst upp i vänstra hörnet, det ger framsidan lite guldkant Johannes Hedbergloggan är väldigt snygg att ha uppe i hörnet. Kopiera gärna denna. TITEL

Läs mer

An enrichment and extension programme for primary-aged children

An enrichment and extension programme for primary-aged children An enrichment and extension programme for primary-aged children Created by Tim Bell, Ian H. Witten and Mike Fellows Adapted for classroom use by Robyn Adams and Jane McKenzie Illustrated by Matt Powell

Läs mer

Mer om reella tal och kontinuitet

Mer om reella tal och kontinuitet Kapitel R Mer om reella tal och kontinuitet I detta kapitel formulerar vi ett av de reella talens grundläggande axiom, axiomet om övre gräns, och studerar några konsekvenser av detta. Med dess hjälp kommer

Läs mer

Att ta fram en tidsplan

Att ta fram en tidsplan Att ta fram en tidsplan KAMP Företagsutveckling Tidplaner GANTT-schema När det gäller att ta fram tidsplaner för ett projekt är en av de vanligaste och också mest användbara metoderna det så kallade GANTT-schemat.

Läs mer

Komma igång med TI-82 STATS

Komma igång med TI-82 STATS Komma igång med TI-82 STATS Viktigt Texas Instruments lämnar inga uttryckliga eller underförstådda garantier för något program eller bok. Detta innefattar, men är inte begränsat till, underförstådda garantier

Läs mer

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt: 8. Objektorientering Skälet till att C++ är ett av de mest använda programspråken är att det är objektorienterat. Detta bygger vidare på begreppet struct (ursprungligen från språket C som inte är objektorienterat),

Läs mer

Hur man gör en poster i PowerPoint

Hur man gör en poster i PowerPoint Hur man gör en poster i PowerPoint Victoria Johansson Humanistlaboratoriet, Lunds universitet it-pedagog@sol.lu.se Senast uppdaterad av Susanne Schötz 080128 Innehåll 1 Inledning 2 1.1 Innehållet i denna

Läs mer

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye DD2310 Javaprogrammering för Pythonprogrammerare Johan Boye James Gosling pappa till Java Hej.java public class Hej { public static void main( String[] args ) { System.out.println( "Hej" ); Java basics

Läs mer

Träningsprogram för att förstärka ett önskvärt beteende hos små barn

Träningsprogram för att förstärka ett önskvärt beteende hos små barn Åtgärder för aggressiva/trotsiga små barn Ett samverkansprojekt mellan barnpsykiatri och skola Träningsprogram för att förstärka ett önskvärt beteende hos små barn Varje gång barnet gör på ett visst sätt

Läs mer

Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4

Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4 Sus Andersson Så surfar du säkrare Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4 Digitalt Källskydd - en introduktion Sus Andersson, Fredrik Laurin

Läs mer

KDiff3 är ett verktyg för jämförelser och sammanfogning av filer och kataloger, som

KDiff3 är ett verktyg för jämförelser och sammanfogning av filer och kataloger, som Handbok KDiff3 Joachim Eibl Översättare: Stefan Asserhäll Revision 0.9.92 (2007-31-03) Copyright 2002-2007 Joachim Eibl Permission is granted to copy, distribute and/or modify

Läs mer

18 Eldorado 4 A Lärarbok Undervisning att skapa förutsättningar för elevers lärande

18 Eldorado 4 A Lärarbok Undervisning att skapa förutsättningar för elevers lärande Undervisning att skapa förutsättningar för elevers lärande Eleverna behöver få möta aktiviteter där de får möjlighet att konkret uppleva ett nytt begrepp eller en ny metod, reflektera gemensamt och med

Läs mer

Hur mycket släkt är släktingar?

Hur mycket släkt är släktingar? Hur mycket släkt är släktingar? En studie i den genetiska likhetens variation Examensarbete för kandidatexamen i matematik vid Göteborgs universitet Kandidatarbete inom civilingenjörsutbildningen vid Chalmers

Läs mer

Del 1 Allmänt... 1. Del 2 Komma igång...3. Del 3 Systemspel med Jokersystemet... 17

Del 1 Allmänt... 1. Del 2 Komma igång...3. Del 3 Systemspel med Jokersystemet... 17 Användarhandbok Del 1 Allmänt... 1 Inledning... 1 Rättigheter... 1 Support... 1 Jokersystemet... 2 Om handboken... 2 Systemkrav... 2 Del 2 Komma igång...3 Köp Jokersystemet... 3 Installera Jokersystemet...

Läs mer

Den magiska dörren. - ett romanprojekt

Den magiska dörren. - ett romanprojekt Den magiska dörren - ett romanprojekt Idé och lärarhandledning av Josef Sahlin 2011 Bakgrund! 3 Idé! 3 Rättigheter! 4 Syfte! 4 Arbetets gång! 4 Lektionsupplägg! 5 Framsida! 5 Kapitel 1 - Hej! 6 Kapitel

Läs mer

Att skriva uppsats. Uppsatsens delar

Att skriva uppsats. Uppsatsens delar Att skriva uppsats Det finns många olika sätt att skriva uppsats på. I den här handledningen beskrivs en modell som, i lite olika varianter, är vanlig i språkvetenskapliga uppsatser. Uppsatsens delar Du

Läs mer