hi1024 grundkurs programmering - kth · 2016. 9. 16. · sammantaget alla element är av samma typ!...
TRANSCRIPT
![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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/53.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/54.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/55.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/56.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/57.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/58.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/59.jpg)
Ö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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/60.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022071421/611a30c21c9af515c425bcc2/html5/thumbnails/61.jpg)
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