APPUNTI SUL LINGUAGGIO C

Slides:



Advertisements
Presentazioni simili
Programmazione dinamica: problema della sottosequenza più lunga
Advertisements

Uso avanzato di C.
Array multidimensionali
Programmazione dinamica
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.
ARRAY MULTIDIMENDIONALI
Lordinamento di tre numeri interi. acquisisci a,b,c (a > b) AND (a > c)(b > a) AND (b > c) (c > a) AND (c > b) Scrivi c,b,aScrivi b,c,aScrivi c,a,bScrivi.
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Ricerca sequenziale in un array di interi
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Algoritmo che viene utilizzato per elencare gli elementi di un insieme secondo una sequenza stabilita da una relazione d'ordine, in modo che ogni elemento.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Soluzione 6: Algoritmo Quicksort
TECNICA DIVIDE ET IMPERA
Algoritmi e Strutture Dati
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Algoritmo per il calcolo del maggiore tra tre numeri qualsiasi Francesco PUCILLO matr
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Interconnessione tramite reti Lezione n°6.
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
E CON GLI «SCHIERAMENTI INCOMPLETI»
Tecniche Algoritmiche/2 Programmazione Dinamica Moreno Marzolla Dip. di Scienze dell'Informazione Università di Bologna
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Java World Matrici.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Gli array Moreno Marzolla
PRINCIPALI STRUTTURE DEI DATI
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Richiami di Algebra Matriciale
Array n-dimensionali e tipi di dati strutturati
Array n-dimensionali e tipi di dati strutturati
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Matrici come array di puntatori a righe
Rapporti e proporzioni
Richiami di Algebra Matriciale
Impariamo a conoscere le Matrici
Corso Java Matrici.
Matrici Definizioni Matrici Rettangolari Quadrate 02/01/2019
Scrivere programmi corretti
Schema generale, visita in ampiezza e profondità.
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Java Matrici.
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
comprensione e modifica di codice
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Array n-dimensionali e tipi di dati strutturati
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Matrici e determinanti
Insiemi disgiunti.
Richiami di Algebra Matriciale
Ricerca 01/08/2019 package.
Corso di Fondamenti di Informatica
Transcript della presentazione:

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

Matrici 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

Matrici in C

Matrici in C int** M; int i,j; M = (int**)calloc(n,sizeof(int*)); Allochiamo in modo dinamico una matrice: scriviamo un metodo “leggi” 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<n; i++) M[i] = (int*)calloc(m,sizeof(int));

Matrici in C Allochiamo in modo dinamico una matrice: scriviamo un metodo “leggi” 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<n; i++) M[i] = (int*)calloc(m,sizeof(int)); for (j=0; j<m; j++) scanf("%d",&M[i][j]); return M; }

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

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<m; i++) T[i] = (int*)calloc(n,sizeof(int)); for (j=0; j<n; j++) T[i][j] = M[j][i]; return T; }

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

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<n; i++) M3[i] = (int*)calloc(m,sizeof(int)); for (j=0; j<m; j++) M3[i][j] = M1[i][j] + M2[i][j]; return M3; }

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 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 j <- 1 to columns[M1] do S[i,j] <- 0 return S

Triangolare Superiore int** TriangSup(int** M, int n){ int** T; int i,j; T = (int**)calloc(n,sizeof(int*)); for (i=0; i<n; i++) T[i] = (int*)calloc(n,sizeof(int)); for (i=1; i<n; i++) for (j=0; j<=i-1; j++) T[i][j] = 0 - M[i][j]; for (j=i; j<n; j++) T[i][j] = 0; return T; }

Prodotto tra matrici Date due matrici M1[n x k] e M2[k x m], calcolare la matrice prodotto M3[n x m]

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] x M2[s,j]) M3[i,j] <- p return M3

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<n; i++) T[i] = (int*)calloc(m,sizeof(int)); for (j=0; j<m; j++) { p = 0; for (s=0; s<k; s++) p = p + (M1[i][s] * M2[s][j]); T[i][j] = p; } return T;

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)

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)

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)); }

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<m; j++) somma += M[j]; return somma; } int rigata(int** M, int n, int m){ return crescente(M,1,SUM(M[0],m),n,m);

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