Esercizi Svolti in Matlab: differenze tra le versioni
(→Traccia 1) |
(→Traccia 1) |
||
Riga 1: | Riga 1: | ||
− | == | + | == 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. | 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> | ||
+ | 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 | ||
+ | |||
+ | </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> | ||
+ | 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 | ||
+ | |||
+ | |||
+ | </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> | ||
+ | % 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); | ||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | == 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 ordinare in maniera crescente (utilizzando l'algoritmo del selection sort) una riga della matrice. | Innanzitutto definisco una funzione il cui compito è quello di ordinare in maniera crescente (utilizzando l'algoritmo del selection sort) una riga della matrice. |
Versione delle 22:05, 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 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);