Valentina Vaccaro

Data mining – Algoritmi e programmazione

Esonero

Analisi e previsione dei punti di svolta

Introduzione

 L’analisi presentata ha come obiettivo quello di evidenziare in che modo studiare l’andamento nel tempo dei prezzi nei mercati finanziari e come prevederne le tendenze future. Per mantenere una posizione d’investimento fino a quando non vi sia prova che la tendenza si sia invertita e quindi si vada incontro a delle perdite, è necessario riuscire a identificare un cambiamento di tendenza rispetto a uno stadio iniziale. Ovviamente nella realtà è impensabile acquistare esattamente nei punti di minimo e vendere esattamente nei punti di massimo poiché è difficile riuscire a prevedere con precisione i punti di svolta della funzione. Questi ultimi possono essere conosciuti solo a posteriori, pertanto l’analisi in questione si prefigge d’identificare il trend della funzione e segnalare tempestivamente quando è prossima una sua inversione oppure quando si è appena verificata. Nel primo capitolo si fa una breve panoramica sui mercati finanziari prestando attenzione alla definizione di prezzi ask e bid. Nel secondo capitolo si definisce in linea teorica il significato di analisi tecnica dei punti di svolta, soffermandosi prima sulla definizione matematica e statistica di essi e in seguito entrando nel merito dell’analisi tecnica facendo riferimento ai concetti di serie storica, medie mobili e teoria del Random Walk. Infine nel terzo capitolo l’attenzione è incentrata sull’applicazione pratica, cioè sull’implementazione di un metodo che riesce a prevedere o a segnalare tempestivamente quando la funzione è caratterizzata improvvise variazioni (picchi).

CAPITOLO I

PREZZO DENARO E PREZZO LETTERA

1.  Introduzione ai mercati finanziari

Il termine ‘mercati finanziari’ può definire, nella sua accezione più generale, l’insieme delle strutture (giuridiche, operative, tecniche, fisiche) attraverso cui avviene lo scambio delle attività finanziarie. Un mercato finanziario è un luogo ideale nel quale sono scambiati strumenti finanziari di varia natura a medio o lungo termine.

Con riferimento alla natura degli strumenti finanziari si distingue solitamente tra mercato creditizio, mercato mobiliare e mercato assicurativo. Con riferimento alla durata degli stessi si distingue tra mercato monetario e mercato dei capitali. Infine, con riferimento al momento di emissione degli strumenti finanziari, si distingue tra mercato primario e mercato secondario. Altre distinzioni possono essere fatte fra mercati cash e mercati derivati, fra mercato ad asta e market maker, fra mercato fisico e mercato telematico, fra mercato pubblico e mercato privato, fra mercato regolamentato e mercato over the counter.

 2.   Definizione di prezzo Ask e Bid

I Market Makers sono degli intermediari finanziari che ricoprono un ruolo importante nei mercati. Loro attività è di sfruttare lo spread fra il prezzo cui sono disposti a comprare e quello cui sono disposti a vendere. Nel gergo dei mercati finanziari questi due tipi di prezzo appena descritti, sono indicati come Prezzo Denaro (Bid Price) e Prezzo Lettera (Ask Price).

Il Prezzo Denaro o anche Bid Price è quel termine attraverso il quale è indicata la miglior proposta in acquisto (espressa in denaro) che è inserita nel “book” del mercato telematico, in altre parole il prezzo più alto che un Market Maker è disposto a pagare per un determinato stock di titoli.

 Il Prezzo Lettera o anche Ask Price invece, è quel prezzo che indica la miglior proposta in vendita (espressa in denaro) inserita nel “book” del mercato telematico. Detto in altri termini il Prezzo Lettera si riferisce al prezzo più basso al quale un operatore in vendita oppure un Market Maker s’impegna a cedere un determinato stock di titoli.

Quando l’investitore vuole acquistare dei titoli, deve andare a vedere il miglior prezzo di vendita (Ask Price) che il mercato gli offre, mentre quando vuole vendere dei titoli, deve vedere qual è il miglior prezzo di acquisto (Bid Price) che il mercato definisce in quel momento. Il prezzo di acquisto e il prezzo di vendita sono una parte fondamentale del sistema del mercato, perché dicono nei dettagli l’importo esatto al quale è possibile acquistare o vendere in qualsiasi momento. Il prezzo corrente o meglio il prezzo che si forma sul mercato dalla contrattazione dei titoli spesso non è quello che andremo effettivamente a pagare o a incassare. In ultima analisi il Prezzo Lettera è di solito superiore al Prezzo Denaro e questo si può comprendere considerando che il Market Maker guadagna sulla differenza tra i due prezzi che egli stesso applica. Differenza che come già accennato, è definita più propriamente “spread”.

CAPITOLO II

ANALISI TECNICA DEI PUNTI DI SVOLTA

1.  Definizione di analisi tecnica

In economia l’analisi tecnica (AT) è lo studio dell’andamento dei prezzi dei mercati finanziari nel tempo, allo scopo di prevederne le tendenze future, mediante principalmente metodi grafici e statistici. In senso lato è quella teoria di analisi (ovvero insieme di principi e strumenti) secondo cui è possibile prevedere l’andamento futuro del prezzo di un bene quotato (reale o finanziario), studiando la sua storia. È utilizzata, assieme all’analisi fondamentale, per la definizione delle decisioni di trading.

2.   Serie storiche

E’ stato accennato che l’andamento futuro dei prezzi è previsto mediante lo studio della sua storia, ma qual è lo strumento in grado di fare questo tipo di analisi? E’ essenziale a tale proposito introdurre il concetto di serie storica.

Per serie storica s’intende un insieme di dati ordinati in progressione cronologica. Supponiamo di avere una serie storica di osservazioni di prezzi dal tempo iniziale fino a quello attuale e di voler prevedere l’andamento del fenomeno al fine di individuare eventuali picchi.

Una generica serie storica può essere scomposta in quattro parti:

Trend, componente di lungo periodo, che determina la tendenza di fondo del fenomeno considerato;

Ciclo, alternanza della serie nel tempo intorno al trend;

Componente Stagionale, andamento regolare che si ripete costantemente nel tempo;

Componente casuale o aleatoria, cioè componente non spiegabile. Nei modelli di serie storiche non vi è mai una relazione perfetta tra la variabile sotto osservazione e le diverse componenti, la componente accidentale tiene conto di questo e del comportamento non perfettamente prevedibile degli agenti economici.

Ci sono diversi tipi di scomposizione delle serie storie, per citarne alcuni:

1. Forma additiva: Yt = Tt + Ct + St + At

2. Forma moltiplicativa: Yt = Tt * Ct * St * At

Alcuni metodi per ottenere queste scomposizioni sono:

– metodo della regressione;

– metodo delle medie mobili;

– metodi combinatori.

Nell’interpretazione di molti fenomeni economici è necessario isolare la componente stagionale perché ne disturba l’interpretazione e anche perché essa non è collegata ai punti di svolta. Le medie mobili sono uno strumento utile a tal fine.

Supponiamo di avere una serie di osservazioni a periodi costanti, osservo un valore al tempo t, ma quale sarà il prossimo?

Per fare delle previsioni è necessario che dietro la loro manifestazione ci sia un legame tra le osservazioni. Infatti, per fare inferenza sull’andamento futuro del fenomeno s’ipotizza che il passato e il presente contengano informazioni rilevanti per prevedere l’evoluzione futura del fenomeno. Se le osservazioni sono indipendenti le une dalle altre, i valori estratti sono aleatori e quindi non è possibile prevedere esattamente i valori futuri. 

 3.  Teoria del Random Walk

La teoria del Random Walk ipotizza che il variare dei prezzi sia del tutto indipendente e che la storia non costituisca un indicatore affidabile per i prezzi futuri nel lungo periodo.

L’idea di base del processo è che il valore di una serie domani sia pari al valore di oggi più un elemento imprevedibile.

La teoria random walk sostiene, quindi, che i mercati funzionano “come se” fossero governati da una legge casuale, poiché le informazioni, che fanno variare i mercati medesimi, impattano in maniera non prevedibile e quindi casuale.

Questo modello implica che l’evoluzione del prezzo di uno strumento finanziario è essenzialmente casuale e la migliore previsione del prezzo dell’istante successivo non può che essere fatta sulla base del prezzo precedente e delle informazioni disponibili al mercato. Pertanto i movimenti dei prezzi e dei rendimenti non seguono alcun trend o regolarità, quindi i movimenti passati non possono essere usati per previsioni future.

 4.  Medie Mobili

Alla luce delle considerazioni fatte è emerso che per fare delle previsioni è necessario che ci sia un legame tra le osservazioni, ma al tempo stesso secondo la teoria del Random Walk le variazioni dei prezzi sono tra loro del tutto indipendenti. Per questo motivo sono stati studiati e creati numerosi strumenti per aiutare l’analista nell’identificare i trend e i primi segnali d’indebolimento per decidere tempestivamente quando comprare o vendere un titolo. A tale proposito citiamo le medie mobili.

La media mobile studia il trend della funzione analizzata. E’ possibile tarare la Media Mobile in funzione delle analisi che l’operatore deve realizzare. L’esatta taratura della Media Mobile è funzione del profilo temporale dell’operazione che si deve svolgere. Infatti, un numero di rilevazioni contenute fornirà una Media Mobile molto reattiva alle variazioni della serie in esame mentre viceversa, una Media Mobile tarata su un numero elevato di sessioni è più indicata a rilevare i movimenti di medio – lungo periodo.

La “taratura” ottimale è anche funzione della volatilità del mercato preso in esame, ad esempio per serie storiche molto volatile sarà opportuno utilizzare Medie Mobili con un numero di sessioni più elevate così da limitare i falsi segnali generati. Per “ottimizzazione” s’intende quindi la ricerca del timing più indicato che consenta di evitare i falsi segnali e di avere indicazioni eccessivamente in ritardo rispetto ai movimenti del mercato. E’ possibile procedere verificando quale tipo di Media Mobile abbia dato i migliori risultati su quel particolare mercato nel passato. Anche se occorre considerare che i movimenti futuri saranno diversi da quelli già verificatisi e quindi il risultato potrà essere dissimile da quello sperato. E’ conveniente testare quindi la Media Mobile sia in periodi di bassa volatilità che in momenti di alta volatilità, sia in periodi di mercato direzionale che in fasi di congestione, sia durante trend rialzisti sia ribassisti.

La media mobile può essere di tre tipi: semplice, ponderata ed esponenziale.

  • Per ottenere la Media Mobile semplice si procede facendo la media aritmetica di “n” sessioni. A ogni nuova sessione che si forma sul grafico, si aggiunge alla media aritmetica il nuovo valore e toglie il primo della serie.
  • In una Media Mobile ponderata invece, nel caso per esempio di una media mobile a dieci giorni, il decimo valore è moltiplicato per dieci, il 9° per nove e così via e il totale diviso per la somma dei multipli.
  • Nella Media Mobile esponenziale invece i coefficienti hanno un valore progressivo esponenziale.

Nella pratica le medie mobili forniscono un segnale operativo quando sono intersecate dal grafico del prezzo. Normalmente, infatti, la media mobile sta sotto il livello dei prezzi in un mercato rialzista e sopra il livello dei prezzi in un mercato ribassista. Quando il prezzo “rompe” la media mobile dal basso verso l’alto, si genera un segnale di acquisto e quando la rompe dall’alto verso il basso, si genera un segnale di vendita.

Un altro metodo operativo consiste nell’utilizzo di due medie mobili, una di breve e una di medio – lungo periodo. Quando le due medie s’incrociano, si genera un segnale di acquisto/vendita (fig.1.)

 5.  Definizione di punto di svolta

Lo scopo dell’analisi è prevedere i picchi, cioè i punti di massimo e di minimo della distribuzione per decidere quando è necessario “vendere” un titolo e quando “comprarlo”.

Prima di passare alla descrizione del metodo realizzato è necessario fornire una più precisa definizione di cosa siano i punti di svolta di una funzione, in questo caso specifico la funzione osservata è quella che si riferisce ai prezzi ask e Bid.

 5.1.    Definizione matematica

Data una generica distribuzione di osservazioni, per picco o punto di svolta s’intende il valore più alto o più basso della funzione in un dato intervallo.

Distinguiamo tra due categorie di picchi, che indichiamo come picco sell e picco buy.

  •   Un picco sell è un punto dove la funzione smette di salire e comincia a scendere. Matematicamente dovremo dire che quel punto è il più alto, cioè il suo valore è superiore a quello degli altri punti circostanti. Quindi la funzione avrà un picco positivo nel punto x se f(x) >= f(y) per ogni punto appartenente ad un intorno completo di x.
  •    Un picco Buy è un punto dove la funzione smette di scendere e comincia a salire. Matematicamente dovremo dire che quel punto è il più basso, cioè il suo valore è inferiore a quello degli altri punti circostanti.
    La funzione avrà un punto di minimo nel punto x se f(x) <= f(y) per ogni punto appartenente ad un intorno completo di x.

 5.2.      Definizione Statistica

Analizzando una generica distribuzione di osservazioni nel tempo, oltre a rintracciare nei dati i comportamenti generali, è tuttavia interessante individuare i valori anomali della stessa, cioè le eccezioni a queste tendenze (nel linguaggio statistico valori anomali o outlier). In alcuni casi, trovare quale variabile/periodo non rispetti lo schema di comportamento generale può essere più interessante che trovare il modello di comportamento stesso.

 Si possono distinguere tre categorie di valori anomali:

  • Outlier additivo, cioè brusca variazione nella serie in un dato istante, dopo il quale però la serie stessa ritorna immediatamente o gradualmente all’andamento precedente;
  • Outlier di livello, cioè brusca variazione che permane nel tempo, provocando un cambiamento del livello o dello stesso andamento della serie.
  • Outlier temporaneo, cioè brusca variazione in un dato istante temporale, che è riassorbito gradualmente nel tempo.

CAPITOLIO III

RILEVAZIONE DEI PUNTI DI SVOLTA

 1.  Obiettivo

Il problema che si pone è di generare un algoritmo che prenda in input una serie storica dei prezzi, che legga i dati, che li visualizzi, e che determini i punti di svolta della curva creando metodi e indicatori adeguati.

 In altre parole, l’obiettivo è generare un algoritmo che sia in grado di individuare il punto in cui la distribuzione presenta un picco sell oppure un picco Buy per stabilire quando è il momento di vendere o comprare un titolo. Ovviamente la previsione non è possibile in quando, come vedremo, la serie è generata casualmente e pertanto non essendovi un processo sistematico alla base di essa, è impossibile calcolare con esattezza il valore assunto dal prezzo al tempo t+1. L’applicazione si propone, quindi, di fornire un’indicazione tempestiva del cambiamento di tendenza, ed eventuali picchi ad essa connessi, al fine di limitare le perdite e massimizzare i guadagni dell’investitore.

 2.  Implementazione del metodo

 Esistono numerosi strumenti per aiutare l’analista a decidere tempestivamente quando comprare o vendere un titolo. A tale proposito ne è stato ideato e implementato uno che a fini descrittivi può essere scomposto in quattro passi fondamentali.           

1.   Il primo passo consiste nel generare due serie random e rappresentarle graficamente nella PictureBox. La prima è la serie dei prezzi ask (miglior prezzo di vendita) e la seconda è la serie dei prezzi bid (miglior prezzo di acquisto). In realtà l’algoritmo è applicato esclusivamente sulla serie delle osservazioni bid.

 2.   Il secondo passo consiste nell’implementare l’algoritmo per l’individuazione dei picchi.  Il procedimento è il seguente:

  • Si calcolano le medie mobili della funzione dei prezzi. Lo scopo è di tracciare il trend della funzione. È importante prestare attenzione a non calcolare una media mobile troppo “morbida” perché ci sarebbe il rischio di non riuscire a cogliere gli improvvisi sbalzi della funzione dei prezzi;
  • Si fissa una soglia, cioè una certa percentuale della media in modo da individuare una banda di riferimento rappresentata dall’intervallo

] (1 – soglia) * media, (1 + soglia) * media [

  • Ad ogni passo si confronta il valore casuale del prezzo con la banda che è stata fissata, quest’operazione comporta la distinzione di tre casi:

                                     I.        Il prezzo è compreso nella banda e pertanto non è indicato come picco;

                                    II.        Il prezzo è maggiore dell’estremo superiore della banda e l’osservazione i-sima è maggiore dell’osservazione i-sima+1. Il punto in questione è un picco sell;

                                   III.     Il prezzo è minore dell’estremo inferiore della banda e l’osservazione i-sima è minore dell’osservazione i-sima+1. Il punto in questione è un picco Buy;

3.   Il terzo passo consiste nella rappresentazione grafica. Si sceglie di rappresentare la serie casuale dei prezzi bid, la media mobile, la banda di riferimento, i picchi sell (rossi), i picchi buy (verdi);

 

4. Il quarto passo consiste nell’implementare un indice di performance.

2.1.     Indice di performance

E’ indispensabile inserire nell’algoritmo un indice che misuri la qualità della previsione e che verifichi l’efficienza dell’algoritmo. A tal proposito è stato realizzato un indicatore di performance che segnala se l’algoritmo riesce a individuare in modo corretto un picco.

L’indicatore distingue due risultati parziali:

–      Esito positivo;

–      Esito negativo.

Per l’implementazione è necessario fissare:

–      Una banda di riferimento

Banda= 1/100 * prezzo

–      Un prezzo di partenza

          Prezzo= 1000

–      La minima distanza tra due prezzi

Tick=1

Nel caso in cui è stato trovato un picco buy, l’indice segnala un esito positivo se la funzione dei prezzi interseca prima la soglia superiore della banda, in caso contrario segnala un esito negativo;

Nel caso in cui è stato trovato un picco sell, l’indice segnala un esito positivo se la funzione dei prezzi interseca prima la soglia inferiore della banda, in caso contrario segnala un esito negativo;

І= ∑ Gi – Li/ N° Totale di picchi

Dove:

–      i numero di picchi;

–      G numero di esiti positivi;

–      L numero di esiti negativi.

Download Applicazione e Tesina

http://www.megaupload.com/?d=9RX8Z0H1

Applicazione del 15-11-2011

Generazione di una Serie di Prezzi  Random

Problema: generare una sequenza di numeri casuali per i prezzi bid e ask, che verranno rappresentate graficamente.

1) Si istanzia la variabile random

Public rnd As New Random

2) Nell’evento click del bottone si scrive il seguente codice

‘Creazione delle liste dei prezzi BID ed ASK

        Dim lista_prezzi_rnd_ASK As New List(Of Oss_Prezzi_rnd)

        Dim lista_prezzi_rnd_BID As New List(Of Oss_Prezzi_rnd)

         Me.lista_prezzi_nt_rnd_BID = New List(Of PointF)

        Me.lista_prezzi_nt_rnd_ASK = New List(Of PointF)

 

        ‘Dichiarazione dei riferimenti temporali

        Dim istante_iniziale As Date = New Date(Now.Year, Now.Month, Now.Day, 0, 0, 0, 0)

        Dim istante_prec As Date = istante_iniziale

        Dim istante_corrente As Date

 

        ‘Dichiarazione dei prezzi

     Dim prezzo_iniziale As Decimal = 10000

        Dim prezzo_prec As Decimal = prezzo_iniziale

        Dim prezzo_corrente As Decimal

 

        ‘Generazione dei numeri casuali

       Dim tick As Double = 0.5

 

        For i As Integer = 1 To 1000

 

            If Me.rnd.NextDouble < 0.5 Then

                prezzo_corrente = prezzo_prec – tick

            Else

                prezzo_corrente = prezzo_prec + tick

            End If

 

            istante_corrente = istante_prec.AddSeconds(Me.rnd.Next(5, 61))

 

            ‘Creazione delle liste di osservazioni casuali

            Dim oss_BID As New Oss_Prezzi_rnd

 With oss_BID

                .prezzo = prezzo_corrente

                .istante = istante_corrente

            End With
            lista_prezzi_rnd_BID.Add(oss_BID)

 

            Dim oss_ASK As New Oss_Prezzi_rnd

            With oss_ASK

            .prezzo = prezzo_corrente + tick

            .istante = istante_corrente

            End With
            lista_prezzi_rnd_ASK.Add(oss_ASK)

 

  ‘Determinazione dei minimi e massimi

            Dim x_BID As Single = CSng((oss_BID.istante – istante_iniziale).TotalMilliseconds)

            Dim y_BID As Single = oss_BID.prezzo

 

            Dim x_ASK As Single = CSng((oss_ASK.istante – istante_iniziale).TotalMilliseconds)

            Dim y_ASK As Single = oss_ASK.prezzo

 

            If MinX > x_BID Then MinX = x_BID

            If MaxX < x_BID Then MaxX = x_BID

            If MinY > y_BID Then MinY = y_BID

            If MaxY < y_ASK Then MaxY = y_ASK

 

            ‘Creazione delle liste di punti

            lista_prezzi_nt_rnd_BID.Add(New PointF(x_BID, y_BID))

            lista_prezzi_nt_rnd_ASK.Add(New PointF(x_ASK, y_ASK))

             istante_prec = istante_corrente

            prezzo_prec = prezzo_corrente

         Next

 

        ‘Costruzione delle liste dei punti trasformati

        Dim lista_prezzi_t_rnd_BID As List(Of Point) = Me.funzione_lista_prezzi_t(Me.MinX, Me.MaxX, Me.MinY, Me.MaxY, Me.lista_prezzi_nt_rnd_BID)

       Dim lista_prezzi_t_rnd_ASK As List(Of Point) = Me.funzione_lista_prezzi_t(Me.MinX, Me.MaxX, Me.MinY, Me.MaxY, Me.lista_prezzi_nt_rnd_ASK)

 

        ‘Disegno delle liste dei punti trasformati

        Me.g.FillRectangle(Brushes.White, New Rectangle(Point.Empty, New Size(Me.b.Width, Me.b.Height)))

        Me.g.DrawLines(Pens.Blue, lista_prezzi_t_rnd_BID.ToArray)

     Me.g.DrawLines(Pens.Red, lista_prezzi_t_rnd_ASK.ToArray)

 

        ‘rappresentazione del bitmap nella picture box

        Me.PictureBox1.Image = Me.b

Download Applicazione:

http://www.megaupload.com/?d=INNYOTG0

Lezione del 15 -11- 2011

Generatori di numeri casuali

I Numeri casuali sono utilizzati per costruire simulazioni di natura probabilistica di fenomeni fisici , di problemi decisionali, finanziari e  informatici.

Brevi cenni storici

L’idea di utilizzare in modo sistematico simulazioni di tipo probabilistico per risolvere un problema di natura fisica viene generalmente attribuita al matematico polacco Stanislaw Ulam (1909-1984). Ulam fu uno dei personaggi chiave nel progetto americano per la costruzione della bomba atomica  durante la seconda guerra mondiale. Il progetto richiedeva la risoluzione di un enorme numero di problemi incredibilmente complessi. 

Generatori di numeri pseudo- casuali

Nessun calcolatore è in grado di generare numeri puramente casuali, ma solo numeri pseudo-casuali o quasi-casuali ossia numeri generati da algoritmi numerici deterministici in grado di superare una serie di test statistici che conferiscono a tali numeri una apparente casualità.

 Nei primi anni dell’era dei computer (1946) John von Neumann suggerì il famoso metodo middle-square per generare numeri pseudo casuali distribuiti in modo uniforme. In tale distribuzione uniforme ogni possibile numero in un determinato intervallo è ugualmente probabile. Il metodo middle-square richiede come tutti i generatori di numeri casuali un valore iniziale, detto seme dal quale vengono generati i successivi valori. La successione generata quindi non potrà essere casuale ma avrà solo il carattere di apparente casualità. Oggi il metodo middle-square ha un’importanza solamente storica.

Nel 1948 venne proposto un generatore di numeri casuali distribuiti uniformemente detto generatore lineare congruenziale o più brevemente LCG che a tutt’oggi è ancora utilizzato. Tale generatore venne presentato per la prima volta dal matematico D.H. Lemer esperto di teoria dei numeri. Il metodo LCG, analogamente al metodo  middle-square, ha bisogno di un seme per inizializzare la sequenza di numeri secondo la seguente regola: xn+1 = (axn + c)modm, n  0, dove a, c ed m sono opportuni numeri interi costanti. La notazione “mod m”, ossia modulo m, significa che axn + c viene diviso per m e xn+1 posto uguale al resto intero della divisione. Quindi xn+1 assume valori interi tra 0, 1, 2, . . . ,m − 1.

” Una proprietà importante nel valutare la bontà di un generatore uniforme di numeri pseudo-casuali è l’assenza di correlazione tra i numeri generati dall’algoritmo”.

 Trasformazione di Box-Muller

La trasformazione di Box-Muller è un metodo per generare coppie di numeri casuali indipendenti e distribuiti gaussianamente con media nulla e varianza uno.

La trasformazione viene comunemente espressa in due forme:

–         Forma base nella quale  si campionano due numeri dalla distribuzione uniforme sull’intervallo (0,1] e si ricavano due numeri distribuiti normalmente.

 –         Forma  polare che campiona due numeri su un intervallo differente ([ − 1, + 1]) e permette di ricavare due numeri distribuiti normalmente senza l’uso delle funzioni seno e coseno.

 La forma polare differisce da quella base in quanto è un esempio di tecnica di rigetto. Vengono scartati alcuni numeri casuali, ma l’algoritmo è più veloce della forma base perché meno oneroso da valutare numericamente  e tipicamente più robusto.

La forma base richiede tre moltiplicazioni, un logaritmo, una radice quadrata ed una funzione trigonometrica per ciascun numero casuale normalmente distribuito.

La forma polare richiede due moltiplicazioni, un logaritmo, una radice quadrata ed una divisione per ciascun numero gaussiano. L’effetto è quello di sostituire una moltiplicazione ed una funzione trigonometrica con una sola divisione.

Numeri casuali in VB.Net

Per generare un numero casuale (o random) in Visual Basic.Net è necessario creare un oggetto di tipo Random :

 Dim MyRnd As New Random

 Dopo aver fatto cioè si può utilizzare una delle seguenti istruzioni:

1.  MyRnd.Next

Restituisce un numero casuale intero non negativo a 32 bit;

2.  MyRnd.Next(N)

Restituisce un numero casuale compreso tra 0 e N-1;

3.   MyRnd.Next(m, M)

Restituisce un numero random intero compreso tra m e M-1;

4.   MyRnd.NextDouble

Restituisce un numero random con la virgola compreso tra 0,0 e 1,0.

Applicazione del 25-10-2011

Out-put  grafico

Vb.net mette a disposizione tre oggetti per la visualizzazione grafica dell’out-put:

1)   PictureBox

Consente di visualizzare immagini nella propria applicazione, le immagini possono essere già esistenti oppure possono essere create e successivamente caricate; la  proprietà image permette di caricare  immagini  da un file con la funzione fromfile o dalle risorse con la funzione My.Resources.

2)    BitMap

E’  la superficie sulla quale si va a disegnare, è l’immagine fatta di pixel;

  • Creare il Bitmap

                Dim bitmap as new Bitmap (x,y)

–         X è la larghezza del BitMap

–         Y è l’ altezza del BitMap

 

3)   Graphics

E’ l’oggetto che fornisce tutti i metodi per poter disegnare sul BitMap.

  • Creare il Graphics

                Dim g as Graphics= Graphics.FromImage(bitmap)

                g. […] permette di visualizzare tutti i metodi a disposizione del graphics;

 Ad esempio g.DrawRectangles() crea una serie di rettangoli.

Creare una immagine

Per creare una immagine, ad esempio rettangolo, vb.net mette a disposizione diversi metodi, tra i quali:

1.        Dim rettangolo As New Rectangle(10, 10, 100, 50)

        g.DrawRectangle(Pens.DarkBlue, rettangolo)

(10,10) indicano la posizione nel Bitmap dell’angolo in alto a sinistra

100 è la larghezza del rettangolo

50 è la altezza del rettangolo

Pens.DarkBlue è il colore della penna e quindi del rettangolo

 2.         Dim penna As New Pen(Color.Pink, 4)

      g.DrawRectangle(penna, 50, 50, 100, 50)

 Color.Pink è il colore della penna

 – 4 sono i pixel, ossia la grandezza della penna

L’oggetto pen può essere istanziato , come abbiamo visto, oppure si possono usare penne messe già a disposizione dal linguaggio (Pens.blue).

Programma:

–         Si crea un form al quale vengono applicati:

  •  Bottone: utilizzando l’applicazione “Button” dalla casella degli strumenti;
  • PictureBox: utilizzando l’applicazione “PictureBox dalla casella degli strumenti;

         Creazione dell’immagine

 Public Class Form1
     Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
 
        ‘creazione del Bitmap’
        Dim bitmap As New Bitmap(800, 600)
 
        ‘creazione del graphics’
        Dim g As Graphics = Graphics.FromImage(bitmap)
 
        ‘impostazione background: riempe l’area interna di un rettangolo specificato,’
         ‘l’oggetto brush determina le caratteristiche del riempimento, in questo caso il colore’
        g.FillRectangle(Brushes.White, New Rectangle(0, 0, bitmap.Width, bitmap.Width))
 
        ‘creazione dell’rettangolo’
        ‘primo modo:’
        Dim rettangolo As New Rectangle(10, 10, 200, 50)
        g.DrawRectangle(Pens.DarkViolet, rettangolo)
 
        ‘secondo modo:’
       ‘penna personalizzata’
        Dim penna As New Pen(Color.Pink, 4)
        ‘4 sono i pixel ossia la grandezza della penna’
        g.DrawRectangle(penna, 50, 50, 200, 50)
 

Download dell’applicazione

http://www.megaupload.com/?d=GGV2SBIX

Creare una immagine in movimento

Costruire due rettangoli, uno si muove in orizzontale e l’altro in verticale.

Programma:

 

 –         Si crea un form al quale vengono applicati:

  •  Timer: utilizzando l’applicazione “Timer” dalla casella degli strumenti.
  • PictureBox: utilizzando l’applicazione “PictureBox” dalla casella degli strumenti.

 

–       Si crea l’immagine in movimento:

 Imports System.Drawing
 
Public Class Form1
     ‘avvio del timer’ 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         Me.Timer1.Interval = 50
         Me.Timer1.Start()
     End Sub 
 
    ‘quando si avvia il timer si chiama la sub disegna’ 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
         Me.disegna()
     End Sub 
     ‘dichiarazione della variabile xanimata, yanimata e passo’
   Public xanimata As Integer = 10
     Public yanimata As Integer = 10
    Public passo As Boolean
     
Sub disegna()
         ‘creazione del Bitmap’
         Dim bitmap As New Bitmap(400, 350)
          ‘creazione del graphics’
         Dim g As Graphics = Graphics.FromImage(bitmap) 
         ‘impostazione background’
         g.FillRectangle(Brushes.White, New Rectangle(0, 0, bitmap.Width, bitmap.Width)) 
         ‘creazione dell’rettangolo’
         ‘ la dimensione orizzontale dell’vertice in alto a sinistra
         ‘del rettangolo è stata posta uguale alla variabile xanimata
         ‘In modo tale che al variare di questa variabile
         ‘il rettangolo si sposti orizzontalmente
         Dim rettangolo As New Rectangle(xanimata, 50, 200, 100)
         g.DrawRectangle(Pens.DarkViolet, rettangolo)
          ‘secondo modo:’
         ‘penna personalizzata’
         Dim penna As New Pen(Color.Pink, 5)
         ‘5 sono i pixel ossia la grandezza della penna’
          ‘ la dimensione verticale dell’vertice in alto a sinistra
         ‘del rettangolo è stata posta uguale alla variabile yanimata
         ‘In modo tale che al variare di questa variabile
         ‘il rettangolo si sposti verticalmente
         g.DrawRectangle(penna, 50, yanimata, 200, 100)
          ‘visualizza l’immagine nel pictureBox’
         Me.PictureBox1.Image = bitmap 
         If passo Then
             xanimata -= 10
             yanimata -= 10
         Else
             xanimata += 10
             yanimata += 10
         End If 
         ‘se la somma di xanimata e della larghezza del rettangolo sono maggiori
         ‘della dimensione della larghezza del bitmap il rettangolo torna indietro
         If Me.xanimata + rettangolo.Width > bitmap.Width Then Me.passo = True
 
       If Me.xanimata < 0 Then Me.passo = False 
         ‘se la somma di yanimata e dell’altezza del rettangolo sono maggiori
         ‘della dimensione della altezza del bitmap il rettangolo torna sopra
         If Me.yanimata + rettangolo.Height > bitmap.Height Then Me.passo = True
         If Me.yanimata < 0 Then Me.passo = False
End sub

Dowload dell’applicazione:

http://www.megaupload.com/?d=C8HC1SCA

 

Applicazione del 18-10-2011

Ciclo di lettura dei dati

Per leggere il contenuto di un file di testo in una stringa, si utilizza il metodo ReadAllText dell’oggetto My.Computer.FileSystem, specificandone il percorso.

Dim fileReader As String fileReader = My.Computer.FileSystem.ReadAllText(“C:\test.txt”)

NB. Il file potrebbe anche essere inserito nelle risorse e caricato nel programma

Programma:

      1.  Si crea un form al quale vengono applicati:

  •  Bottone: utilizzando l’applicazione Button dalla casella degli strumenti;
  • Casella di testo: utilizzando l’applicazione TextBox dalla casella degli strumenti;

      2.    Si crea la classe “osservazione_prezzo” con le proprietà :

  • Ora
  • Minuti
  • Millisecondi
  • Tipo di prezzo
  • Prezzo

 

Public Class osservazione_prezzo  
   Public ora As Integer    
 Public minuti As Integer
    Public millisecondi As Integer
    Public tipo_di_prezzo As Boolean   
  Public prezzo As Decimal
End Class

        3.  Lettura del file

 Public Class Form1
‘Evento Click del bottone’
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click  
 
‘Lettura del file’
Dim testo_letto As String
testo_letto = My.Computer.FileSystem.ReadAllText(“C:…”)  
 
‘poichè il file viene visualizzato in una stringa ‘
‘è necessario splittare le righe.’
‘il seguente comando restituisce un array’
 Dim righe() As String = testo_letto.Split(vbCrLf.ToCharArray,StringSplitOptions.RemoveEmptyEntries)  
 
‘vbCrLf.ToCharArray= separa le righe e trasforma le righe in caratteri’ ‘StringSplitOptions.RemoveEmptyEntries= elimina gli spazi vuoti’  
‘legge il file e lo visualizza nel textBox:’
Me.RichTextBox1.Text = testo_letto
 
 ‘creazine della lista lista_osservazioni’
Dim lista_osservazioni As New List(Of osservazione_prezzo)
For Each riga As String In righe
Dim valori As String() = riga.Split(” “.ToCharArray,StringSplitOptions.RemoveEmptyEntries)
Dim oss As New osservazione_prezzo
With oss    
  .ora = CInt(valori(0))
  cint converte in intero visto che prima era una stringa’   
    .minuti = CInt(valori(1))    
   .millisecondi = CInt(valori(2))  
     .tipo_di_prezzo = valori(3)     
  .prezzo = Decimal.Parse(valori(4), System.Globalization.CultureInfo.GetCultureInfo(“EN-US”))
 End With     
    lista_osservazioni.Add(oss)     
    Next
 
  ‘Calcola il prezzo medio e lo visualizza nel textbox’
Dim somma As Integer Dim cont As Integer
For Each oss As osservazione_prezzo In lista_osservazioni
 somma = somma + oss.prezzo
cont = cont + 1
 Next
 Dim media_prezzo As Double = somma / cont
Me.RichTextBox1.Text = media_prezzo    
End Sub
End Class

 

 Download applicazione:

http://www.megaupload.com/?d=B82X4UJD

Lezione del 18-10-2011

Sorgenti di Dati

1)  DBMS

Un Database Management System consente la creazione e la manipolazione di  data base .

Se in passato i DBMS erano diffusi principalmente presso le grandi  aziende e istituzioni , oggi il loro utilizzo è diffuso praticamente in ogni contesto.

Un DBMS può essere costituito da un insieme assai complesso di programmi  software che controllano l’organizzazione, la memorizzazione e il reperimento dei dati (campi, record e archivi) in un database. Un DBMS controlla anche la sicurezza e l’integrità del database.

I  linguaggi di interrogazione del database mediante query (interrogazioni) e i generatori di report permettono agli utenti di interrogare in maniera interattiva il database e di analizzarne i dati.

Se il DBMS fornisce un modo per aggiornare ed immettere nuovi dati nel database, oltre che per interrogarlo, questa capacità permette di gestire database personali. Comunque queste funzionalità non danno la possibilità di mantenere traccia delle revisioni e non forniscono gli strumenti necessari alla gestione di una organizzazione multi-utente. Questi controlli sono disponibili solamente quando un insieme di programmi applicativi sono appositamente costruiti per gestire e coordinare ciascuna funzione di immissione o modifica dei dati.

I tre tipi più comuni sono

  • Modello gerarchico, i dati sono disposti ad albero ogni record è suddiviso in segmenti connessi tra loro;
  • Modello reticolare, i record sono connessi da relazioni logiche;
  •  Modello relazionale, i dati sono organizzati in tabelle dette relazioni.

2)  FILE TEXT

I file di testo furono una delle prime strutture dati ideate per immagazzinare informazioni piuttosto comuni, che prevedevano che i dati fossero distribuiti in un elenco ordinato di righe costituite da caratteri.

Un file di testo contiene solo caratteri di scrittura semplici, senza informazioni sul loroformato (dimensione, colore, ecc) e di solito rappresenta un testo leggibile direttamente dagli utenti senza bisogno di installare programmi appositi a differenza del file binario che è invece un file contenente dati generici non direttamente leggibili dall’utente.

Ci sono alcune limitazioni all’universalità dei file di testo:

  • la codifica non è sempre ovvia, e quando il sistema non la riconosce o non la supporta, il file può diventare illeggibile;
  • i maggiori sistemi usano notazioni diverse per il carattere di “a capo”.

L’estensione dei file di testo destinati alla lettura, quando utilizzata, è generalmente .txt.

I formati di file si dividono in due grandi categorie:

  • Stampabili, li troviamo normalmente visualizzati come  lettere, cifre numeriche, punteggiatura, ecc.

 Di controllo, utilizzati per implementare delle funzionalità “speciali”, come il fine riga, di pagina, dell’intero documento, o per controllare la trasmissione dei dati utilizzati in particolari protocolli ecc., inoltre essi non sono “visualizzabili” (alla loro posizione non corrisponde un simbolo grafico a video o in stampa). Alcuni esempi:

  1.       CSV (comma-separated values) è utilizzato per l’importazione ed esportazione di una tabella di dati. In questo formato, ogni riga della tabella (orecord della base dati) è normalmente rappresentata da una linea di testo, che a sua volta è divisa in campi (le singole colonne) separati da un apposito carattere separatore, ciascuno dei quali rappresenta un valore;
  2.  CR/LF è l’identificatore di fine riga, il primo comportava il ritorno all’inizio della riga (la prima colonna), mentre il secondo l’avanzamento alla riga successiva;
  3. TAB (Tabulazione) Disposizione di una serie di dati in forma di tabella.

 

3)  BINARY FILES

E’  un file che può contenere qualsiasi tipo di dati, codificato in codice binario. Molti formati di file binari contengono parti che possono essere interpretate come testo, ma si distinguono per definizione dai file di testo veri e propri: un file binario è un file che non contiene solo semplice testo.

I file binari sono solitamente concepiti come sequenze di  byte: le singole cifre bit che costituiscono il file sono raggruppate in gruppi di otto.

Alcuni sistemi non permettono l’uso dei file binari (come la posta elettronica). Quindi, in questi casi, si rende spesso necessario convertirli e rappresentarli come file di testo semplici.

 

Il Parsing

In informatica il parcing è un processo di assegnazione di una descrizione strutturale a una stringa di

caratteri. Il  programma che esegue questo compito è detto “parser” il quale, solitamente viene generato attravero dei “ generatori di parser”. Tipicamente il termine italiano viene utilizzato per riferirsi al riconoscimento di una grammatica e alla costruzione di un albero sintattico, che mostra le regole utilizzate durante il riconoscimento dall’ input; l’albero sintattico viene poi visitato durante l’esecuzione di un interprete.

Strategie di Parsing

  • Analisi  top -down Un parser può partire con il simbolo iniziale e cercare di trasformarlo nell’input. Il parser parte dal più grande elemento e lo divide in parti sempre più piccole.
  •  Analisi bottom-up Un parser può partire con l’input e cercare di riscriverlo sino al simbolo iniziale. Il parser cerca di trovare il più elementare simbolo, quindi elabora gli elementi che lo contengono, e così via

 Linguaggi di programmazione: genericamente i parser sono utilizzati con linguaggi di programmazione caratterizzati da grammatiche semplici e regolari. I parser di questo tipo tendono ad essere basati su grammatiche libere dal contesto poiché con queste grammatiche si possono scrivere parser veloci ed efficienti.In realtà, le grammatiche libere dal contesto non riescono a descrivere da sole la maggior parte dei linguaggi di programmazione di uso comune. Tuttavia le grammatiche dipendenti dal contesto, anche se più potenti, perdono in efficienza. Di conseguenza è una strategia comune quella di utilizzare grammatiche libere dal contesto per una versione “rilassata” (con minori vincoli) del linguaggio. Queste grammatiche accetteranno tutti i costrutti validi del linguaggio in considerazione, oltre ad altri costrutti non validi che vengono scartati durante l’analisi semantica dell’input.

Applicazione del 13-10-2010

Esercizio: Creare la “lista studente” con la proprietà “media dei voti”. Creare un form con una lista di 5 studenti e dichiarare per ogni studente la classe “media dei voti”. Aggiungere ogni studente alla classe. Calcolare la media dei voti dei 5 studenti.

1.   Si crea un form al quale vengono applicati: 

  • Bottone: utilizzando l’applicazione Button dalla casella degli strumenti;
  • Casella di testo: utilizzando l’applicazione TextBox dalla casella degli strumenti; 

2.   Si crea la classe studente con la proprietà media

 Public Class studente   
  Public media As Integer
End Class   

3.  Si scrive il programma nell’evento click 

Programma: 

Public Class Form1  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs.Handles Button1.Click          
 ‘istanziare la lista:’
        Dim lista_studenti As New List(Of studente)  
    
    ‘dichiara lo studente1 e il suo voto medio:’      
   Dim studente1 As New studente   
      studente1.media = 29       
 
    ‘aggiunge lo studente1 alla lista:’     
    lista_studenti.Add(studente1)        
    Dim studente2 As New studente      
    studente2.media = 28   
    lista_studenti.Add(studente2)
 
    Dim studente3 As New studente  
    studente3.media = 24        
    lista_studenti.Add(studente3)  
 
    Dim studente4 As New studente  
    studente4.media = 21
    lista_studenti.Add(studente4)  
    
    Dim studente5 As New studente
    studente5.media = 26  
    lista_studenti.Add(studente5)  
 
  ‘Calcolare la media dei voti’  
   ‘Dichiarare la variabile somma_media e la variabile contatore’  
       Dim somma_media As Double   
      Dim contatore As Integer         
 
‘struttura iterativa: calcola la somma dei voti medi
di ogni studente (For i= 0:num degli studenti’      
‘presenti nella lista_studenti)‘     
    For Each stud As studente In lista_studenti      
       somma_media = somma_media + stud.media        
 
‘implementa il contatore per contare quanti sono gli studenti’      
       contatore = contatore + 1      
   Next      
 
   ‘dichiara la variabile media_tot e calcola la media totale dei voti dividendo’    
    ‘ la somma_media con il contatore che coincide
 con il numero degli studenti’     
    Dim media_tot As Double = somma_media / contatore       
 
 ‘visualizza il risultato nella casella di testo che è stata
inserita nel form’     
    Me.RichTextBox1.Text = media_tot   
  End Sub
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs).Handles MyBase.Load       End Sub End Class    
 
 

Download Applicazione:

http://www.megaupload.com/?d=25M8P5IN

Lezione del 13-10-2011

Le liste

Nei linguaggi tradizionali erano presenti solo degli Array. Gli array sono un insieme ordinato di oggetti indicizzati. La struttura array è costituita da:

  •  un insieme finito di nodi, ciascuno costituito da un’unica componente scalare ( tutte le componenti di un array sono dello stesso tipo e sono memorizzate in voci consecutive);
  •   un metodo di strutturazione, che è la relazione di ordine stretto definita sull’insieme degli indici (ogni indice identifica la posizione occupata dalla componente corrispondente).

Ancora oggi esistono gli array però non sono più usati in quanto sono molto statici. Nei linguaggi moderni sono previsti dei contenitori di oggetti più semplici e dinamici: le liste.

Le liste sono degli insiemi che contengono istanze di una o più classi, in genere della stessa classe che a differenza degli array consentono di aggiungere e togliere oggetti.

  • Per istanziare una nuova lista:

Dim Mylist As New List (of tipo)

–         Mylist  è il nome che viene dato alla lista creata;

–         List è la classe lista;

–         Il tipo può essere di vario genere ( integer, form, String, ecc)

 

  • Per aggiungere elementi ad una lista:

Mylist. Add 

–          Mylist  è il nome dato alla lista;

–         Add è il metodo che aggiunge elementi ad una lista

 

Strutture di controllo

Le strutture di controllo determinano l’ordine con cui devono essere eseguite le istruzioni, sono indipendenti dalla natura delle istruzioni e sono degli strumenti logici universali utilizzabili in qualsiasi problema.

Le strutture di controllo posso essere classificate in:

–         Sequenza;

–         Selezione;

–         Iterazione o ripetizione.

1)   Struttura di selezione

 If  (condizione) Then
Istruzione1
Else
Istruzione2
Endif

Può essere anche del tipo:

If(condizione) Then
Istruzioni
Endif

2)    Struttura di iterazione :

  • Tipo For

For  i=1,N Do
Istruzioni
Endfor
  •  Tipo While

While (condizione) Do
Istruzioni
EndWhile
  •  Tipo Repeat-Until              

Repeat
Istruzioni
Until (condizione)

Strutture iterative a confronto:

–         Il For richiede che sia noto a priori il numero di iterazioni da svolgere da effettuare;

–         Il While e il Repeat non richiedono tale informazione;

–         Nel While se la condizione è falsa non si esegue alcuna istruzione del ciclo;

–         Nel repeat le istruzioni del ciclo sono eseguite almeno una volta;

–         Nel While la condizione determina l’entrata nel ciclo;

–         Nel Repeat-untile  la condizione determina l’uscita dal ciclo.

Le strutture iterative possono essere innestate l’una nell’altra.

Applicazione dell’ 11-10-2011

Esercizio: mostrare un form cariando delle immagini che cambino ogni tot secondi. Creare un secondo form nel quale ci sia un servizio sveglia

1. Si crea un form al quale vengono applicati:

  • Bottone: utilizzando l’applicazione Button dalla casella degli strumenti;
  • Timer: utilizzando l’applicazione Timer dalla casella degli strumenti;
  • Immagine: utilizzando l’applicazione PictureBox dalla casella degli strumenti;
  • Ora: utilizzando l’applicazione “DateTimePicture” dalla casella degli strumenti (modificando nelle proprietà il formato e impostarlo come “Time”);

 2. Si caricano nel programma le immagini che si vogliono far alternare nel form:  

My progetc – Risorse – Aggiungi Risorsa- Aggiungi File esistente

Programma: 

Public Class Form1 

   ‘quando  si carica  il form 1 si mette subito il timer:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

  ‘comando che fa partire il timer all’avvio del form1:’

 Me.Timer1.Start()
MessageBox.Show(“svegliaaaaaa”, “sveglia”, MessageBoxButtons.OK) 
End Sub 

 ‘dichiarazione del contatore:’

Public contatore As Integer 

‘dichiarazione dell’ evento tick:’

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

‘inizializzazione del contatore:’

       Me.contatore += 1     
   Select Case Me.contatore   
     Case Is = 1

 ‘carica l’immagine che è stata memorizzata nelle risorse:’

        Me.PictureBox1.Image = My.Resources.castel_dellovo_napoli       
 Case Is = 2     
            Me.PictureBox1.Image = My.Resources.napoli_b100824b_big         
    Case Is = 3        
         Me.PictureBox1.Image = My.Resources.Napoli_maschio_angioino        
     Case Is = 4             
    Me.PictureBox1.Image = My.Resources.napoli2

 ‘ per far ricominciare lo scorrimento delle immagini si impone il contatore uguale a zero:’

                Me.contatore = 0  
        End Select    
  End Sub    
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)      
    End Sub    
  Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
     End Sub     
Private Sub PictureBox1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs).Handles PictureBox1.Click  
    End Sub End Class    

Download Applicazione:

http://www.megaupload.com/?d=T7DH6HKN

Applicazione del 6-10-2011

1) Lanciare un Form da un altro Form

  • Creazione del Form2

Public Class Calendario

     Private Sub MonthCalendar1_DateChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged
     End Sub
End Class
 

E’ stato creato un form nel quale è stato inserito un calendario

  •  Chiamare il Form2 a partire dal Form1

Public Class Form1
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Cal As New Calendario
        Cal.Show()
        Cal.Text = “Calendario”
    End Sub
End Class
  
 

Download Applicazione:

http://www.megaupload.com/?d=6A6G55QM

2)Costruzione di una classe

Public Class Studente

    Public NOME As String
    Public ETA As Integer
    Public E_MASCHIO As Boolean
    Public VOTO_MEDIO As Double
End Class
  
  •   Dichiarazione delle classi

  

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim student As New Studente
        student.NOME = “valentina”
        student.ETA = 23
        student.E_MASCHIO = False
    End Sub
End Class
 
 

 Download Applicazione :

http://www.megaupload.com/?d=5KJGWN0Q

Navigazione articolo