Esercizi Svolti in Matlab: differenze tra le versioni
(→Esercizio 2) |
(→Esercizio 2) |
||
Riga 98: | Riga 98: | ||
== Esercizio 2 == | == Esercizio 2 == | ||
+ | Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A | ||
+ | |||
+ | Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice. | ||
+ | <syntaxhighlight lang="matlab" line> | ||
+ | function [sum] = somma (M, r, c) | ||
+ | %somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e | ||
+ | sum = 0; | ||
+ | for i=1:r | ||
+ | for j=1:c | ||
+ | sum = sum + M(i,j); | ||
+ | end | ||
+ | end | ||
+ | |||
+ | end | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | Successivamente, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver calcolato la somma di tutti gli elementi della matrice A, viene creata la matrice B dando il valore coretto a ciascun elemento della matrice. | ||
+ | |||
+ | <syntaxhighlight lang="matlab" line> | ||
+ | % Acquisizione dimensioni della matrice | ||
+ | flag=true; | ||
+ | while flag==true | ||
+ | m = input(''); | ||
+ | flag = m<=0; | ||
+ | end | ||
+ | |||
+ | % Acquisizione degli elementi della matrice | ||
+ | A=[]; | ||
+ | for i=1:m | ||
+ | for j=1:m | ||
+ | A(i,j)=input(''); | ||
+ | end | ||
+ | end | ||
+ | |||
+ | sum = somma(A, m, m); | ||
+ | |||
+ | for i = 1 : m | ||
+ | for j = 1 : m | ||
+ | if i < j | ||
+ | B(i,j) = sum; | ||
+ | end | ||
+ | if i > j | ||
+ | B(i,j) = 0; | ||
+ | end | ||
+ | if i == j | ||
+ | B(i,j) = A(i,j); | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | disp(A); | ||
+ | disp(B); | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Esercizio 3 == | ||
Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A | Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A | ||
Versione delle 22:14, 13 gen 2017
Esercizio 1
Esiste una matrice A, le cui dimensioni sono m per le righe ed n per le colonne. Si vuole creare una matrice B contenente gli stessi elementi della matrice A, ma con le righe pari ordinate in modo crescente e le righe dispari ordinate in maniera decrescente.
Innanzitutto definisco una funzione il cui compito è quello di ordinare in maniera crescente (utilizzando l'algoritmo del selection sort) una riga della matrice.
function [ M ] = ordina_crescente( M, r, c )
%ordina_crescente funzione che implementa l'algoritmo del selection sort
% La funzione accetta 3 parametri (la matrice, l'indice della riga da
% ordinare e il numero di colonne) e restituisce la matrice con la
% r-esima riga ordinata in modo crescente
for i = 1 : c-1
i_min = i;
j = i+1;
for j = j : c
if M(r, j) < M(r, i_min)
% Se vero, aggiorno l'indice dell'elemento minimo
i_min = j;
end
end
% Blocco di codice relativo allo scambio
temp = M(r, i);
M(r, i) = M(r, i_min);
M(r, i_min) = temp;
end
end
Lo stesso discorso precedente vale per la seguente funzione, il cui compito è quello di ordinare in maniera decrescente (utilizzando l'algoritmo del selection sort) una riga della matrice.
function [ M ] = ordina_decrescente( M, r, c )
%ordina_decrescente funzione che implementa l'algoritmo del selection sort
% La funzione accetta 3 parametri (la matrice, l'indice della riga da
% ordinare e il numero di colonne) e restituisce la matrice con la
% r-esima riga ordinata in modo decrescente
for i = 1 : c-1
i_max = i;
j = i+1;
for j = j : c
if M(r, j) > M(r, i_max)
i_max = j;
end
end
temp = M(r, i);
M(r, i) = M(r, i_max);
M(r, i_max) = temp;
end
end
Infine, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver creato la matrice B a partire dalla matrice A, le sue righe vengono ordinate chiamando, di volta in volta, la funzione corretta.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag = m<=0;
end
flag=true;
while flag==true
n = input('');
flag= n<=0;
end
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:n
A(i,j)=input('');
end
end
% Creo la matrice B esattamente uguale alla matrice A
B = A;
for i = 1 : m
if mod(i,2)==0
% Caso riga pari
B = ordina_crescente(B, i, n);
else
% Caso riga dispari
B = ordina_decrescente(B, i, n);
end
end
disp(A)
disp(B);
Esercizio 2
Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A
Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice.
function [sum] = somma (M, r, c)
%somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e
sum = 0;
for i=1:r
for j=1:c
sum = sum + M(i,j);
end
end
end
Successivamente, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver calcolato la somma di tutti gli elementi della matrice A, viene creata la matrice B dando il valore coretto a ciascun elemento della matrice.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag = m<=0;
end
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:m
A(i,j)=input('');
end
end
sum = somma(A, m, m);
for i = 1 : m
for j = 1 : m
if i < j
B(i,j) = sum;
end
if i > j
B(i,j) = 0;
end
if i == j
B(i,j) = A(i,j);
end
end
end
disp(A);
disp(B);
Esercizio 3
Esiste una matrice quadrata A. Si vuole creare una matrice B contenente sotto la diagonale principale tutti elementi nulli, sopra la diagonale principale tutti elementi pari alla somma di tutti gli elementi della matrice A, mentre sulla diagonale principale i corrispondenti elementi della matrice A
Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice.
function [sum] = somma (M, r, c)
%somma funzione che calcola la somma di tutti gli elementi della matrice B avente dimensioni r e
sum = 0;
for i=1:r
for j=1:c
sum = sum + M(i,j);
end
end
end
Successivamente, lo script principale. Come si può vedere, vengono chieste all'utente le dimensioni della matrice e gli elementi della stessa. Dopo aver calcolato la somma di tutti gli elementi della matrice A, viene creata la matrice B dando il valore coretto a ciascun elemento della matrice.
% Acquisizione dimensioni della matrice
flag=true;
while flag==true
m = input('');
flag = m<=0;
end
% Acquisizione degli elementi della matrice
A=[];
for i=1:m
for j=1:m
A(i,j)=input('');
end
end
sum = somma(A, m, m);
for i = 1 : m
for j = 1 : m
if i < j
B(i,j) = sum;
end
if i > j
B(i,j) = 0;
end
if i == j
B(i,j) = A(i,j);
end
end
end
disp(A);
disp(B);