La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Matrici.

Presentazioni simili


Presentazione sul tema: "Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Matrici."— Transcript della presentazione:

1 Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Matrici

2 Sono array bidimensionali Una matrice M ha due campi –Numero di righe: rows[M] –Numero di colonne: columns[M] Ogni elemento nella matrice M[i,j] ha un indice di riga i e colonna j

3 Matrici in C

4 Allochiamo in modo dinamico una matrice: scriviamo un metodoleggi che allochi in memoria una matrice di interi M di n righe e m colonne (input) e la riempi facendosi passare gli elementi da tastiera. int** M; int i,j; M = (int**)calloc(n,sizeof(int*)); for (i=0; i

5 Matrici in C Allochiamo in modo dinamico una matrice: scriviamo un metodoleggi che allochi in memoria una matrice di interi M di n righe e m colonne (input) e la riempi facendosi passare gli elementi da tastiera. int** leggi(int n, int m){ int** M; int i,j; M = (int**)calloc(n,sizeof(int*)); for (i=0; i

6 Trasposta di una matrice Data una matrice M[n x m], la sua trasposta T[m x n] è ottenuta scambiando le righe con le colonne di M. Trasposta(M) for i <- 1 to columns[M] do for j <- 1 to rows[M] do T[i,j] <- M[j,i] return T

7 Trasposta di una matrice Data una matrice M[n x m], la sua trasposta T[m x n] è ottenuta scambiando le righe con le colonne di M. int** trasposta(int** M, int n, int m){ int** T; int i,j; T = (int**)calloc(m,sizeof(int*)); for (i=0; i

8 Somma di due matrici Date due matrici M1[n x m] e M2[n x m], calcolare la matrice somma M3[n x m] Somma(M1,M2) for i <- 1 to rows[M] do for j <- 1 to columns[M] do M3[i,j] <- M1[i,j] + M2[i,j] return M3

9 Somma di due matrici Date due matrici M1[n x m] e M2[n x m], calcolare la matrice somma M3[n x m] int** somma(int** M1, int n, int m, int** M2){ int** M3; int i,j; M3 = (int**)calloc(n,sizeof(int*)); for (i=0; i

10 Triangolare Superiore Data una matrice M1[n x n], calcolare la matrice S[n x n], tale per cui la matrice M2=M1-S sia triangolare superiore triangolare(M1) for i <- 1 to rows[M1] do for j <- 1 to i-1 do S[i,j] <- - M1[i,j] for i <- 1 to rows[M1] do for j <- 1 to columns[M1] do S[i,j] <- 0 return S

11 Triangolare Superiore int** TriangSup(int** M, int n){ int** T; int i,j; T = (int**)calloc(n,sizeof(int*)); for (i=0; i

12 Prodotto tra matrici Date due matrici M1[n x k] e M2[k x m], calcolare la matrice prodotto M3[n x m] prodotto(M1,M2) for i <- 1 to rows[M1] do for j <- 1 to columns[M2] do p <- 0 for s <- 1 to rows[M2] do p <- p + (M1[i,s] + M2[s,j]) M3[i,j] <- p return M3

13 Prodotto tra matrici int** Prodotto(int** M1, int n, int k, int** M2, int m){ int** T; int i,j,s,p; T = (int**)calloc(n,sizeof(int*)); for (i=0; i

14 Matrice rigata crescente Data una matrice M[n x m], verificare se questa è rigata crescente: la somma degli elementi di una riga i è minore o uguale della somma degli elementi della riga i+1, per ogni i crescente(M,i,somma,n,m) if (i>n) then return true else s <- SUM(M[i],m); return (s > somma) and crescente(M,i+1,s)

15 Matrice rigata crescente Data una matrice M[n x m], verificare se questa è rigata crescente: la somma degli elementi di una riga i è minore o uguale della somma degli elementi della riga i+1, per ogni i SUM(M,m) s <- 0 for i <- 1 to m do s <- s + M[i] return s rigata(M,n,m) return crescente(M,1,SUM(M[0],m),n,m)

16 Matrice rigata crescente Data una matrice M[n x m], verificare se questa è rigata crescente: la somma degli elementi di una riga i è minore o uguale della somma degli elementi della riga i+1, per ogni i int crescente(int** M, int i, int somma, int n, int m){ int s; if (i >= n) return 1; else { s = SUM(M[i],m); i++; return ((s > somma) && crescente(M,i,s,n,m)); }

17 Matrice rigata crescente Data una matrice M[n x m], verificare se questa è rigata crescente: la somma degli elementi di una riga i è minore o uguale della somma degli elementi della riga i+1, per ogni i int SUM(int* M, int m){ int j,somma=0; for (j=0; j

18 Corso di Calcolatori Elettronici APPUNTI SUL LINGUAGGIO C Array e puntatori FINE


Scaricare ppt "Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Matrici."

Presentazioni simili


Annunci Google