98
Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Claudio Ciccotelli

Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

  • Upload
    buikhue

  • View
    240

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

Demo: Matrici allocate dinamicamente

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR

Introduzione al C

Claudio Ciccotelli

Page 2: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 2

Programma (1/3)

#include<stdio.h>

#include<malloc.h>

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

Page 3: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 3

Programma (2/3)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

Page 4: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 4

Programma (3/3)

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

Page 5: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 5

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

Page 6: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 6

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

Page 7: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 7

2 r 3 c i

M

Page 8: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 8

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

Page 9: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 9

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

Page 10: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 10

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

Page 11: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 11

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

Page 12: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 12

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

r

Tipo: int*

Page 13: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 13

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

Page 14: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 14

2 r 3 c i

M

M = (int**) malloc(r * sizeof(int*));

Page 15: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 15

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

Page 16: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 16

2 r 3 c i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Page 17: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 17

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Inizializzazione

Page 18: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 18

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 1)

Page 19: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 19

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

Page 20: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 20

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

c

Tipo: int

Page 21: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 21

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

Page 22: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 22

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

Page 23: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 23

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 1)

Page 24: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 24

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Incremento (post iterazione 1)

Page 25: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 25

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 2)

Page 26: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 26

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

Page 27: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 27

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

Page 28: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 28

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

Page 29: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 29

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Corpo (iterazione 2)

Page 30: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 30

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Incremento (post iterazione 2)

Page 31: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 31

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Condizione (pre iterazione 3)

Page 32: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 32

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

Falsa Condizione (pre iterazione 3)

Page 33: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 33

2 r 3 c 2 i

M

Stack Heap

Page 34: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 34

creaMatrice(2, 3)

int **creaMatrice(int r, int c) {

int i;

int **M;

M = (int**) malloc(r * sizeof(int*));

if (M == NULL)

return NULL;

// alloca le righe

for (i = 0; i < r; i++) {

M[i] = (int *) malloc(c * sizeof(int));

if (M[i] == NULL)

return NULL;

}

return M;

}

Page 35: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 35

Torniamo al main()

Page 36: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 36

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

Page 37: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 37

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

Page 38: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 38

2 r 3 c i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Page 39: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 39

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Inizializzazione

Page 40: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 40

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Condizione (pre iterazione 1)

Page 41: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 41

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

j

Corpo (iterazione 1)

Page 42: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 42

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Inizializzazione

Corpo (iterazione 1)

Page 43: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 43

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Condizione (pre iterazione 1)

Corpo (iterazione 1)

Page 44: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 44

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Corpo (iterazione 1)

M[0]

Corpo (iterazione 1)

Page 45: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 45

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 j

Corpo (iterazione 1)

M[0] M[0][0]

Corpo (iterazione 1)

Page 46: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 46

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

0 j

Corpo (iterazione 1)

M[0] M[0][0]

Corpo (iterazione 1)

Page 47: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 47

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Incremento (post iterazione 1)

Corpo (iterazione 1)

Page 48: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 48

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Corpo (iterazione 1)

Condizione (pre iterazione 2)

Page 49: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 49

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0

1 j

Corpo (iterazione 2)

Corpo (iterazione 1)

Page 50: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 50

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

1 j

Corpo (iterazione 2)

M[0] M[0][1]

Corpo (iterazione 1)

Page 51: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 51

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Incremento (post iterazione 2)

Corpo (iterazione 1)

Page 52: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 52

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Corpo (iterazione 1)

Condizione (pre iterazione 3)

Page 53: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 53

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1

2 j

Corpo (iterazione 3)

Corpo (iterazione 1)

Page 54: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 54

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

2 j

Corpo (iterazione 3)

M[0] M[0][2]

Corpo (iterazione 1)

Page 55: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 55

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Incremento (post iterazione 3)

Corpo (iterazione 1)

Page 56: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 56

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 1)

Condizione (pre iterazione 4)

Page 57: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 57

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Falsa

Corpo (iterazione 1)

Page 58: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 58

2 r 3 c 0 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 1)

Il ciclo interno termina

Page 59: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 59

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Incremento (post iterazione 1)

Page 60: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 60

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Condizione (pre iterazione 2)

Page 61: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 61

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 j

Corpo (iterazione 2)

Page 62: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 62

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

0 j

Inizializzazione

Corpo (iterazione 2)

Page 63: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 63

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

0 j

Corpo (iterazione 2)

Condizione (pre iterazione 1)

Page 64: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 64

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

0 j

Corpo (iterazione 1)

M[1] M[1][0]

Corpo (iterazione 2)

Page 65: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 65

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

1 j

Incremento (post iterazione 1)

Corpo (iterazione 2)

Page 66: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 66

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3

1 j

Corpo (iterazione 2)

Condizione (pre iterazione 2)

Page 67: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 67

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

1 j

Corpo (iterazione 2)

M[1] M[1][1]

Corpo (iterazione 2)

Page 68: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 68

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

2 j

Incremento (post iterazione 2)

Corpo (iterazione 2)

Page 69: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 69

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4

2 j

Corpo (iterazione 2)

Condizione (pre iterazione 3)

Page 70: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 70

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

2 j

Corpo (iterazione 3)

M[1] M[1][2]

Corpo (iterazione 2)

Page 71: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 71

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Incremento (post iterazione 3)

Corpo (iterazione 2)

Page 72: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 72

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Corpo (iterazione 2)

Page 73: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

Condizione (pre iterazione 4)

2014/2015 Demo: Matrici allocate dinamicamente Pagina 73

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Falsa

Corpo (iterazione 2)

Page 74: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

Il ciclo interno termina

2014/2015 Demo: Matrici allocate dinamicamente Pagina 74

2 r 3 c 1 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Corpo (iterazione 2)

Page 75: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 75

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Incremento (post iterazione 2)

Page 76: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 76

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Condizione (pre iterazione 3)

Page 77: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 77

2 r 3 c 2 i

M

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

0 1 2

3 4 5

3 j

Falsa Condizione (pre iterazione 3)

Page 78: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 78

2 r 3 c 2 i

M 0 1 2

3 4 5

3 j

Page 79: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 79

main()

int main() {

int r = 2, c = 3;

int i, j;

int **M;

M = creaMatrice(r, c);

for (i = 0; i < r; i++) {

for (j = 0; j < c; j++) {

M[i][j] = i*c + j;

}

}

liberaMatrice(M, r);

}

Page 80: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 80

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

Page 81: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 81

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

Page 82: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 82

2 r i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Page 83: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 83

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Inizializzazione

Page 84: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 84

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 1)

Page 85: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 85

2 r 0 i

M 0 1 2

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 1)

M[0]

Page 86: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 86

2 r 0 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 1)

M[0]

Page 87: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 87

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Incremento (post iterazione 1)

Page 88: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 88

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 2)

Page 89: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 89

2 r 1 i

M

3 4 5

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 2)

M[1]

Page 90: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 90

2 r 1 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Corpo (iterazione 2)

M[1]

Page 91: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 91

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Incremento (post iterazione 2)

Page 92: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 92

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Condizione (pre iterazione 3)

Page 93: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 93

2 r 2 i

M

for (i = 0; i < r; i++) {

free(M[i]);

}

Falsa Condizione (pre iterazione 3)

Page 94: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 94

liberaMatrice(M, 2)

void liberaMatrice(int **M, int r) {

int i;

for (i = 0; i < r; i++) {

free(M[i]);

}

free(M);

}

Page 95: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 95

2 r 2 i

M

free(M);

Page 96: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 96

2 r 2 i

M

free(M);

Page 97: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 97

2 r 2 i

M

free(M);

Page 98: Introduzione al C Demo: Matrici allocate dinamicamentesalza/FI-C/demo-malloc-matrici.pdf · Demo: Matrici allocate dinamicamente Corso di Fondamenti di Informatica Ingegneria delle

2014/2015 Demo: Matrici allocate dinamicamente Pagina 98