Risoluzione Tracce di Esame

Da Bioingegneria Elettronica e Informatica.

Appello 17 Gennaio 2017

Traccia: Algoritmo che acquisisce da tastiera gli elementi di una matrice A di dimensioni NxN, con N compreso nell’intervallo ]4,10], crea la matrice B con gli stessi elementi della matrice A, ma ordinati in ordine crescente per righe, e infine stampa gli elementi della matrice B in un file di testo e/o binario

Codice MATLAB Di seguito le funzioni e lo script principale che risolve il problema espresso nella traccia.

La prima funzione è quella che permette di acquisire gli elementi di una matrice quadrata, noto il suo ordine.

  1. function [ M ] = acquisisci_elementi( M, D )
  2. %acquisisci_elementi Funzione per acquisire gli elementi della matrice quadrata
  3.  
  4.     for i = 1 : D
  5.         for j = 1 : D
  6.             M(i,j) = input('');
  7.         end
  8.     end
  9. end

La seconda funzione permette di ordinare gli elementi di una matrice, salvandogli prima in un vettore e applicando il noto algoritmo di selection sort sul vettore. Al termine viene chiamata la funzione matrice_da_vettore che crea ricrea la matrice inserendo gli elementi presenti nel vettore.

  1. function [ MO ] = ordina_matrice( M, D )
  2. %ordina_matrice Funzione per ordinare gli elementi di una matrice per righe
  3.  
  4.     V = [];
  5.     k = 1;
  6.     for i = 1 : D
  7.         for j = 1 : D
  8.           V(k) = M(i,j);
  9.           k = k+1;
  10.         end
  11.     end
  12.  
  13.     V = ordina_vettore(V, k-1);
  14.     MO = matrice_da_vettore(V, D);
  15. end

La terza funzione è quella che implementa l'algoritmo del selection sort ordinando gli elementi del vettore in maniera crescente.

  1. function [ V ] = ordina_vettore( V, dim )
  2. %ordina_vettore Funzione per ordinare in maniera crescente un vettore
  3.  
  4.     for i = 1 : dim-1
  5.         i_min = i;
  6.         j = i+1;
  7.         for j = j : dim
  8.             if V(j) < V(i_min)
  9.                 % Se vero, aggiorno l'indice dell'elemento minimo
  10.                 i_min = j;
  11.              end
  12.          end
  13.  
  14.         % Blocco di codice relativo allo scambio
  15.         temp = V(i);
  16.         V(i) = V(i_min);
  17.         V(i_min) = temp;
  18.     end
  19. end

La quarta funzione è quella che permette di creare una matrice a partire dagli elementi di un vettore.

  1. function [ M ] = matrice_da_vettore( V, D )
  2. %matrice_da_vettore Funzione per le creazione di una matrice a partire da un vettore
  3.  
  4.     k = 1;
  5.     M = [];
  6.     for i = 1 : D
  7.         for j = 1 : D
  8.             M(i,j) = V(k);
  9.             k = k+1;
  10.         end
  11.     end
  12. end

La quinta funzione è quella che permette di salvare gli elementi di una matrice su un file di testo (formattandoli in maniera opportuna).

  1. function [  ] = stampa_su_file_testo( M, D )
  2. %stampa_su_file_testo Funzione per stampare su file di testo una matrice
  3.  
  4.     FILEID = fopen('matrice.txt','w');
  5.     for i = 1 : D
  6.         for j = 1 : D
  7.             fprintf(FILEID, '%d ', M(i,j));
  8.         end
  9.         fprintf(FILEID, '\n');
  10.     end
  11.     fclose(FILEID);
  12. end

La sesta funzione è quella che permette di salvare gli elementi di una matrice su un file binario.

  1. function [  ] = stampa_su_file_binario( M, D )
  2. %stampa_su_file_testo Funzione per stampare su file di testo una matrice
  3.  
  4.     FILEID = fopen('matrice.dat','w');
  5.     for i = 1 : D
  6.         for j = 1 : D
  7.             fwrite(FILEID, M(i,j), 'double');
  8.         end
  9.     end
  10.     fclose(FILEID);
  11. end

Infine, lo script principale nel quale vengono chiamate in maniera opportuna le funzioni precedentemente implementate

  1. %% Algoritmo che acquisisce da tastiera gli elementi di una matrice A di 
  2. % dimensioni NxN, con N compreso nell’intervallo ]4,10], crea la matrice B 
  3. % con gli stessi elementi della matrice A, ma ordinati in ordine crescente 
  4. % per righe, e infine stampa gli elementi della matrice B in un file 
  5. % di testo e/o binario
  6.  
  7. flag = true;
  8. while flag == true
  9.     N = input('');
  10.     flag = N <= 4 || N > 10;
  11. end
  12.  
  13. A = [];
  14. A = acquisisci_elementi(A, N);
  15.  
  16. B = A;
  17. B = ordina_matrice(B, N);
  18.  
  19. stampa_su_file_testo(B, N);
  20. stampa_su_file_binario(B, N);