La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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.

Presentazioni simili


Presentazione sul tema: "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."— Transcript della presentazione:

1 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 più alti presenti nel vettore. Script su matrici Realizza uno script che chiede in input due dimensione r e c. Poi crea una matrice di dimensione r e c contenente valori casuali. Infine chiede in input due posizioni c1 e c2, con c1<c2 e produce una matrice M2 che contiene tutte le righe di M1 a partire dalla colonna c1 fino alla colonna c2. Funzioni e vettori Realizza una funzione che prende come parametri in input un vettore V contenente numeri interi e un numero intero x e restituisce la somma di tutti gli elementi di V che si trovano prima del valore x. Funzioni e matrici Scrivi una funzione che prende in input una matrice M con dimensioni qualsiasi e calcola e restituisce la somma dei soli elementi della matrice che si trovano in una posizione di riga e di colonna entrambe pari. Approccio top-down e vettori Realizza, utilizzando l’approccio top-down allo sviluppo di funzioni, una funzione che prende in input un vettore V e restituisce il massimo numero di volte che si ripete in V uno stesso elemento. Approccio top-down e matrici Realizza, utilizzando l’approccio top-down allo sviluppo di funzioni, una funzione che prende in input una matrice M e restituisce il numero di riga in cui la media degli elementi è minima. Ricorsione su numeri naturali Scrivi una funzione ricorsiva che prende in input un x e calcola la somma di tutti i numeri pari tra 0 ed x. Ricorsione su vettori Scrivi una funzione ricorsiva che prende in input un vettore V e restituisce un vettore V2 della stessa dimensione di V, contenente in ciascuna posizione il doppio dell’elemento presente nella stessa posizione in V. Scrivi una funzione ricorsiva che prende in input un vettore V e restituisce un vettore V2 della dimensione doppia di V, che contiene tutti gli elementi di V ripetuti due volte. Cell array Scrivi uno script che crea un cell array contenente in ogni cell un giorno della settimana e un importo economico che esprime il ricavo in euro di una giornata di lavoro di un negozio. Lo script deve produrre un Cell array contenente le sole cell che contengono il giorno e l’importo delle giornate in cui il ricavo è maggiore di zero.

2 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 più alti presenti nel vettore. 23 6 90 4 35 17 9

3 Costruisco il vettore e calcolo la lunghezza, il valore massimo e la sua posizione
d = input('Inserisci la dimensione del vettore: '); vettore = uint32(rand(1,d)*100); vettore len=length(vettore); massimo=max(vettore); posmassimo=find(vettore==massimo); Devo ricavare il vettore senza il suo valore massimo. Ho tanti modi diversi, ad esempio... vettoreSenzaMassimo=[vettore(1:posmassimo-1) vettore(posmassimo+1:len)]; %oppure vettoreSenzaMassimo=[]; for i=1:len if i~=posmassimo vettoreSenzaMassimo=[vettoreSenzaMassimo vettore(i)]; end vettoreSenzaMassimo=vettore(find(ones(1,len))~=posmassimo); %oppure, ma solo se il massimo non si ripete vettoreSenzaMassimo=vettore(vettore~=massimo);

4 Calcolo il secondo massimo, la somma e termino lo script con l’output
massimo2=max(vettoreSenzaMassimo); somma=massimo+massimo2; disp ('Somma dei due valori più alti: '); disp (somma);

5 Script su matrici Realizza uno script che chiede in input due dimensione r e c. Poi crea una matrice di dimensione r e c contenente valori casuali. Infine chiede in input due posizioni c1 e c2, con c1<c2 e produce una matrice M2 che contiene tutte le righe di M1 a partire dalla colonna c1 fino alla colonna c2. 5 7 12 6 9 1 13 2 44 8 121 32 3 c1=2, c2=4 7 12 6 1 13 2 121 32

6 r=input('Quante righe?');
c=input('Quante colonne?'); M= uint32(rand(r,c)*100); M c1=0;c2=0; while c2<=c1 || c1<1 || c1>c ||c2<1 || c2>c c1=input('Inserisci la prima colonna'); c2=input('Inserisci la seconda colonna'); end M1=[]; for i=1:r M1=[M1 ; M(i,c1:c2)]; M1

7 Funzioni e vettori Realizza una funzione che prende come parametri in input un vettore V contenente numeri interi e un numero intero x e restituisce la somma di tutti gli elementi di V che si trovano dal primo valore fino ad x. x=6 5 7 12 6 9 function s = sommaFinoX(V, x) s=sum(V(1:min(find(V==x)))); end function s = sommaFinoX(V, x) len=length(V); somma=0; for i=1:len somma=somma+V(i); if V(i)==x break; end s=somma; Oppure…

8 Funzioni e matrici Scrivi una funzione che prende in input una matrice M con dimensioni qualsiasi e calcola e restituisce la somma dei soli elementi della matrice che si trovano in una posizione di riga e di colonna entrambe pari. function s = sommaMatricePosPari (M) righe=size(M)(1); % [righe colonne]=size(M); colonne=size(M)(2); s=0; for i=2:2:righe for j=2:2:colonne s=s+M(i,j); end End %oppure s=sum(sum(M(2:2:righe,2:2:colonne))); Utilizzando bene l’indicizzazione si può evitare un blocco if che verifica che i e j siano contemporaneamente pari!

9 Approccio top-down e vettori
Realizza, utilizzando l’approccio top-down allo sviluppo di funzioni, una funzione che prende in input un vettore V e restituisce il massimo numero di volte che si ripete in V uno stesso elemento. function c = contaElementoVettore (V, x) c=sum(V==x); end function c = contaElementoVettore (V, x) c=0; for i=1:length(V) if V(i)==x c=c+1; end function m = massimaRipetizione (V) len=length(V); m=0; for i=1:len m2=contaElementoVettore(V,V(i)); if m<m2 m=m2; end function m = massimaRipetizione (V) len=length(V); R=[]; for i=1:len R=[ R sum(V==V(i))]; end m=max(R); 5 3 4 2 9 3 2 1

10 Approccio top-down e matrici
Realizza, utilizzando l’approccio top-down allo sviluppo di funzioni, una funzione che prende in input una matrice M e restituisce il numero di riga in cui la media degli elementi è minima. function m = mediaVettore (V) m = sum(V)/length(V); end function p = mediaMinimaRigheMatrice (M) p=0; mediaMinima=0; [righe colonne]=size(M); for i=1:righe mediaRiga=mediaVettore(M(i,:)) if p==0 || mediaMinima>mediaRiga p=i; mediaMinima=mediaRiga; end

11 Ricorsione su numeri naturali
Scrivi una funzione ricorsiva che prende in input un x e calcola la quantità di numeri pari tra 0 ed x. function p = contaPariRicorsiva (n) if n==0 p=1; else if mod(n,2)==0 p=1+contaPariRicorsiva(n-1); p=contaPariRicorsiva(n-1); end

12 Ricorsione su vettori Scrivi una funzione ricorsiva che prende in input un vettore V e restituisce un vettore V2 della stessa dimensione di V, contenente in ciascuna posizione il doppio dell’elemento presente nella stessa posizione in V. function V2 = raddoppiaValoriVettoreRicorsiva (V) len=length(V); if len==0 V2=[]; else V2=[V(1)*2 raddoppiaValoriVettoreRicorsiva(V(2:len))]; end

13 Ricorsione su vettori Scrivi una funzione ricorsiva che prende in input un vettore V e restituisce un vettore V2 della dimensione doppia di V, che contiene tutti gli elementi di V ripetuti due volte. function V2 = raddoppiaElementiVettoreRicorsiva(V) len=length(V); if len==0 V2=[]; else V2=[V(1) V(1) raddoppiaElementiVettoreRicorsiva(V(2:len))]; end

14 Cell array Scrivi uno script che crea un cell array contenente in ogni cell un giorno della settimana e un importo economico che esprime il ricavo in euro di una giornata di lavoro di un negozio, da inserire in input. Lo script deve produrre un Cell array contenente le sole cell che contengono il giorno e l’importo delle giornate in cui il ricavo è maggiore di zero. giorni={'Lunedi','Martedi','Mercoledi','Giovedi','Venerdi','Sabato','DOmenica'}; numeroGiorni=length(giorni); bilancio={}; for i=1:numeroGiorni disp(giorni{i}); importo=input('Inserisci importo: '); bilancio{i}={giorni{i} importo}; end bilancioPositivo={}; cont=1; if bilancio{i}{2}>0 bilancioPositivo{cont}=bilancio{i}; cont=cont+1;

15 I = {19, [3,12,1996],'Italy', 'Ila',true ,1, 3, [25,26,30]};
Creazione di un archivio con degli studenti mediante cell arrays clear,clc I = {19, [3,12,1996],'Italy', 'Ila',true ,1, 3, [25,26,30]}; L = {19, [21,8,1996],'Italy', 'Leo',false ,1, 2, [25,30]}; A1 = {20, [27,3,1996],'USA','Ang',true ,1, 4, [25,26,30,23]}; B = {20, [27,3,1996],'Canada','Ben',false ,1,4,[25,26,30,23]}; E = {22, [12,1,1994],'Russia', 'Edo',false,1,4,[25,26,30,27]}; F = {18, [16,11,1996],'Canada','Foi',false,1,4,[27,26,30,29]}; A2 = {25, [27,3,1991],'Pakistan', 'Ami',true ,3,15, [27,28,29,30,25,27,28,29]}; N = {18,[3,12,1997],'Pakistan','Nou',true,1,5,[25,26,30,30,30]}; archive={I,L,A1,B,E,F,A2,N}; Realizziamo alcune funzioni print_cells(archive); %stampa a video I nomi degli studenti archive=sort_age(archive); %ordina l’archivio per età print_media(archive); %stampa la media dei voti degli studenti

16 function print_cells(archive)
for pos=1:length(archive) elem = archive{pos}; % estrae l’elemento in posizione pos item= elem{4}; fprintf(' nome= %12s \n',item); %stampa inserendo il nome %in uno spazio di 12 caratteri end

17 function archive =sort_age(archive)
da_ordinare=true; while da_ordinare da_ordinare=false; for pos =1:length(archive)-1 elem1 = archive{pos}; % estraggo l’elemento in posizione pos elem2 = archive{pos+1}; % estraggo l’elemento in posizione pos+1 value1 = elem1{1}; % estraggo l’età 1 value2 = elem2{1}; % estraggo l’età 2 if value1>value2 % se non ordinati li scambio temp = elem1; archive{pos} = archive{pos+1}; archive{pos+1} = temp; da_ordinare = true; % e segno che devo ancora verificare l’ordine end

18 function print_media(archive)
for pos=1:length(archive) elem = archive{pos}; % estraggo l’elemento in posizione pos marks= elem{8}; % estraggo il vettore dei voti name = elem{4}; % estraggo il nome sum=0; for j=1:length(marks) sum=sum+marks(j); end media = sum./length(marks); fprintf(' nome= %12s media %f \n',name,media);

19 Esercizio Scrivi una funzione di nome cellParse che prende in input un cell array in cui ciascun elemento può essere una stringa, un vettore o un booleano. La funzione deve restituire: % nStr : il numero di stringhe presenti % nVect: il numero di vettori presenti % nBool: il numero di booleani presenti % d : un cell array di tutte le stringhe % vecLength: la lunghezza media dei vettori % allTrue: true se tutti I valori booleani sono true, false altrimenti

20 clear,clc % costruisco qualche cell di esempio A=[1 2 3]; B=true; C=Ciao a tutti!'; D=42; E=false; F='abc'; G={A B C D E F} % definisco il cell array %esempio di chiamata di funzione [a b c d e f] = cellParse(G)

21 function [nStr nVect nBool d vecLength allTrue] = cellParse(v)
nStr = 0; % inizializza I risultati nVect= 0; nBool= 0; Lung = 0; allTrue = true; for in =1:length(v) item = v{in}; % estrai l’elemento s1 = class(item); % determina il tipo di oggetto switch s1 case {'logical'} nBool = nBool + 1; %aumenta il numero di booleani if item ==false allTrue=false; end disp('is logical')

22 case 'double' disp('is double') if length(item)>0 % verifica se l’elemento è un vettore nVect = nVect + 1; Lung = Lung + length(item); end case 'char' % verifica se l’elemento è una stringa nStr = nStr + 1; d{nStr} = item; disp('is char') otherwise disp(‘Tipo di dato sconosciuto') if nVect > 0 vecLength = Lung./nVect; else vecLength = 0;


Scaricare ppt "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."

Presentazioni simili


Annunci Google