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. % Funzione per la stampa su file di testo della matrice M
  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 
  2. % quadrato perfetto non inferiore a 16 e non superiore a 100), controllando che ogni elemento inserito 
  3. % non sia inferiore al precedente; creare una matrice quadrata in cui gli stessi elementi sono inseriti 
  4. % consecutivamente per righe evitando le ripetizioni e aggiungendo negli ultimi elementi della matrice 
  5. % tutti elementi nulli; infine, stampare la matrice finale in un file di testo e/o binario.
  6.  
  7. flag = true;
  8. while flag == true
  9.     n = input('Inserisci la radice quadrata di N: ');
  10.     % Chiedo l'inserimento della radice quadrata di N, in modo tale da essere sicuro
  11.     % che la dimensione N sia un quadrato perfetto (N = n*n) come richiesto dalla traccia
  12.     flag = n < 4 || n > 10;
  13. end
  14.  
  15. N = n * n;
  16.  
  17. V = caricaVettore(N);
  18.  
  19. M = caricaMatrice(V,n);
  20.  
  21. stampaMatrice(M, n, 'matrice.txt');

Appello 11 Aprile 2017

Traccia: Acquisire da file 25 numeri interi con segno e crea la matrice quadrata A di dimensioni 5x5; trasformare la matrice A, in modo tale che gli elementi di ogni sua singola riga risultino scambiati rispetto all'elemento centrale; stampa la nuova matrice A 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. Attenzione: è possibile eseguire correttamente il seguente programma solo se è presente, nella stessa directory in cui sono salvati gli script, un file di testo, nominato dati.txt, che contiene 25 numeri interi.

La seguente funzione permette di leggere da file di testo 25 numeri interi e restituisce la matrice con i dati presenti nel file.

  1. function [ A ] = leggiFile( )
  2.     fileID = fopen('dati.txt','r');
  3.     A = [];
  4.     for i = 1 : 5
  5.         for j = 1 : 5
  6.             A(i,j) = fscanf(fileID, '%d ', 1);
  7.         end
  8.     end
  9.     fclose(fileID);
  10. end

La seguente funzione permette di trasformare la matrice A, in modo tale che gli elementi di ogni sua singola riga risultino scambiati rispetto all'elemento centrale.

  1. function [ A ] = trasformaMatrice( A )
  2.     for i = 1 : 5
  3.         for j = 1 : 2
  4.             temp = A(i,j);
  5.             A(i,j) = A(i,6-j);
  6.             A(i,6-j) = temp;
  7.         end
  8.     end
  9. end

La seguente funzione permette di stampare su file di testo e binario la matrice A trasformata.

  1. function [  ] = stampaFile( A )
  2.     fileID = fopen('output.txt','w');
  3.     fileID2 = fopen('output.dat','w');
  4.     for i = 1 : 5
  5.         for j = 1 : 5
  6.             fprintf(fileID, '%d ', A(i,j));
  7.             fwrite(fileID2, A(i,j), 'double');
  8.         end
  9.         fprintf(fileID, '\n');
  10.     end
  11.     fclose(fileID);
  12.     fclose(fileID2);
  13. end

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

  1. %% Algoritmo che permette di acquisire da file 25 numeri interi con segno e crea la matrice quadrata A di dimensioni 5x5; 
  2. %  trasformare la matrice A, in modo tale che gli elementi di ogni sua singola riga risultino scambiati rispetto all'elemento centrale; 
  3. %  stampa la nuova matrice A in un file di testo e/o binario.
  4.  
  5. A = leggiFile();
  6. A = trasformaMatrice(A);
  7. stampaFile(A);