APPUNTI SUL LINGUAGGIO C

Slides:



Advertisements
Presentazioni simili
Array multidimensionali
Advertisements

Array di array Capitolo 20 febbraio 2004 Array di array.
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.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Array bidimensionali Paragrafo5.
Lezione 24 maggio 2007 Strutture File Allocazione dinamica della memoria.
ARRAY MULTIDIMENDIONALI
Unità Didattica 3 Linguaggio C
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XVIII Le matrici Programmazione di Calcolatori: le matrici 1.
Programmazione di Calcolatori
Ricerca sequenziale in un array di interi
1 Il linguaggio C Puntatori e dintorni. 2 Puntatori : idea di base In C è possibile conoscere e denotare l’indirizzo della cella di memoria in cui è memorizzata.
Regole associative Gianluca Amato
Natura e origini della attuale crisi europea
La struttura dei materiali
…. modello di Solow?.
 π BUZZO GIACOMO D’AGOSTINO ALBERTO DE ANGELIS FEDERICA
ISTITUZIONI (regole scritte e nn scritte che governano l’interazione tra individui) → d.p. e contratti → norme sociali con appropriati Δ delle regole.
CALENDARIO LEZIONI AGGIORNATO
PIANO DI RIORDINO PRESIDI DI FOLIGNO E SPOLETO
Art 6 comma 2 Legge regionale N.19 del 25 novembre 2016 (vaccinazioni)
Servizio Anestesia e terapia Intensiva Istituto Europeo di Oncologia
Liceo delle Scienze Umane «BLAISE PASCAL» Voghera
LA VULNERABILITA’ DELLE FAMIGLIE INDEBITATE IN ITALIA
Rappresentazione dei campi di gravità
La setta dei numeri Il teorema di Pitagora. La setta dei numeri Il teorema di Pitagora.
M. Piersanti (1,2), C. cesaroni(3), L. Spogli(3,5), T. Alberti(4), L
MICROCIRCOLAZIONE Moduli microvascolari: arteriole di resistenza, capillare preferenziale, capillari veri, cellule mioepitaliali, venule, anastomosi artero-venose.
Scatti notturni di un viaggiatore.
Rapporto finale di valutazione
Nascita Comitato dei CiNQUE 1859
Italia al CERN 4 aprile 2017 Cryogenics Antonio Perin (TE-CRG)
REACH 2018 Conoscere il portafoglio della propria azienda e avviare subito i preparativi.
SSS «BLAISE PASCAL» Voghera
“BLAISE PASCAL”- Voghera-
“BLAISE PASCAL”- Voghera-
• MODELLO DI COMPORTAMENTO RAZIONALE (def
Corso di Fisica Subnucleare
Campi di gravità e topografia: analisi isostatiche con QGIS
Viganò Samuele, Marone Davide, Mongelli Alessandro
LA GRAVITAZIONE UNIVERSALE
PROGETTO MONDIALE ASMA:
Educazione Razionale-Emotiva
Trasferimento delle risorse finanziarie: necessità e obiettivi
Tassi demografici ed economici
LA MATEMATICA DIVERTENTE Ma…a che gioco giochiamo?
Candidato: Daniele Cristofori Relatore: Prof. Sonia Bergamaschi
ONDE ELETTROMAGNETICHE E ANTENNE
Premessa Negli ultimi anni, il settore nonprofit è stato narrato come un CASO DI GRANDE SUCCESSO, uno dei pochi in una fase di profonda crisi. La narrazione.
Lungo periodo: disocccupazione strutturale
Salari dei manager Y = Salario annuale (in dollari)
Clan Manager For Clash Royale
APPUNTI SUL LINGUAGGIO C
Tecnologie e tecniche della ripresa e della registrazione audio
1.Legislazione Angela e colleghi si ribellano
2. Liquidi-macromolecole Risonanza Magnetica Nucleare: spettroscopia
Presentazione Corporate del Gruppo
Sezione Economia della Cultura
Produzioni Artigianali di Eccellenza
INNOVAZIONE E PASSIONE D’IMPRESA Perché tutelare la proprietà intellettuale Palermo – 26 gennaio 2018.
Le politiche sociali e il benessere della comunità locale.
(Sudden Ionosphere Disturbance)
Gastoldi Paolo, Lorenzi Denise, Dia Oureye
CORSO DI STORIA CONTEMPORANEA Docente Prof. Ventrone
AIMA …Amiamoci Musella Caterina.
La L.181/89 per il rilancio delle attività imprenditoriali nelle Aree di crisi industriale della città di Brindisi e della provincia di Brindisi Brindisi,
Regressione lineare multipla
Che cos'è la Devianza? La devianza è l'infrazione di una norma che prevede una sanzione e deve essere sempre considerata in relazione al gruppo di riferimento.
Strumenti di analisi normativa
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(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(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

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 Calcolatori Elettronici APPUNTI SUL LINGUAGGIO C Array e puntatori FINE