• Non ci sono risultati.

Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Fondamenti di Informatica"

Copied!
6
0
0

Testo completo

(1)

Fondamenti di Informatica

Strutture Selettive, Iterative, Gestione File e Grafici in MATLAB: Esercizi (Autobus)

Prof. Arcangelo Castiglione

A.A. 2016/17

(2)

Negli esercizi verranno utilizzate una matrice F ed una matrice D

La matrice F rappresenta il prospetto delle fermate (colonne) effettuate da ciascun autobus (righe)

La matrice D rappresenta il prospetto delle distanze fra una fermata di partenza (riga) e una fermata di destinazione (colonna)

L’elemento F(riga, colonna) assume valore 1 se l’autobus, avente indice riga, effettua la fermata, avente l’indice specificato in colonna

Esempio: F(4, 7) à ha valore 0 e indica che l’Autobus 4 (riga 4) NON effettuerà la fermata 7 (colonna 7)

Esempio: F(3, 4) à ha valore 1 e indica che l’Autobus 3 (riga 3) effettuerà la fermata 4 (colonna 4)

L’elemento D(riga, colonna) rappresenta la distanza tra la fermata di partenza, avente indice specificato in riga, e la fermata di destinazione, avente l’indice specificato in colonna

Esempio: D(2, 5) à indica che la distanza dalla fermata 2 alla fermata 5 è uguale a 4

NOTA: Gli elementi sotto la diagonale principale (contrassegnati con il simbolo - ), si assumono essere nulli (con valore 0), poiché non sono necessari per la risoluzione degli esercizi

• Entrambe le matrici contengono esclusivamente dati numerici (evidenziati in arancio nell’esempio)

N.B. Le matrici utilizzate sono anche riportate nell’ultima slide

Programmazione in MATLAB | Gestione File | Grafici: Esercizi

F fermate D

<<distanze.txt>> 1 2 3 4 5 6 7 8

1 0 4 5 2 1 5 4 3

2 - 0 3 5 4 2 4 3

3 - - 0 6 2 1 3 2

4 - - - 0 2 2 3 4

5 - - - - 0 1 5 3

6 - - - - - 0 6 4

7 - - - - - - 0 8

8 - - - - - - - 0

fermate [destinazione]

fe rm at e [p ar te nz e]

<<fermate.txt>> 1 2 3 4 5 6 7 8 Autobus 1 (indice 1) 0 1 1 0 1 0 1 1 Autobus 2 (indice 2) 1 0 0 0 1 1 1 0 Autobus 3 (indice 3) 0 0 0 1 0 1 1 1 Autobus 4 (indice 4) 0 1 1 1 0 0 0 0

NOTA: Negli esercizi potete utilizzare funzioni viste a lezione (negli esempi), funzioni realizzate negli esercizi precedenti e/o funzioni built-in di MATLAB

(3)

Scrivere una funzione chiamata distanza_percorsa, che prenda come argomenti di input: la matrice F (fermate), la matrice D (distanze) ed un numero intero indice_autobus, e restituisca come argomento di output la distanza totale percorsa dall’autobus avente indice indice_autobus

Esempio: distanza_percorsa(F, D, 2)à restituisce 8

Dalla fermata 1 (partenza) alla 5 (destinazione), la distanza, riportata in D(1, 5), è uguale a 1

Dalla fermata 5 (partenza) alla 6 (destinazione), la distanza, riportata in D(5, 6), è uguale a 1

Dalla fermata 6 (partenza) alla 7 (destinazione), la distanza, riportata in D(6, 7), è uguale a 6

Quindi la somma è 8

Possibile Soluzione

Es er ciz io 1

Programmazione in MATLAB | Grafici: Esercitazione

function [ distanza_autobus ] = distanza_percorsa(F, D, indice_autobus) fermate_effettuate = find(F(indice_autobus, :));

somma = 0;

for i = 1:length(fermate_effettuate) - 1

fermata_partenza = fermate_effettuate(i);

fermata_destinazione = fermate_effettuate(i + 1);

somma = somma + D(fermata_partenza, fermata_destinazione);

end

distanza_autobus = somma;

end

F fermate D

<<distanze.txt>> 1 2 3 4 5 6 7 8

1 0 4 5 2 1 5 4 3

2 - 0 3 5 4 2 4 3

3 - - 0 6 2 1 3 2

4 - - - 0 2 2 3 4

5 - - - - 0 1 5 3

6 - - - - - 0 6 4

7 - - - - - - 0 8

8 - - - - - - - 0

fermate [destinazione]

fe rm at e [p ar te nz e]

<<fermate.txt>> 1 2 3 4 5 6 7 8

Autobus 1 (indice 1) 0 1 1 0 1 0 1 1

Autobus 2 (indice 2) 1 0 0 0 1 1 1 0

Autobus 3 (indice 3) 0 0 0 1 0 1 1 1

Autobus 4 (indice 4) 0 1 1 1 0 0 0 0

(4)

Scrivere una funzione chiamata autobus_meno_fermate, che prenda come argomenti di input: la matrice F (fermate) e la matrice D (distanze), e restituisca come argomento di output l’indice dell’autobus che effettua meno fermate

Esempio: autobus_meno_fermate(F, D)à restituisce 4 Possibile Soluzione

Es er ciz io 2

Programmazione in MATLAB | Gestione File | Grafici: Esercizi

function [ indice_autobus ] = autobus_meno_fermate(F,D) [valore, indice_autobus] = min(sum(F,2));

end

F fermate D

<<distanze.txt>> 1 2 3 4 5 6 7 8

1 0 4 5 2 1 5 4 3

2 - 0 3 5 4 2 4 3

3 - - 0 6 2 1 3 2

4 - - - 0 2 2 3 4

5 - - - - 0 1 5 3

6 - - - - - 0 6 4

7 - - - - - - 0 8

8 - - - - - - - 0

fermate [destinazione]

fe rm at e [p ar te nz e]

<<fermate.txt>> 1 2 3 4 5 6 7 8

Autobus 1 (indice 1) 0 1 1 0 1 0 1 1

Autobus 2 (indice 2) 1 0 0 0 1 1 1 0

Autobus 3 (indice 3) 0 0 0 1 0 1 1 1

Autobus 4 (indice 4) 0 1 1 1 0 0 0 0

(5)

Programmazione in MATLAB | Gestione File | Grafici: Esercizi

Scrivere una funzione chiamata grafico_autobus_fermate, che prenda come argomento di input la matrice F (fermate) e la matrice D (distanze), ed effettui le seguenti operazioni

1. Mostri un grafico a barre in cui sull’asse X sono riportate le fermate. Sull’asse Y è riportato il numero di autobus che effettuano la fermata, indicata sull’asse X (Esempio: sulla fermata 2, si fermano 2 autobus)

2. Restituisca un array contenente i valori assegnati all’asse Y (Esempio: Array riga o colonna

[1 2 2 2 2 2 3 2]

) Possibile Soluzione

Es er ciz io 3

function [ somma_fermate ] = grafico_autobus_fermate(F) [num_autobus, num_fermate] = size(F);

x = 1:1:num_fermate;

y = sum(F);

bar(x, y);

somma_fermate = y;

end

1 2 3 4 5 6 7 8

0 0.5 1 1.5 2 2.5 3

F fermate D

<<distanze.txt>> 1 2 3 4 5 6 7 8

1 0 4 5 2 1 5 4 3

2 - 0 3 5 4 2 4 3

3 - - 0 6 2 1 3 2

4 - - - 0 2 2 3 4

5 - - - - 0 1 5 3

6 - - - - - 0 6 4

7 - - - - - - 0 8

8 - - - - - - - 0

fermate [destinazione]

fe rm at e [p ar te nz e]

<<fermate.txt>> 1 2 3 4 5 6 7 8

Autobus 1 (indice 1) 0 1 1 0 1 0 1 1

Autobus 2 (indice 2) 1 0 0 0 1 1 1 0

Autobus 3 (indice 3) 0 0 0 1 0 1 1 1

Autobus 4 (indice 4) 0 1 1 1 0 0 0 0

(6)

Matrici Utilizzate

D = [ 0, 4, 5, 2, 1, 5, 4, 3 0, 0, 3, 5, 4, 2, 4, 3

0, 0, 0, 6, 2, 1, 3, 2 0, 0, 0, 0, 2, 2, 3, 4 0, 0, 0, 0, 0, 1, 5, 3 0, 0, 0, 0, 0, 0, 6, 4 0, 0, 0, 0, 0, 0, 0, 8 0, 0, 0, 0, 0, 0, 0, 0]

F = [ 0, 1, 1, 0, 1, 0, 1, 1 1, 0, 0, 0, 1, 1, 1, 0

0, 0, 0, 1, 0, 1, 1, 1 0, 1, 1, 1, 0, 0, 0, 0]

Matrice D

Matrice F

Programmazione in MATLAB | Gestione File | Grafici: Esercizi

Riferimenti

Documenti correlati

DESCA(3): (M) numero di righe nella matrice globale DESCA(4): (N) numero di colonne nella matrice globale DESCA(5): (MB) numero di righe in un blocco. DESCA(6): (NB) numero di

Spiegare con degli

Per ciascuna delle seguenti funzioni R 2 → R 2 si scriva la matrice che la rappresenta: la proiezione ortogonale sulla bisettrice del II e IV quadrante;.. la simmetria rispetto

In seguito useremo la seguente convenzione: quando un vettore v viene consid- erato come vettore colonna, verra’ indicato con lo stesso simbolo v, quando un vettore v viene

• 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 chiamata totale_camicie, che prenda in input la matrice M (magazzini) e restituisca in output il numero totale di camicie (in tutti i magazzini).

Scrivere una funzione libri_venduti, che prenda come argomento di input la matrice L (libreria) ed un intero indice_target, e restituisca come argomento di output il numero totale