fundamentals of programming - kntu homepage webftp client · 2019. 10. 16. · 0 1 2 3 10 11 12 13...

48
Fundamentals of Programming session 21 2D Arrays

Upload: others

Post on 04-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Fundamentals of Programmingsession 21

2D Arrays

Page 2: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arrays

0 0 0 0 0 0

0 1 2 3 4 5

0 2 4 6 8 10

0 3 6 9 12 15

0 4 8 12 16 20

● tabular data● rows and columns

Page 3: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arrays

0 0 0 0 0 0

0 1 2 3 4 5

0 2 4 6 8 10

0 3 6 9 12 15

0 4 8 12 16 20

0 5 10 15 20 25

https://advancedmathclubsk.weebly.com/matrices.html

Page 4: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arrays

https://hiveminer.com/Tags/desert,isfahan/Recent

Page 5: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

https://hiveminer.com/Tags/desert,isfahan/Recent

Page 6: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

https://hiveminer.com/Tags/desert,isfahan/Recent

Page 7: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Defining 2D arraysint a[3][4];

Page 8: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Initializing 2D arraysint a[3][4] = {{1,3,5,7}, {2,4,6,8}, {4,11,-1,7}};

1 3 5 7

2 4 6 8

4 11 -1 7

Page 9: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Initializing 2D arraysint a[3][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}, {4,11,-1,7}};

printf("%d\n", a[1][2]);

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

Page 10: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arraysint a[3][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}, {4,11,-1,7}};

printf("%d\n", a[1][2]);

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

Page 11: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arraysint a[3][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}, {4,11,-1,7}};

printf("%d\n", a[i][j]);

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

0

1

2

0 1 2 3

Page 12: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

2D arraysint a[3][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}, {4,11,-1,7}};

printf("%d\n", a[0][0]);

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

Page 13: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray.c

Page 14: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray.c

Page 15: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray2.c

Page 16: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray2.c

$ gcc 2darray2.c && ./a.out 13572468411-17

Page 17: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray3.c

Page 18: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray3.c

$ gcc 2darray3.c && ./a.out 124341156-1787

Page 19: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray4.c

Page 20: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray4.c

$ gcc 2darray4.c && ./a.out 1, 3, 5, 7, 2, 4, 6, 8, 4, 11, -1, 7,

Page 21: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray5.c

Page 22: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray5.c

$ gcc 2darray5.c && ./a.out 1, 3, 5, 7, 2, 4, 6, 8, 4, 11, -1, 7,

Page 23: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray6.c

$ gcc 2darray6.c && ./a.out 1, 3, 0, 0, 2, 4, 6, 8, 4, 0, 0, 0,

Page 24: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray7.c

$ gcc 2darray7.c && ./a.out 1, 3, 5, 7, 2, 4, 6, 8, 4, 11, -1, 7,

Page 25: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray8.c

$ gcc 2darray8.c && ./a.out 1, 3, 5, 7, 2, 4, 0, 0, 0, 0, 0, 0,

Page 26: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray9.c

Page 27: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Working with 2D arrays

1 3 5 7

2 4 6 8

4 11 -1 7

0

1

2

0 1 2 3

2darray9.c

$ gcc 2darray9.c && ./a.out 1, 3, 0, 7, 2, 4, 0, 8, 4, 11, 0, 7,

Page 28: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Store times table in a 2D array

1 2 3 4

2 4 6 8

3 6 9 12

0

1

2

0 1 2 3

timestable1.c

Page 29: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Store times table in a 2D array

0

1

2

0 1 2 3

timestable1.c

$ gcc timestable1.c && ./a.out 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 10, 20, 30, 40, 50, 60, 70, 80, 90,100,

Page 30: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Remember: 1D arrays in memory

a[3]

a[2]

a[1]

a[0]

2100

2096

2092

2088

a[6]

a[5]

a[4]

Memory

int a[7];

Page 31: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

How are 2D arrays stored in memory?

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 3

Page 32: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 3

row by row column by column

120100

2100

209620922088

Memory

122

2111

23133

22

3210

2100

209620922088

Memory

13121110

23222120

Page 33: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 3 120100

2100

209620922088

Memory

122

2111

23133

22

3210

2100

209620922088

Memory

13121110

23222120

Row major (C, C++, Pascal, ...)

Column major (Fortran, Matlab, R, ...)

Page 34: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 33210

2100

209620922088

Memory

13121110

23222120

Row major (C, C++, Pascal, ...)

Page 35: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 33210

3

210

Memory

13121110

23222120

Row major (C, C++, ...)

7

654

11

1098

a[0][1]a[0][2]a[0][j]

a[1][0]a[1][1]a[1][2]a[1][j]

a[2][j]

a[i][j]

Page 36: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 33210

3

210

Memory

13121110

23222120

Row major (C, C++, ...)

7

654

11

1098

a[0][1]a[0][2]a[0][j]

a[1][0]a[1][1]a[1][2]a[1][j]

a[2][j]

a[i][j] : 4*i + j

Page 37: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 33210

2100

209620922088

Memory

13121110

23222120

Row major (C, C++, Pascal, ...)

Page 38: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 2 3

10 11 12 13

20 21 22 23

0

1

2

0 1 2 33210

3

210

Memory

13121110

23222120

Row major (C, C++, ...)

7

654

11

1098

a[0][1]a[0][2]a[0][j]

a[1][0]a[1][1]a[1][2]a[1][j]

a[2][j]

a[i][j]

Page 39: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 ... 9

10 11 ... 19

::

::

::

80 81 ... 83

0

1

m-1

0 1 n-19

10

n-1

:10

Memory

19:

1110

89:

8180

Row major (C, C++, ...)

2n-1

:n+1

n

m*n-1

:2n+1

2n

int a[m][n];

a[i][j] : n*i + j

Page 40: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 ... 9

10 11 ... 19

::

::

::

80 81 ... 83

0

1

m-1

0 1 n-19

10

n-1

:10

Memory

19:

1110

89:

8180

Row major (C, C++, ...)

2n-1

:n+1

n

m*n-1

:2n+1

2n

int a[m][n];

a[i][j] : n*i + j

Page 41: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

0 1 ... 9

10 11 ... 19

::

::

::

80 81 ... 89

0

1

m-1

0 1 n-19

10

Memory

19:

1110

89:

8180

Row major (C, C++, ...)

int a[m][n];

a[i][j] : n*i + j

to find a[i][j] compiler needs to know:● m (no. of rows of a)● n (no. of columns of a)● both m and n

n-1

:10

2n-1

:n+1

n

m*n-1

:2n+1

2n

Page 42: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Passing 2D arrays to functions

print2darray1.c

Page 43: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Passing 2D arrays to functions

print2darray2.c

Page 44: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Accessing a row of 2D array

print2darray3.c

Page 45: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Accessing a row of 2D array

7530

3

210

Main Memory

8642

7-1114

Row major (C, C++, ...)

7

654

11

1098

Page 46: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Passing 2D arrays to functions

print2darray2.c

Page 47: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Passing 2D arrays to functions

print2darray4.c print2darray5.c

Page 48: Fundamentals of Programming - KNTU homepage webFTP client · 2019. 10. 16. · 0 1 2 3 10 11 12 13 20 21 22 23 0 1 2 0 1 2 3 row by row column by column 1 20 10 0 2100 2096 2092 2088

Passing 2D arrays to functions

print2darray4.c