Fondamenti di InformaticaInt roduz ione a l la programmaz ione in MATLAB
P r o f. R a f fa e l e P i z zo l a n t e
A . A . 2 0 1 6 / 1 7
E s e rc i ta z i o n e 1 | Po s s i b i l i S o l u z i o n i
• Esercizio 1• Scrivere una funzione, chiamata maggiore3 (da memorizzare in un M-file
function), che prenda i seguenti parametri di input: numero1, numero2
e numero3 e restituisca, in output, il maggiore di tali numeri
• Esercizio 2• Scrivere un M-File Script MATLAB che generi il seguente output
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 1 | Possibili Soluzioni• Soluzione 1
• Soluzione 2 (Utilizzando funzioni built-in di MATLAB)
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ maggiore ] = maggiore3(numero1, numero2, numero3)
if numero1 > numero2
maggiore_temporaneo = numero1;
else
maggiore_temporaneo = numero2;
end
if numero3 > maggiore_temporaneo
maggiore_temporaneo = numero3;
end
maggiore = maggiore_temporaneo;
end
function [ maggiore ] = maggiore3(numero1, numero2, numero3)
maggiore = max([numero1 numero2 numero3]);
end
Esercizio 2 | Possibili Soluzioni• Soluzione 1
• Soluzione 2
• Soluzione 3
Introduzione alla Programmazione in MATLAB: Esercitazione 1
for riga = 1:10
valore = 1;
for colonna = 1:riga
A(colonna) = colonna;
end
disp(A);
end
for riga = 1:10
disp([1:riga]);
end
i = 1;
while i < 11
disp(1 : i);
i = i + 1;
end
Esercizio 3• Scrivere una funzione (che utilizzi cicli for annidati) per generare la seguente matrice A
A =
N.B.:
• A(1, 1) = 4; A(1, 2) = A(1, 1) + 4; …
• A(2, 1) = A(1, 3) – 2; A(2, 2) = A(2, 1) + 4; …
4 8 12
10 14 18
16 20 24
22 26 30
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 3 | Possibili Soluzioni | 1/2• Soluzione 1
• Soluzione 2
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ A ] = genera_matrice1()
riga1 = 4:4:12;
A(1, :) = riga1;
for i = 2:4
A(i, :) = A(i - 1, :) + 6;
end
end
function [ A ] = genera_matrice2()
colonna1 = [ 4:6:22 ]';
A(:, 1) = colonna1;
for i = 2:3
A(:, i) = A(:, i - 1) + 4;
end
end
Esercizio 3 | Possibili Soluzioni | 2/2• Soluzione 3
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ A ] = genera_matrice3()
A(1, 1) = 4;
for riga = 1:4
for colonna = 1:3
if ((riga > 1) && (colonna == 1))
A(riga, colonna) = A(riga - 1, colonna) + 6;
elseif (colonna > 1)
A(riga, colonna) = A(riga, colonna - 1) + 4;
end
end
end
end
Esercizio 4• Esercizio 4.1 (fattoriale)• Scrivere una funzione che prenda in input n, calcoli e restituisca in output n!
• Esercizio 4.2 (divisori)• Scrivere una funzione che prenda in input n, calcoli e restituisca in output un array
contenente i divisori di n
• Esercizio 4.3 (numero primo)• Scrivere una funzione che prenda in input n e restituisca 1 se n è primo, 0
altrimenti
• Esercizio 4.4 (somma primi n interi positivi)• Scrivere una funzione che prenda in input n e restituisca la somma dei primi n
interi positivi
• Esercizio 4.5 (riga con somma massima di una matrice)• Scrivere una funzione che prenda in input una matrice A e restituisca il valore della
somma della riga di A, avente la somma degli elementi massima fra tutte le righedi A
NOTA: Le funzioni di tali esercizi possono invocare ulteriori funzioni sia viste a lezione e sia contenute negli esercizi precedenti oppure funzioni built-in o altre funzioni da voi definite
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 4 | Possibili Soluzioni | 1/5• Soluzione | Esercizio 4.1
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [n_fact] = fattoriale(n)
if n == 0
n_fact = 1;
else
n_fact = 1;
for i = 2:n
n_fact = n_fact * i;
end
end
end
Esercizio 4 | Possibili Soluzioni | 2/5• Soluzione | Esercizio 4.2
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ array_divisori ] = divisori(n)
divisore_idx = 1;
for i = 1:n
if mod(n, i) == 0
array_divisori(divisore_idx) = i;
divisore_idx = divisore_idx+1;
end
end
end
Esercizio 4 | Possibili Soluzioni | 3/5• Soluzione | Esercizio 4.3
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ primo ] = primo(n)
divisori_n = divisori(n);
if length(divisori_n) == 2
primo = 1;
else
primo = 0;
end
end
Esercizio 4 | Possibili Soluzioni | 4/5• Soluzione | Esercizio 4.4
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ somma ] = somma_interi_positivi(n)
somma = 0;
for i = 1:n
somma = somma + i;
end
end
Esercizio 4 | Possibili Soluzioni | 5/5• Soluzione 1 | Esercizio 4.5
• Soluzione 2 | Esercizio 4.5
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [somma_maxriga_matrice] = somma_maxriga_matrice2(m)
somma_maxriga_matrice = max(sum(m, 2));
end
function [somma_maxriga_matrice] = somma_maxriga_matrice1(m)
[nr, nc] = size(m);
for i=1:nr
somma_righe_matrice(i) = sum(m(i,:));
end
somma_maxriga_matrice = max(somma_righe_matrice);
end
Esercizio 5• Esercizio 5.1 (inversione array)
• Scrivere una funzione che prenda in input un array a, e restituisca in output l’arraycontenente gli stessi elementi di a ma in ordine inverso
• Esempio
• Input: a = [1 2 3 4 5]
• Ouput: o = [5 4 3 2 1]
• Esercizio 5.2 (numero occorrenze in array)
• Scrivere una funzione che prenda in input un array a e un numero (scalare) n, erestituisca in output il numero di occorrenze di n all’interno di a
• Esempio: a = [ 3 5 6 7 8 4 7 8 11 7 91 ], n = 7 n_occorrenze = 3
• Esercizio 5.3 (somma diagonale principale di una matrice quadrata)
• Scrivere una funzione che prenda in input una matrice quadrata A, calcoli e restituisca inoutput la somma degli elementi della diagonale principale
NOTA: Le funzioni di tali esercizi possono invocare ulteriori funzioni sia viste a lezione e sia contenute negli esercizi precedenti oppure funzioni built-in o altre funzioni da voi definite
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 5 | Possibili Soluzioni | 1/3• Soluzione | Esercizio 5.1
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [a_inverso] = inversione_array(a)
for i=1:length(a)
a_inverso(length(a) - i + 1) = a(i);
end
end
Esercizio 5 | Possibili Soluzioni | 2/3• Soluzione 1 | Esercizio 5.2
• Soluzione 2 | Esercizio 5.2
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [n_occorrenze] = numero_occorrenze_array1(a, n)
n_occorrenze = 0;
for i=1:length(a)
if a(i)==n
n_occorrenze = n_occorrenze + 1;
end
end
end
function [n_occorrenze] = numero_occorrenze_array(a, n)
n_occorrenze = numel(find(a == n));
end
Esercizio 5 | Possibili Soluzioni | 3/3• Soluzione | Esercizio 5.3
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [somma_diag_principale] = somma_diagonale_principale(a)
[nr, nc] = size(a);
somma = 0;
for i = 1:nr
somma = somma + a(i, i);
end
somma_diag_principale = somma;
end
Esercizio 6• Scrivere una funzione, chiamata percentuale_sconto (damemorizzare in un M-file), che prenda in input l’importodell’acquisto e restituisca, in output, la percentuale di sconto sutale importo.
• Le percentuali di sconto sono così calcolate:
• Lo sconto verrà effettuato se e solo se l’importo dell’acquisto èsuperiore a 299€
• Se l’importo è superiore a 999€, la percentuale di sconto sarà del5%. Se è superiore a 1499€ allora sarà dal 10%
• La percentuale minima di sconto è 2%
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 6 | Possibili Soluzioni• Soluzione
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ perc_sconto ] = percentuale_sconto(importo)
if importo >= 299
if importo >= 1499
perc_sconto = 10;
elseif importo >= 999
perc_sconto = 5;
else
perc_sconto = 2;
end
else
perc_sconto = 0;
end
Esercizio 7• Scrivere una funzione, chiamata stagione_anno (damemorizzare in un M-file function), che prenda i seguentiparametri di input giorno e mese e restituisca, in output, ilcodice della stagione in cui tale data è collocata
•Promemoria stagioni• Inverno (Inizio: 23/12 - Fine: 20/03) codice 1
• Primavera (Inizio: 21/03 – Fine: 21/06) codice 2
• Estate (Inizio: 22/06 - Fine: 22/09) codice 3
• Autunno (Inizio: 23/09 - Fine: 22/12) codice 4
• Data non valida codice -1
Introduzione alla Programmazione in MATLAB: Esercitazione 1
Esercizio 7 | Possibili Soluzioni• Soluzione
Introduzione alla Programmazione in MATLAB: Esercitazione 1
function [ codice_stagione ] = stagione_anno(giorno, mese)
if giorno >= 23 && mese == 12 % Inverno - parte 1
codice_stagione = 1;
elseif giorno >= 1 && (mese == 1 || mese == 2) % Inverno - parte 2
codice_stagione = 1;
elseif giorno <= 20 && mese == 3 % Inverno - parte 3
codice_stagione = 1;
elseif giorno >= 21 && mese == 3 % Primavera - parte 1
codice_stagione = 2;
elseif giorno >= 1 && (mese == 4 || mese == 5) % Primavera - parte 2
codice_stagione = 2;
elseif giorno <= 21 && mese == 6 % Primavera - parte 3
codice_stagione = 2;
elseif giorno >= 22 && mese == 6 % Estate - parte 1
codice_stagione = 3;
elseif giorno >= 1 && (mese == 7 || mese == 8) % Estate - parte 2
codice_stagione = 3;
elseif giorno <= 1 && mese == 9 % Estate - parte 3
codice_stagione = 3;
elseif giorno >= 23 && mese == 9 % Autunno - parte 1
codice_stagione = 4;
elseif giorno >= 1 && (mese == 10 || mese == 11) % Autunno - parte 2
codice_stagione = 4;
elseif giorno <= 22 && mese == 12 % Estate - parte 3
codice_stagione = 4;
else
codice_stagione = -1;
end
end