4N - Appunti di INFORMATICA
Transcript
4N - Appunti di INFORMATICA
lnx.brescianet.com Sito didattico - Prof. Sechi Marco FAQ Profilo Cerca Lista degli utenti Non ci sono nuovi messaggi Gruppi utenti Logout [ e01692 ] 4N - 3° Modulo Indice del forum -> Classe 4N - 3°Modulo Precedente :: Successivo Autore e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Messaggio Inviato: 21 Feb 2007 10:57 am Oggetto: 4N - 3° Modulo Appunti illustrati in laboratorio Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 21 Feb 2007 10:58 am Oggetto: 4N - 21/02/2007 Maschere -> Bottone Nuovo --> seleziona "Visualizzazione Struttura" --> Bottone "OK" Visualizzazione Struttura ==> per costruire la mia maschera (Modalità programmatore) Visualizzazione Maschera ==> per utilizzare la mia maschera (modalità utente) me.btnCliccaqui.Caption ==> indica la proprietà etichetta del bottone BtnCliccaQui sulla maschera contenitore (me) me.btnCliccaqui.Caption è equivalente a btnCliccaqui.Caption in js me era this Agli oggetti date un nome (proprieta name) le cui prime tre lettere identificano il tipo frm ==> maschere Txt ==> caselle di testo lbl ==> etichetta btn ==> bottore lst ==> elenco a discesa -----------------Private Sub btnCliccaqui_Click() MsgBox "ciao" End Sub Private Sub btnCliccaqui_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.btnCliccaqui.Caption = "[" & X & "," & Y & "]" End Sub --------------------Cliccando sulla maschera (parte in grigio scuro) richiamo l'evento Timer Inserisco questo codice: Private Sub Form_Timer() Me.lblOrario.Caption = Format(Now, "hh.mm.ss") End Sub Imposto la proprieta "Intervallo timer" (in VBA TimerInterval) a 500 (mezzo secondo) Private Sub Form_Timer() Me.lblOrario.Caption = Format(Now, "hh.mm.ss") End Sub Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 24 Feb 2007 10:01 am Oggetto: 4N - 24/02/2007 Me.lblCoordinate.Visible = Not Me.lblCoordinate.Visible Me.lblCoordinate.BackColor = vbYellow Me.lblCoordinate.ForeColor = vbBlue Me.Corpo.BackColor = vbRed una variabile è una zona di memoria dove posso parcheggiare dei dati frutto di input o di calcolo. Option Explicit ==> obbliga a dichiarare tutte le variabili utilizzate ******************** Dim x As Integer Dim varGen As Integer Public Sub Prova() Dim VarLoc As Integer Dim x As Integer ' questa dichiarazione copre la dichiarazione ' della variabile esterna VarGen=1 VarLoc=1 x=1 End Sub sub btnClicca_click() x=10 VarGen=10 Prova() msgbox x msgbox VarGen end sub ********** 1) quando passo alla modalità di esecuzione e carico il form ACCESS crea lo spazio per le 2 variabili dichiarate esternamente 2) al click sul bottone "BtnClicca" verrà assegnato 10 a x e Vargen 3) La chiamata alla funzione prova determina l'allocazione (creazione) delle variabili locali x e VarLoc. La x locale ombreggia (shadowing) quella globale e pertanto l'istruzione x=1 in prova in realtà modifica solo la x locale e non quella esterna. Il discorso non vale per VarGen che risulta dicharata solo esternamente e pertanto prova() modificherà proprio quella con l'istruzione VarGen=1 4) finita l'esecuzione della sub "Prova()" tutta la memoria viene deallocata (liberata) e il contenuto delle variabili locali viene perso 5) verrà visualizzato per x il valore 10 mentre VarGen varrà 1 ********** Le variabili dichiarate fuori da qualsiasi sub sono visibili in tutto il modulo (script associato al nostro form) le variabili dichiarate all'interno di una sub sono visibili all'interno di quella sub ************************** DEBUG ==> operazione di test del codice scritto 1) definizione del breakpoint --> clicco in parte all'istruzione che deve essere sospesa (appare un pallino in parte) 2) Passo alla modalita di esecuzione del form e faccio in modo di attivare quel codice 3) Il prg si ferma e a video vedo le mie istruzioni. L'istruzione attiva è indicata con una freccia e evidenziata in giallo 4) con F8 eseguo passo passo le singole istruzioni - utilizzando la finestra immediata posso valutare il valore delle singole variabili: ad esempio print i ==> visualizzerà il valore di i attuale --- arrivati alle routine Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 02 Mar 2007 07:21 am Oggetto: 4N - 28/02/2007 y=f(x) ' questa è una variabile globale Dim x sub btnbottone_click() x=3 Quadrato Quadrato_2versione(3) Quadrato_2versione(6) Somma(4,8) Somma(63,12) y=Somma_2versione(63,12) end sub sub Quadrato() y=x^2 debug.print y end sub sub Quadrato_2versione(z as long) y=z^2 debug.print y end sub sub Somma(a as double, b as double) Dim s as double s=a+b debug.print s end sub Function Somma_2Versione(a as double, b as double) as double Dim s as double s=a+b Somma_2Versione= s end Function Struttura funzioni ******************* function NomeFunzione(parametri) as tipo restituito Variabili locali ... Istruzioni VBA NomeFunzione=<valore da restituire> end Function leggivoti ' fase di input m=calcolamedia(voti) ' algoritmo stampaesitoscrutinio(m) 'output Torna in cima e01692 Site Admin Inviato: 02 Mar 2007 09:46 am Oggetto: 4N - 03/02/2007 Registrato: 09/09/06 19:59 Messaggi: 277 Sub SoluzioneEsercizio1() Dim a As Long, b As Long, c As Long, d As Long, e As Long Dim minore, NrValoricorretti As Byte ' *********************************** ' input ' *********************************** NrValoricorretti = 0 If Not IsNull(Me.Txt_A) Then If IsNumeric(Me.Txt_A) Then a = Me.Txt_A NrValoricorretti = NrValoricorretti + 1 End If End If If Not IsNull(Me.Txt_B) Then If IsNumeric(Me.Txt_B) Then b = Me.Txt_B NrValoricorretti = NrValoricorretti + 1 End If End If If Not IsNull(Me.Txt_C) Then If IsNumeric(Me.Txt_C) Then c = Me.Txt_C NrValoricorretti = NrValoricorretti + 1 End If End If If Not IsNull(Me.Txt_D) Then If IsNumeric(Me.Txt_D) Then d = Me.Txt_D NrValoricorretti = NrValoricorretti + 1 End If End If If Not IsNull(Me.Txt_E) Then If IsNumeric(Me.Txt_E) Then e = Me.Txt_E NrValoricorretti = NrValoricorretti + 1 End If End If If NrValoricorretti < 5 Then MsgBox "Devi scrivere tutti numeri!!!", vbCritical, "Errore" Exit Sub End If ' *********************************** ' algoritmo ' *********************************** minore = a If minore > b Then minore = b End If If minore > c Then minore = c End If If minore > d Then minore = d End If If minore > e Then minore = e End If ' *********************************** ' output ' *********************************** Me.txt_output = "il minimo tra " & a & ", " & b & ", " & c & ", " & d & ", " & e & " è " & minore End Sub Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 13 Mar 2007 12:37 pm Oggetto: 4N - 13/03/2007 isnull(nomevariabile) ==> restituisce TRUE se non è mai stata valorizzata e nella dichiarazione non è specificato il tipo esempio 1) Dim x IsNull(x) ==> vero stringa vuota ==> "" ==> valore iniziale di variabili di tipo stringa esempio 2 ) Dim x as string x="" ==> vero valore iniziale di variabili di tipo numerico ==> 0 esempio 3) Dim x as long x=0 ==> vero IsNumeric(argomento) ==> testo se è un numero Call PulisciTabella(NomeTbl) equivale a scrivere la sub senza le () PulisciTabella NomeTbl cstr(#01/27/2004#) ==> “27/01/2004” x =inputbox("Frase","Titolo", "Valore predefinito") esplorare le funzioni elencate nel file di word spiegato combobox (escluso esempio del for) sintassi generica del for for i=<valore iniziale> to <valore finale> [step passo] ..... next -------------sequenza 1, 2, 3 ... s = "" For i = 1 To n s = s & i & ";" Next Me.cmbsequenza.RowSource = s sequenza 1, -2, 3, -4 ... s = "" segno = 1 For i = 1 To n s = s & (segno * i) & ";" segno = -segno Next Me.cmbsequenza.RowSource = s sequenza 100, -99, 98, -97 ... s = "" segno = 1 For i = 100 To 1 Step -1 s = s & (segno * i) & ";" segno = -segno Next Me.cmbsequenza.RowSource = s sequenza 1, 0, 1, 0 ... s = "" For i = 1 To n s = s & (i Mod 2) & ";" Next Me.cmbsequenza.RowSource = s sequenza primi n pari s = "" For i = 2 To n Step 2 s = s & i & ";" Next Me.cmbsequenza.RowSource = s crea la tavola pitagorica n = InputBox("Dammi N", "N", 10) Me.cmbsequenza.ColumnCount = n s = "" For i = 1 To n s = s & "0,7 cm;" Next Me.cmbsequenza.ColumnWidths = s s = "" For i = 1 To n For j = 1 To n s = s + CStr(i * j) & ";" Next Next Me.cmbsequenza.RowSource = s determinazione di un numero se è primo numeroprimo = True For i = 2 To n - 1 If n Mod i = 0 Then ' n non è primo numeroprimo = False End If Next If numeroprimo Then MsgBox n & " è primo" Else MsgBox n & " è non è primo" End If Me.cmbsequenza.RowSource = s ---DoCmd.Close ==> chiudo la maschera l'oggetto docmd è l'equivalente del menu di access ----Analisi esempi 01-02-03-04 Evento Exit ==> viene attivato quando esco dal controllo ==> usato per controllare la correttezza dei dati digitati stringa=stringa+"frase da accodare" ==> per aggiungere una stringa ad una variabile di tipo stringa Visibilita Variabili Le variabili definite dentro una sub/function sono "vive" solo durante l'esecuzione di quella sub/function. Le variabili locali ad una sub/function ombreggiano (shadowing) quelle globali esempio ************************ Dim Nominativo Sub Saluta Dim Nominativo ' verrà usata la variabile locale alla sub msgbox Nominativo end sub ************************* I moduli sono collezioni di istruzioni VB contenenti sub e function di uso comune (esempio la funzione che calcola la media di una sequenza di numeri) - La parola Public è messa davanti alle variabili o alle procedure che devono essere usate ovunque nel vostro programma esempio Public X as long Public function Somma(a as long, b as long) as long Somma=a+b end function La dichiarazione private X as long fa in modo che la variabile X sia visibile solo all'interno del modulo dove è dichiarata fatti esempi 01-02-03 Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 17 Mar 2007 09:57 am Oggetto: 4N - 17/03/2007 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ' elenco i controlli mediante un indice me.controls ==> insieme dei controlli sul form corrente For i = 0 To Me.Controls.Count - 1 msgbox Me.Controls(i).name next equivalente for each controllo in me.controls msgbox controllo.name next ' Blocco tutti i controlli di tipo textbox (non richiesto) for each controllo in me.controls if controllo.controltype=acTextbox then controllo.enabled=false end if next ' Elenco delle maschere Application è Access For Each Frm In Application.CurrentProject.AllForms msgbox Frm.Name Next currentdb ==> mdb che ho aperto ' Elenco delle tabelle (mediante insiemi) For Each Tbl In currentdb.tabledefs msgbox Tbl.Name Next ' Elenco delle tabelle (mediante indice) For i = 0 To CurrentDb.TableDefs.Count - 1 MsgBox CurrentDb.TableDefs(i).Name Next ' (Il -1 è dovuto alla numerazione che va da 0 a N-1) count ==> proprietà degli insiemi che indica il nr di elementi (-1) currentdb => il file mdb che state usando la proprietà currentdb.name ==> nome del file (percorso) il singolo elemento di un insieme può essere richiamato mediante un indice CurrentDb.TableDefs(i) [utile nei for] oppure con il nome dell'oggetto CurrentDb.TableDefs("Studenti") ' Scorrimento dei campi della tabella studenti (modo insiemistico) set Tbl=CurrentDb.TableDefs("Studenti") for each fld in tbl.fields msgbox fld.name Next ' Scorrimento dei campi della tabella studenti (modo con indice) set Tbl=CurrentDb.TableDefs("Studenti") For i = 0 To tbl.Fields.Count - 1 msgbox tbl.Fields(i).name Next -------------gestione dei files "Scrittura in un files 1) apro il file passato come argomento in scrittura (for output) e lo gestisco con #1 Open "C:\pippo.txt" For Output As #1 2) Scrivo nel file indicato con #1 Print #1, "ciao sono una riga scritta" 3) Ho finito - lo chiudo close #1 ****** "Lettura dei files 1) apertura in lettura del file pippo.txt e lo gestisco con #1 Open "C:\pippo.txt" For Input As #1 2) Leggo una linea nel file gestito da #1 e posiziono il puntatore di lettura in fondo Input #1, linea ' legge una frase fino al primo invio che incontra 3) Ho finito - lo chiudo close #1 La funzione EOF(Numero del file) restituisce vero se sono arrivato in fondo al file La funzione LOF(Numero del file) restituisce la dimensione in byte del file gestito da #<Numero del file> ' Ripeto Istruzione VBA finchè la condizione è vera while condizione istruzione VBA wend esempio sui files s="" While Not EOF(1) ' end of file Input #1, linea ' legge e passa sulla riga successiva s = s + linea + vbCrLf Wend msgbox s oppure (non richiesta) strTesto = Input(LOF(1),1) ' Restituisce tutti i byte del file #1 CurrentDb.Execute (Comando SQL) ==> esegue la qry passata come argomento (sono escluse le qry di selezione) Nominativo=me.txtNominativo Classe=me.txtClasse CmdSQL="INSERT INTO STUDENTI (Nominativo, Classe) Values('" CmdSQL=CmdSQL & Nominativo & "', '" & classe & "') currentdb.excecute(CmdSQL) Eliminazione studenti che contengono una certa lettera currentdb.execute("DELETE * FROM Studenti Where Nominativo like '*" & me.txtlettera & "*'") SCORRIMENTO tabella o qry OGGETTO RECORDSET ==> consente la gestione di un elenco generato da una Qry o una tabella metodi di spostamento per il recordset rs.movefirst rs.movenext rs.moveprevious rs.movelast proprietà relative alla posizione nel recordset rs.bof ==> vero se sono all'inizio rs.eof ==> vero se sonop in fondo rs.close ==> chiude la connessione con quel recordset un recordset privo di record ha la proprietà eof posta a TRUE subito openrecordset ==> metodo che consente di attaccare ad una variabile recordset (rs) una tabella o una Qry passata come argomento a questo metodo Scorrimento dal primo all'ultimo record ----------------------------------------Set rs = CurrentDb.OpenRecordset(ComandoSQL) If Not rs.EOF Then ' evito l'errore se non ci sono record quando eseguo il rs.movefirst rs.MoveFirst While Not rs.EOF MsgBox rs(NomeCampo da visualizzare) rs.MoveNext Wend Else MsgBox "Nessun record selzionato" End If rs.close Scorrimento dall'ultimo record al primo ----------------------------------------Set rs = CurrentDb.OpenRecordset(ComandoSQL) If Not rs.EOF Then rs.MoveLast While Not rs.BOF MsgBox rs(NomeCampo da visualizzare) rs.MovePrevious Wend Else MsgBox "Nessun record selzionato" End If rs.close esempio pratico (elenca gli studenti che nel nominativo presentano la lettera selezionata) ---------------Lettera = InputBox("Dammi la lettera che ricerchi nel nominativo studenti") Set rs = CurrentDb.OpenRecordset("SELECT * FROM Studenti where Nominativo Like '*" & Lettera & "*'") If Not rs.EOF Then rs.MoveFirst While Not rs.EOF MsgBox rs("Nominativo") rs.MoveNext Wend Else MsgBox "Nessun studente selezionato" End If rs.Close ---per martedi esercizi 1 e 2 del for Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Inviato: 20 Mar 2007 11:51 am me.txtOUT="" Oggetto: 4N - 20/3/2007 Messaggi: 277 for i=1 to n x=prompt("Dammi il valore") if ( ((x<=B) AND (x>=A)) OR ((x<=M*B) AND (x>=M*A)) ) me.txtOUT=me.txtOUT & x +vbcrlf end if NEXT per martedi 3/4/2007 verifica -------------------Sub IncrementaConByVal(ByVal Valore As Integer) Valore = Valore + 1 End Function Sub IncrementaConByRef(ByRef Valore As Integer) Valore = Valore + 1 End Function esempio y=1 x=1 call IncrementaConByVal(x) call IncrementaConByRef(y) msgbox x ==> stampa 1 msgbox y ==> stampa 2 Quando una funzione/sub deve modificare dei parametri devo sempre passarli come byref Un parametro dichiarato come byref non accetta valori costanti call IncrementaConByVal(7) call IncrementaConByRef(9) ==> darà errore poichè non può creare un link ad una variabile Le chiamate byref creano un link verso lo spazio di memoria dove il parametro è stato allocato. Le chiamate byval creano una variabile locale alla procedura che verrà deallocata al termine dell'esecuzione della procedura stessa. Optional => parametro opzionale Function Incrementa(byval x as integer, optional passo as integer=1) as integer Incrementa = x + passo End Function incrementa(7) ==> restituisce 8 incrementa(7,10) ==> restituisce 17 il comando QUIT ==> chiude access docmd.close ==> chiude la maschera no equ e imp 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 =>1 =>2 =>3 =>4 =>5 =>6 =>7 =>8 5 or 6 00000101 or 00000110 ----------00000111 4 or 2 00000010 or 00000100 ---------00000110 00000101 and 00000110 ----------00000100 1011101 1011011 PrimaPortaAperta=1000000 SecondaPortaAperta=0100000 ... StatoDellePorte=1011101 if (PrimaPortaAperta AND StatoDellePorte >0) THEN msgbox "La prima porta è aperta" end if PrimaPortaAperta AND StatoDellePorte 1000000 AND 1011101 ---------1000000 ==> > 0 SecondaPortaAperta AND StatoDellePorte 0100000 AND 1011101 ---------0000000 ==> =0 msgbox "ciao", vbquestion+vbyesno VbQuestion ==> 32 ==> 00100000 vbyesno ==> 4 ==> 00000100 riprendere l'or/and a bit Ultima modifica di e01692 il 23 Mar 2007 10:04 am, modificato 1 volta in totale Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 21 Mar 2007 11:01 am Oggetto: 4N - 21/03/2007 -------tipo variant dim x as variant equivale a dim x x=inputbox("dammi x") Utile quando non conosco il tipo di dato che sto per andare a leggere Se metto il tipo di dato il prg andrà in errore se inserisco un valore non numerico -----------------dim x as long x=inputbox("dammi x") if isnumeric(x) then y=clng(x) end if ---------------funzioni di conversione esempio cdate("01/01/2007") ==> #01/01/2007# clng("129") ==> 129 cdbl("1,29281") ==> 1.29281 ARRAY Elenco di valori accessibili mediante un unico nome + un indice scritto tra () esempio Classe(i)="Mario Rossi" Procedura con elenco in ordine inverso Public Sub VisualizzaNumeriInOrdineInverso() Dim X(1 To 10) As Long For i = 1 To 10 X(i) = InputBox("Dammi il " & i & "° numero", 0) Next For i = 10 To 1 Step -1 MsgBox X(i) Next End Sub Procedura di ricerca in un Array ================================= Public Sub RicercaInArray() Dim X(1 To 10) As Long ' richiede i valori For i = 1 To 10 X(i) = InputBox("Dammi il " & i & "° numero", 0) Next ValoreCercato=InputBox("Che numero cerchi ?", 0) For i = 1 To 10 if X(i)=ValoreCercato then msgbox "Il valore è presente in " & i & "° posizione" exit sub end if Next msgbox "Il valore non è presente nell'elenco" End Sub Questo esempio non è richiesto (Ricerca del nome dato un cognome) -----------------------------Dim rs As Recordset Dim X Set rs = CurrentDb.OpenRecordset("Studenti") X = rs.GetRows(5) Cognome = InputBox("Dammi il cognome", "") For i = 0 To 4 If Cognome = X(1, i) Then MsgBox Cognome & " si chiama " & X(2, i) Exit Sub End If Next MsgBox Cognome & " non trovato!!", vbExclamation ------------------------------ Qui invece va studiato Esempio creazione array bidimensionale contenente la tavola pitagorica Dim Tabella(1 To 10, 1 To 10) As Integer For i=1 to 10 For j=1 to 10 Tabella(i,j)=i*j Next Next ------------------------- RIPRENDERE DA QUI ' Lettura di un elenco con un numero di valori ' non conosciuto a priori e stampa in ordine inverso Dim Elenco(), X As Long, N As Long X = InputBox("Dammi un valore") N=0 While X <> 0 N=N+1 ReDim Preserve Elenco(N) Elenco(N) = X X = InputBox("Dammi un valore") Wend For i = N To 1 Step -1 MsgBox Elenco(i) Next Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 24 Mar 2007 09:19 am Oggetto: 4N - 24/03/2007 ' Lettura di un elenco con un numero di valori ' non conosciuto a priori e stampa in ordine inverso Dim Elenco(), X As Long, N As Long X = InputBox("Dammi un valore") N=0 While X <> 0 N=N+1 ReDim Preserve Elenco(N) Elenco(N) = X X = InputBox("Dammi un valore") Wend For i = N To 1 Step -1 MsgBox Elenco(i) Next next redim allarga l'array (ma lo svuota dei valori) esempio dim x() as long redim x(10) ==> crea un array di 10 elementi redim preserve x(10) ==> allarga un array non dimensionato a 10 elementi (mantenendo i valori precedentemente archiviati for i=1 to N istruznba next equivale a i=1 while i<=N istruznba i=i+1 wend soluzione IF - nr 11 Private n As Long Sub SoluzioneEsercizio11() n=0 Me.TimerInterval = 1000 End Sub Private Sub Form_Timer() Dim s As String n=n+1 s = Format(n, "00000") Me.Txt_A = Mid(s, 1, 1) Me.Txt_B = Mid(s, 2, 1) Me.Txt_C = Mid(s, 3, 1) Me.Txt_D = Mid(s, 4, 1) Me.Txt_E = Mid(s, 5, 1) End Sub ---Sub SoluzioneEsercizio1() Dim a As Double, b As Double, c As Double, d As Double, e As Double Dim minimo As Double, NotOK As Boolean NotOK NotOK NotOK NotOK NotOK = = = = = (IsNull(Me.Txt_A) Or Me.Txt_A = "" Or Not IsNumeric(Me.Txt_A)) NotOK Or (IsNull(Me.Txt_B) Or Me.Txt_B = "" Or Not IsNumeric(Me.Txt_B)) NotOK Or (IsNull(Me.Txt_C) Or Me.Txt_C = "" Or Not IsNumeric(Me.Txt_C)) NotOK Or (IsNull(Me.Txt_D) Or Me.Txt_D = "" Or Not IsNumeric(Me.Txt_D)) NotOK Or (IsNull(Me.Txt_E) Or Me.Txt_E = "" Or Not IsNumeric(Me.Txt_E)) If NotOK Then MsgBox "Scrivi dei numeri!" Else a = CDbl(Me.Txt_A) b = CDbl(Me.Txt_B) c = CDbl(Me.Txt_C) d = CDbl(Me.Txt_D) e = CDbl(Me.Txt_E) minimo = a If b < minimo Then minimo = b End If If c < minimo Then minimo = c End If If d < minimo Then minimo = d End If If e < minimo Then minimo = e End If MsgBox "Il minimo è: " & minimo End If End Sub SOLUZIONE FOr1 ----------------------------------Sub SoluzioneEsercizio1() Dim N As Double Dim i As Double Dim x As Double Dim Mass As Double N = Me.Txt_N If N > 0 Then Mass = InputBox("inserisci il 1°numero") For i = 2 To N x = InputBox("inserisci il" & i & "°numero") If x > Mass Then Mass = x End If Next Me.TxtOut = "Il massimo è " & Mass Else Me.TxtOut = "Sequenza vuota" End If End Sub Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 28 Mar 2007 09:47 am Sub SoluzioneEsercizio9() Dim N As Long Dim j As Long Dim i As Long Dim primo As Boolean Dim s As String N = Txt_N Oggetto: 4N - 28/03/2007 s = "" For i = 2 To N primo = True For j = 2 To i - 1 If (i Mod j) = 0 Then primo = False Exit For End If Next If primo Then s = s & i & ";" End If Next LstElenco.RowSource = s End Sub Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 13 Apr 2007 09:04 am Oggetto: 4N - 13/04/2007 (aggiunta) ESEMPI DI DOMANDE ORALI 1) stabilire se x è un numero positivo, negativo o nullo 2) Sintassi completa IF, WHILE, FOR, FUNCTION, SUB 3) stabilire se un valore x è numerico o nullo 4) scrivere la sintassi di 2 funzioni (esempio left , instr) 5) su cosa si basa la programmazione ad oggetti 6) AND e OR a bit esempio di funzione che somma 2 valori function somma(a as double,b as double) as double 'corpo della funzione somma=a+b end function funzione che mette maiuscola la 1° lettera function PrimaLetteraMaiuscola(s as string) as string PrimaLetteraMaiuscola=ucase(left(s,1)) & lcase(mid(s,2)) end function quando la usi p=PrimaLetteraMaiuscola("ermenegildo") ==> p contiene "Ermenegildo" funzione che dati 3 numeri restituisce il minimo function Minimo(a as double, b as double, c as double) as double Dim m m=a if (m > b) then m=b if (m > c) then m=c Minimo=m end function Lettura di una sequenza di numeri terminata con 0 x=inputbox("Dammi un numero") while x<>0 x=inputbox("Dammi un numero") wend Sequenze primi n termini della sequenza 1,2,3,4,5... for i=1 to N msgbox i next 1,-2,3,-4,5... segno=1 for i=1 to N msgbox i*segno segno=-segno next 1,0,1,0.... for i=1 to N msgbox (i mod 2) next 1,0,-1, 1,0, -1 .... for i=1 to N if (i mod 3) = 1 THEN msgbox 1 elseif (i mod 3) = 2 THEN msgbox 0 else msgbox -1 end if next "a","b","c","d","a","b".... for i=1 to N if (i mod 4) = 1 THEN msgbox "a" elseif (i mod 4) = 2 THEN msgbox "b" elseif (i mod 4) = 3 THEN msgbox "c" else msgbox "d" end if next 10,20,30, N*10 for i=10 to N step 10 msgbox i next oppure for i=1 to N msgbox i*10 next i MOD m ==> resto della divisione tra i e m esempi 7 MOD 3 => 1 16 MOD 2 ==> 0 15 MOD 16 ==> 15 sostituire nella stringa s la lettera a con # s="Ciao sono io" p="" for i=1 to len(s) if mid(s,i,1)="a" THEN ' i-esimo carattere della stringa s p=p & "#" else p=p & mid(s,i,1) end if NEXT msgbox p ==> "Ci#o sono io" Torna in cima e01692 Site Admin Registrato: 09/09/06 19:59 Messaggi: 277 Inviato: 21 Apr 2007 08:32 am Oggetto: 4N - 21/04/2007 Esempi di domande 1) Elencare i campi di una tabella (ad esempio studenti) for each t in currentdb.tabledefs msgbox t.name next oppure for i=0 to currentdb.tabledefs.count-1 msgbox currentdb.tabledefs(i).name next 2) Elencare tutti i controlli della maschera corrente 3) Contare le "A" presenti in una stringa S n=0 for i=1 to LEN(s) if mid(s,i,1)="A" then n=n+1 end if next msgbox "le a sono " & N oppure per access non 97 n=len(s)- len(replace(s,"A","")) msgbox "le a sono " & N 4) Costruire una funzione che dati 3 argomenti restituisce la somma dei numeri pari function SommaPari(a as long, b as long, c as long) as long Dim s as long s=0 if a mod 2=0 then s=s+a end if if b mod 2=0 then s=s+b end if if c mod 2=0 then s=s+c end if SommaPari=s end function 5) Elencare mediante un recordset set rs=currendb.openrecordset("SELECT Cognome FROM Studenti") if Not rs.eof then rs.movefirst while not rs.eof msgbox rs("Cognome") rs.movenext wend endif Torna in cima Mostra prima i messaggi di: Tutti i messaggi Prima i vecchi Indice del forum -> Classe 4N - 3°Modulo Vai Tutti i fusi orari sono GMT Pagina 1 di 1 Controlla questo Topic Vai a: Classe 4N - 3°Modulo Puoi inserire nuovi Topic in Puoi rispondere ai Topic in Puoi modificare i tuoi messaggi in Puoi cancellare i tuoi messaggi in Puoi votare nei sondaggi in Puoi moderare Administration Panel Powered by phpBB 2.0.10 © 2001, 2002 phpBB Group Vai questo questo questo questo questo questo forum forum forum forum forum forum
Documenti analoghi
4M - Appunti di INFORMATICA
Dim minimo As Double
NotOK = (IsNull(Me.Txt_A) Or Me.Txt_A = "")
NotOK = NotOK Or (Not IsNumeric(Me.Txt_A))
NotOK = NotOK Or (IsNull(Me.Txt_B) Or Me.Txt_B = "")
NotOK = NotOK Or (Not IsNumeric(Me.T...
4M - Appunti di INFORMATICA
DoCmd.OpenForm "Esempio1"
DoCmd.Close acForm, Me.Name
' DoCmd.Close acForm, "Maschera2"
End Sub
----Torna in cima
e01692
Site Admin
Registrato: 07 Set 2004
Messaggi: 214
VBA XLS - Appunti di INFORMATICA
For i = 1 To 5
' chiedo l'i-esimo valore Xi
x = InputBox("dammi un numero:", "lettura numero", i)
' Aggiungo il valore Xi alla somma dei valori precedentemente letti