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 sono mostrate le funzioni e lo script principale che risolve il problema espresso nella traccia.

La prima funzione è quella che permette di acquisire da tastiera 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; in particolare, tutte le componenti della matrice sono prima inserite in un vettore V che è successivamente ordinato utilizzando l' algoritmo selection sort. Infine, viene chiamata la funzione matrice_da_vettore che crea la matrice MO, che viene restituita dalla funzione, 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 implementa l'algoritmo del selection sort, effettuando un ordinamento delle componenti 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, è mostrato 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);

Appello 14 Febbraio 2017

Traccia: Algoritmo per acquisire da tastiera gli elementi di un vettore V di N elementi (con N di valore pari a un numero quadrato perfetto non inferiore a 16 e non superiore a 100), controllando che ogni elemento inserito non sia inferiore al precedente; creare una matrice quadrata in cui gli stessi elementi sono inseriti consecutivamente per righe evitando le ripetizioni e aggiungendo negli ultimi elementi della matrice tutti elementi nulli; infine, stampare la matrice finale in un file di testo e/o binario.


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

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

  1. function V = caricaVettore( N )
  2. % Funzione per il caricamento di un vettore di dimensione N, controllando che ogni elemento inserito non sia inferiore al precedente
  3.     V(1) = input(' ');
  4.     for i = 2:N
  5.         flag = true;
  6.         while flag
  7.             V(i) = input(' ');
  8.             flag = V(i) < V(i-1);
  9.         end
  10.     end
  11. end

La seconda funzione permette di inserire in una matrice M (quadrata di ordine n) gli elementi presenti nel vettore V; gli elementi sono inseriti consecutivamente per righe evitando le ripetizioni. Terminati gli elementi del vettore, i restanti elementi della matrice sono valorizzati a 0.

  1. function M = caricaMatrice( V, n )
  2. % Funzione per la creazione della matrice M a partitre dal vettore V, evitando le ripetizione e valorizzando gli elementi rimanenti a 0
  3.     k = 1;
  4.     N = n*n;
  5.     M = [];
  6.     for i = 1 : n
  7.         for j = 1 : n
  8.             flag = k < N && V(k) == V(k+1);
  9.             while flag == true
  10.                 k = k + 1;
  11.                 flag = k < N && V(k) == V(k+1);
  12.             end
  13.             if k <= N
  14.                 M(i,j) = V(k);
  15.                 k = k+1;
  16.             else
  17.                 M(i,j) = 0;
  18.             end
  19.         end
  20.     end
  21. end

La terza funzione stampa su file di testo la matrice.

  1. function [] = stampaMatrice( M, n, namefile )
  2.  
  3.     fileID = fopen(namefile,'w');
  4.     for i = 1 : n
  5.         for j = 1 : n
  6.             fprintf(fileID, '%d ', M(i,j));
  7.         end
  8.         fprintf(fileID,'\n');
  9.     end
  10.     fclose(fileID);
  11. end

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

  1. %% Algoritmo per acquisire da tastiera gli elementi di un vettore V di N elementi (con N di valore pari a un numero quadrato perfetto non inferiore a 16 e non superiore a 100), 
  2. % controllando che ogni elemento inserito non sia inferiore al precedente; creare una matrice quadrata in cui gli stessi elementi sono inseriti consecutivamente per righe 
  3. % evitando le ripetizioni e aggiungendo negli ultimi elementi della matrice tutti elementi nulli; infine, stampare la matrice finale in un file di testo e/o binario.
  4.  
  5. flag = true;
  6. while flag == true
  7.     n = input('Inserisci N: ');
  8.     flag = n < 4 || n > 10;
  9. end
  10.  
  11. N = n * n;
  12.  
  13. V = caricaVettore(N);
  14.  
  15. M = caricaMatrice(V,n);
  16.  
  17. stampaMatrice(M, n, 'matrice.txt');