Esercizi Svolti in Matlab: differenze tra le versioni
(→Traccia 1) |
(→Esercizio 2) |
||
Riga 100: | Riga 100: | ||
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 | ||
− | Innanzitutto definisco una funzione il cui compito è quello di | + | Innanzitutto definisco una funzione il cui compito è quello di calcolare la somma di tutti gli elementi di una matrice. |
<syntaxhighlight lang="matlab" line> | <syntaxhighlight lang="matlab" line> | ||
− | function [ | + | 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); | |
− | for i = 1 : | + | end |
− | + | ||
− | j = | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
end | end | ||
+ | |||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </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> | <syntaxhighlight lang="matlab" line> | ||
Riga 161: | Riga 123: | ||
m = input(''); | m = input(''); | ||
flag = m<=0; | flag = m<=0; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Riga 171: | Riga 128: | ||
A=[]; | A=[]; | ||
for i=1:m | for i=1:m | ||
− | for j=1: | + | for j=1:m |
A(i,j)=input(''); | A(i,j)=input(''); | ||
end | end | ||
end | end | ||
− | + | sum = somma(A, m, m); | |
− | + | ||
for i = 1 : m | for i = 1 : m | ||
− | if | + | for j = 1 : m |
− | + | if i < j | |
− | B | + | 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 | ||
end | end | ||
− | disp(A) | + | disp(A); |
disp(B); | disp(B); | ||
− | + | ||
− | + | ||
</syntaxhighlight> | </syntaxhighlight> |
Versione delle 22:13, 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);