Risoluzione Tracce di Esame
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.
function [ M ] = acquisisci_elementi( M, D )
%acquisisci_elementi Funzione per acquisire gli elementi della matrice quadrata
for i = 1 : D
for j = 1 : D
M(i,j) = input('');
end
end
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.
function [ MO ] = ordina_matrice( M, D )
%ordina_matrice Funzione per ordinare gli elementi di una matrice per righe
V = [];
k = 1;
for i = 1 : D
for j = 1 : D
V(k) = M(i,j);
k = k+1;
end
end
V = ordina_vettore(V, k-1);
MO = matrice_da_vettore(V, D);
end
function [ V ] = ordina_vettore( V, dim )
%ordina_vettore Funzione per ordinare in maniera crescente un vettore
for i = 1 : dim-1
i_min = i;
j = i+1;
for j = j : dim
if V(j) < V(i_min)
% Se vero, aggiorno l'indice dell'elemento minimo
i_min = j;
end
end
% Blocco di codice relativo allo scambio
temp = V(i);
V(i) = V(i_min);
V(i_min) = temp;
end
end
function [ M ] = matrice_da_vettore( V, D )
%matrice_da_vettore Funzione per le creazione di una matrice a partire da un vettore
k = 1;
M = [];
for i = 1 : D
for j = 1 : D
M(i,j) = V(k);
k = k+1;
end
end
end
function [ ] = stampa_su_file_testo( M, D )
%stampa_su_file_testo Funzione per stampare su file di testo una matrice
FILEID = fopen('matrice.txt','w');
for i = 1 : D
for j = 1 : D
fprintf(FILEID, '%d ', M(i,j));
end
fprintf(FILEID, '\n');
end
fclose(FILEID);
end
function [ ] = stampa_su_file_binario( M, D )
%stampa_su_file_testo Funzione per stampare su file di testo una matrice
FILEID = fopen('matrice.dat','w');
for i = 1 : D
for j = 1 : D
fwrite(FILEID, M(i,j), 'double');
end
end
fclose(FILEID);
end
%% 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
flag = true;
while flag == true
N = input('');
flag = N <= 4 || N > 10;
end
A = [];
A = acquisisci_elementi(A, N);
B = A;
B = ordina_matrice(B, N);
stampa_su_file_testo(B, N);
stampa_su_file_binario(B, N);