13 Esercizi di Riepilogo

Documenti analoghi
13 Esercizi di Riepilogo

13 Esercizi di Riepilogo

13 Esercizi di Riepilogo

13 Esercizi di Riepilogo

15 Riepilogo di esercizi in MATLAB

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

14 Function Handles in MATLAB

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

14 Function Handles in MATLAB

RIGA COLONNA MATRICOLA

Il presente plico contiene 2 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Tema A+B COGNOME E NOME. Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 4 Febbraio 2016

12 Function Handles e Ricorsione in MATLAB

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

13 Ricorsione con MATLAB

viene disegnato un grafico che passa per i punti le cui ascisse e ordinate sono contenute rispettivamente nei vettori x e y.

1 (12) 2 (6) 3 (4) 4 (4) 5 (6)

CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Laboratorio di INFORMATICA. 15 ottobre 2009

ESERCIZIO 1. Informatica B - Esercitazione 10

ESERCIZIO 1. Informatica B - Esercitazione 14

ESERCIZIO 1. Informatica B - Esercitazione 12

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 8 Febbraio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Informatica B - A.A. 2018/2019

Esercizi 5 CICLI. Es.5(cicli)

Informatica B - A.A. 2018/2019

12 Function Handles e Ricorsione in MATLAB

12 Function Handles e Ricorsione in MATLAB

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

1 (7) 2 (6) 3 (6) 4 (7) 5 (6)

Parte 1: tipi primitivi e istruzioni C

Laboratorio n 6 del Ing. Dario Cogliati

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Laboratorio di Architettura degli Elaboratori A.A. 2016/17 Programmazione Assembly

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

Introduzione al MATLAB c Parte 2

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Facoltà di Ingegneria Industriale. Matlab/Octave - Esercitazione 7. ricorsione e funzioni anonime

Il presente plico contiene 3 esercizi e 2 domande e deve essere debitamente compilato con cognome e nome, e numero di matricola.

Università degli Studi di Ferrara Corso di Laurea in Chimica - A.A

% Scrivere un programma che inizializza un vettore monodimensionale di interi a = [ ]

COGNOME E NOME Facoltà di Ingegneria Industriale INFORMATICA B Prova in itinere del 18 Febbraio 2016 RIGA COLONNA MATRICOLA

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Facoltà di Ingegneria Industriale. Matlab/Octave - Esercitazione 5. !esercizi tratti da temi d esame

Il presente plico contiene 4 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Informatica B

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Laboratorio di Sperimentazioni di Fisica I MOD A. 14 ottobre 2009

csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 6 Dott. Michele Zanella Ing. Gian Enrico Conti

Esercizio 9.1. F (0) = 0 F (1) = 1 F (n) = F (n 1) + F (n 2), n > 1. Esercizio 9.2. Esercizio 9.3

Uso avanzato di MATLAB

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

Il presente plico contiene 3 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

INFORMATICA A. Titolo presentazione sottotitolo. Laboratorio n 5 Ing. Gian Enrico Conti Dott. Michele Zanella

Esercitazione di Reti degli elaboratori

Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni. Lab 06 Array" Lab06 1

Introduzione alla programmazione Esercizi risolti

Esercizio 9.1. Esercizio 9.2. Esercizio 9.3. Chiedere all utente due parole e stampare a video se una è anagramma dell altra. Esercizio 9.

Laboratorio 26/09/2000

Scrivi una funzione ricorsiva che prende in input un vettore V e restituisce un vettore V2 della dimensione doppia di V, che

Esercizi di autovalutazione - Matlab Metodi Numerici con Elementi di Programmazione A.A

a.a Codice corso: 21012

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Traccia 1. Nome Cognome Matricola Firma. Spazio Riservato alla Commissione. Esercizio 1 Esercizio 2 Esercizio 3 Esercizio 4 Esercizio 5 Totale

Introduzione al MATLAB c Parte 3 Script e function

Fondamenti di Informatica T-1

Comunicazioni. Salvo Daniele Valente Dipartimento di Elettronica e Informazione

Informatica B

Vettori Matrici Grafi. Renato Mainetti

Informatica B

MATLAB Alcune funzioni utili: fprintf, length, size

Corso di Fondamenti di Informatica Macroarea di Ingegneria 2017/18. Tutor: prof. Francesco De Vincenzi

Fondamenti di Informatica T-1 Modulo 2

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

MATLAB Funzioni grafiche Salvataggio/recupero dati da file

Fondamenti di Informatica

Algoritmi su Matrici. int const R=40; int const C=8; int A[R][C]; int n=32; int m=5; Compito Studente N O

Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica, Prof. G. Boracchi Allievi Ingegneria Civile e Mitigazione del Rischio

FONDAMENTI DI SEGNALI E TRASMISSIONE 2 Laboratorio

Ciclo di seminari: Metodi Computazionali per la Finanza

A.A. 2018/2019. Esercitazione 5. Modellazione e Risoluzione di Problemi mediante MATLAB. [ Possibili Soluzioni ]

Il presente plico contiene 4 esercizi e deve essere debitamente compilato con cognome e nome, numero di matricola.

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

ESERCIZIO 1. Informatica B - Esercitazione 11

Laboratorio di Matlab

Fondamenti di Informatica T-1 Modulo 2

CORSO DI LABORATORIO DI INFORMATICA

Transcript:

13.1 Esercizi Esercizio 13.1 Si consideri una versione semplificata della battaglia navale in cui le navi possono essere posizionate solo in orizzontale e ogni riga può contenere al massimo una nave. Il campo di gioco di un singolo giocatore può essere rappresentato tramite la matrice CampoGioco di dimensione 5 5 in cui ogni cella della matrice può assumere solo il valore 0 o 1. Il valore 0 rappresenta la presenza del mare e il valore 1 la presenza di un pezzo di nave. Le navi possono essere lunghe una, due, tre, quattro o cinque celle. Ad esempio la seguente istanza della matrice CampoGioco: 0 1 1 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1 0 rappresenta un campo di gioco in cui sono presenti navi: una nave lunga nella prima riga, una nave lunga 1 nella terza riga, una nave lunga nella quarta riga e una nave lunga nella quinta riga. Si realizzi uno script MATLAB che: chiede all utente di inserire il contenuto della matrice CampoGioco; per ogni riga che contiene una nave visualizza a video il numero di riga e la lunghezza della nave presente al suo interno; visualizza a video inoltre le seguenti statistiche: il numero di navi presenti sul campo di gioco, la lunghezza della nave più corta presente sul campo di gioco, la lunghezza della nave più lunga presente sul campo di gioco, il numero di navi trovate per ogni lunghezza possibile. Per esempio, nel campo di gioco presentato sopra avremo: 1

1 La riga 1 contiene una nave lunga La riga 3 contiene una nave lunga 1 3 La riga contiene una nave lunga La riga 5 contiene una nave lunga 5 Sono presenti navi 6 Lunghezza nave più corta trovata: 1 7 Lunghezza nave più lunga trovata: 8 Numero di navi lunghe 1: 1 9 Numero di navi lunghe : 1 10 Numero di navi lunghe 3: 0 11 Numero di navi lunghe : 1 Numero di navi lunghe 5: 0 Esercizio 13. Si implementi in MATLAB una funzione combinamatrici che, ricevute in ingresso due matrici A e B aventi le stesse dimensioni, produce una terza matrice C. Essa viene ottenuta da A e B mettendo nelle posizioni (r, c) in cui B(r, c) è minore del minimo di A, il valore di A(r, c), altrimenti l elemento C(r, c) assume il valore di B(r, c). Per minimo di A si intende il più piccolo elemento della matrice A. Si scriva la funzione combinamatrici sfruttando le caratteristiche di sintesi del linguaggio MATLAB (possibilmente evitando l utilizzo di cicli). Si scriva una funzione combinamatricisup simile alla precedente, ma con le seguenti differenze. La funzione combinamatricisup riceve in ingresso le due matrici A e B, e un function handle f. La funzione restituisce una matrice C i cui elementi nelle posizioni (r, c) in cui B(r, c) è minore di f applicato al minimo di A, C assumono il valore di A(r, c), altrimenti assumono il valore di B(r, c). Si scriva una chiamata a combinamatricisup passando come argomenti: A: la matrice identità 3 3; B: una matrice di dimensione 3 3 contenente numeri interi casuali tra 10 e 10; f: la funzione che restituisce la differenza tra seno e coseno di un numero. Esercizio 13.3 Le strade della città di Grigliopoli sono organizzate come una griglia (alcune strade attraversano la città da est a ovest e altre da nord a sud). Dati due incroci che distano X isolati lungo l asse est-ovest della città e Y isolati lungo l asse nord-sud, si vuole calcolare il numero di percorsi a distanza minima che collegano i due incroci. A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag.

Implementare una funzione ricorsiva calcola in MATLAB che ricevuti X e Y in ingresso restituisce il numero di percorsi trovati in uscita. Suggerimento: Quando X = 0 o Y = 0, c è soltanto un cammino a distanza minima che collega i due incroci. Altrimenti, esiste più di un cammino minimo dal momento che è possibile sia avvicinarsi alla destinazione lungo l asse est-ovest (riducendo quindi la distanza X) oppure avvicinarsi lungo l asse nord-sud (riducendo la distanza Y ). Esercizio 13. In un cinema di Milano sono stati installati dei pannelli fotovoltaici; due sensori monitorano la loro produzione di energia elettrica e i consumi elettrici della sala, rilevando per ciascuno un valore ogni minuto. I valori letti vengono troncati a due cifre decimali, inseriti rispettivamente nei vettori prodotta e consumata e salvati in un file dati di MATLAB chiamato log.mat. Un esempio di valori contenuti nel file log.mat è il seguente: 1 prodotta = [180.00 195.00 00.00 6.00 00.00 05.00]; consumata = [160.00 165.00 185.00 0.00 7.50 10.50]; Nei minuti durante i quali l energia consumata è minore di quella prodotta, il cinema riceverà un compenso pari a prezzoenergia al minuto per ogni unità di differenza di energia; viceversa quando il consumo di energia è superiore o uguale all energia prodotta, il cinema dovrà pagare prezzoenergia al minuto per unità di differenza di energia. Scrivere in MATLAB una funzione calcolacosto che riceve in ingresso due vettori energiaprodotta ed energiaconsumata, ed un valore prezzoenergia, che indica il costo al minuto dell energia elettrica e restituisca il costo totale costototale per l energia elettrica del cinema (positivo se il cinema spende più di quanto guadagna, negativo in caso contrario) e un vettore media di due elementi contenente la media dell energia elettrica prodotta e la media di quella consumata. Ad esempio, nel caso in cui la funzione calcolacosto riceva in ingresso i valori di energia elettrica prodotti e consumati contenuti nel file log.mat dell esempio sopra riportato e un valore di prezzoenergia pari a 10, restituirà un costototale pari a 180, che indica che il cinema ha guadagnato 180 (avendo prodotto energia maggiore di quella consumata per minuti e avendo prodotto meno energia di quella consumata per minuti), e un vettore di due elementi [01 198]; A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 3

Scrivere poi uno script che legga dal file log.mat i valori di energia elettrica prodotta e consumata contenuti nei vettori prodotta e consumata, legga da tastiera il valore della variabile prezzoenergia, crei un vettore x che indichi i minuti in cui sono state effettuate le misurazioni. Si disegni su di uno stesso grafico (con titolo del grafico e dei due assi) l andamento dell energia elettrica prodotta e di quella consumata al variare del tempo, evidenziando sul grafico stesso i minuti nei quali l energia prodotta è superiore o uguale a quella consumata con asterischi rossi sui valori dell energia prodotta (senza congiungere i punti). Infine, si stampi a video il costototale dell energia elettrica e i due valori medi di energia prodotta e consumata. Esercizio 13.5 Scrivere uno script in MATLAB che esegua le seguenti operazioni: 1. Legge da tastiera due valori positivi minori di 100 che vengono memorizzati in due variabili m e n;. Genera una matrice A di dimensioni m n di numeri casuali tra 5 e 10; 3. Costruisce una matrice P contenente solo le righe con indice pari della matrice A e una matrice D contenente solo le righe con indice dispari della matrice A;. se le matrici P e D hanno le stesse dimensioni, calcola anche la matrice somma. Esercizio 13.6 Implementare una funzione cerchio che riceve in ingresso due vettori X e Y di uguale dimensione che rappresentano le ascisse e le ordinate di un insieme di punti nel piano cartesiano, un valore rg che rappresenta il raggio di una circonferenza centrata sull origine del piano cartesiano e restituisce un vettore logico is_out, di lunghezza pari quella dei vettori in ingresso, tale che l i-esimo elemento di r è 1 se il punto definito dalle i-esime coordinate si trova all esterno della circonferenza di raggio rg e centro (0, 0), altrimenti 0. Si scriva una funzione retta che dati due parametri coefficiente angolare m e ordinata all origine q ed un numero di punti N restituisca un vettore contenente le ascisse X e le ordinate Y dei punti corrispondenti alle prime primi N ascisse intere. Ad esempio con N = 5 e per la retta y = x + 1 avremo come risultatox = [1 3 5] e Y = [3 5 7 9 11]. Infine, scrivere uno script che valuti per i punti la cui ascissa è pari ai primi N = 0 interi della retta y = x + se essi sono esterni alla circonferenza di raggio 30. Dopodichè, disegnare sullo stesso grafico i punti precedentemente calcolati ed esterni alla circonferenza con punti rossi e i restanti con asterischi verdi. A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag.

Esercizio 13.7 Si scriva una funzione ricorsiva pallinaric che stampa a schermo una sequenza di caratteri che rappresenta uno spostamento di una pallina da sinistra a destra dello schermo. L effetto che si vuole ottenere è il seguente: 1 o------ -o----- 3 --o---- ---o--- 5 ----o-- 6 -----o- 7 ------o 8 ------- La funzione pallinaric prende in ingresso il parametro n, che rappresenta il numero di caratteri in ogni riga, e pos, che indica la posizione attualmente occupata dalla pallina. Ae esempio, la visualizzazione sopra riportata è stata ottenuta dall invocazione di pallinaric(7, 1). 1. Si definisca la funzione pallinaric: si specifichi il caso base, cioè quello che determina la terminazione della ricorsione e il caso ricorsivo;. Si modifichi la funzione pallinaric per creare la funzione pallinaricconrit, per fare in modo che la pallina ritorni alla posizione iniziale. Ad esempio, dall invocazione di pallinaricconrit(7, 1) si dovrà quindi ottenere: 1 o------ -o----- 3 --o---- ---o--- 5 ----o-- 6 -----o- 7 ------o 8 ------- 9 ------o 10 -----o- 11 ----o-- 1 ---o--- 13 --o---- 1 -o----- 15 o------ A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 5

Soluzioni Soluzione dell esercizio 13.1 clc 5 6 %CampoGioco = [0 1 1 1 1; 0 0 0 0 0; 0 0 1 0 0; 0 1 1 0 0; 1 1 1 1 0]; 7 CampoGioco = input('inserire il campo di gioco: '); 8 9 dim_gioco = size(campogioco,1); 10 nave = sum(campogioco,); 11 1 for ii = 1:dim_gioco 13 if nave(ii) > 0 1 disp(['la riga ' numstr(ii) ' contiene una nave lunga ' numstr(nave(ii))]); 15 end 16 end 17 18 nave = nave(nave> 0); 19 0 disp(['sono presenti ' numstr(length(nave)) ' navi']); 1 disp(['lunghezza nave piu'' corta trovata: ' numstr(min(nave)) ]); 3 disp(['lunghezza nave piu'' lunga trovata: ' numstr(max(nave)) ]); 5 for ii = 1:5 6 disp(['numero di navi lunghe ' numstr(ii) ': ' numstr(sum (nave == ii))]); 7 end clc Soluzione dell esercizio 13. A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 6

5 A = [ ; 3]; 6 B = [3, 5; 5,-1]; 7 8 C = combinamatrici(a,b) 9 10 A = eye(3); 11 B = round((rand(3) - 0.5) * 0); 1 f = @(x)(sin(x) - cos(x)); 13 1 C = combinamatricisup(f,a,b) 1 function C = combinamatrici(a,b) 3 assert(all(size(a) == size(b))); 5 min_a = min(a(:)); 6 7 C = B; 8 C(C < min_a) = A(C < min_a); 1 function C = combinamatricisup(f,a,b) 3 assert(all(size(a) == size(b))); 5 min_fa = f(min(a(:))); 6 7 C = B; 8 C(C < min_fa) = A(C < min_fa); clc 5 X = ; 6 Y = 3; 7 8 calcola(x,y) Soluzione dell esercizio 13.3 1 function n_strade = calcola(x,y) A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 7

3 if X == 0 Y == 0 n_strade = 1; 5 else 6 n_strade = calcola(x-1,y) + calcola(x,y-1); 7 end Soluzione dell esercizio 13. clc 5 %% 6 load('log.mat'); 7 prezzoenergia = input('costo energia al minuto: '); 8 9 x = 1:length(consumata); 10 11 [costototale, media] = calcolacosto(prodotta, consumata, prezzoenergia); 1 13 figure(); 1 plot(x, consumata); 15 hold on; 16 plot(x, prodotta); 17 title('energia del cinema') 18 xlabel('tempo (minuti)') 19 ylabel('energia'); 0 1 idx = prodotta > consumata; xguadagno = x(idx); 3 prodottaguadagno = prodotta(idx); 5 plot(xguadagno, prodottaguadagno, '*r'); 6 7 fprintf('costo totale: %f\n', costototale); 8 fprintf('energia prodotta media: %f\n', media(1)); 9 fprintf('energia consumata media: %f\n', media()); 1 function [costototale, media] = calcolacosto(energiaprodotta, energiaconsumata, prezzoenergia) 3 differenza = energiaconsumata - energiaprodotta; A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 8

5 costototale = sum(prezzoenergia * differenza); 6 7 media(1) = mean(energiaprodotta); 8 media() = mean(energiaconsumata); Soluzione dell esercizio 13.5 clc 5 m = 00; 6 while m > 100 m < 1 7 m = input('inserire il numero di righe: '); 8 end 9 10 n = 00; 11 while n > 100 n < 1 1 n = input('inserire il numero di colonne: '); 13 end 1 15 A = round(rand(m, n) * 5) + 5 16 17 P = A(::m,:) 18 D = A(1::m,:) 19 0 if mod(m, ) == 0 1 B = P + D end Soluzione dell esercizio 13.6 clc 5 [X, Y] = retta(,, 0); 6 7 is_out = cerchio(x, Y, 30) 8 9 10 plot(x(is_out), Y(is_out), 'r.') A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 9

11 hold on 1 plot(x(~is_out), Y(~is_out), 'g*') 13 axis equal 1 function is_out = cerchio(x, Y, rg) 3 is_out = sqrt(x.^ + Y.^) > rg; 1 function [X, Y] = retta(m, q, N) 3 X = 1:N; Y = m * X + q; clc 5 6 pallinaric(7, 1); 7 disp(' '); 8 pallinaricconrit(7, 1); Soluzione dell esercizio 13.7 1 function pallinaric(n, pos) 3 % Caso base: la pallina e' uscita if pos > n 5 riga(1:n) = '-'; 6 disp(riga); 7 return; 8 end 9 10 % Ricorsione: stampo e sposto la pallina di una posizione 11 riga(1:n) = '-'; 1 riga(pos) = 'o'; 13 disp(riga); 1 pallinaric(n, pos+1); 1 function pallinaricconrit(n, pos) 3 % Caso base: la pallina e' uscita A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 10

if pos > n 5 riga(1:n) = '-'; 6 disp(riga); 7 return; 8 end 9 10 % Ricorsione: stampo e sposto la pallina di una posizione 11 riga(1:n) = '-'; 1 riga(pos) = 'o'; 13 disp(riga); 1 pallinaricconrit(n, pos+1); 15 disp(riga); A.A. 018 019 Informatica B (081369) - Politecnico di Milano Pag. 11