Corso di Fondamenti di Informatica

Slides:



Advertisements
Presentazioni simili
MATLAB.
Advertisements

MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Linguaggio MATLAB: costrutti tipici (IF,WHILE…)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Creazione di matrici Delimititatore di riga Delimititatore di matrice
ESERCIZI.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Consentono di descrivere la variabilità all’interno della distribuzione di frequenza tramite un unico valore che ne sintetizza le caratteristiche.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Basi di dati - Fondamenti
Process synchronization
Process synchronization
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Java World Matrici.
11. Lettura e Scrittura di file in Matlab
Dal problema al processo risolutivo
Gli array Moreno Marzolla
Process synchronization
Tutorato Elementi di Informatica 2013
7. Strutture di controllo Ing. Simona Colucci
Script Marco D. Santambrogio –
IL CONCETTO DI ALGORITMO
Richiami di Algebra Matriciale
7. Strutture di controllo
Array n-dimensionali e tipi di dati strutturati
MATRICI (ARRAY) IN MATLAB/OCTAVE
I FILES AD ACCESSO SEQUENZIALE
Informatica per Scienze Geologiche LT a.a
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Informatica per l’Ingegneria
Process synchronization
Process synchronization
Richiami di Algebra Matriciale
Informatica per Scienze Geologiche LT a.a
Informatica per Scienze Geologiche LT a.a
Corso Java Cicli e Array.
Corso Java Matrici.
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Process synchronization
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progetto 1 Input Creare una Funzione commentata che prenda come input:
Java Matrici.
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
APPUNTI SUL LINGUAGGIO C
Array n-dimensionali e tipi di dati strutturati
Programmazione e Laboratorio di Programmazione
Process synchronization
Richiami di Algebra Matriciale
Array e Stringhe Linguaggio C.
Array (vettori) In linguaggio C / C++.
Corso di Fondamenti di Informatica
Process synchronization
Programmazione e Laboratorio di Programmazione
La programmazione strutturata
La struttura dell'atomo
Corso di Fondamenti di Informatica
Algoritmi di ordinamento
Programmazione e Laboratorio di Programmazione
Corso di Fondamenti di Informatica
Script su vettori Realizza uno script che chiede in input una dimensione d e crea un vettore di d numeri interi casuali. Poi calcola la somma dei due numeri.
Corso di Fondamenti di Informatica
Transcript della presentazione:

Corso di Fondamenti di Informatica Macroarea di Ingegneria 2018/19 Tutor: prof. Francesco De Vincenzi

function q = quadratoRicorsivo (n, m) if m==0 q=0; else q=n+quadratoRicorsivo(n,m-1); end Funzione ricorsiva che calcola il quadrato di un numero(non negativo). function f = fattoriale (n) if n==1 f=1; else f=n*fattoriale(n-1); end Funzione ricorsiva che calcola il fattoriale di un numero n: n*n-1*n-2*….*1 function d = dueallaN (n) if n==0 d=1; else d=2*dueallaN(n-1); end Funzione ricorsiva che calcola 2 elevato ad n.

function p = prodottoVettoreRicorsivo (V) len=length(V); if len==0 p = 1; else p = V(1)*prodottoVettoreRicorsivo(V(2:len)); end Funzione ricorsiva che prende in input un vettore V e calcola il prodotto dei suoi elementi function c = contaZeriVettoreRicorsiva (V) len=length(V); if len==0 c=0; else if V(1)==0 c=1+contaZeriVettoreRicorsiva(V(2:len)); c=contaZeriVettoreRicorsiva(V(2:len)); end Funzione ricorsiva che prende in input un vettore V e conta quanti zeri ci sono

Funzione ricorsiva che prende in input due vettori e produce un valore booleano true se sono uguali(stessi valori nelle stesse posizioni) o false Funzione ricorsiva che prende in input un vettore V e trova il suo valore minimo function m = minimoVettoreRicorsiva (V) len=length(V); if len==1 m=V(1); else minimoResto=minimoVettoreRicorsiva(V(2:len)); if V(1) < minimoResto m=minimoResto; end function uguali = confrontaVettoriRicorsiva (V1, V2) len1=length(V1); len2=length(V2); if len1~=len2 uguali=false; else if len1==0 uguali=true; if V1(1)~=V2(1) uguali=confrontaVettoriRicorsiva(V1(2:len1),V2(2:len2)); end

Strutture dati array e matrici Le strutture dati viste finora consentono di memorizzare solo dati dello stesso tipo (omogenee). Inoltre un array non consente di memorizzare elementi di dimensione diversa. Non possibile: Matlab converte automaticamente i dati ad un tipo unico 3 1.5 ‘h’ 1 2 5 4 6 Non possibile: Le matrici devono avere in ogni riga lo stesso numero di colonne 2 5 9 7 5 10 4

Strutture dati non omogenee La struttura dati Cell consente di ospitare elementi di qualsiasi tipo e di qualsiasi «forma». >> a = { 5 } >> b = { [ 1 2; 3 4] } >> c = {'ciao' } >> c={ ['c','i','a','o'] } b a c 1 2 3 4 5 c i a o a è una cell che contiene un array 1x1 di double b è una cell che contiene una matrice 2x2 di double c è una cell che contiene un array 1x4 di char

Contenitore e contenuto Si può indicizzare con parentesi tonde () e parentesi graffe { } Tramite parentesi tonde accedo alla cell, tramite parentesi graffa al suo contenuto >> b = { [ 1 2; 3 4] } >> b (1) ans = { [1,1] = 1 2 3 4 } >> b {1} ans = 1 2 3 4 >> b {1}(1,:) ans = 1 2 1 2 3 4 1 2 3 4 1 2

Contenitore e contenuto Si può indicizzare con parentesi tonde () e parentesi graffe { } Tramite parentesi tonde accedo alla cell, tramite parentesi graffa al suo contenuto >> c = { ‘ciao’ } >> c(1) ans = { [1,1] = ciao } >> c{1} ans = ciao >> c{1}(2:2:4) ans = io i o c i a o c i a o

Cell Array Combinando più cell (in forma di array o di matrici) si ottengono i cell array. >> x x = { [1,1] = 1 [1,2] = 2 [1,3] = 3 [1,4] = 4 } >> x{1} ans = 1 >> x{2} ans = 2 >> x = { 1, 2, 3, 4 } >> x(1) ans = { [1,1] = 1 } >> x(2) ans = { [1,1] = 2 } 1 2 3 4 cell array 1x4 cell array 1x1 di double Una cell non è altro che un cell array di dimensione 1x1.

Cell Array Combinando più cell (in forma di array o di matrici) si ottengono i cell array. >> x x = { [1,1] = 1 [2,1] = 3 [1,2] = 2 [2,2] = 4 } >> x{1,1} ans = 1 >> x{2,2} ans = 4 >> x = {1,2;3,4} >> x(1,1) ans = { [1,1] = 1 } >> x(2,2) ans = { [1,1] = 4 } 1 2 3 4

Cell Array >> x = { 12 , [4,5,6] , [1 2;3 4], true, ‘ok’ } 1 2 3 4 12 4 5 6 1 o k >> x{1} ans = 12 >> x{2} ans = 4 5 6 >> x{2}(3) ans = 6 >> x(1) ans = { [1,1] = 12 } >> x{3}(2,2) ans = 4 >> x(2) ans = { [1,1] = 4 5 6 } >> x{5}(2) ans = k

Cell Array 4 5 6 >> x={4 {5 6}} x = { [1,1] = 4 [1,2] = [1,1] = 4 [1,2] = [1,1] = 5 [1,2] = 6 } 4 5 6 >> x{2}(1) ans = { [1,1] = 5 } >> x{1} ans = 4 >> x{2} ans = { [1,1] = 5 [1,2] = 6 } >> x(2) ans = { [1,1] = [1,1] = 5 [1,2] = 6 } >> x(1) ans = { [1,1] = 4 } >> x{2}{1} ans = 5

Creazione di cell array vuoti Il procedimento è analogo alla creazione di array o matrici vuote. >> cell(2) ans = [] [] [] [] >> cell(2, 4) ans = [] [] [] [] [] [] [] [] >> cell([1, 5]) ans = [] [] [] [] []

Manipolazione di cell array: indicizzazione >> X = { 1 [2 3] [4 5 6; 7 8 9] 0 } 4 5 6 7 8 9 1 2 3 >> X(1:2) >> X{1:2} L’uso delle graffe «smonta» la struttura del cell array. Indicizzando da 1 a 2 otteniamo due risposte, non una sola struttura. >> [a b] = X{1:2} 1 2 3 1 2 3

Manipolazione di cell array: concatenazione >> X = { 1 [2 3] [4 5 6; 7 8 9] 0 } >> X = [ X(1:2) X(4) ] 1 2 3 1 2 3 TEST: Cosa fa questa istruzione? [X{1} X{2} X{3}(1,:) X{3}(2,:) X{4}]

Manipolazione di cell array: cancellazione >> X = { 1 [2 3] [4 5 6; 7 8 9] 0 } >> X{3}=[] X = { [1,1] = 1 [1,2] = 2 3 [1,3] = [](0x0) [1,4] = 0 } 1 2 3 >> X(3)=[] X = { [1,1] = 1 [1,2] = 2 3 [1,3] = 0 } 1 2 3

Manipolazione di cell array: cosa fanno questi comandi? >> X = { 1 [2 3] [4 5 6; 7 8 9] 0 } >> Z = { X{1:2} } >> Z = [ X{1:2} ] >> [x y] = X{:}

Manipolazione di cell array: cosa fanno questi comandi? >> X = { 1 [2 3] [4 5 6; 7 8 9] 0 } >> Z = { X{1:2} } >> Z = [ X{1:2} ] >> [x y] = X{:} 1 2 3 x 1 y 2 3 1 2 3 >> Z={[X{1:2}]} 1 2 3

Esercizio: Misurazione inquinamento Sviluppare uno script MatLab che consente di inserire, per ciascun giorno dal Lunedì alla Domenica, una serie di valori di monossido di carbonio rilevati in una città.Il programma deve produrre un report (cell array) con il valore medio associato a ciascun giorno. Lunedi Martedi Domenica 9.4 11.6 6.4

Esercizio: Misurazione inquinamento Funzione di servizio per fare la media dei valori di un vettore… function m = mediaVettore(V) m = sum(V)/length(V); end Script inquinamento.m %valori costanti del programma nomiGiorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','Domenica'}; giorni=7; %cell array dei valori di inquinamento inizialmente vuoto inquinamento={};

for i=1:giorni %per ciascun giorno della settimana Script inquinamento.m for i=1:giorni %per ciascun giorno della settimana inquin_giorno=[]; %il vettore delle temperature del giorno è inizialmente vuoto disp(nomiGiorni{i}); %mostro il giorno della settimana misurazioni=input('Inserire il numero di misurazioni: '); %chiedo quante misurazioni for j=1:misurazioni %per ciascuna misurazione misura=input('Inserisci una misura: '); %ne chiedo il valore inquin_giorno=[inquin_giorno misura]; %la aggiungo in coda alle temperature end inquinamento= [ inquinamento inquin_giorno]; %aggiungo al cell array delle temperature

medie={}; %cell array chiesto in output Script inquinamento.m medie={}; %cell array chiesto in output for i=1:giorni %riempio ciascuna posizione con un array cell formato da nome del giorno medie{i}= {nomiGiorni{i} mediaVettore(inquinamento{i})}; %e media delle temperature end

Esercizio: Atleta Lunedi Martedi Domenica 9 12 4 6.4 6.2 6.05 Realizza un programma in MatLab che consente di creare un report degli allenamenti di un atleta del salto in lungo. L’atleta si allena tutti i giorni provando a saltare ad una distanza di 6 metri, segnando le misure dei salti e ripetendo il salto finché questo riesce. Il report deve contenere Per ogni giorno della settimana: il giorno, il numero di salti e la distanza massima saltata. Lunedi Martedi Domenica 9 12 4 6.4 6.2 6.05

nomestruttura.nomecampo Struct Una struct è una struttura dati caratterizzata da un nome e da un insieme di campi Ciascun campo è indicato da un nome. Per accedere al contenuto del campo, la sintassi da usare è ad esempio, per rappresentare i dati di uno studente possiamo definire una struct con queste istruzioni: nomestruttura.nomecampo studente.nome = "Franco"; studente.eta = 24; studente.voti = [26 28 19 30];

Struct Ciascun campo può essere una variabile semplice, un vettore, una matrice, un cell array o un’altra struct: comune.nome = "Frascati"; comune.abitanti = 22331; comune.frazioni = {"Cisternole", "Cocciano", "Selvotta", "Vermicino"}; comune.sindaco.cognome = "Mastrosanti"; comune.sindaco.eta = 52;

Vettore di struct Si possono assemblare più struct per contenere struct dello stesso tipo: comuniRoma(1).nome= "Ciampino"; comuniRoma(1).abitanti = 38533; comuniRoma(2).nome= "Frascati"; comuniRoma(2).abitanti = 22331; … comuniRoma(87).nome= "Grottaferrata"; comuniRoma(87).abitanti = 20450;

Vettore di struct Calcolare il numero medio di abitanti dei comuni di Roma numeroComuni = length(comuniRoma); totale=0; for i=1:numeroComuni totale=totale + comuniRoma(i).abitanti; end media = totale/numeroComuni; Esercizi: mostrare il nome del comune con più abitanti Dopo aver chiesto in input un numero di abitanti, costruire il vettore con le coppie nome comune e numero abitanti dei soli comuni con almeno il numero abitanti specificato

s=struct('nome','Franco','eta',24);