lez. 11 (11/12) - pbelementi di programmazione1 lezione 11 esercizi

24
Lez. 11 (11/12) - PB Elementi di Programmazione 1 Lezione 11 Esercizi

Upload: michelangelo-serra

Post on 01-May-2015

215 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 1

Lezione 11

Esercizi

Page 2: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 2

Domanda 1Option ExplicitOption Base 1

Function prova(ByVal a As Integer, ByRef b As Integer) As Integer

Dim c As Integer c = a + b b = a Mod b prova = b + 1End Function Sub ex() Dim x As Integer, y As Integer, z As Double y = 10 x = 5 z = prova(y, x) y = prova(8, y) z = x / yEnd Sub

Mostrare la valorizzazione delle variabili durante l’esecuzione del presente programma

Page 3: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 3

Domanda 1Option ExplicitOption Base 1Function prova(ByVal a As Integer, ByRef b As

Integer) As Integer Dim c As Integer c = a + b b = a Mod b prova = b + 1End Function Sub ex() Dim x As Integer, y As Integer, z As Double y = 10 x = 5 z = prova(y, x) y = prova(8, y) z = x / yEnd Sub

x y z 5 10 0 a b c prova 5 10 0 10 ^x 0 0 5 10 0 10 ^x 15 0 0 10 0 10 ^x 15 0 0 10 0 10 ^x 15 1 0 10 1 1<- 0 10 1 8 ^y 0 0 0 10 1 8 ^y 18 0 0 8 1 8 ^y 18 0 0 8 1 8 ^y 18 9 0 9 1 0 9 0

NB: 8 : 10 = 0 0 8

Page 4: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 4

Domanda 2Trasformare usando l’istruzione

do While ... Loop

Do A = A + 3 If A > 5 Then Do B = B -1 C = C + 1 Loop While (C>0) End If C = 2Loop While (A < B)

Page 5: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 5

Domanda 2Trasformare usando l’istruzione

do While ... Loop

Do A = A + 3 If A > 5 Then Do B = B -1 C = C + 1 Loop While (C>0) End If C = 2Loop While (A < B)

A = A + 3If A > 5 Then B = B -1 C = C + 1 Do While (C>0) B = B -1 C = C + 1 Loop End IfC = 2

Do While (A < B) A = A + 3 If A > 5 Then B = B -1 C = C + 1 Do While (C>0) B = B -1 C = C + 1 Loop End If C = 2Loop

Page 6: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 6

Domanda 2

Do x=x+1Loop While x >0

x=x+1Do While x>0 x=x+1Loop

APPLICAZIONE REGOLA GENERALE

Page 7: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 7

Domanda 2

Do x=x+1 Do y = y +1 Loop While y<0Loop x >0

x=x+1 Do y = y +1 Loop While y<0Do While x>0 x=x+1 Do y = y +1 Loop While y<0Loop

Partenza

Passo 1:E’ indifferente partire

Dal ciclo interno o esterno

Page 8: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 8

Domanda 2

x=x+1 Do y = y +1 Loop While y<0Do While x>0 x=x+1 Do y = y +1 Loop While y<0Loop

x=x+1y = y +1Do While y<0 y = y +1LoopDo While x>0 x=x+1 y = y + 1 Do While y<0 y = y +1 Loop Loop

Passo 1 Passo 2

Page 9: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 9

Domanda 2Do x = x +1Loop While x < 0X56

x=x+1Do while x <0 x= x + 1LoopX56

Do while x <0 x= x + 1Loop X 5

Vera equivalenza

Equivalenza errata

Page 10: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 10

Domanda 3

Date le seguenti dichiarazioni:

Dim a As Boolean, b As BooleanDim c As Double, d As Integered i seguenti valori iniziali:

a = False b = True c = 2.5 d = 4Indicare il valore delle espressioni:

d = d / 3 + ca = b OR (c > d - c)c = d / 3 + 7

Page 11: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 11

Domanda 3Date le seguenti dichiarazioni:

Dim a As Boolean, b As BooleanDim c As Double, d As Integered i seguenti valori iniziali:

a = False b = True c = 2.5 d = 4Indicare il valore delle espressioni:

d = d / 3 + ca = b OR (c > d - c)c = d / 3 + 7

• d = d / 3 + cd= 1.333 + 2.5d= 4 ‘arrotonda!!!

• a = b OR _ (c > d - c) True OR True Truec = d / 3 + 7

C=8.333

Page 12: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 12

Domanda 4

• Il codice che segue genera un errore di esecuzione; indicare quale errore e quale istruzione lo provoca:

Option ExplicitOption Base 1

Sub ex() Dim vet(3 To 8) vet(7) = 6 vet(8) = 1 vet(1) = 3End Sub

Page 13: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 13

Domanda 4• Il codice che segue genera un errore

di esecuzione; indicare quale e quale istruzione lo provoca:

Option ExplicitOption Base 1Sub ex() Dim vet(3 To 8) vet(7) = 6 vet(8) = 1 vet(1) = 3End Sub

• Vet(1) non esiste

Page 14: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 14

Domanda 5• Mostrare il contenuto della cella A2 dopo

l’esecuzione del seguente codice:Option ExplicitSub ex() Dim S As String S = "prova a provare" S = Replace(S, "va", "XX") Range("A1").Value = S Range("A2").Value=_

Left(S, 4) Range("A3").Value=_

right(S, 4)End Sub

Page 15: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 15

Domanda 5• Mostrare il contenuto della cella A2

dopo l’esecuzione del seguente codice:

Option ExplicitSub ex() Dim S As String S = "prova a provare" S = Replace(S, "va", "XX") Range("A1").Value = S Range("A2").Value=_

Left(S, 4) Range("A3").Value=_

right(S, 4)End Sub

proXX a proXXreproXXXre

Page 16: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 16

Domanda 6

• Date le seguenti dichiarazioni:Dim a As Integer, d As DoubleDim c As Boolean, b As Boolean • ed i seguenti valori iniziali: a = 8 d = 2.5 c = True b = FalseIndicare il valore delle espressioni: d = d / 3 + ca = b AND (c > 0)c = d /3 + 7 ‘d valore iniziale

Page 17: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 17

Domanda 6• Date le seguenti dichiarazioni:

Dim a As Integer, d As DoubleDim c As Boolean, b As Boolean • ed i seguenti valori iniziali:

a = 8 d = 2.5 c = True b = FalseIndicare il valore delle espressioni: d = d / 3 + ca = b AND (c > 0)c = d /3 + 7 ‘d valore iniziale

d = d / 3 + cd = 0.833 + (-1)d = -0.17

a=b AND (c > 0)a= false AND falsea=False

c=true

Page 18: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 18

Domanda 7

• Scrivere l’intestazione della funzione ft() che ha tre parametri X, Y, Z; di questi il primo è di tipo Double gli altri due sono facoltativi di tipo Integer il primo per valore, il secondo per riferimento. La funzione restituisce un tipo Double.

Page 19: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 19

Domanda 7

• Scrivere l’intestazione della funzione – ft()

– che ha tre parametri X, Y, Z;

– di questi il primo è di tipo Double

– gli altri due sono facoltativi di tipo Integer • il primo per valore, • il secondo per riferimento.

– La funzione restituisce un tipo Double.

Page 20: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 20

Domanda 7

• Scrivere l’intestazione della funzione ft() che ha tre parametri X, Y, Z; di questi il primo è di tipo Double gli altri due sono facoltativi di tipo Integer il primo per valore, il secondo per riferimento. La funzione restituisce un tipo Double.

function ft( X as Double, _Optional ByVal _

Y As Integer,_ Optional Z As Integer ) As Double

Page 21: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 21

Domanda 8• Indicare il contenuto delle celle B1 ed B2 dopo l’esecuzione del

seguente codice VBA: 

Option ExplicitSub ex() Dim x As Double, y As Double x = 4 y = 8 y = y ^ 2 + x / 3 x = y + 10 Range("B1").Value = Application.WorksheetFunction.Floor(x, 1) Range("B2").Value = yEnd Sub

Page 22: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 22

Domanda 8• Indicare il contenuto delle celle B1 ed B2

dopo l’esecuzione del seguente codice VBA: 

Option ExplicitSub ex() Dim x As Double, y As Double x = 4 y = 8 y = y ^ 2 + x / 3 x = y + 10 Range("B1").Value = _ Application.WorksheetFunction.Floor(x, 1) Range("B2").Value = yEnd Sub

x y 4 8 4 65.333 75.3333 65.333

B1 = 75B2 = 65.333

Page 23: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 23

Esercizio 1Scrivere una procedura in VBA che: - legge attraverso una InputBox un valore e lo inserisce in una variabile di nome K, verificando che sia negativo intero ed eventualmente continuando a richiederlo nuovamente se ciò non fosse - trasforma K nel suo valore assoluto - legge una alla volta tutte le celle della colonna "A" del foglio che sono valorizzate con un numero intero fino a quando non incontra un valore

minore o uguale a zero - per ogni valore V letto nella cella della colonna "A" scrive nel file "risultati.txt“ una riga riportandovi il valore dato dalla somma dei seguenti due termini: 1) V ^ K (cioè V elevato K) 2) V - (K!) - alla fine del file riporta in un'ulteriore riga

il valore dato dalla somma di tutti i valori V letti

Page 24: Lez. 11 (11/12) - PBElementi di Programmazione1 Lezione 11 Esercizi

Lez. 11 (11/12) - PB Elementi di Programmazione 24

Esercizio 2Sia dato il file di testo di nome dati.txt contenente per ogni riga un numero

intero.a) scrivere una funzione in VBA di nome "multipli" che riceve due parametri

interi N e M e che calcola tutti i multipli di N da (N*1) ad (N*M) e li restituisce come array di numeri interi

b) scrivere una procedura in VBA di nome Esercizio2(), che richiede all'utente di fornire un numero intero positivo minore di 20 (richiedendolo nuovamente se non è stato fornito correttamente), legge dal file "dati.txt" un valore per riga alla volta e riporta sul foglio di calcolo, riga per riga, nella colonne A il valore letto del file e nelle colonne successive tutti i valori restituiti dalla funzione "multipli" sopra definita applicata con N pari al numero letto dal file ed M pari a quello fornito dall'utente