Esercizi Svolti in Matlab: differenze tra le versioni
(→Traccia 1) |
(→Traccia 1) |
||
Riga 2: | Riga 2: | ||
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. | 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. | ||
<syntaxhighlight lang="matlab" line> | <syntaxhighlight lang="matlab" line> | ||
function [ M ] = ordina_crescente( M, r, c ) | function [ M ] = ordina_crescente( M, r, c ) | ||
Riga 28: | Riga 29: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | 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. | ||
<syntaxhighlight lang="matlab" line> | <syntaxhighlight lang="matlab" line> | ||
function [ M ] = ordina_decrescente( M, r, c ) | function [ M ] = ordina_decrescente( M, r, c ) | ||
Riga 52: | Riga 54: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | 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. | ||
<syntaxhighlight lang="matlab" line> | <syntaxhighlight lang="matlab" line> |
Versione delle 22:00, 13 gen 2017
Traccia 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);