EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di...

35
EP 12/13 - PB Lezione 3 1 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo del flusso

Transcript of EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di...

Page 1: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 1

Elementi di ProgrammazioneVariabili, Espressioni, Operatori

Tavole di verità

Tipi di Dati e Conversioni

Istruzioni di controllo del flusso

Page 2: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 2

Variabili (1)

• Una variabile è una zona di memoria atta a contenere dei valori

• Ad ogni variabile è associato un Tipo (se non dichiarato è Variant)

• Le variabili si dichiarano in questo modo:Dim nomeVariabile As TipoDiDato– le variabili possono non essere dichiarate

prima di essere usate

Page 3: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 3

Variabili (2)

– Inserendo l’opzione Option Explicit all’inizio del modulo al di fuori di tutte le routine si obbliga il programmatore a dichiarare tutte le variabili

• Nel seguito dichiareremo esplicitamente tutte le variabili:

– Dopo ogni nome di variabile va indicato il tipo (se manca è assunto il tipo Variant), una dichiarazione simile:

Dim v1, v2 As Integer• Viene interpretata da VB come

– v1 di tipo Variant (si è omesso il tipo)– v2 di tipo Integer

Lezione 3

Page 4: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 4

Costanti

• Sono variabili cui viene assegnato un valore che non può essere modificato

• Le costanti si dichiarano in questo modo:Const nomeVariabile As TipoDiDato = Valore

• In VBA esistono anche delle costanti predefinite

Lezione 3

Page 5: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 5

Espressione

• L’espressione è un insieme ordinato di variabili ed

operatori

• Ogni espressione ha

– Un valore dato dal risultato della valutazione dell’espressione

– Un tipo determinato dal tipo delle variabili e dagli operatori

• La forma generale è:

Risultato = Operando1 Operatore Operando2

– L’operando (o termine) può essere a sua volta una espressione

Lezione 3

Page 6: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 6

Differenza tra ASSEGNAZIONE

eCONFRONTO

• A = B

• If ( A = B ) then

Lezione 3

Page 7: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 7

Operatori

• Gli operatori sono dei simboli che rappresentano una operazione

• Ogni tipo di dato possiede un insieme di operatori che si possono applicare su di esso

• Gli operatori possono essere– Unari: si applicano solo ad un termine (-5)– Binari: si applicano su due termini (a + 6)– Ternari: si applicano su tre termini

Lezione 3

Page 8: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 8

Operatori (in ordine precedenza)

^ elevamento a potenza- negazione (operatore ad 1 operando)* / prodotto e divisione decimale\ divisione intera (operandi decimali arrotondati)Mod resto divisione (operandi decimali arrotondati)+ - addizione e sottrazione& concatenazione di stringhe= <> > >= < <= Like Is IsNot TypeOf operatori confrontoNot negazione logica e bit a bitAnd and logico e bit a bitOr XOr or logico e bit a bit, Xor logico e bit a bitImp implicaA parità di precedenza: valutazione da sinistra a destra

OperatoriBooleani

Lezione 3

Page 9: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 9

Operatori: note

• Esistono anche altri operatori che non sono stati indicati

• Gli operatori booleani – su espressioni di tipo booleano si comportano

come operatori logici (vedi tavole verità)– se hanno come argomento espressioni

numeriche eseguono l’operazioni sui singoli bit che rappresentano il numero

Lezione 3

Page 10: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 10

Tavole verità

X Y NOT X X AND Y X OR Y X XOR Y X Imp Y

T T F T T F T

T F F F T T F

F T T F T T T

F F T F F F T

=>

T: True (Vero, valore numerico -1)

F: False (Falso, valore numerico 0)

X Imp Y = NOT X OR Y

X XOR Y = (NOT X AND Y) OR (X AND NOT Y)

Lezione 3

Page 11: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 11

Operatori booleani Bit a Bit• Nell’uso come operatori bit a bit il valore binario degli operandi viene

confrontato bit a bit per produrre un nuovo valore in base all’operatore applicato (0 è F , -1 è T):

A = 5 00000101B = 16 00010000A And B 00000000 0A OR B 00010101 21A Xor B 00010101 21A Imp B 11111010 -6• Si ricorda che i numeri interi sono rappresentati in complemento a 2,

nel caso in esame supponendo A e B di tipo Byte, il complemento a due è a 8 bit

• In caso di una espressione che contenga un termine di tipo numerico ed uno di tipo booleano prevale il tipo numerico ed il valore booleano è 0 per F e -1 per T

Lezione 3

Page 12: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 12

Problemi con la lettura

• La lettura dei dati dal foglio elettronico impone il tipo della cella

• La lettura dei dati da InputBox restituisce un tipo String

• Esistono delle funzioni specifiche per convertire un’espressione in uno dei tipi di VB– In caso di impossibilità è generato un errore

Lezione 3

Page 13: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB 13

Funzioni di conversione

CBool(espr) converte in BooleanCByte(espr) converte in ByteCDate(espr) converte in DateCDbl(espr)converte in DoubleCInt(espr)converte in IntCLong(espr) converte in LongCSing(espr) converte in SingleCStr(espr)converte in StringCVar(espr)converte in Variant

Lezione 3

Page 14: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 14

Problemi con i tipi di dati

Proviamo a leggere da inputBox un numero

• Creiamo un bottone

• Nel codice di gestione del click creiamo una inputBox e leggiamo un dato

• Il dato lo convertiamo in una variabile “numero” di tipo integer

• Scriviamo numero in una casella

Page 15: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 15

Problemi con i tipi di dati (sol)

Private Sub CommandButton1_Click() Dim numero As Integer Dim str_in As String str_in = InputBox("Dato") numero = CInt(str_in) Range("E5") = numero End Sub

Page 16: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 16

Controllo delle conversioni di Tipo

• Alcune funzioni che permettono di evitare errori di conversioneIsNumeric(espr)

True se espr è compatibile con un numero (decimale o intero)

IsDate(espr)True se espr è compatibile con un formato data

Page 17: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 17

Istruzioni di controllo del flusso

Page 18: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 18

Istruzioni di controllo del flusso• Nei linguaggi di programmazione imperativi

(come VBA, C, Pascal) l’ordine di esecuzione è strettamente sequenziale.

• Molto spesso questo modo di eseguire i programmi non è sufficiente per gestire tutte le necessità.

• Esistono dei modi per variare questo ordine:– Istruzioni condizionali– Istruzioni cicliche– Richiamo di sottoprogrammi/funzioni– Esiste anche un quarto modo in disuso: istruzioni di

salto

Page 19: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 19

Istruzioni condizionali (1)• Ogni linguaggio di programmazione possiede

un’istruzione che permette di scegliere fra due strade in base ad una condizione

• L’istruzione VBA è:If condizione Then istruzioni quando condizione è veraElse istruzioni quando condizione è falsaEnd If

Page 20: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 20

Istruzioni condizionali (2)• La seconda parte (ramo Else) è facoltativa, non

è facoltativa l’istruzione End If.• Supponiamo di voler verificare se il valore della

cella D3 è positivo scrivendo un opportuno messaggio nella cella F3:

Private Sub CommandButton1_Click() If Range("D3") > 0 Then Range("F3") = "positivo" Else Range("F3") = "NON positivo" End IfEnd Sub

Page 21: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 21

Istruzioni condizionali (3)

Nella forma più generale l’istruzione è:If condizione Then istruzioniElseIf condizione Then istruzioniElse istruzioniEnd If

Page 22: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 22

Istruzioni condizionali (4)

• I rami ElseIf ed Else sono facoltativi.• Ci possono essere più rami ElseIf ma

un sol ramo Else– Ciascun ramo può valutare una condizione

diversa– Per evitare l’uso di molti rami ElseIf in ceri

casi è preferibile usare l’istruzione Select Case

• Le istruzioni If possono essere nidificate

Page 23: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 23

Istruzioni condizionali (5)• Il codice che segue viene mandato in

esecuzione per stabilire il contenuto della cella D3:

Private Sub commento() If Range("D3") > 0 Then Range("F3").Value = "POSITIVO" Else If Range("D3") < 0 Then Range("F3") = "NEGATIVO" Else Range("F3") = "Nullo" End If End IfEnd Sub

Page 24: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 24

Istruzioni condizionali (6)

Esempio complesso:

determiniamo di che tipo sono le soluzioni (radici) di un’equazione di secondo grado

a*(X^2) + b*X + c = 0

Page 25: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 25

Istruzioni condizionali (7)

• Il codice che segue presume che nelle celle A5, B5 e C5 ci siano i coefficienti di una equazione di secondo grado. Nella cella D5, in base al valore di delta, scrive il numero di radici dell’equazione (si usa un bottone per attivare l’elaborazione)

Page 26: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 26

Istruzioni condizionali (8)

Private Sub Eq2Grado_Click() Delta = Range("B5") ^ 2 Delta = Delta - 4 * Range("A5") * Range("C5") If Delta > 0 Then Range("D5") = "2 radici reali" Else If Delta = 0 Then Range("D5") = "radici reali coincidenti" Else Range("D5") = "coniugate complesse" End If End IfEnd Sub

Page 27: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 27

Istruzioni condizionali CASE (1)

Select Case espressione

Case espressioneConfronto

Istruzioni

CaseElse

Istruzioni

End Select

Page 28: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 28

Istruzioni condizionali CASE (2)• Le parti Case e CaseElse sono facoltative• Ci possono essere più rami Case ma di Case Else ve

ne può essere uno solo• L’istruzione valuta una sola volta espressione e

quindi valuta questo risultato con ogni espressioneConfronto fino a trovare la prima per la quale è vera– Al primo caso in cui Case è vero termina l’istruzione

• Si comporta in modo differente dal C

– Il ramo Case Else si utilizza per dare un risultato quando nessuna delle condizioni si è verificata

– Può sostituire solo parzialmente If in quanto espressione è valutata solo una volta

Page 29: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 29

Istruzioni condizionali CASE (3)

– espressioneConfronto può essere• Un solo valore• Più valori separati da virgola• Un intervallo di valori (inizio To fine)• Operatori di confronto:

– IS operatoreConfronto valore» Operatori confronto: >, <, >=, <=, =, <>

Page 30: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 30

Istruzioni condizionali Equivalenza espressiva (1)

Select Case par Case Is < 0 usoSelect = "negativo" Case 0 usoSelect = "ZERO“ Case 1, 2, 3, 4, 5, 6, 7, 8, 9 usoSelect = " una cifra" Case 10 To 99 usoSelect = "due cifre" Case Else usoSelect = "Più di due cifre"End Select

If Not IsNumeric(par) Then

Messaggi = "non è un numero"

ElseIf par < 0 Then

Messaggi = "Negativo"

ElseIf par <= 9 Then

Messaggi = "Una Cifra"

ElseIf par < 100 Then

Messaggi = "Due cifre"

Else

Messaggi = "piu' di 2 cifre"

End If

Page 31: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 31

Istruzioni condizionali Equivalenza espressiva (2)

• L’esempio con Select non rispecchia l’esempio analogo fatto con l’istruzione If

• Il primo ramo If If Not IsNumeric(par) Then Messaggi = "non è un numero“– Non può essere reso con Select Case

perché usa una espressione condizionale diversa da quella usata negli altri rami

• Occorre usare un If con un Select Case in un ramo

Page 32: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 32

Istruzioni condizionali Equivalenza espressiva (3)

If Not IsNumeric(par) Then usoSelectEqv = "non è un numero"Else Select Case par Case Is < 0 usoSelectEqv = "negativo" Case 0 usoSelectEqv = "ZERO" Case 1, 2, 3, 4, 5, 6, 7, 8, 9 usoSelectEqv = "cifra" Case 10 To 99 usoSelectEqv = "due cifre" Case Else usoSelectEqv = "Più di due cifre" End SelectEnd If

Page 33: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 33

Esempio

• Data una equazione di secondo grado stabile usando la regola dei segni di Cartesio il segno delle radici reali distinte– il cambiamento di segno fra due coefficienti

consecutivi produce una radice positiva, la permanenza una radice negativa

a*(X^2) + b*X + c = 0

Page 34: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 34

Esempio

• + + + 2 permanenze -> 2 negative

• - - - 2 permanenze -> 2 negative

• + - + 2 variazioni -> 2 positive

• - + - 2 variazioni -> 2 positive

• - + + 1 var, 1 perm -> 1 pos, 1 neg

• + + - 1 perm, 1 var -> 1 neg, 1 pos

Page 35: EP 12/13 - PBLezione 31 Elementi di Programmazione Variabili, Espressioni, Operatori Tavole di verità Tipi di Dati e Conversioni Istruzioni di controllo.

EP 12/13 - PB Lezione 3 35

Option Explicit

Private Sub Radici_Click() Dim a As Double, b As Double Dim c As Double, delta As Double Dim permanenza As Integer a = Range("A5") b = Range("B5") c = Range("C5") delta = b ^ 2 - 4 * a * c If delta < 0 Then Range("D5") = "coniugate complesse" ElseIf delta = 0 Then Range("D5") = "coincidenti" Else Range("D5") = "2 distinte" 'segno delle radici permanenza = 0 If a * b > 0 Then permanenza = permanenza + 1 End If If b * c > 0 Then permanenza = permanenza + 1 End If If permanenza = 2 Then Range("F5") = "2 radici negative" ElseIf permanenza = 0 Then Range("F5") = "2 radici positive" Else Range("F5") = "1 radice positiva ed 1 negativa" End If End IfEnd Sub