Nome Cognome Matricola Firma Esercizio 1 (10 punti) Traccia C Spazio Riservato alla Commissione Esercizio 2 (10 punti) Esercizio 3 (10 punti) Totale (30 punti) Seconda Prova Intracorso di Fondamenti di Informatica e Programmazione 04/12/2017 POSSIBILI SOLUZIONI Ingegneria Meccanica e Gestionale (Classe II) Dipartimento di Ingegneria Industriale (DIIn) Università degli Studi di Salerno Prof. Raffaele Pizzolante A.A. 2017/2018
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 In questa prova verrà utilizzata una matrice M (menu) ed una matrice C (comanda) La matrice M rappresenta il menu di una pizzeria M(indice_tipo, indice_piatto) indica il prezzo unitario del piatto, specificato (sulle colonne) da indice_piatto, il cui tipo è specificato (sulle righe) da indice_tipo Esempio 1: M(2, 4) 2.80 indica che il prezzo unitario del Piatto 4 (colonna con indice 4), di tipo Panino (riga con indice 2) è pari a 2.80 Esempio 2: M(1, 2) 6.50 indica che il prezzo unitario del Piatto 2 (colonna con indice 2), di tipo Pizza (riga con indice 1) è pari a 6.50 La matrice C rappresenta la comanda in cui è indicato l ordine di un cliente. Ciascuna riga di C rappresenta un parziale dell ordine. In particolare, per ciascun parziale, è indicato il piatto ordinato, specificato dalla colonna con indice 1, del tipo, specificato dalla colonna con indice 2, ed è ordinato nella quantità, specificata dalla colonna con indice 3. Esempio (Parziale 1) C(1, 1) 4 (Piatto) C(1, 2) 1 (Tipo Piatto) C(1, 3) 3 (Quantità) Il parziale riguarda il Piatto 4 (valore di C(1, 1)) ed è di tipo Pizza (valore di C(1, 2)), ordinato nella quantità di 3 (valore di C(1, 2)). N.B. Le matrici contengono esclusivamente dati numerici
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 Esercizio 1 Scrivere una funzione chiamata conto, che pra i seguenti 2 argomenti di input la matrice M (menu) la matrice C (comanda) La funzione dovrà restituire come argomento di output il conto, ovvero l importo complessivo dell ordine indicato nella comanda rappresentata dalla matrice C. Nel calcolo del conto, è necessario considerare la seguente promozione operata dalla pizzeria: Se è stata ordinata complessivamente una quantità di almeno 3 piatti di tipo Panino, allora verrà applicato uno sconto del 3% sul prezzo unitario di ciascun piatto di tipo Panino Esempio: conto(m,c) restituisce 35.9240 35.9240 rappresenta l importo del conto relativo all ordine riportato nella comanda C, il quale è pari a 35.9240
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 Esercizio 2 Scrivere una funzione chiamata piatto_meno_ordinato, che pra i seguenti 2 argomenti di input la matrice M (menu) la matrice C (comanda) La funzione dovrà restituire come argomento di output il prezzo unitario del piatto che è stato ordinato nella minor quantità nella comanda C. Esempio: piatto_meno_ordinato(m, C) restituisce 3.20 3.20 rappresenta il prezzo unitario del piatto, ordinato nella minor quantità, ed è pari a 3.20. OSSERVAZIONE: Il piatto ordinato nella minor quantità nella comanda C è il Piatto 3, di tipo Panino
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 Esercizio 3 [Parte 1/3] Scrivere un M-File Script chiamato pizzeria_script che effettui le seguenti operazioni 1. Importi la matrice M dal file menu.txt 2. Importi la matrice C dal file comanda.txt 3. Mostri un grafico a barre con le seguenti proprietà Sull asse X riporti gli indici di tutte i Tipi di Piatto Sull asse Y riporti, per ciascun Tipo di Piatto (indicato sull asse X), il prezzo unitario medio dei piatti di quel tipo Esempio: Per il piatto di tipo Pizza, il prezzo unitario medio è pari a 6.00 NOTA: I file menu.txt e comanda.txt contengono solo dati numerici. È utilizzato il separatore virgola (,) per separare le colonne. Si assuma che i file siano memorizzati all interno della Current Directory
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 Esercizio 3 [Parte 2/3] 5.00, 6.50, 7.00, 5.50, 6.00 3.50, 3.00, 3.20, 2.80, 3.30 4.00, 3.50, 2.50, 2.00, 3.00 2.00, 2.50, 1.90, 2.20, 2.90 Contenuto del file menu.txt 4, 1, 3 2, 2, 2 3, 2, 1 2, 3, 3 Contenuto del file comanda.txt
Tipo Piatto M Piatti C <<menu.txt>> Piatto 1 Piatto 2 Piatto 3 Piatto 4 (indice 4) Piatto 5 (indice 5) <<comanda.txt>> Piatto Tipo Piatto Quantità Pizza 5.00 6.50 7.00 5.50 6.00 Panino 3.50 3.00 3.20 2.80 3.30 Bibita 4.00 3.50 2.50 2.00 3.00 Dessert (indice 4) 2.00 2.50 1.90 2.20 2.90 Parziale 1 (ind. 1) 4 1 3 Parziale 2 (ind. 2) 2 2 2 Parziale 3 (ind. 3) 3 2 1 Parziale 4 (ind. 4) 2 3 3 Esercizio 3 [Parte 3/3] Esempio Grafico Esercizio 3
Possibile Soluzione 1/3 Svolgimento Esercizio 1 function [importo_conto] = conto(m, C) [num_parziali, num_colonne] = size(c); indici_piatto_panino = find(c(:, 2) == 2); quantita_piatti_panino = sum(c(indici_piatto_panino, 3)); for indice_parziale = 1:num_parziali indice_piatto = C(indice_parziale, 1); indice_tipo = C(indice_parziale, 2); quantita = C(indice_parziale, 3); prezzo_unitario = M(indice_tipo, indice_piatto); if quantita_piatti_panino >= 3 && indice_tipo == 2 prezzo_unitario = prezzo_unitario - 0.03 * prezzo_unitario; importo_parziale(indice_parziale) = prezzo_unitario * quantita; importo_conto = sum(importo_parziale);
Possibile Soluzione 2/3 Svolgimento Esercizio 1 function [importo_conto] = conto(m, C) [num_parziali, num_colonne] = size(c); indici_piatto_panino = find(c(:, 2) == 2); quantita_piatti_panino = sum(c(indici_piatto_panino, 3)); importo_conto = 0; for indice_parziale = 1:num_parziali indice_piatto = C(indice_parziale, 1); indice_tipo = C(indice_parziale, 2); quantita = C(indice_parziale, 3); prezzo_unitario = M(indice_tipo, indice_piatto); if quantita_piatti_panino >= 3 && indice_tipo == 2 prezzo_unitario = prezzo_unitario - 0.03 * prezzo_unitario; importo_conto = importo_conto + prezzo_unitario * quantita;
Possibile Soluzione 3/3 Svolgimento Esercizio 1 function [importo_conto] = conto(m, C) [num_parziali, num_colonne] = size(c); quantita_piatti_panino = 0; for indice_parziale = 1:num_parziali if C(indice_parziale, 2) == 2 quantita_piatti_panino = quantita_piatti_panino + C(indice_parziale, 3); for indice_parziale = 1:num_parziali indice_piatto = C(indice_parziale, 1); indice_tipo = C(indice_parziale, 2); quantita = C(indice_parziale, 3); prezzo_unitario = M(indice_tipo, indice_piatto); if quantita_piatti_panino >= 3 && indice_tipo == 2 prezzo_unitario = prezzo_unitario - 0.03 * prezzo_unitario; importo_parziale(indice_parziale) = prezzo_unitario * quantita; importo_conto = sum(importo_parziale);
Svolgimento Esercizio 2 Possibile Soluzione function [numero, indice_tipo, prezzo_max] = piatto_caro(m) prezzo_max = max(max(m)); [indice_tipo, numero] = find(m == prezzo_max);
Svolgimento Esercizio 3 Possibile Soluzione (contenuto del file villaggio_script.m) M = importdata('menu_pizzeria.txt'); C = importdata('comanda.txt'); [num_tipi, num_colonne] = size(m); x = 1:num_tipi; y = mean(m, 2); bar(x, y);