Novità

LUIGIIII ... ho fatto il compito !!!!

fillotto

Advanced Member >PLATINUM<
Scusa il ritardo , ma pure noi abbiamo qualche cosa da fare, ti ho riepilogato la traccia del compito e lo svolgimento....
Codice:
'fammi uno scipt che scriva i 5 numeri della ruota di bari
'- dovrai usare un ciclo For per leggere le 5 posizioni
'- dovrai usare la funzione Estratto per leggere il numero
'- dovrai usare un vettore per memorizzare i 5 numeri
'- al termine del ciclo i 5 numeri contenuti nel vettore li dovrai scrivere In Output
'con la funzioe StringaNumeri.
'



Sub Main

Dim an(5)'preparo l'array x contenere 5 num.
Dim es,r1,p 'dimensiono le estrazioni  la ruota e le posiz
es =9062' estrazioni mi serve la n° 9062
r1 = 1' la ruota da adesso è la 1 cioè Ba
For p= 1 To 5            ' Con il CICLO FOR  LEGGO LE 5 POSIZIONI
an(p)=(Estratto(9062,r1,p))  '... devo usare  la funzione " Estratto"
Next                       'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an "    ......                                
Scrivi " Estraz. n° " &  es &" "& "  di  "&NomeRuota (r1)& " "  &  StringaNumeri(an,".") 'faccio scrivere l'array con  la funzione "StringaNumeri"


End Sub
 
L

LuigiB

Guest
bravissimo ! Ora la cosa si fa solo leggermente piu complessa , sotto la ruota di bari devono comparire le altre 10 con i loro rispettivi numeri.
Dovrai usare due cicli for nidificati , in pratica il ciclo for che hai gia fatto e il resto della tua routine
dovranno essere contenute in unaltro ciclo for ..vedi un po' come fare ...
 
L

LuigiB

Guest
Nota : quando si scrive il codice è molto importante l'indentazione delle righe perche favorisce la comprensione del flusso , l'indentazione si fa usando il tasto tab ad ogni nuova riga che si inserisce,
questo è il metodo corretto , esiste poi la funzione di formattazione automatica prima di postare uno script usala in modo che lo script venga ben formattatoe indentato.


upload
 

fillotto

Advanced Member >PLATINUM<
LuigiB;n1931074 ha scritto:
bravissimo ! Ora la cosa si fa solo leggermente piu complessa , sotto la ruota di bari devono comparire le altre 10 con i loro rispettivi numeri.
Dovrai usare due cicli for nidificati , in pratica il ciclo for che hai gia fatto e il resto della tua routine
dovranno essere contenute in unaltro ciclo for ..vedi un po' come fare ...

L'ho fatto però .... 2 osservazioni: per analogia avevo fatto un'array per le 10 ruote ma provando ho visto che non serve , inoltre così come ho fatto sotto arrivo fino a Venezia per la NZ devo mettere TO 12 ma in questo caso alla 11 mi scrive TUTTE e successivamente mi mette anche la NZ , ora quelli bravi mi sembra che usano un artifizio che al momento mi sfugge...
Codice:
 Sub Main


Dim an(5)'preparo l'array x contenere 5 num.

'Dim ar (10)

Dim es,r,p 'dimensiono le estrazioni la ruota e le posiz

es = 9062' estrazioni mi serve la n° 9062

For r = 1 To 10' End r = 12 To 12' la ruota da adesso è la 1 cioè Ba

For p = 1 To 5 ' Con il CICLO FOR LEGGO LE 5 POSIZIONI

an(p) =(Estratto(9062,r,p)) '... devo usare la funzione " Estratto"

Next 'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an " ......





Scrivi " Estraz. n° " & es & " " & " di " & NomeRuota(r) & " " & StringaNumeri(an,".") 'faccio scrivere l'array con la funzione "StringaNumeri"

Next

End Sub
 
L

LuigiB

Guest
Bravo Filotto , allora hai eseguito perfettamente quello che ti avevo chiesto.
Manca l'aspetto indentazione codice , come ti avevo chiesto ci devi fare attenzione
Ora noterai che nel tuo script compare la data su ogni riga , dipende dal fatto
che quando usi l'istruzione <scrivi> la data la riscrivi sempre , quello che ti chiedo ora è:

far comparire la data estrazione sulla prima riga di output
far comparire i nomi delle ruote e i relativi numeri estratti alle righe successive.

come ti ha detto Legend tra la ruota 10 di venezia e la ruota 12 Nazionale c'è il numero 11 che rappresenta la ruota di tutte .
Nell'esercizio che hai fatto hai preso familiarità con i cicli for ora sai le seguenti cose

- il ciclo for è controllato da una variabile detta iteratore
- il ciclo for fa muovere il valore dell'iteratore tra due limiti
- ad ogni next l'iteratore si incrementa


ora dato che l'iteratore è una normalissima variabile tu puoi sia leggerla che modificarne il valore
per risolvere il problem adella Nazioale quindi devi testare se la variabile vale 11 e nel caso trasformarla in 12. .come ti ha suggerito Legend. questo serve per saltare la ruota 11questa istruzione va inserita immediatamente dopo la riga che contiene il for.

questo è un primo modo di risolvere la questione , un secondo modo consiste nel'eseguire
le operazioni contenute nel ciclo for solo se la ruota è diversa da 11 , quindi come scondo esercizio
dovrai scrivere la stessa routine anche in quest'altro modo e cioè invece che trasformare la variabile
da 11 a 12 agire solo se la variabile ruota iteratore del ciclo dllle ruote è diversa da 11.
Tutto cioò si fa racchiudendo le istruzioni presenti nel ciclo for delle ruote dentro un blocco If... End if , il simbolo di diverso è "<>"

vai procedi che oggi è domenica e si lavora ancora di piu ! :)

Ricordati l'indentazione !!

ciao
 
Ultima modifica di un moderatore:

fillotto

Advanced Member >PLATINUM<
Eqque qua diceva Pappagone mi sembra che fino qui ci siamo , ho messo dei commenti vedi se sono congrui
Per quanto riguarda l'indentazione codice nello script me lo mette bene ma poi quando lo ripasso sull'editor me lo mette male e anche a colori a quel punto lo copio su blocco note e lo rimetto qui ma perde l'indentazione
Codice:
 Sub Main


Dim an(5)'preparo l'array x contenere 5 num.

Dim es,r,p 'dimensiono le estrazioni la ruota e le posiz

es = 9062' estrazioni mi serve la n° 9062

Scrivi " Estraz. n° " & es & " " & " del " & DataEstrazione(es)' lo metto qui perchè in mezzo al ciclo for me lo ripete !!

For r = 1 To 12' Ciclo For delle ruote

If r <> 11 Then ' solo nel caso che le ruote che incontri nel ciclo For r = 1 To 12 siano diverse dalla 11 allora me le scrivi

For p = 1 To 5 ' Con il CICLO FOR LEGGO LE 5 POSIZIONI

an(p) =(Estratto(9062,r,p)) '... devo usare la funzione " Estratto"

Next 'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an " ......





Scrivi NomeRuota(r) & " " & StringaNumeri(an,".") 'faccio scrivere l'array con la funzione "StringaNumeri"

End If ' qui posso chiudere il ciclo if xchè ha fatto quello che doveva fa

Next

End Sub
 
Ultima modifica:
L

LuigiB

Guest
bene ,
per il copia e incolla in modo da mantenere la formattazioen devi copiare cosi


hosting immagini

l'esrcizio lo hai fatto bene , ora devi fare in modo che i numeri siano tutti allineati alla stesa colonna
,attualmente vedi dei disallineamenti perche i nomi delle ruote non hanno tutti la sterssa lunghezza.
Per risolvere il problema devi usare formatspace sul nome della ruota ,se non ti ricordi come funziona consulta l'help.
Il formatSpace ti consente di creare delle stringhe di una lunghezza definita riempiendo i caratteri con lo spazio fino ad arrivare ad una stringa della lunghezza voluta.
)n questo modo le ruote avranno tutte la stessa lunghezza

Terminato con questa modifica prediamo confidenza con le funzioni , vedi che tu hai scritto tutto nella sub main , hai una variabile che è valorizzata con l'estrazione che vuoi e poi la leggi.

bene , ora devi levare tutto dalla sub main e creare una sub che chiamerai ScriviEstrazioneOut ,tale sub disporrà di un parametro che rappresenta il numero estrazione da scrivere.

quindi dalla sub main dovrai richiamare questa sub passando il valore per l'estrazione da scrivere ...
tutto chiaro ? spero di si ..

ciao
 
Ultima modifica di un moderatore:

fillotto

Advanced Member >PLATINUM<
LuigiB;n1931792 ha scritto:
bene ,
per il copia e incolla in modo da mantenere la formattazioen devi copiare cosi


hosting immagini

l'esrcizio lo hai fatto bene , ora devi fare in modo che i numeri siano tutti allineati alla stesa colonna
,attualmente vedi dei disallineamenti perche i nomi delle ruote non hanno tutti la sterssa lunghezza.
Per risolvere il problema devi usare formatspace sul nome della ruota ,se non ti ricordi come funziona consulta l'help.
Il formatSpace ti consente di creare delle stringhe di una lunghezza definita riempiendo i caratteri con lo spazio fino ad arrivare ad una stringa della lunghezza voluta.
)n questo modo le ruote avranno tutte la stessa lunghezza

Terminato con questa modifica prediamo confidenza con le funzioni , vedi che tu hai scritto tutto nella sub main , hai una variabile che è valorizzata con l'estrazione che vuoi e poi la leggi.

bene , ora devi levare tutto dalla sub main e creare una sub che chiamerai ScriviEstrazioneOut ,tale sub disporrà di un parametro che rappresenta il numero estrazione da scrivere.

quindi dalla sub main dovrai richiamare questa sub passando il valore per l'estrazione da scrivere ...
tutto chiaro ? spero di si ..

ciao

La prima parte penso che sia abbastanza facile (anzi me lo aspettavo !!) la seconda parte mi intriga però mi prendo i miei tempi , per adesso grazie!
 

fillotto

Advanced Member >PLATINUM<
Ciao Luigi, complice una piccola indisposizione (iperaffreddoreconpiccolafebbre) che mi costringe al letto ho trovato la concentrazione necessaria per il compito;Sono soddisfatto perchè nonosante le prove empiriche sono riusito a capire la ratio della questione , forse te ne accorgerai dalle piccole modifiche che ho fatto per arrivare alla soluzione ecco lo script
e aspetto il prossimo step
Codice:
Option Explicit
Sub Main
Dim es,an,r,p
es = InputBox("metti il num di estrazione",,9000)
Call ScriviEstrazioneOut(an,es,r,p)
End Sub
Sub ScriviEstrazioneOut(an,es,r,p)
    
Dim an2 (5)'preparo l'array x contenere 5 num.
    Dim  es2,r2,p2 'dimensiono le estrazioni la ruota e le posiz
    'es2 = 9062' estrazioni mi serve la n° 9062
    Scrivi " Estraz. n° " & es & " " & " del " & DataEstrazione(es)' lo metto qui perchè in mezzo al ciclo for  me lo ripete !!
    For r2 = 1 To 12' Ciclo For delle ruote
        If r2 <> 11 Then ' solo nel caso che le ruote che incontri nel ciclo  For r = 1 To 12 siano diverse dalla 11 allora me le scrivi
            For p2 = 1 To 5 ' Con il CICLO FOR LEGGO LE 5 POSIZIONI
                an2(p2) = FormatSpace(Estratto(es,r2,p2),2,True) '... devo usare la funzione " Estratto"
            Next 'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an " ......
                    
            Scrivi FormatSpace(NomeRuota(r2),11) & " " & StringaNumeri(an2,".") 'faccio scrivere l'array con la funzione "StringaNumeri"
        End If ' qui posso chiudere il ciclo if xchè ha fatto quello che doveva fa
    Next
End Sub


' bene , ora devi levare tutto dalla Sub Main e creare una Sub che chiamerai ScriviEstrazioneOut ,tale Sub disporrà di un parametro che
'rappresenta il numero estrazione da scrivere.

'quindi dalla Sub Main dovrai richiamare questa Sub passando il valore per l'estrazione da scrivere ...
' tutto chiaro ? spero di si .. bo
 

fillotto

Advanced Member >PLATINUM<
dimenticavo una cosa, all'inizio ho messo Option Explicit perchè ho inteso che richiamare la variabile "es" era necessario in quanto Option Explicit comanda su tutto lo script, sono giuste queste osservazioni? e secondo si può fare senza Option Explicit ?
 
L

LuigiB

Guest
Ciao Filotto , lasciami dire che sono molto soddisfatto.
Devo dirti che c'è ancora qaulche incertezza però nel complesso hai fatto benissimo, bravo !

lo script che hai redatto funziona perfettamente , ci sono però delle cose in più che non servono
probabilmente frutto delle prove che hai fatto , mi fa anche piacere come hai scritto nei commenti ,che quando inserisci un' istruzione dentro un ciclo for questa si ripete , stai capendo come funziona il tutto ..p robabilemte lo hai sperimentato a tue spese :) vedendo una sfilza di scritte ripetute.

ti metto lo script come l'ho corretto io

Codice:
Option Explicit
Sub Main
    Dim es
    es = InputBox("metti il num di estrazione",,9000)
    Call ScriviEstrazioneOut(es)
End Sub
Sub ScriviEstrazioneOut(es)
    Dim an2(5)'preparo l'array x contenere 5 num.
    'Dim es2,r2,p2 'dimensiono le estrazioni la ruota e le posiz
    Dim r2,p2
    'es2 = 9062' estrazioni mi serve la n° 9062
    Scrivi " Estraz. n° " & es & " " & " del " & DataEstrazione(es)' lo metto qui perchè in mezzo al ciclo for  me lo ripete !!
    For r2 = 1 To 12' Ciclo For delle ruote
        If r2 <> 11 Then ' solo nel caso che le ruote che incontri nel ciclo  For r = 1 To 12 siano diverse dalla 11 allora me le scrivi
            For p2 = 1 To 5 ' Con il CICLO FOR LEGGO LE 5 POSIZIONI
                an2(p2) = FormatSpace(Estratto(es,r2,p2),2,True) '... devo usare la funzione " Estratto"
            Next 'una volta che ha letto tutte e 5 le posizioni che sono andate a finire nell'array " an " ......
            Scrivi FormatSpace(NomeRuota(r2),11) & " " & StringaNumeri(an2,".") 'faccio scrivere l'array con la funzione "StringaNumeri"
        End If ' qui posso chiudere il ciclo if xchè ha fatto quello che doveva fa
    Next
End Sub

come puoi vedere la sub ScriviEstrazioneOut l'hai scritta egregiamente , solo che hai abbiondato
nei parametri, alcuni non servivano.

i parametri sono tutte quelle variabili che sono presenti dentro le parentesi nella firma della sub/function

questa riga si chiama firma della sub (perche è una sub se fosse stata una function sarebbe firma della function) , le variabili scritte col colore rosso si chiamano parametri

Codice:
Sub ScriviEstrazioneOut([COLOR=#FF0000]an,es,r,p[/COLOR])


quando chiamo la sub da un alro punto del codice devo passare dei valori per ogni parametro proprio come hai fatto pure tu nel tuo codice nella sub main quando la richiami.

come avrai capito nel momento in cui scrivi la tua sub o function non sai ancora quanto varrà il parametro o i parametri , sai solo che dovranno contenere un certo tipo di valore che la sub si aspetta (si aspetta nel senso che lo hai deciso tu che l'hai scritta quindi sai che cosa dovra contenere quella variabile anche se ancora non sai il valore effettivo) per esempio sai che <es>
dovra contenere il numero dell'estrazione che vuoi scrivere a video, stai ragionando in modo astratto non ti serve saperne il valore pratico.

ok , <es> era l'unico parametro che serviva in questa sub
Fai finta che tu sei la sub e io sia Sub Main e il tuo compito è portarmi lo stampato della tale estrazione quando io te la chiedo.
Di cosa hai bisogno ? Solo del numero ce io voglio quello lo so io che ti chiamo e te lo comunico al momento.Non serve niente altro.

tutte le altre variabili che servono effettivamente alla sub <ScriviEstrazioneOut> sono tutte
variabili che si possono dichiarare localmente dentro la sub stessa non è necessario metterle nei parametri. torando all'esempio figurato le altre variabili potrebbero essere gli oggetti che tu hai sulla tua scrivania e che ti servono per lavorare , servono a te mica a chi ti chiama...
spero di averti fatto comprendere il senso.

il resto della sub lo hai fatto bene , c'è solo una variabile in piu che non serviva e che ho remmato.

veniamo alla domanda teorica che mi hai posto : Option Explicit

Option explicit è una direttiva che s da all'interprete del vbscript

non è una direttiva obbligatoria e si potrebeb omettere , ma attenzione NON VA OMESSA

cosa fa option explicit ? Impone all'interprete di verificare (prima che lo script venga eseguito)
se tutte le variabili usate siano state dichiarate ESPLICITAMENTE (da qui explicit)
se dopo la verifica ciò non risultasse vero capiterebeb un messaggio di errore come in questo esempio

Codice:
Option Explicit
Sub Main
    p = p +1
End Sub

come vedi p non ha nessun < Dim p > quindi dato che è impostata la direttiva Optione Explicit quando premiamo esegui invece di eseguire il codice l'interprete ci manda un messaggio di errore (provalo per vedere)

se levassimio la direttiva lo script si eseguirebbe senza errori perche l'interprete quando incontra qualcosa che non sa cos'è e che corrisponde a certe caratteristiche riesce a capire che si tratta di una variabile , ma attenzione una variabile dichiarata in modo IMPLICITO (ovvero senza Dim)
La prima volta che compare <p> è come se internamente il <dim p >lo facesse da solo senza farlo vedere , però che vuol dire questo ? Che se io nel resto del codice una volta che devo riusare la variabile <p> invece di P scrivo il tasto viciono la <o> o qualsiasi altra cosa perche mi sono sbagliato e non me ne sono accorto l'interprete non mi segnala niente .. pensa che <O> sia un'altra variabile ancora , per lui fila tutto liscio non ha idea di cosa vogliamo fare noi ..
quindi per salvaguardarci dai nostri errori di distrazione Option explicit lo mettiamo sempre.


benissimo ! Siamo arrivati al prossimo step , come ved stiamo partendo proprio dal basso con esercizi semplicissimi e piano piano la nebbia si dirada.

Il prossimo step è semplice ..direi imbarazzante -- pero serve a focalizzare sulle chiamate alle sub /function

come sai nello spazioscript ci sono un sacco di funzioni precostituite , ora ne useremo una.
Nella tua sub <ScriviEstrazioneOut> per leggere i 5 numeri di ciascuna ruota hai usato
un ciclo for valorizzando di volta in volta gli elementi da 1 a 5 di un vettore , ora il ciclo for
che legge gli estratti dobbiamo levarlo e useremo al suo posto la chiamata ad una sub offerta
dallo spazio script. La sub in questione è GetArrayNumeriRuota

questa sub ti alimenta il vettore dei 5 numeri di una ruota di una tale estrazione
ecco come si usa, anche se ti esorto ad andare a vedere la sua spiegazione (sintetica) nell'hel dello spazio script


Codice:
Option Explicit
Sub Main
    ReDim aN(0)
    Call GetArrayNumeriRuota ( 8000 ,1,aN)
    
    Call Scrivi (StringaNumeri (aN))
End Sub


tutto ok ? Levare il ciclo for che legge gli estratti e sostituire con l'uso di questa sub.<GetArrayNumeriRuota >

ciao
 

fillotto

Advanced Member >PLATINUM<
Ciao Luigi,non ti dico quanto tempo ho perso per le due ultime formattazioni dello script, è bene che TUTTI non facciano come me per tentativi, ma molto più semplicemente vadano direttamente all'help delle funzioni prese singolarmente non si può sbagliare !!!!
Ecco lo script:
Codice:
Option Explicit
Sub Main
    Dim es
    es = InputBox("metti il num di estrazione",,9000)
    Call ScriviEstrazioneOut(es)
End Sub
Sub ScriviEstrazioneOut(es)
    Dim an2(5)'preparo l'array x contenere 5 num.
    'Dim es2,r2,p2 'dimensiono le estrazioni la ruota e le posiz
    Dim r2,p2
    'es2 = 9062' estrazioni mi serve la n° 9062
    Scrivi " Estraz. n° " & es & " " & " del " & DataEstrazione(es)' lo metto qui perchè in mezzo al ciclo for  me lo ripete !!
    For r2 = 1 To 12' Ciclo For delle ruote
        If r2 <> 11 Then ' solo nel caso che le ruote che incontri nel ciclo  For r = 1 To 12 siano diverse dalla 11 allora me le scrivi
            ReDim aN(0)
            Call GetArrayNumeriRuota(es,r2,aN)
            Call Scrivi(FormatSpace(NomeRuota(r2),11),True,False)'Formattazione difficile! ma....
            Call Scrivi(StringaNumeri((aN),".",True)) 'Formattazione difficile! ma.... bisogna che la smetta di fare prove empiriche e di vedere
'una buona volta la guida in linea, funzione per funzione e ci si riesce!!!!!!!
        End If ' qui posso chiudere il costrutto if xchè ha fatto quello che doveva fa
    Next
End Sub
 
Ultima modifica:
L

LuigiB

Guest
ohhh ... benissimo ! Bravo Filotto .. ora continuiamo con i nostri esercizi ,per un po' proseguiremo
cone esercizi estremamente semplici , poi arriveremo a qualcosa di leggermente piu complesso.

L'esercizio di adesso prevede una modifica alla tua tabellina delle estrazioni
Di ogni ruota voglio sapere la somma col fuori90 dei 5 estratti , quindi di fianco all'ultimo numero in quinta posizione metterai uno spazio e poi scriverai in rosso e in grassetto il valore somma col fuori90 di quella ruota,

vorrei dirti di fare di testa tua come ti viene ma invece metterò dei paletti .. d'altra parte in ufficio mi fanno sempre incazzare e percio divento cattivello ....-)

Dovrai creare una funzione alla quale passerai l'array dei numeri estratti , questa funzione internamente tramite un ciclo farà la somma dei numeri , fara il fuori 90 e torenerà il valore
questo valore dovrai scriverlo dove abbiamo detto.

Per poter scrivere questo valore di fianco a ciascuna riga dei numeri dovrai usare un parametro
specifico della sub Scrivi , il parametro che "dice di non mandare a capo" in questo modo la prossima chiamata a scrivi scriverà sulla stessa linea , in questa seconda chiamata dovrai impostare i parametri per il bold e per il colore

vai procedi !!



ti metto un esempio di function , solo per farti capire la differenza tra sub e function.
In realtà tuttte e due tramite codice possono fare le stesse cose la differenza è che una function puo far ritornare un valore al chiamante

Codice:
Option Explicit
Sub Main
    Scrivi Somma( 1 , 3)
End Sub
Function Somma  (a , b)
    
    Somma = a + b
End Function

Ciao !

P.S.

If .. End If mon è un ciclo ma un costrutto decisionale , i cicli sono For .. Next oppure Do...Loop
non scambiarmi per pignolo ma gli errori vanno corretti all'inizio e la terminologia è importante.
 
Ultima modifica di un moderatore:

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 19 aprile 2024
    Bari
    39
    05
    81
    89
    73
    Cagliari
    56
    21
    01
    90
    03
    Firenze
    05
    56
    68
    27
    09
    Genova
    42
    50
    90
    27
    83
    Milano
    16
    71
    29
    85
    04
    Napoli
    29
    19
    23
    63
    50
    Palermo
    35
    54
    33
    57
    61
    Roma
    17
    29
    43
    55
    74
    Torino
    69
    60
    03
    01
    26
    Venezia
    05
    57
    59
    43
    34
    Nazionale
    30
    43
    64
    65
    21
    Estrazione Simbolotto
    Genova
    02
    20
    25
    12
    19

Ultimi Messaggi

Alto