Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Come inizializzare una matice monodimensionale?

Sicuramente questa è la domanda più stupida che abbia mai fatto! Vengo
subito al dunque:
Voglio inizializzare una matrice monodimensionale a lunghezza fissa con
numeri non casuali:
Dim iNumeri(1 to 26) As Integer
iNumeri(0) = 1
iNumeri(0) = 0
iNumeri(0) = 5
iNumeri(0) = 7
iNumeri(0) = 9
...
Ora questo metodo non mi piace, vorrei utilizzare una funzioncina dove passo
in una sola riga di codice tutti i valori (un pò come usare la funzione
Array sui Variant). Prima di farmi tale funzione voglio essere sicuro che
non c'è già in Visual Basic (6), ho guardato nell'help e qualche manuale, ma
NIENTE! In GWBasic potevo fare tale operazione attraverso il comando DATA,
in C mi sembra che usavo qualcosa del tipo: iNumeri = {1, 0, 5, 7, 9, 13,
15, 17, ...}; anche in Pascal mi sembra si potesse fare (in Cobol non me lo
ricordo proprio!) E' POSSIBILE CHE IN VISUAL BASIC NON C'E' UNA FUNZIONE
COSI' SEMPLICE?
N.B.: Non mi servono soluzioni alternative tipo: mettile in un file e
caricali con un ciclo, voglio solo sapere se quella maledetta funzione
esiste già in Visual Basic.
Grazie... EHI... RILEGGENDO QUESTA RICHIESTA MI SONO ACCORTO DI ESSERE UN
PO' SCLERATO!
------------------------------------------
Parolisi Sabato
Scuola 2F s.r.l.
Analista Programmatore
paro...@mail.dueffe.it
------------------------------------------

un pò quello che avevo detto io...
una funzione che assegni un valore a tutti gli elementi della matrice... o
nel tuo caso una funzione che assegni tanti valori per quanti elementi ha la
matrice
mi sa che l'unica è crearsi la funzione :-))  si può ?
ciao

...

Sì, ma non è il massimo dell'eleganza perchè devi sfruttare dei variant:
Sub InitArray (ByRef A() as integer, ParamArray Values As Variant)
    dim i as integer
    Redim A(0 to Ubound(Values))
    For i = 0 to Ubound(Values)
        A(i) = Values(i)
    End If
End Sub
Credo sia corretto, l'ho scritta senza verificarla, ma il concetto è questo.
Ciao.

potrebbe essere un'idea....
Se utilizzi Option Base 0 (o nessuna indicazione) dire Redim Rt(100)
equivale a Redim Rt(0 To 100) e quindi è di 101 elementi, ma questa è
un'altra storia.
VB come avrai notato inizializza tutte le variabili a 0 al momento della
loro dichiarazione.
Gli array hanno come header una struttura di tipo SAFEARRAY, implementata da
M$, di una ventina di bytes, che ne definisce dimensioni, n° di elementi
ecc. (la puoi trovare anche in Win32Api.txt)
Non credo affatto che VB usi un For o qualcosa di simile all'interno di
Redim, sembra piuttosto che venga utilizzata una ZeroMemory(), uteriore
alias della CopyMemory() che riempie un'area di memoria con 0.
Ciao.

 A(5)=6
Come no...?
prova questo:
Dim A(1 To 5)
Dim i As Integer
Dim j As Integer
For i = 0 To 3
  j = i + 1 - (i > 1)
  A(j) = j + 1 + 2 * (j = 1) - 12 * (j = 4)
Next
Output:
A(1)=0
A(2)=3
A(3)=
A(4)=17
A(5)=6
.....funziona.. eheheheh.
Cmq, a parte gli scherzi, sul sito comune c'č un simpatico e funzionale modo di
simulare le vecchie istruzioni Read e Data del buon vecchio Basic.   Potrebbe
essere una soluzione, oppure, se i dati non sono tanti, definire una stringa con
un contenuto tipo: "0103001706" ecc. e poi leggerne i caratteri a due a due in
un ciclo For..Next e inserirne il val()
in un array numerico.
-- 
Bepi
mailto:
be...@mwire.net


Effettivamente avevo paura che qualche buon enigmista mi risolvesse il
problema, ma come vedi non è molto intuitivo...
L'importante è capirci.
Comunque complimenti! Se vuoi te ne propongo altri :)
Ciao


La risposta dovresti trovarla (come al solito) nell'help in linea...
Cerca la funzione Array.
--
Roal Zanazzi
z...@iol.it

AMMAZZA! IO PENSAVO CHE QUALCUNO MI DICESSE:
"CRETINO! LA FUNZIONE ESISTE! E CHE CREDEVI CHE QUELLI DELLA MICROSOFT ERANO
MESSI TANTO MALE DA NON INSERIRE NEL LINGUAGGIO UNA FUNZIONE CHE HANNO GIA'
INSERITO NEL C o NEL VECCHIO BASIC?"
RISULTATO: DEVO SCRIVERMI LA FUNZIONE: GRAZIE microSOFT!



 wrote in message 7hooae$29c$5...@hermes.iol.it...




Sorry, nella fretta non ho letto tutta la tua domanda...
Hai ragione, devi scriverti la tua funzione... e ringrazia M$, naturalmente!
--
Roal Zanazzi
z...@iol.it