• Non ci sono risultati.

Esercizi preparatori alla prova d esame

N/A
N/A
Protected

Academic year: 2022

Condividi "Esercizi preparatori alla prova d esame"

Copied!
5
0
0

Testo completo

(1)

Esercizi preparatori alla prova d’esame

a.a. 2007 - 2008

Svolgere tre dei seguenti esercizi a scelta: i programmi devono essere scritti, compilati ed eseguiti (nel caso in cui sia richiesta la preparazione di una classe, un piccolo programma che faccia il test delle varie funzionalit`a fa parte della prova). Alla prova d’esame e’ necessario presentarsi con una copia funzionante dei programmi, da poter essere eseguita su un computer del laboratorio.

Inoltre, di altri due esercizi a scelta bisogna saper descrivere qualitativamente quale potrebbe essere la procedura di implementazione.

Vi ricordiamo che, per domande e chiarimenti, potete scrivere a noi:

simone.gennai@cern.ch pietro.govoni@gmail.com hronir@gmail.com

oppure al blog e gruppo di discussione.

1. Un vettore di numeri occupa tanto spazio quanto il numero dei suoi elementi.

Nel caso in cui si sappia che soltanto pochi elementi saranno diversi da zero, potrebbe essere pi`u efficiente cercare di salvare realmente soltanto gli elementi non nulli.

Si scriva una classe sparseArray che contenga N numeri double e tenga memo- ria solamente delle celle con valore non nullo, restituendo all’utente il numero zero nel caso in cui l’elemento richiesto non sia salvato. Scrivere in particolare un metodo (ad esempio at(int index), oppure l’overload di operator[]) per restituire il valore associato ad un dato indice.

Suggerimenti:

- pu`o essere utile ricorrere ad una mappa STL;

- l’operatore operator[] talvolta restituisce all’utente un valore che `e ef- fettivamente salvato nel vettore, talvolta restituisce un semplice zero.

Quindi, se l’utente cambia il valore questo non modifica il numero salvato nel vettore. Di conseguenza, un metodo setElement sar`a necessario per modificare il contenuto del vettore e l’operator[] deve essere dichiarato

(2)

const per evitare che l’utente possa pensare di modificare il vettore at- traverso di esso.

2. Per visualizzare la correlazione fra due misure indipendenti si utilizza un TProfile.

Generare una distribuzione di probabilit`a non uniforme con il metodo della reiezione e riempire un TH2F e un TProfile con le coppie di valori che superano la selezione. Fare il fit del TProfile ottenuto con la funzione di distribuzione utilizzata per la generazione dei numeri casuali. definendo la TF1 di fit a partire dalla funzione C++.

Che relazione intercorre fra la funzione di generazione per la distribuzione di numeri casuali e la funzione di fit del TProfile?

3. Progettare ed implementare una struttura di classi per rappresentare un in- sieme di forme geometriche in cui ci sia:

- una classe base puramente virtuale che contenga i metodi per la chia- mata di funzioni comuni a tutte le forme geometriche (ad esempio area, perimetro) ed i relativi membri comuni;

- alcune classi derivate che descrivano forme geometriche concrete e che contengano le imlpementazioni dei metodi definiti nell’interfaccia, oltre ad almeno un metodo specifico a quella particolare forma geometrica;

- un programma principale nel quale siano testate ciascuna delle classi implementate e sia fatta una verifica del polimorfismo utilizzando un std::vector<>.

4. Scrivere un programma che riempia un istogramma TH2F con una distribuzione gaussiana in entrambe le dimensioni, utilizzando il metodo pi`u appropriato per generare la distribuzione e fare il fit dell’istogramma bidimensionale cos`ı ot- tenuto. Scrivere a schermo i parametri del fit ottenuto, disegnare l’istogramma e la funzione di fit.

5. Una lista a puntatori `e un modo per avere una collezione di oggetti di cardi- nalit`a arbitraria, allocati solo al momento di reale necessit`a (senza, tuttavia, la propriet`a di contiguit`a in memoria). Essenzialmente gli elementi della lista sono una coppia {oggetto,indirizzo}. L’oggetto rappresenta il dato che interessa memorizzare, mentre l’indirizzo memorizza l’indirizzo della coppia {oggetto,indirizzo} successiva. Al momento di creare un nuovo elemento

(3)

qualche parte l’indirizzo della prima coppia, per sapere da dove partire. Per comodit`a, si pu`o anche tenere da parte l’indirizzo dell’ultima coppia, cos`ı che per aggiungere un nuovo elemento non sia necessario scorrere tutta la lista alla ricerca della coppia che ha la variabile indirizzo nulla.

Si richiede di:

- scrivere una classe per una lista a puntatori contenente float. La classe della lista deve avere un metodo void push(float) per aggiungere un nuovo oggetto alla fine lista, e un metodo float pop() che restituisca il primo elemento della lista e lo rimuova dalla lista stessa.

In questo modo il container `e di tipo FIFO (First In First Out): il primo elemento inserito con void push(float) `e il primo ad essere restituito con float pop().

- risolvere il punto precedente, lasciando template il tipo di dato da gestire (quel che prima era float).

6. svolgere l’esercizio precedente, facendo in modo che il metodo float pop() restituisca e rimuova l’ultimo elemento della lista.

In questo modo il container `e di tipo LIFO (Last In First Out): l’ultimo elemento aggiunto con void push(float) `e il primo ad essere restituito con float pop().

7. Aggiungere alla classe dell’esercizio precedente una classe iteratore, del tipo di quelli della Standard Template Library, per scorrere la lista a puntatori.

8. I metodi di integrazione numerica sono algoritmi che permettono di stimare il valore dell’integrale definito di una funzione in un dato intervallo. Tutti si basano sull’interpretazione grafica dell’integrale come area sottesa dalla curva della funzione.

Uno dei pi`u semplici `e il cosiddetto metodo dei rettangoli. Esso consiste nel suddividere l’intervallo su cui si vuole calcolare l’integrale, diciamo di larghezza I, in N intervalli regolari di larghezza I/N. Per ciascuno di questi intervalli, si considera il valore della funzione fi ad un suo estremo (ad esempio il sinistro) e si calcola l’area del rettangolo di lati rispettivamente I/N e fi. La stima dell’integrale che si sta cercando sar`a dunque data dalla somma delle aree di tutti i rettangoli.

(4)

Disegnare con ROOT la funzione

y= 0 x≤ 0

y= sin2(x) ex 0 < x < 10

y= 0 x≥ 10

(1)

e calcolarne l’area con il metodo dei rettangoli. In particolare, effettuare la stima usando un numero di suddivisioni via via pi`u grande, e studiare la sta- bilita’ del risultato ottenuto nei diversi casi. Com’`e possibile dare una val- utazione quantitativa dell’errore che si commette con una data suddivisione?

Con che legge asintotica ci si aspetta che scali, tale errore?

9. Un metodo di integrazione numerica `e basato sulla tecnica Monte Carlo. Si tratta di un procedimento molto simile a quello che sta alla base del metodo di reiezione per la generazione di sequenze di numeri casuali arbitrariamente distribuiti. Si consideri per semplicit`a una funzione f strettamente positiva e limitata (superiormente). Il metodo consiste nel generare numeri casuali xi uniformemente distribuiti sull’intervallo (di ampiezza X) di integrazione. Per ciascuno di essi si genera un altro numero casuale yi uniformemente distribuito fra zero e un valore Y superiore al massimo della funzione nell’interavllo con- siderato.

La frazione di coppie (xi, yi) per cui yi < f(xi) e’ uguale al rapporto fra l’area della curva e l’area del rettangolo dove sono stati generate le coppie di punti casuali, da cui si stima l’area della curva.

Disegnare la stessa funzione dell’esercizio precedente e calcolarne l’area con il metodo Monte Carlo. In particolare, effettuare la stima usando un numero di numeri casuali generati via via pi`u grande, e studiare la stabilit`a del risultato ottenuto nei diversi casi. Com’`e possibile dare una valutazione quantitativa dell’errore che si commette con una data suddivisione? Con che legge asintot- ica ci si aspetta che scali, tale errore?

10. - Definire una classe per matrici 2x2 con inversa, determinante ed i metodi che restituiscono il risultato delle principali operazioni algebriche (molti- plicazione, divisione, somma...) – eventulamente facendo l’overload degli operatori relativi.

- Scrivere un programma che usi tale classe per risolvere un sistema di 2 equazioni in 2 incognite col metodo di Kramer (calcolando il determi-

(5)

11. - Definire una classe per matrici 2x2 analoga alla precedente, ma ad elementi complessi (utilizzando pure la classe dei complessi definita a lezione), im- plementando quindi anche dei metodi aggiuntivi per le nuove operazioni possibili (coniugazione, estrazione di parte reale/immaginaria).

- Definire una classe per matrici 2x2 analoga alle precedenti, ma lasciando template il campo degli elementi delle matrici. Cosa succede di metodi quali quello della divisione, se si risolve il template con il tipo int? E’

possibile definire in questa classe l’operatore di coniugazione? In caso positivo, cosa succederebbe se si risolve il template con il tipo float?

12. Un tipico esercizio di analisi dati `e l’estrazione di un segnale dalla distribuzione misurata con uno strumento, che `e composta dal segnale e dai fondi associati alla misura.

- generare una distribuzione gaussiana che rappresenti il segnale ideale, sec- ondo una gaussiana con media 4 e sigma 0.5;

- generare la distribuzione del fondo associato, con una funzione polinomiale di secodo ordine, convessa, con la posizione del vertice lungo l’asse x lontana 5 sigma dalla media della gaussiana.

- sovrapporre le due distribuzioni in un unico istogramma, quindi stimare la posizione del segnale con due metodi di fit:

- un fit globale segnale + fondo;

- un doppio fit, cercando di identificare il fondo in una regione senza segnale e sottraendolo all’istogramma della misura prima di fittare il segnale.

Riferimenti

Documenti correlati

La classe della lista deve avere un metodo void push(float) per aggiungere un nuovo oggetto alla fine lista, e un metodo float pop() che restituisca il primo elemento della lista e

• This means that it is possible to define parametric

Si consideri una lista di numeri interi Lista implementata come lista doppiamente puntata non circolare implementata utilizzando la seguente struttura.. struct

initiative, while retaining some leverage for Germany in the long run, and continuing to exercise influence while supporting PESCO as the main framework for security cooperation

In 2016 the European Commission published its Road Transport Strategy for Europe, and the Florence Road Forum brought together the most relevant stakeholders and experts to

Walter Mocchi e la costruzione di un’industria operistica fra Italia e Sud

“Eppure il satellite prima e la rete poi, in quanto ambienti in grado di sviluppare spazi di comunicazione transnazionale, hanno non solo ampliato in maniera

In 2014 China became also a net foreign investor, after years of being one of the leading recipients of FDI. The country is an international lender and perhaps the only one