Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione...

21
Fondamenti di Informatica Introduzione alla programmazione in MATLAB Prof. Raffaele Pizzolante A.A. 2016/17 Esercitazione 1 | Possibili Soluzioni

Transcript of Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione...

Page 1: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 2: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

• 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

Page 3: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 4: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 5: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 6: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 7: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 8: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 9: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 10: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 11: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 12: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 13: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 14: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 15: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 16: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 17: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 18: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 19: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 20: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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

Page 21: Introduzione alla programmazione in MATLAB Esercitazione 1 ... · Introduzione alla Programmazione in MATLAB: Esercitazione 1 function [ maggiore ] = maggiore3(numero1, numero2, numero3)

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