La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Fondamenti di Informatica

Presentazioni simili


Presentazione sul tema: "Corso di Fondamenti di Informatica"— Transcript della presentazione:

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

2 MATLAB: esercizi sui vettori
Alcuni esercizi sui vettori della scorsa lezione, risolti con i costrutti ciclo e scelta 5) azzerare le posizioni pari di X 7) azzerare tutti i valori inferiori a 10 8) azzerare il valore massimo

3 MATLAB: soluzioni esercizi sui vettori
5) azzerare le posizioni pari di X X(2:2:length(X))=0; for i = 2:2:length(X) X(i)=0; end

4 MATLAB: soluzioni esercizi sui vettori
7) azzerare tutti i valori inferiori a 10 X(find(X<10))=0; for i = 1:length(X) if X(i)<10 X(i)=0 end

5 MATLAB: soluzioni esercizi sui vettori
8) azzerare il valore massimo X(find(X==max(X)))=0; m=max(X); for i=1:length(X) if X(i)==m X(i)=0; end

6 MATLAB: confronto tra indicizzazione e costrutti
L’indicizzazione (negli array in generale) è uno strumento potente per applicare una stessa operazione a tutti gli elementi (o un sottoinsieme degli elementi dell’array). Se si vuole costruire un procedimento che differenzia le operazioni da fare al cambiare dell’elemento, è necessario ricorrere ai costrutti della programmazione (ciclo,scelta). Esempio, dato un vettore, inserire in ciascuna posizione il valore più grande tra quelli presenti dall’inizio del vettore alla posizione stessa. X = [ ];  X = [ ]; for i=1:length(X) X(i) = max(X(1:i)); end

7 MATLAB: Tipi di dato stutturati (array)
Un array è un struttura di dati - Omogenei (tutti dello stesso tipo) -Ordinata (ogni elemento è identificato da una posizione, che è un insieme di uno o più indici) 5 7 42 1 -3 2 254 34 45 4 23 54 6 Array a due dimensioni (2,4)

8 1 2 3 4 5 6 7 8 MATLAB: creazione di una matrice
Per creare una matrice è sufficiente elencarne i valori: uno spazio o una virgola separano gli elementi di una riga, un punto e virgola separa una riga dalla successiva. A=[ ; ; ; ]; 1 2 3 4 5 6 7 8

9 MATLAB: creazione di una matrice
zeros(m,n) Crea una matrice di zeri mxn ones(m,n) Crea una matrice di valori 1 e dimensione mxn int32(rand(m,n)*100) Crea una matrice mxn di numeri interi casuali compresi tra 0 e 99

10 1 2 3 4 5 6 7 8 MATLAB: riferirsi ad un elemento o sottomatrice
Per creare una matrice è sufficiente elencarne i valori: uno spazio o una virgola separano gli elementi di una riga, un punto e virgola separa una riga dalla successiva. A(3,4)  6 %tramite riga e colonna A(11)  5 %tramite posizione assoluta A(3,:)  [ ] %intera riga A(:,2)  [2 ; 3 ; 4 ; 5] % intera colonna A(2:4,:)  [ ; ; ] %tutte le righe dalla seconda alla quarta A(2:3, 4)  [5;6] %sottomatrice colonna A(2:4, 4:5)  [5 6;6 7;7 8] %sottomatrice generica 1 2 3 4 5 6 7 8

11 1 2 3 4 5 6 7 8 9 MATLAB: concatenare più matrici C = [9 ; 9 ; 9 ; 9];
Aggiungere una colonna alla fine di una matrice 1 2 3 4 5 6 7 8 9 C = [9 ; 9 ; 9 ; 9]; A = [A C]; Provare per esercizio ad aggiungere una colonna a sinistra

12 1 2 3 4 5 6 7 8 9 MATLAB: concatenare più matrici R = [9 9 9 9 9];
Aggiungere una riga alla fine di una matrice 1 2 3 4 5 6 7 8 R = [ ]; A = [A ; R]; Provare per esercizio ad aggiungere una riga all’inizio 9

13 1 2 3 4 5 6 7 8 MATLAB: eliminare righe e colonne A (4,:)=[]
Eliminare l’ultima riga di una matrice 1 2 3 4 5 6 7 8 A (4,:)=[] Per indicare in modo generico l’ultimo: lung=size(A); %lung è un vettore! A(lung(1),:)=[];

14 1 2 3 4 5 6 7 8 MATLAB: eliminare righe e colonne A (:,5)=[]
Eliminare l’ultima colonna di una matrice 1 2 3 4 5 6 7 8 A (:,5)=[] Per indicare in modo generico l’ultimo: lung=size(A); %lung è un vettore! A(:,lung(2))=[]; Tramite l’indicizzazione, si può eliminare una qualsiasi riga o colonna di una matrice.

15 1 2 3 4 5 6 7 8 9 MATLAB: sostituire righe e colonne R = [ 9 9 9 9 9];
Sostituire una riga 1 2 3 4 5 6 7 8 9 R = [ ]; A (2,:) = R Similmente, si può sostituire una colonna.

16 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 MATLAB: inserire righe e colonne
Inserire una riga in posizione p 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 dimensioni= size(A); righe=dimensioni(1); for i=righe+1:-1:p+1 A(i,:)=A(i-1,:) end A(p,:)=R; Per esercizio provare ad inserire una colonna in posizione generica p.

17 A=uint32(rand(4,5)*100); dimensioni=size(A); righe=dimensioni(1); R=[ ]; p=3; A=[A(1:p,:) ; R ; A(p+1:righe,:)]

18 Creare una matrice 4x5 con valori random compresi tra 0 e 99
A=uint32(rand(4,5)*100);

19 MATLAB: cercare un valore in una matrice
Data una matrice, vogliamo trovare la posizione di un elemento 1 2 5 3 7 8 9 1 6 4 find(A==8)  7 17 A==8; A(find(A==8))  8 8 Coordinate della posizione del primo: posizioni = find(A==8); posPrimo = posizioni(1); [righe,colonne] = size(A); riga = mod(posPrimo-1, righe)+1; colonna = floor(posPrimo / righe)+1;

20 2 5 3 7 8 9 1 6 4 MATLAB: cercare un valore in una matrice
Data una matrice, vogliamo trovare la posizione di un elemento [r,c]=size(A); for i=1:r for j=1:c if A(i,j)==8 rn=i; cn=j; end disp (rn); disp (cn); 2 5 3 7 8 9 1 6 4 N.B: se il valore 8 è presente più volte nella matrice, questo script trova la posizione dell’ultima occorrenza! Per evitare questo, si interrompe il ciclo la prima volta che viene trovato il valore: break; i=r; j=c;

21 trovato=false; [r,c]=size(A); for i=1:r if(trovato==false) for j=1:c if A(i,j)==8 rn=i; cn=j; %trovato=true; end disp (rn); disp (cn);

22 MATLAB: confrontare un vettore con le righe/colonne di una matrice
2 5 3 7 4 9 1 6 8 Come sapere se una riga di una matrice è uguale al vettore R? Alcune idee… min(A(3,:)==R)==1 dimensioni=size(A); sum(A(3,:)==R)==dimensioni(2) R 4 8 3 2 7

23 MATLAB: confrontare un vettore con le righe/colonne di una matrice
Data una matrice, e un vettore riga, trovare la posizione della prima riga della matrice uguale al vettore A 2 5 3 7 4 9 1 6 8 pos=0; dimensioni=size(A); for i=1:dimensioni(1) if (min(A(i,:)==R)==1) pos=i; disp(pos); %break; end R 4 8 3 2 7

24 dimensione=input('Inserisci il numero di elementi del vettore');
for i=1:dimensione valore=input('inserisci il prossimo valore' ); R=[R valore]; end disp(R);

25 MATLAB: esercizio Realizzare uno script. Data una qualsiasi matrice, aggiungere a questa una colonna a destra contenente per ogni riga il valore massimo della riga. A A 2 5 3 7 4 9 1 6 8 2 5 3 7 4 9 1 6 8

26 MATLAB: esercizio Realizzare uno script.
Data una qualsiasi matrice, aggiungere a questa una colonna a destra contenente per ogni riga il valore massimo della riga. Creo un vettore vuoto C Calcolo le dimensioni di A , salvandole nel vettore dimensioni Per tutte le righe di A aggiungo al vettore C una nuova riga, contenente il valore massimo di una riga di A Aggiungo a destra di A il vettore C ottenuto Mostro A

27 Creo un vettore vuoto C Calcolo le dimensioni di A , salvandole nel vettore dimensioni Per tutte le righe di A aggiungo al vettore C una nuova riga, contenente il valore massimo di una riga di A Aggiungo a destra di A il vettore C ottenuto Mostro A C=[]; dimensioni=size(A); for i=1:dimensioni(1) C=[C;max(A(i,:))]; end A=[A C]; disp(A);

28 MATLAB: esercizio Realizzare uno script. Data una qualsiasi matrice, aggiungere a questa una riga in fondo contenente per ogni colonna il valore minimo della colonna. A A 2 5 3 7 4 9 1 6 8 2 5 3 7 4 9 1 6 8

29 MATLAB: esercizi Data una matrice A ed un numero x, aggiungere ad A una colonna a destra contenente in ogni posizione il numero di volte che x compare nella corrispondente riga di A. Data una matrice A, in ogni riga scambiare il primo e l’ultimo elemento se non sono in ordine di grandezza. Successivamente, azzerare in ogni riga tutti gli elementi non compresi tra il primo e l’ultimo. Data una matrice A, contare il numero di volte che vi compare il suo valore massimo.

30 MATLAB: esercizi Data una matrice A ed un numero x, aggiungere ad A una colonna a destra contenente in ogni posizione il numero di volte che x compare nella corrispondente riga di A. 2 5 3 7 4 9 1 6 8 2 5 3 7 4 1 9 6 8 x=5

31 Data una matrice A ed un numero x, aggiungere ad A una colonna a destra contenente in ogni posizione il numero di volte che x compare nella corrispondente riga di A. C=[]; dimensioni=size(A); for i=1:dimensioni(1) volte=0; for j=1:dimensioni(2) if(A(i,j)==x) volte=volte+1; end C=[C ; volte]; A=[A C]; …oppure…. C=[]; dimensioni=size(A); for i=1:dimensioni(1) C=[C ; length(find(A(i,:)==x))]; end A=[A C];

32 MATLAB: esercizi Data una matrice A, in ogni riga scambiare il primo e l’ultimo elemento se non sono in ordine di grandezza. Successivamente, azzerare in ogni riga tutti gli elementi non compresi tra il primo e l’ultimo. 2 5 3 7 4 8 9 1 6 2 3 4 6 8 5 7

33 Data una matrice A, in ogni riga scambiare il primo e l’ultimo elemento se non sono in ordine di grandezza. Successivamente, azzerare in ogni riga tutti gli elementi non compresi tra il primo e l’ultimo. A=[ ; ; ]; dimensioni=size(A); for i=1:dimensioni(1) if A(i,1)>A(i,dimensioni(2)) appoggio=A(i,1); A(i,1)=A(i,dimensioni(2)); A(i,dimensioni(2))=appoggio; end for i=1:dimensioni(1) for j=2:dimensioni(2)-1 if A(i,j)<A(i,1) || … A(i,j)>A(i,dimensioni(2)) A(i,j)=0; end

34 Oppure… dimensioni=size(A); righe=dimensioni(1); colonne=dimensioni(2); for i=1:righe if A(i,1)>A(i,colonne) appoggio=A(i,1); A(i,1)=A(i,colonne); A(i,colonne)=appoggio; end A(i,find(~(A(i,:)>=A(i,1) & A(i,:)<=A(i,colonne))))=0;

35 MATLAB: esercizi Data una matrice A, contare il numero di volte che vi compare il suo valore massimo. 2 5 3 7 4 9 1 6 8 3

36 Data una matrice A, contare il numero di volte che vi compare il suo valore massimo.
m=max(max(A)); dimensioni=size(A); volte=0; for i=1:dimensioni(1) for j=1:dimensioni(2) if m==A(i,j) volte=volte+1; end …oppure…. length(find(A==max(max(A)))) sum(sum(A==max(max(A)))) L’approccio procedurale qui non conviene proprio!

37 MATLAB: esercizi 1) Data una matrice A, inserire in una nuova colonna in ultima posizione la media dei valori di ogni riga 2 5 3 7 4 9 1 6 8 2 5 3 7 4 4,3 9 1 6 4,0 8 6,2 5,6 2) Data una matrice A, inserire una nuova riga in fondo alla matrice con la somma di tutti gli elementi della colonna escluso il massimo della colonna 2 5 7 4 9 1 6 8 3 13 16 15 2 5 3 7 4 9 1 6 8

38 [righe,colonne]=size(A); C=[]; for i=1:righe m=mean(A(i,:)); C=[C;m];
1) Data una matrice A, inserire in una nuova colonna in ultima posizione la media dei valori di ogni riga A = uint32(rand(4,5)*100); [righe,colonne]=size(A); C=[]; for i=1:righe m=mean(A(i,:)); C=[C;m]; end A=[A C];

39 [righe,colonne]=size(A); R=[]; for i=1:colonne
2) Data una matrice A, inserire una nuova riga in fondo alla matrice con la somma di tutti gli elementi della colonna escluso il massimo della colonna A=uint32(rand(4,5)*100); [righe,colonne]=size(A); R=[]; for i=1:colonne s = sum(A(A(:,i)~=max(A(:,i)),i)); R=[R s]; end A=[A; R];


Scaricare ppt "Corso di Fondamenti di Informatica"

Presentazioni simili


Annunci Google