61
Grundkurs Programmering F7b: Funktioner på djupet! A. Cajander, STH HI1024

HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Grundkurs Programmering F7b: Funktioner på djupet!

A. Cajander, STH

HI1024

Page 2: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Dagens fokus…

DATA TYPES

CTRL STRUCT

PRG IN LARGE

PRG CORR Directives

int main(void){ declarations statements } /*comment*/ or //

Sequencing

Selection

Iteration

Side effects

Und. behavior

Imp. dependent

Basic

Compound Literals

Aggregates

Operands casting

Reference Abstract

Jump

Syntax related Logical related

typedef qualifiers

makefile

Precedence, Assosiativity

Implicit promotion, Explicit.

Functions

Exceptions 1

float int

3.14f 42

int/int

1

Aritmetic

Comparison Logical

Bitwise

Compound assign.

Referens Other

2

= + - * / % ++ -- + - * / % & | ^ << >>

== != > < >= <= ! && ||

~ & | ^ << >>

a[i] * & a->b a.b fn() , A?B:C sizeof()

order of subexp eval. i*i++,

short circuit && || comp. ass.

”#define =; ”

; { }

If () { } [else { }] switch () case : [deafult :] 3

for (;;)

while () do while ()

break continue lable:goto return exit

4

King 9.6 & 10

char 5

Integer overflow

’a’

5

6 [ ]

{,,,}

Index out of range overf/index

7

Page 3: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Den första sammansatta datatypen, matris!

RAM

46 47 48 49

int box[0]

4A 4B

int int int int int int

box[1] box[2] box[3] box[4] box[5] box[6]

2 1 1 1 0 0 1

box[ box[ 0 ] ] = 2;

RAM

46 47 48 49

int mo 0

4A 4B

int tu 0 int we 0 int th 0 int fr 0 int sa 0 int su 0

mo = 3; box[0] = 3;

3 _ _ 3

for (int i=0; i<WEEKDAYS; i++) box[ i ] = 4;

4 4 4 4 4 4

_ _ _ _ _ _ _

2 _

4

Page 4: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Sammantaget

Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris till en annan! Matriser måste kopieras element för element! Ett element fungerar exakt som en variabel av elementtypen! Saknas element i ett aggregat ( {1,2,3} ) tilldelas 0! Ingen run-time test för index-out-of-bounds!

Viktigt vid utskrift av innehållet i matriser???

Page 5: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Funktioner…

Lättbegripligt! Obegripligt! Återanvändbart. Ingen in-data! Ingen ut-data!

Ingen ut-data! Namn! Ingen in-data!

Page 6: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Observationer…

Returtypen kan vara int, float, char men inte array!

Precis som main kan throwDice ha egna variabler. De existerar dock bara när datorn kör funk-tionen throwDice! Och de döljer då andra globala variabler med samma namn!

c fungerar enligt principen copy-by-value. Det betyder att när return ska returnera ett värde så beräknar den först värdet av throw, säg 5, som den därefter returnerar. Den returnerar m.a.o en ”kopia” av resultatet (och inte en referens till throw, för throw finns inte när funktionen är avslutad!)

Page 7: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Funktioner…

Återkommande! Återanvändbart! Ingen in-data! Ut-data: kast!

”Antal ögon”

Kallas för (in-)parameter och fungerar som en lokal variabel i funktionen! Den får sitt värde, via copy-by-value, när funktionen anropas! Värdet eller uttrycket som anges i funktionsanropet kallas för argument.

En funktion kan ha flera in-parametrar, då åtskiljda med komma (int a, char ch).

Page 8: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Observationer…

RAM

46 47 48 49

int i

4A 4B

int size

0

6

Beräknas, copy-by-value!

En parameter fungerar som en lokal variabel. Det går bra att ändra värdet, men det påverkar inte argumentet som användes vid anropet!!!

Page 9: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Matriser

RAM

46 47 48 49

int box[0], theBox[0]

4A 4B

int int int int int int

2 1 1 1 0 0 1

46 7

Wow! Innehållet kan uppdateras!!!

box[1], theBox[1] box[2], theBox[2] box[3], theBox[3] box[4], theBox[4] box[5], theBox[5] box[6], theBox[6] 4C

int

box[ ] & theBox[ ] är samma minnesceller!

theSize 7

Page 10: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Observationer…

RAM

46 47 48 49

int

4A 4B

int int int int int int

box[5] box[6]

2 1 1 1 0 0 1 46 5

Kom ihåg när [ ] ska vara med, och inte. Kom ihåg storleken!

4B 2

box[0], theBox[0] box[1], theBox[1] box[2], theBox[2] box[3], theBox[3] box[4], theBox[4]

theSize 5 int

Page 11: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Observationer…

RAM

46 47 48 49

int

4A 4B

int int int int int int

box[5], theBox[0] box[6], theBox[1]

2 1 1 1 0 0 1 46 5

Kom ihåg när [ ] ska vara med, och inte. Kom ihåg storleken!

4B 2

box[0] box[1] box[2] box[3] box[4]

theSize 2 int

Page 12: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Observationer…

RAM

46 47 48 49 4A 4B

Kom ihåg när [ ] ska vara med, och inte. Kom ihåg storleken!

WOW!

”Namnlös” 1-dim int matris perfekt för att testa (Unit Test = UT) en funktion!

int tmp[0], theBox[0] int int

2 3 4

tmp[1], theBox[1] tmp[2], theBox[2] theSize 2 int

Page 13: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

2 dim matriser

”rader” ”kolumner”

RAM

46 47 48 49

int w[0][0]

4A 4B

int int int int int int

1 2 3 4 5 6 7

w[0][1] w[0][2] w[0][3] w[0][4] w[0][5] w[0][6] 4C

4D int w[1][0] 1

”rad 0”

”1”

”2”

w

NO!

YES!

Page 14: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Lösningsförslag Luffarschack…

Page 15: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test!

Indata? Utdata?

Page 16: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test!

Indata? Utdata? Deklaration, Definition

Page 17: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata?

Page 18: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata? Funktionslokal variabel!

Page 19: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata?

Page 20: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata? Copy-by-value!

Page 21: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata?

Page 22: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Test

Indata? Utdata? 2-dim arrays

Page 23: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

NYTT!

Page 24: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3

Page 25: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3 3 2

int n 3

Page 26: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3 3 2

int n 3

2 1

int n 2

Page 27: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3 3 2

int n 3

2 1

int n 2 int n 1

Page 28: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3 3 2

int n 3

2 1

int n 2

Page 29: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 3 3 2

int n 3

Page 30: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49

int n

4A 4B

4

4 6

Page 31: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rekursion

En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n – 1)! Där n! = 1.

RAM

46 47 48 49 4A 4B

4!=24

Page 32: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Lokal vs Global variabel…

Variabeln w sägs vara lokal därför att den deklarerats inuti en funktion! En lokal variabel skapas varje gång koden passeras under exekvering där den är deklarerad, och den glöms bort så snart funktionen når sitt slut! M.a.o kan den hamna på olika ställen i minnet…

Automatic storage duration, Block scope (visability)

Page 33: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Lokal vs Global variabel…

Variabeln w sägs vara global därför att den deklarerats utanför alla funk! En global variabel skapas när koden passeras under exekvering där den är deklarerad, och den finns kvar så länge kod från samma fil exekveras. En global variabel är synlig i hela filen från den punkt där den dekla-reras! Den kan dock skuggas av lokala variabler/parametrar.

Static storage duration, File scope (visability)

Page 34: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Lokal vs Global variabel…

Svårt att hitta fel, omöjligt att återanvända, ”förbjudet” i kursen!

X

Page 35: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Programutvecklingsmetodik

Page 36: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Wow!!!! den måste ha en brutal motor!

Page 37: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Wow!!!! den måste ha en brutal motor!

Sen behövs det kanske någon form av styrning också...

Page 38: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Wow!!!! den måste ha en brutal motor!

Sen behövs det kanske någon form av styrning också...

Javisst, en på-knapp behövs också…

Page 39: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Den behöver ett bra gränssnitt…

Page 40: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Den behöver ett bra gränssnitt…

…som exponerar styrdatorns alla program…

Page 41: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Den behöver ett bra gränssnitt…

…som exponerar styrdatorns alla program…

…så att motorn körs på rätt sätt!

Page 42: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Bottom up vs Top Down

Wow!!!! den måste ha en brutal motor!

Sen behövs det kanske någon form av styrning också...

Javisst, en på-knapp behövs också…

Den behöver ett bra gränssnitt…

…som exponerar styrdatorns alla program…

…så att motorn körs på rätt sätt!

Det är ofta smart att försöka förstå problemet top-down… Det är också ofta smart att utveckla koden top-down…

Page 43: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Modultänk…

Användargränssnitt

DATA init()

put() get()

print() store()

load()

DATA init()

put() get()

print() store()

load()

Finns redan!

Måste utvecklas!

Vi vill fokusera på tjänsterna och dölja bort vald datastruktur!

Page 44: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

RPN miniräknare 10P6

1 2 3 * + = 7 5 8 * 4 9 - / = -8 Q (quit)

STACK!

Läs in nästa tecken… Om tal, tryck på stacken! Om op, utför op med de två översta talen på stacken! …så länge tecknet är tal eller op!

0..9,+ - * / = Ingen felkod!

Page 45: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

Vilken datatyp hjälper oss mest?!

float

char

Page 46: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

Hum… …en 1-dim matris kan kanske användas… …det är svårt att ”trycka ner” tal… …men ingen vet om de hamnar ”sist” i stället… …indexet top får markera nästa lediga position… …push placerar talet på indexet top och ökar top med ett… …pop returnerar talet på indexet top-1 och minskar top med ett… ... varför inte spara indexet top sist i matrisen… …ok att skippa alla tester för fel.

(I lab2 är det förbjudet att lagra eventuella räknare i eventuella matriser!) Ni ska träna på ett annat koncept!!!

Page 47: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

Push 2 stack

0

1 SIZE-1

top 2

stack 0

2

top

2

Push 4

4

stack 0

1 SIZE-1

2

Pop 4

top

Page 48: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

Egentligen behöver bara sista elementet sättas till 0 (=top), men smart att 0:a alla element.

Programmet behöver inte en funktion som skriver ut hela stacken men den är bra att ha! !!!!!!!!!!!!!!!!

Page 49: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

Egentligen behöver bara sista elementet sättas till 0 (=top), men smart att 0:a alla element.

Programmet behöver inte en funktion som skriver ut hela stacken men den är bra att ha! !!!!!!!!!!!!!!!!

Page 50: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

Page 51: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

SIZE

stack 0

0 SIZE-1

top

Push 2 stack

0

1 SIZE-1

top 2

stack 0

2

top

2

Push 4

4

stack 0

1 SIZE-1

2

Pop 4

top

Page 52: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

SIZE

stack 0

0 SIZE-1

top

Push 2 stack

0

1 SIZE-1

top 2

stack 0

2

top

2

Push 4

4

stack 0

1 SIZE-1

2

Pop 4

top

Page 53: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Top-down översikt, nu behöver vi en stack!

stack

SIZE

0

0 SIZE-1

top

OK!

Page 54: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

stack

SIZE

0

0 SIZE-1

top

Användargränssnittet…

1 2 3 * + = 7 5 8 * 4 9 - / = -8 PROBLEMBESKRIVNING! Q (quit)

Läs in nästa tecken… Om tal, tryck på stacken! Om op, utför op med talen på stacken! …så länge tecknet är tal eller op!

Pseudokod… …datatyper… …bibliotek… …återanvända?!

Int main(void) { }

Nöjd användare Nöjd chef

Bättre kodbibliotek Säkrare utvecklare

$$$

Page 55: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

stack

SIZE

0

0 SIZE-1

top

OK!

Page 56: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Nästan perfekt…

Vi har nu en handfull återanvändbara rutiner som tillsammans utgör det som krävs för att hantera en stack… …två saker återstår för att det ska vara helt perfekt:

1)  Programmeraren vet att stacken är en array & 2)  Stacken kan bara hantera int

…något som är svårt att helt kringgå i c, utan det får vänta tills ni läser Java!

Page 57: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Statistik…

Page 58: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Dagens fokus…

DATA TYPES

CTRL STRUCT

PRG IN LARGE

PRG CORR Directives

int main(void){ declarations statements } /*comment*/ or //

Sequencing

Selection

Iteration

Side effects

Und. behavior

Imp. dependent

Basic

Compound Literals

Aggregates

Operands casting

Reference Abstract

Jump

Syntax related Logical related

typedef qualifiers

makefile

Precedence, Assosiativity

Implicit promotion, Explicit.

Functions

Exceptions 1

float int

3.14f 42

int/int

1

Aritmetic

Comparison Logical

Bitwise

Compound assign.

Referens Other

2

= + - * / % ++ -- + - * / % & | ^ << >>

== != > < >= <= ! && ||

~ & | ^ << >>

a[i] * & a->b a.b fn() , A?B:C sizeof()

order of subexp eval. i*i++,

short circuit && || comp. ass.

”#define =; ”

; { }

If () { } [else { }] switch () case : [deafult :] 3

for (;;)

while () do while ()

break continue lable:goto return exit

4

5

char 5

Integer overflow

’a’

6 [ ]

{,,,}

overf/index

7

Page 59: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Övning #7b: -

Page 60: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Rev history

150724 0.1 AC Rekursion. 150725 0.5 AC Scope 150726 1.0 AC Prg.utv.metodik.

Page 61: HI1024 Grundkurs Programmering - KTH · 2016. 9. 16. · Sammantaget Alla element är av samma typ! Indexen är från 0 till storleken-1! Det går inte att tilldela en hel matris

Kursens uppbyggnad…

DATA TYPES

CTRL STRUCT

PRG IN LARGE

PRG CORR Directives

int main(void){ declarations statements } /*comment*/ or //

Sequencing

Selection

Repetition

Side effects

Und. behavior

Imp. dependent

Basic

Compound Literals

Aggregates

Operands casting

Reference Abstract

Jump

Syntax related Logical related

typedef qualifiers

makefile

Precedence, Assosiativity

Implicit promotion, Explicit.

Aritmetic

Comparison Logical

Bitwise

Compound assign.

Referens Other

Functions

Exceptions

; { }

If () { } [else { }] switch () case : [deafult :]

for (;;)

while () do while ()

break Continue lable:goto return exit

1

1

2 3

char float int ’a’ 3.14f 42

int/int

4

5

6 7

9

8 Algoritmer I

10 11

12

[ ] struct

”text” {,,,}

file

Algoritmer II Outlook, not on exam!

13 14

= + - * / % ++ -- + - * / % & | ^ << >>

== != > < >= <= ! && ||

~ & | ^ << >>

a[i] * & a->b a.b fn() , A?B:C sizeof()

order of subexp eval. i*i++,

short circuit && ||

uninit var.

comp. ass.

Integer overflow Index out of range

overf/index

”#define =; ”

5