Esercizi Svolti in Matlab: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(Traccia 1)
(Traccia 1)
Riga 1: Riga 1:
== Traccia 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.

  1. function [ M ] = ordina_crescente( M, r, c )
  2. %ordina_crescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo crescente
  6.  
  7.     for i = 1 : c-1
  8.         i_min = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) < M(r, i_min)
  12.                 % Se vero, aggiorno l'indice dell'elemento minimo
  13.                 i_min = j;
  14.              end
  15.          end
  16.  
  17.         % Blocco di codice relativo allo scambio
  18.         temp = M(r, i);
  19.         M(r, i) = M(r, i_min);
  20.         M(r, i_min) = temp;
  21.     end
  22. 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.

  1. function [ M ] = ordina_decrescente( M, r, c )
  2.  %ordina_decrescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo decrescente
  6.  
  7.     for i = 1 : c-1
  8.         i_max = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) > M(r, i_max)
  12.                 i_max = j;
  13.              end
  14.         end
  15.  
  16.         temp = M(r, i);
  17.         M(r, i) = M(r, i_max);
  18.         M(r, i_max) = temp;
  19.     end
  20. 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.

  1. % Acquisizione dimensioni della matrice
  2. flag=true;
  3. while flag==true
  4.     m = input('');
  5.     flag = m<=0;
  6. end
  7. flag=true;
  8. while flag==true
  9.     n = input('');
  10.     flag= n<=0;
  11. end
  12.  
  13. % Acquisizione degli elementi della matrice
  14. A=[];
  15. for i=1:m
  16.     for j=1:n
  17.         A(i,j)=input('');
  18.     end
  19. end
  20.  
  21. % Creo la matrice B esattamente uguale alla matrice A
  22. B = A;
  23.  
  24. for i = 1 : m
  25.     if mod(i,2)==0
  26.         % Caso riga pari
  27.         B = ordina_crescente(B, i, n);
  28.     else
  29.         % Caso riga dispari
  30.         B = ordina_decrescente(B, i, n);
  31.     end
  32. end
  33.  
  34. disp(A)
  35. 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.

  1. function [ M ] = ordina_crescente( M, r, c )
  2. %ordina_crescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo crescente
  6.  
  7.     for i = 1 : c-1
  8.         i_min = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) < M(r, i_min)
  12.                 % Se vero, aggiorno l'indice dell'elemento minimo
  13.                 i_min = j;
  14.              end
  15.          end
  16.  
  17.         % Blocco di codice relativo allo scambio
  18.         temp = M(r, i);
  19.         M(r, i) = M(r, i_min);
  20.         M(r, i_min) = temp;
  21.     end
  22. 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.

  1. function [ M ] = ordina_decrescente( M, r, c )
  2.  %ordina_decrescente funzione che implementa l'algoritmo del selection sort
  3. %   La funzione accetta 3 parametri (la matrice, l'indice della riga da
  4. %   ordinare e il numero di colonne) e restituisce la matrice con la
  5. %   r-esima riga ordinata in modo decrescente
  6.  
  7.     for i = 1 : c-1
  8.         i_max = i;
  9.         j = i+1;
  10.         for j = j : c
  11.             if M(r, j) > M(r, i_max)
  12.                 i_max = j;
  13.              end
  14.         end
  15.  
  16.         temp = M(r, i);
  17.         M(r, i) = M(r, i_max);
  18.         M(r, i_max) = temp;
  19.     end
  20. 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.

  1. % Acquisizione dimensioni della matrice
  2. flag=true;
  3. while flag==true
  4.     m = input('');
  5.     flag = m<=0;
  6. end
  7. flag=true;
  8. while flag==true
  9.     n = input('');
  10.     flag= n<=0;
  11. end
  12.  
  13. % Acquisizione degli elementi della matrice
  14. A=[];
  15. for i=1:m
  16.     for j=1:n
  17.         A(i,j)=input('');
  18.     end
  19. end
  20.  
  21. % Creo la matrice B esattamente uguale alla matrice A
  22. B = A;
  23.  
  24. for i = 1 : m
  25.     if mod(i,2)==0
  26.         % Caso riga pari
  27.         B = ordina_crescente(B, i, n);
  28.     else
  29.         % Caso riga dispari
  30.         B = ordina_decrescente(B, i, n);
  31.     end
  32. end
  33.  
  34. disp(A)
  35. disp(B);