Anteprima
Vedrai una selezione di 11 pagine su 46
Appunti VBA - Gestione Informazione aziendale  Pag. 1 Appunti VBA - Gestione Informazione aziendale  Pag. 2
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 6
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 11
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 16
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 21
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 26
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 31
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 36
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 41
Anteprima di 11 pagg. su 46.
Scarica il documento per vederlo tutto.
Appunti VBA - Gestione Informazione aziendale  Pag. 46
1 su 46
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Loop WHILE/UNTIL Condizione_DI_Uscita

Questa tipologia potrebbe essere eseguita all'infinito quindi è necessario sincerarsi che si verifichi almeno una volta la condizione di uscita, che permette l'arresto dell'esecuzione.

Esempio: una subroutine che utilizza il ciclo Do Loop

Public Sub DL()
    Dim i As Integer
    i = 1
    Debug.Print("Primo esempio i = " & i) 'mostro primo valore del contatore
    'ciclo while classico
    Do While i<10 'fai il ciclo fino a quando il contatore è minore di dieci
        i = i + 2 'incremento di due il contatore, come esempio
        Debug.Print(i)
    Loop
    'ciclo while - secondo esempio
    Debug.Print("Secondo esempio i = " & i)
    Do While i<9 'in questo caso non parte perché prima ho portato i a 10
        Loop
    'ciclo while - terzo esempio
    sempre basato su While ma almeno una volta viene eseguito
    Do
        i = i + 2
        Debug.Print(i)
    Loop While i<9
    'ciclo while - quarto

esempioesempio: vediamo come convertire un numero in base 10 a base 2.

Per convertire un numero a base 2 da base 10 si avanza per iterazioni sino a quando il quoziente del divisore risulta uguale a zero.

Con il ciclo while la procedura sarà quella di andare a leggere il resto della divisione sino a quando non si verificherà una condizione.

Public Function Binario(Dec As Integer) As Long
    Dim R As Integer, Q As Integer
    Dim S_Bin As String
    Do 
        Q = Dec \ 2
        R = Dec - Q*2
        'Il numero che ora devo andare a dividere deve essere scambiato: a ogni iterazione devo andare a dividere il risultato della divisione intera precedentemente svolta.
        Dec = Q
        S_Bin = CStr(R) & S_Bin 'incollo ogni volta il valore del risultato
    Loop Until Q = 0
    'Rimane ora da scrivere la funzione di uscita: riconverto stringa in long
    Binario = CLng(S_Bin)
End Function

Le variabili Para-standard

Approfondiremo queste tre tipologie di variabili para-standard: Enum, Type, Vettori a Matrice.

Ogni volta che creo una

nuova variabile di tipo personalizzata è opportuno andare a farlo in un nuovo modulo, destinato esclusivamente per la personalizzazione e la configurazione delle variabili. Il nome che segue Enum è il nome del tipo, non il nome della variabile!

Enum OperazioniEnum è un tipo di insieme che può assumere solo un determinato numero di elementi che vado ad inserire in elenco

Somma = 1 stiamo creando etichette che saranno richiamate

Differenza = 2

Moltiplicazione = 3

Divisione = 4

End Enum

esempio: operazioni matematiche dopo aver definito una variabile di tipo enum

[le funzioni vengono scritte in un modulo a parte - non dove sono personalizzate le variabili]

Public Function Operations(A As Integer, B As Integer, Op As Operazioni) As Integer

If Op = "1" Then Operations = A + B

If Op = "2" Then Operations = A - B

If Op = "3" Then Operations = A * B

If Op = "2" Then Operations = A / B

End Function

Per rendere ancora più chiaro il

funzionamento del codice andiamo ad utilizzare il Select Case il quale permette di selezionare una procedura a seconda dell'input che viene fornito dall'utente: completando ora l'esempio di prima:

Public Function Operations(A As Integer, B As Integer, Op As Operazioni) As Integer
    Select Case Op
        Case 1: Operations = A + B
        Case 2: Operations = A - B
        Case 3: Operations = A * B
        Case 4: Operations = A / B
        Case Else: condizione di uscita o allert in questo caso inutile
    End Select
End Function

La funzione Para-Standard Record (o detta anche Type) ha una struttura tabellare, simile a quella di un DataBase. È una tipologia di variabile simile a quella delle enumerato vista ora però, più precisamente, Type è una sorta di scatola personalizzata con le dimensioni che vengono stabilite dal programmatore al cui interno vado a porre delle ulteriori scatole più piccole. Ogni piccola scatola è una caratteristica della variabile, in questo esempio che siillustrare il nome, cognome, matricola, data di nascita e età di uno studente utilizzando tag html.

<p>Type Student</p>
<p>Name As String</p>
<p>Cognome As String</p>
<p>Matricola As String</p>
<p>DoB As Date</p>
<p>Age As Integer</p>
<p>End Type</p>

<p>Definire una variabile studente pertanto significherà settare in modo prestabilito il contenuto che questa</p>
<p>variabile deve avere. Per attribuire i valori alla variabile Student nelle "scatole" corrette allora devo</p>
<p>specificare:</p>

<p>Dim St As Student</p>
<p>St.Name = Mario</p>
<p>St.Age = 10</p>

<p>Lezione 5 - 01/10</p>

<p>Riprendiamo l'argomento della scorsa lezione, vale a dire il record o type.</p>
<p>Type Student</p>
<p>Name As String</p>
<p>Surname As String</p>
<p>DoB As Date</p>
<p>St_Id As String</p>
<p>Age As Integer</p>
<p>End Type</p>

<p>A questo punto, nel modulo per le funzioni e procedure, creiamo una semplice sub che restituisce un</p>
<p>studente: si noti che questa può essere utilizzata sia come funzione di input sia come funzione di output.</p>
<p>Uno dei modi per "stampare" un tipo di dato personalizzato è</p>

```html

quello di usare una struttura ricorsiva. La funzione riceverà un nome e un cognome, opzionalmente una data, e crea uno studente: solo a questo punto verrà creata in automatico una matricola e un'età calcolata in funzione della data di nascita e la data corrente.

Public Function Make_St(Nm As String, Sm As String, _Optional D As Date = #01/01/1900#) As Student

'a questo punto devo creare lo studente in funzione del Type personalizzato

per assegnare si usa la dicitura Make

Make_St.Name = Nm

Make_St.Surname = Sm

//il metodo più pratico è quello di usare la funzione DateSerial

If D = #01/01/1900# Then

Make.St.DoB = DateSerial(1990 +Int(Rnd()*20),1+Int(Rnd()*12),1)

Else Make.St.DoB = D

End If

Make_St.St_Id = CStr(Int(Rnd()*10000)) & UCase(Left(Nm,1)) & UCase(Left(Sm,1))

'età deve essere in funzione della data attuale quindi nella sua assegnazione andiamo a scrivere una apposita funzione che qui richiamiamo

Make_St.Age = Age(Make_St.DoB)

```

<html>
<head>
<title>Function</title>
</head>
<body>
<p>Creiamo la funzione che trasforma una data di nascita in una età in funzione della data attuale: usiamo una predefinita DateDiff che chiede un intervallo temporale, ossia la data di nascita e la data attuale. Per mettere la data attuale posso usare la funzione Date oppure la funzione Now che fornisce anche l'ora.</p>
<p>Public Function Age(DoB As Date) As Integer<br>Dim Today As Date<br>Today = Date<br>Age = DateDiff("yyyy",D,Date)<br>If Mounth(DoB) > Mounth(Today) _Or (Month(DoB) = Month(Today) And Day(DoB) > Day(Today)) _Then Age = Age -1<br>End Function</p>
<p>Per testare:</p>
<p>Public Sub Prova_St(name As String, surname As String)<br>Dim S1 As Student<br>S1 = Make_St(name,surname)<br>debug.print(S1.surname)<br>debug.print(S1.St_Id)<br>debug.print(S1.Age)<br>End Sub</p>
<p>Prima di passare alla stesura dell'esercizio completo vediamo prima alcune definizioni particolari riguardo ai vettori: di seguito analizziamo come dimensionare un vettore e come creare una matrice utilizzando vettori riga e vettori colonna.</p>
</body>
</html>

Public Sub V_M() Dim Arr(1 To 5) As Integer Dim Idx As Integer Dim Mx(1 To 2, 1 To 2) As Integer 'indicizzo la matrice con le sue dimensioni 2X2 'definisco una array, un vettore che conterrà interi. Ne indicizzo 5. 'per sapere indicizzazione in VbA si usano Lbound(vettore) o Ubound(vettore) rispettivamente indice di partenza di arrivo del vettore. Arr(1) = 1 Arr(2) = 2 For Idx = Lbound(Arr) To Ubound(Arr) Arr2(Idx) = Arr(Idx) Next Idx End Sub Creiamo una matrice identità 2X2. Mx(1,1) = 1 Mx(2,2) = 1 Altrimenti For r = 1 To 2 For c = 1 To 2 if r = c Then Mx(r,c) = 1 Next c Next r S_M = Mx(1,1) & " " & Mx(1,2) & vbNewLine S_M = S_M & Mx (2,1) & " " & Mx(2,2) ESERCIZIO: simulazione delgioco della roulette Come prima cosa dobbiamo creare una variabile personalizzata per creare una struttura dati che rappresenti la tabella con tutte le giocate effettuate. Per farlo, andiamo a tipizzare una variabile Type in un apposito modulo contenente queste informazioni. ```html Type GumblingBet (1 To 100) As Double quanto scommetto Win (1 To 100) As Double quanto vinco N_Bet (1 To 100) As Int numero sul quale puntato N_Win (1 To 100) As Int numero vincente End Type ``` In un modulo a parte vado ora a simulare il comportamento di 100 giocate. ```html Public Function Sim_Gumbling_(mx As Integer) As Gumbling 'simulo le cento giocate Dim G As Gumbling 'creo tabella Dim I As Integer For i = 1 To 100 G.Bet(i) = Rnd()*mx + 1 'quanto scommetto alla giocata i-esima 'serve una funzione che restituisca un numero tra 1 e 36 G.N_Bet = Rnd_Btw(1,36) 'numero su cui scommetto alla giocata i-esima G.N_Win = Rnd_Btw(0,36) 'numero vincente alla giocata i-esima 'scrivo una funzione esterna per la ```verifica della vincita

G.N_Win = Win(G.Bet(i),G.N_Bet(i), G.N_Win(i))
i
Function

Function Rnd_Btw(lw As Integer, Hg As Integer)
    Rnd_Btw = lw + Rnd()*(Hg-lw+1)
Function>

Function Win(Bet As Double, N_g As Integer, N_w As integer)
    If N_g = N_w Then Win = 36*Bet
    Else Win = -Bet
    End If
Function>

Dobbiamo ora creare una struttura di dati che contenga i numeri giocati e i numeri vincenti per ogni estrazione.
La tabella sarà di 4 colonne: la puntata (valore), profitto o perdita, numero giocato e numero vincente.
Ogni riga della tabella (Record) rappresenta una singola giocata. Per realizzare dal punto di vista informatico
abbiamo infatti creato una variabile Type "Gumbling" con 4 attributi ognuno dei quali può ospitare un valore:
sono in altre parole i vettori colonna di dimensione 100 che contengono ciascuno l'informazione che dobbiamo
acquisire e

gestire a seconda delle condizioni che si verificano.

Ora, dobbiamo creare questa funzione che possa creare l'intera tabella con una sorta di ciclo: per ogni esecuzione dovrà generare in maniera random la puntata, il numero scelto e il numero vincente. Qualora il numero vincente e quello giocato fossero coincidenti la puntata sarà vincente e opportunamente moltiplicata per il valore del banco.

Genero le 100 giocate in modo casuale.

Dettagli
Publisher
A.A. 2022-2023
46 pagine
4 download
SSD Scienze economiche e statistiche SECS-P/08 Economia e gestione delle imprese

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher mat99p di informazioni apprese con la frequenza delle lezioni di Gestione dell'informazione aziendale e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Parma o del prof Zammori Francesco.