• Non ci sono risultati.

Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Fondamenti di Informatica"

Copied!
11
0
0

Testo completo

(1)

Fondamenti di Informatica

Esercitazione MATLAB

M o d e l l a z i o n e e R i s o l u z i o n e d i P r o b l e m i m e d i a n t e M AT L A B

P ro f. M a rc o L o m b a rd i

A . A . 2 0 1 9 / 2 0 2 0

(2)

La matrice O rappresenta l’orario di una settimana accademica, la quale prevede un certo

numero di ore di frequenza al giorno (nell’esempio sono presenti 6 ore, rappresentate dalle

righe) per un certo numero di giorni (nell’esempio sono riportati 5 giorni: da lunedì a

venerdì, rappresentati dalle colonne). Ogni elemento di O indica la materia (caratterizzata dal

proprio indice, compreso tra 1 e 4) relativa alla lezione che si terrà in una specifica ora

(specificata sulla riga) di uno specifico giorno (specificato sulla colonna)

Esempio 1: O(3, 2) → ha valore 1 e indica che nell’Ora 3 (riga 3) del Giorno 2 (colonna

2, Martedì) si terrà una lezione della Materia 1

Esempio 2: O(1, 5) → ha valore 3 e indica che nell’Ora 1 (riga 1) del Giorno 5 (colonna

5, Giovedì) si terrà una lezione della Materia 3

L’array colonna C rappresenta il prospetto dei CFU associati ad ogni materia

• Le materie sono specificate dalle righe

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

Or

e

(3)

Scrivere una funzione chiamata cfu_materia_piu_ore, che prenda come argomenti di input la matrice O (orario), l’array colonna C (cfu) ed un intero indice_giorno, e restituisca come argomento di output il numero di CFU della materia avente il maggior numero di ore nel giorno specificato dall’indice indice_giorno

Esempio: cfu_materia_piu_ore(O, C, 5)→ restituisce 6

OSSERVAZIONE: Il valore 6 si riferisce al numero di CFU della materia con indice 3

Scrivere una funzione chiamata ore_materia, che prenda come argomenti di input la matrice O (orario), un intero indice_materia ed un intero indice_giorno, e restituisca come argomento di output il numero di ore della materia, avente come indice indice_materia, nel giorno specificato dall’indice indice_giorno. Se il numero ottenuto è pari a zero, stampare a video il messaggio «Materia non prevista nel giorno indicato.»

Esempio 1: ore_materia(O, 4, 2)→ restituisce 2

Esempio 2: ore_materia(O, 4, 1)→ restituisce 0 e stampa a video il messaggio

OSSERVAZIONE: Il valore 2 si riferisce al numero di ore della materia con indice 4 nel giorno 2

Eser ciz io 1 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

C

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4 Eser ciz io 2

(4)

Scrivere un M-File Script chiamato orario_script.m che effettui le seguenti operazioni

1. Importi la matrice O dal file orario.txt

2. Importi la matrice C dal file cfu.txt

3. Invochi la funzione dell’Esercizio 1 (chiamata cfu_materia_piu_ore) con gli argomenti di input: O, C e 5, ed infine mostri a video il risultato della funzione stessa

NOTA: I file orario.txt e cfu.txt contengono i dati. Si assuma che i file siano memorizzati all’interno della Current Directory Eser ciz io 3 1, 4, 1, 4, 3 1, 4, 1, 3, 1 2, 1, 2, 1, 3 3, 2, 2, 2, 3 2, 2, 3, 2, 1 3, 1, 3, 3, 4 CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

Contenuto del file orario.txt

Contenuto del file cfu.txt <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

(5)

Scrivere una funzione chiamata cfu_materia_piu_ore, che prenda come argomenti di input la matrice O (orario), l’array colonna C (cfu) ed un intero indice_giorno, e restituisca come argomento di output il numero di CFU della materia avente il maggior numero di ore nel giorno specificato dall’indice indice_giorno

Esempio: cfu_materia_piu_ore(O, C, 5)→ restituisce 6

OSSERVAZIONE: Il valore 6 si riferisce al numero di CFU della materia con indice 3

Possibile Soluzione 1/4 Eser ciz io 1 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

C

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [cfu] = cfu_materia_piu_ore(O, C, indice_giorno) num_materie = length(C);

for ind_mat = 1:num_materie

ore_materia_giorno(ind_mat) = length(find(O(:, indice_giorno) == ind_mat));

end

[valore, indice] = max(ore_materia_giorno); cfu = C(indice);

end

(6)

Simulazione Seconda Prova Intracorso

Scrivere una funzione chiamata cfu_materia_piu_ore, che prenda come argomenti di input la matrice O (orario), l’array colonna C (cfu) ed un intero indice_giorno, e restituisca come argomento di output il numero di CFU della materia avente il maggior numero di ore nel giorno specificato dall’indice indice_giorno

Esempio: cfu_materia_piu_ore(O, C, 5)→ restituisce 6

OSSERVAZIONE: Il valore 6 si riferisce al numero di CFU della materia con indice 3

Possibile Soluzione 2/4 Eser ciz io 1 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [cfu] = cfu_materia_piu_ore(O, C, indice_giorno) num_materie = length(C);

ore_materia_giorno = zeros(num_materie, 1); [num_ore, num_giorni] = size(O);

for indice_ora = 1:num_ore

ind_mat = O(indice_ora, indice_giorno);

ore_materia_giorno(ind_mat) = ore_materia_giorno(ind_mat) + 1;

end

[valore, indice] = max(ore_materia_giorno); cfu = C(indice);

(7)

Simulazione Seconda Prova Intracorso

Scrivere una funzione chiamata cfu_materia_piu_ore, che prenda come argomenti di input la matrice O (orario), l’array colonna C (cfu) ed un intero indice_giorno, e restituisca come argomento di output il numero di CFU della materia avente il maggior numero di ore nel giorno specificato dall’indice indice_giorno

Esempio: cfu_materia_piu_ore(O, C, 5)→ restituisce 6

OSSERVAZIONE: Il valore 6 si riferisce al numero di CFU della materia con indice 3

Possibile Soluzione 3/4 Eser ciz io 1 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

C

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [cfu] = cfu_materia_piu_ore(O, C, indice_giorno) num_materie = length(C);

for ind_mat = 1:num_materie

ore_materia_giorno(ind_mat) = length(find(O(:, indice_giorno) == ind_mat));

end

cfu = C(find(ore_materia_giorno == max(ore_materia_giorno)));

end

OSSERVAZIONE:

Questa soluzione fornisce come output il numero di CFU, relativo ad una o più materie aventi il maggior numero di ore, nel giorno

specificato da

indice_giorno

Questa soluzione non era esplicitamente richiesta, ma è ugualmente valida

(8)

Simulazione Seconda Prova Intracorso

Scrivere una funzione chiamata cfu_materia_piu_ore, che prenda come argomenti di input la matrice O (orario), l’array colonna C (cfu) ed un intero indice_giorno, e restituisca come argomento di output il numero di CFU della materia avente il maggior numero di ore nel giorno specificato dall’indice indice_giorno

Esempio: cfu_materia_piu_ore(O, C, 5)→ restituisce 6

OSSERVAZIONE: Il valore 6 si riferisce al numero di CFU della materia con indice 3

Possibile Soluzione 4/4 Eser ciz io 1 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [cfu] = cfu_materia_piu_ore(O, C, indice_giorno) num_materie = length(C);

ore_materia_giorno = zeros(num_materie, 1); [num_ore, num_giorni] = size(O);

for indice_ora = 1:num_ore

ind_mat = O(indice_ora, indice_giorno);

ore_materia_giorno(ind_mat) = ore_materia_giorno(ind_mat) + 1;

end

cfu = C(find(ore_materia_giorno == max(ore_materia_giorno)));

end

OSSERVAZIONE:

Questa soluzione fornisce come output il numero di CFU, relativo ad una o più materie aventi il maggior numero di ore, nel giorno specificato da indice_giorno

Questa soluzione non era esplicitamente richiesta, ma è ugualmente valida

(9)

Scrivere una funzione chiamata ore_materia, che prenda come argomenti di input la matrice O (orario), un intero indice_materia ed un intero indice_giorno, e restituisca come argomento di output il numero di ore della materia, avente come indice indice_materia, nel giorno specificato dall’indice indice_giorno. Se il numero ottenuto è pari a zero, stampare a video il messaggio «Materia non prevista nel giorno indicato.»

Esempio: ore_materia(O, 4, 2)→ restituisce 2

OSSERVAZIONE: Il valore 2 si riferisce al numero di ore della materia con indice 4 nel giorno 2

Possibile Soluzione 1/2 Eser ciz io 2 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

C

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [ore] = ore_materia(O, indice_materia, indice_giorno) ore = length(find(O(:, indice_giorno) == indice_materia));

if ore==0

disp(‘Materia non prevista nel giorno indicato.’); end

end

(10)

Simulazione Seconda Prova Intracorso

Possibile Soluzione 2/2 <<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4

function [ore_della_materia] = ore_materia(O, indice_materia, indice_giorno) [num_ore, num_giorni] = size(O);

somma = 0;

for indice_ora = 1:num_ore

if O(indice_ora, indice_giorno) == indice_materia somma = somma + 1;

end end

ore_della_materia = somma;

if ore==0

disp(‘Materia non prevista nel giorno indicato.’);

end end Eser ciz io 2

(11)

Scrivere un M-File Script chiamato orario_script.m che effettui le seguenti operazioni

1. Importi la matrice O dal file orario.txt

2. Importi la matrice C dal file cfu.txt

3. Invochi la funzione dell’Esercizio 1 (chiamata cfu_materia_piu_ore) con gli argomenti di input: O, C e 5, ed infine mostri a video il risultato della funzione stessa

NOTA: I file orario.txt e cfu.txt contengono i dati. Si assuma che i file siano memorizzati all’interno della Current Directory

Possibili Soluzioni (contenuto del file orario_script.m)

Eser

ciz

io

3

Simulazione Seconda Prova Intracorso

<<cfu.txt>> CFU Materia1 4 Materia2 2 Materia3 6 Materia4 4

O

Giorni Settimana

C

Or

e

<<orario.txt>> Lunedì (indice 1) Martedì (indice 2) Mercoledì (indice 3) Giovedì (indice 4) Venerdì (indice 5) Ora1 (indice 1) 1 4 1 4 3 Ora2 (indice 2) 1 4 1 3 1 Ora3 (indice 3) 2 1 2 1 3 Ora4 (indice 4) 3 2 2 2 3 Ora5 (indice 5) 2 2 3 2 1 Ora6 (indice 6) 3 1 3 3 4 O = importdata('orario.txt'); C = importdata('cfu.txt’); C = C.data; cfu_materia_piu_ore(O, C, 5)

Riferimenti

Documenti correlati

• Scrivere una funzione chiamata meno_popolare che prenda in input la matrice C (escursionisti) e l’array P (persone) e restituisca l’indice della città meno

• Scrivere una funzione chiamata paese_più_vendite che prenda in input la matrice V (vendite) e restituisca l’indice del paese in cui sono stati venduti maggiori

• Scrivere una funzione chiamata media_maggiore che prenda in input la matrice C (cinema) e l’array B (costo dei biglietti), e restituisca l’indice del cinema con

Pellegrino Principe, &#34;Guida alla Programmazione C&#34;, Apogeo, edizione 2015 (linguaggio C aggiornato. all’ultima

• Scrivere una funzione che prenda in input una matrice A e si comporti in maniera identica al comando sum(A)fornito da MATLAB.. • Scrivere una funzione che prenda in input

• Scrivere una funzione che prenda in input una matrice A e si comporti in maniera identica al comando sum(A)fornito da MATLAB.. • Scrivere una funzione che prenda in input

• Scrivere una funzione che prenda come argomento di input un array A e restituisca in output l’indice del valore massimo di A. Approfondimento Funzioni min

• Scrivere una funzione chiamata totale_camicie, che prenda in input la matrice M (magazzini) e restituisca in output il numero totale di camicie (in tutti i magazzini).