1
SOCS
Hoofdstuk 1
Computerarchitectuur
2
Overzicht
Eenvoudig C Arrays
Klassiek gebruik For opdracht, Increment/Decrement Wijzers, Arrays en Wijzers Array van Wijzers Meerdimensionale Tabellen Wijzer naar Array
Functies Records Dynamische gegevenstructuren
CC
3
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
t[0][1]t[0][1]
t[1][1]t[1][1]
t[2][1]t[2][1]
t[3][1]t[3][1]
t[4][1]t[4][1]
t[0][2]t[0][2]
t[1][2]t[1][2]
t[2][2]t[2][2]
t[3][2]t[3][2]
t[4][2]t[4][2]
t[0][3]t[0][3]
t[1][3]t[1][3]
t[2][3]t[2][3]
t[3][3]t[3][3]
t[4][3]t[4][3]
t[0][0]t[0][0]
t[1][0]t[1][0]
t[2][0]t[2][0]
t[3][0]t[3][0]
t[4][0]t[4][0]
t[0][4]t[0][4]
t[1][4]t[1][4]
t[2][4]t[2][4]
t[3][4]t[3][4]
t[4][4]t[4][4]
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
Rij waarvan de elementen opnieuw rijen zijn
4
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
00 11 22 33 44
5
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
i = 0 k = 1
00 11 22 33 44
6
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
i = 0 k = 2
00 11 22 33 44
7
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
i = 0 k = 3
00 11 22 33 44
8
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
i = 0 k = 4
00 11 22 33 44
9
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
i = 1 k = 2
00 11 22 33 44
10
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
1717
99
i = 1 k = 3
00 11 22 33 44
11
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
1717
99
2222
1010
i = 1 k = 4
00 11 22 33 44
12
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
1717
99
2222
1010
1818
1414
i = 2 k = 3
00 11 22 33 44
13
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
1717
99
2222
1010
1818
1414
2323
1515
i = 2 k = 4
00 11 22 33 44
14
Meerdimensionale tabellen
int t[5][5], i, k;main() {
/* initialiseren van tabel*/.../* spiegelen om diagonaal*/for(i=0; i<5; i++)
for(k=i+1; k<5; k++) {h = t[i][k];t[i][k] = t[k][i];t[k][i] = h;
}/*afdrukken resultaat*/...
}
CC
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
66
22
1111
33
1616
44
2121
55
1212
88
1717
99
2222
1010
1818
1414
2323
1515
2424
2020
i = 3 k = 4
00 11 22 33 44
15
Wijzer naar Array
int t[5][5];
int (*wa)[5], *wi;
main() {
...
wa = &t[0];
wi = &t[0][0];
wi++;
wa++;
...
}
CC
wa
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
wi
Wijzer naar rij van 5 elementen
16
Wijzer naar Array
int t[5][5];
int (*wa)[5], *wi;
main() {
...
wa = &t[0];
wi = &t[0][0];
wi++;
wa++;
...
}
CC
wa
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
wi
17
Wijzer naar Array
int t[5][5];
int (*wa)[5], *wi;
main() {
...
wa = &t[0];
wi = &t[0][0];
wi++;
wa++;
...
}
CC
wa
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
wi
18
Wijzer naar Array
int t[5][5];
int (*wa)[5], *wi;
main() {
...
wa = &t[0];
wi = &t[0][0];
wi++;
wa++;
...
}
CC
wa
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
wi
19
Wijzer naar Array
int t[5][5];
int (*wa)[5], *wi;
main() {
...
wa = &t[0];
wi = &t[0][0];
wi++;
wa++;
...
}
CC
wa
t
22
77
1212
1717
2222
33
88
1313
1818
2323
44
99
1414
1919
2424
11
66
1111
1616
2121
55
1010
1515
2020
2525
t[0]t[0]
t[1]t[1]
t[2]t[2]
t[3]t[3]
t[4]t[4]
wi
20
Meerdimensionale Tabellen
Geen nieuwe bevelen nodig Afbeelden van meerdimensionale structuur
1-dimensionale werkgeheugen = Linearisatie
Gebeurt op het C-programma Transformatie van de code ~
alleen 1-dimensionale tabellen
21
Meerdimensionale Tabellen
Rij-linearisatie Matrix wordt rij
per rij bewaard
aa1111
aa1212
aa1m1m
aa2121
aa2222
aa2m2m
aan1n1
aan2n2
aanmnm
A0
A1
Am-1
Am
Am+1
A2m-1
A(n-1)m
A(n-1)m+1
Anm-1
a[i][j] = A[k]
k = (i-1)*m + (j-1)
aa1111 aa1212 aa1m1m
aa2121 aa2222 aa2m2m
aan1n1 aan2n2 aanmnm
…………
……
……
22
Meerdimensionale Tabellen
Kolom-linearisatie Matrix wordt kolom
per kolom bewaard
aa1111
aa2121
aan1n1
aa1212
aa2222
aan2n2
aa1m1m
aa2m2m
aanmnm
A0
A1
An-1
An
An+1
A2n-1
A(m-1)n
A(m-1)n+1
Amn-1
a[i][j] = A[k]
k =
aa1111 aa1212 aa1m1m
aa2121 aa2222 aa2m2m
aan1n1 aan2n2 aanmnm
…………
……
……(j-1)*n + (i-1)
23
Meerdimensionale Tabellen
Rij-linearisatie Kolom-linearisatie
a[i][j] = A[k]
k =
aa0,00,0 aa0,20,2 aa0,m-10,m-1
aa1,01,0 aa1,21,2 aa1,m-11,m-1
aan-1,0n-1,0 aan-1,1n-1,1 aan-1,m-1n-1,m-1
aa0,00,0 aa0,20,2 aa0,m-10,m-1
aa1,01,0 aa1.21.2 aa1,m-11,m-1
aan-1,0n-1,0 aan-1,1n-1,1 aan-1,m-1n-1,m-1
a[i][j] = A[k]
k = i*m + j j*n + i
24
Meerdimensionale tabellen
int a[5][4], i, j;
main() {
/* inlezen van tabel*/
for(i=4; i>=0; i--)
for(j=3; j>=0; j--)
a[i][j] = getint();
...
}
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
for(i=4; i>=0; i--)
for(j=3; j>=0; j--) {
k = i * 4 + j;
A[k] = getint();
}
...
}
CC
25
Meerdimensionale tabellen
int A[5*4], i, j, k, h;
main() {
/* inlezen van tabel*/
for(i=4; i>=0; i--) {
h = 4 * i;
for(j=3; j>=0; j--) {
k = h + j;
A[k] = getint();
}
}
...
}
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
for(i=4; i>=0; i--)
for(j=3; j>=0; j--) {
k = i * 4 + j;
A[k] = getint();
}
...
}
CC
26
Meerdimensionale tabellen
int A[5*4], i, j, k, h;
main() {
/* inlezen van tabel*/
for(i=4; i>=0; i--) {
h = 4 * i;
for(j=3; j>=0; j--) {
k = h + j;
A[k] = getint();
}
}
...
}
int A[5*4], i, j, k, h;main() {
/* inlezen van tabel*/h = 16;for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {k = h + j;A[k] = getint();
}h -= 4;
}...
}
CC
27
Meerdimensionale tabellen
int A[5*4], i, j, k, h;main() {
/* inlezen van tabel*/h = 16;for(i=4; i>=0; i--) {
k = h + 3;for(j=3; j>=0; j--) {
A[k--] = getint();}h -= 4;
}...
}
int A[5*4], i, j, k, h;main() {
/* inlezen van tabel*/h = 16;for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {k = h + j;A[k] = getint();
}h -= 4;
}...
}
CC
28
Meerdimensionale tabellen
int A[5*4], i, j, k, h;main() {
/* inlezen van tabel*/h = 16;for(i=4; i>=0; i--) {
k = h + 3;for(j=3; j>=0; j--) {
A[k--] = getint();}h -= 4;
}...
}
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
...
}
CC
29
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3
30
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3
HIA.w R3,19
31
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19
HIA.w R1,4
32
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4
fori: VGL.w R1,0 VSP KL,eindi
33
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi
HIA.w R2,3
34
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3
forj: VGL.w R2,0 VSP KL,eindj
35
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj
LEZBIG R0,A(R3-)
36
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj LEZ BIG R0,A(R3-)
AFT.w R2,1SPR forj
37
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj LEZ BIG R0,A(R3-) AFT.w R2,1 SPR forj
eindj: AFT.w R1,1 SPR fori
38
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj LEZ BIG R0,A(R3-) AFT.w R2,1 SPR forjeindj: AFT.w R1,1 SPR fori
eindi: STP
39
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
...
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj LEZ BIG R0,A(R3-) AFT.w R2,1 SPR forjeindj: AFT.w R1,1 SPR forieindi: STP
A: RESGR 20
40
Meerdimensionale Tabellen
int A[5*4], i, j, k;
main() {
/* inlezen van tabel*/
k = 19;
for(i=4; i>=0; i--) {
for(j=3; j>=0; j--) {
A[k--] = getint();
}
}
...
}
| i R1, j R2, k R3 HIA.w R3,19 HIA.w R1,4fori: VGL.w R1,0 VSP KL,eindi HIA.w R2,3forj: VGL.w R2,0 VSP KL,eindj LEZ BIG R0,A(R3-) AFT.w R2,1 SPR forjeindj: AFT.w R1,1 SPR forieindi: STPA: RESGR 20 EINDPR
41
Cursustekst
Hoofdstuk 1: pag. 52 pag. 55 Hoofdstuk 1: pag. 73 pag. 85