Esercizi Svolti in Matlab: differenze tra le versioni

Da Bioingegneria Elettronica e Informatica.
(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.

  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);