Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: nello79 - 04 Febbraio 2012, 14:52:12

Titolo: Utilizzare array
Inserito da: nello79 - 04 Febbraio 2012, 14:52:12
uff... Scusate ho girato tutti i post e le varie guide ma non riesco a venirne a capo.
Se scrivo questo codice:

Codice: [Seleziona]
' Gambas module file
PUBLIC x AS Float[]
PUBLIC indice AS Integer

PUBLIC SUB Button1_Click()
  mio.x[mio.indice] = mio.x[mio.indice] + 1
  TextBox1.Text = mio.x[mio.indice]
  INC mio.indice
END

quando faccio click su button_1 mi ritorna:  null object

le variabili x e indice le ho dichiarate in un modulo chiamato mio.
Titolo: Re: Utilizzare array
Inserito da: fsurfing - 04 Febbraio 2012, 18:37:03
se le hai dichiarate in un altro modulo è probabile che non hai settato a si  le opzioni relative alla conpilazione in  menu progetto>proprietà>opzioni
Titolo: Re: Utilizzare array
Inserito da: alcresio - 04 Febbraio 2012, 19:29:08
 Mi pare di vedere che stai usando  una variabile  interna come se fosse esterna...

mio.x non credo che sia la sintassi giusta, lo sarebbe se tu usassi la variabile x da un modulo classe o form in cui non hai dichiarato x e indice...

Ho capito bene?

Edito:

Ma hai inizializzato l'oggetto float[]?
 x=new flot[]

Scusa la banalità, ma nel tuo codice non l'ho visto...




Titolo: Re: Utilizzare array
Inserito da: Picavbg - 04 Febbraio 2012, 23:50:23
Scusa che bisogno hai di dichiarare l'array  mio.x[] come float?. Poi, essendo l'array dichiarato di grandezza dinamica il tuo codice non può funzionare perché la prima volta che lanci il programma, l'array è solo dichiarato, ma non contiene dati. Fai:
PUBLIC SUB Button1_Click()
  if  mio.x.count=0 then
        mio.x.add(1)
  endif
  mio.indice =  mio.x.count - 1
  mio.x.add( = mio.x[mio.indice] + 1)
  TextBox1.Text = mio.x[mio.indice]
END

Così facendo, ogni volta che clicchi sul pulsante Button1, vedrai la TextBox1 incrementare il suo valore di 1.
 :ciao:
Titolo: Re: Utilizzare array
Inserito da: fsurfing - 05 Febbraio 2012, 09:31:16
ma lui l' array ha detto che l' ha dichiarato nel modulo mio , per cui mio.x[mio.indice] può andare benissimo,
naturalmente come ha detto picavbg deve essere dichiarato in un modo tipo questo:

x=new float[20]

però l' errore che darebbe iniziandolo senza dimensione sarebbe un altro da quello che ha scritto nello79
Titolo: Re: Utilizzare array
Inserito da: nello79 - 05 Febbraio 2012, 11:23:06
Allora ragazzi scusate andiamo con ordine. L'esempio che ho postato prima mi serviva solo per capire come funzionano gli array e solo a scopo didattico, la parte di codice in cui devo implementarlo è questa ed è la continuazione di precedenti miei post:

Codice: [Seleziona]
PUBLIC SUB Button1_Click()
DIM k AS Integer

Variabili.nomeFile = File.Load(FileChooser1.SelectedPath)
Panel1.Visible = FALSE
FileChooser1.Visible = FALSE
Button1.Visible = FALSE
TextArea1.Clear

Variabili.vettore = Split(Variabili.nomeFile, "\n")
Variabili.numeroRighe = CInteger(Variabili.vettore.Length) - 1
FOR k = 0 TO Variabili.numeroRighe
TextArea1.Text = TextArea1.Text & Variabili.vettore[k]
NEXT

END

PUBLIC SUB Button3_Click()
DIM pg, px, py AS Integer
DIM x AS Float[]
DIM y AS Float[]
DIM stringa AS String
DIM k AS Integer
DIM indice AS Integer

indice = 0

FOR k = 0 TO Variabili.numeroRighe
  stringa = Variabili.vettore[k]
  stringa = Upper(stringa)
  pg = InStr(stringa, "G")
  px = InStr(stringa, "X")
  py = InStr(stringa, "Y")
 
 IF pg <> 0 THEN 'il carattere G esiste
   
 INC indice
   
  x[indice] = CFloat(Mid(stringa, px + 1, py - px - 1))
  y[indice] = CFloat(Mid(stringa, py + 1))
  TextArea2.Text = TextArea2.Text & x[indice] & " " & y[indice] & "\n"
 
  ENDIF
  NEXT
END

All'interno di un modulo chiamato variabili ho dichiarato le seguenti variabili publiche:

Codice: [Seleziona]
' Gambas module file
PUBLIC nomeFile AS String
PUBLIC vettore AS String[]
PUBLIC numeroRighe AS Integer

Gli array x e y li ho creati dinamici in quanto non so di quante stringhe è formato il mio file txt. Ora il mio intendo è creare un array di punti x e y in modo che x[1] e y[1] corrispondano alle coordinate di un punto, x[2] y[2] alle coordinate del secondo punto e così via per quanti punti ci sono nel file.
Spero di essermi spiegato
Titolo: Re: Utilizzare array
Inserito da: fsurfing - 06 Febbraio 2012, 18:46:16
per inserire elementi un array basta che dai

x.add(valore)
y.add(valore)


x[indice] lo utilizzi solo per leggere il valore in un determinato indice


se invece vuoi cambiare un valore ad un determinato indice

x.fill(valore,indiceiniziale, quanti indici cambiare)


Titolo: Re: Utilizzare array
Inserito da: nello79 - 06 Febbraio 2012, 21:50:14
Niente da fare fsurfing, ho corretto il codice in questo modo:
Codice: [Seleziona]
PUBLIC SUB Button3_Click()
DIM pg, px, py AS Integer

DIM stringa AS String
DIM k AS Integer
DIM indice AS Integer
 x = NEW Float[1000]
 y = NEW Float[1000]
indice = 0

FOR k = 0 TO Variabili.numeroRighe - 1
  stringa = Variabili.vettore[k]
  stringa = Upper(stringa)
  pg = InStr(stringa, "G")
  px = InStr(stringa, "X")
  py = InStr(stringa, "Y")
 
 IF pg = 1 THEN 'il carattere G esiste
   
  x.Add(CFloat(Mid(stringa, px + 1, py - px - 1)))
  y.Add(CFloat(Mid(stringa, py + 1)))
   
  TextArea2.Text = TextArea2.Text & x[indice] & " " & y[indice] & "\n"
  INC indice
  ENDIF
  NEXT
END

e mi da questo errore: Type mismatch: wanted float, got string instead
Titolo: Re: Utilizzare array
Inserito da: nello79 - 06 Febbraio 2012, 23:43:36
Ragazzi ma perchè a questa riga: xp = CFloat(Mid(stringa, px + 1, py - px - 1))
ho sempre lo stesso errore: Type mismatch: wanted float, got string instead
uff.. ma che ho fatto di male...  :'(
Titolo: Re: Utilizzare array
Inserito da: Picavbg - 07 Febbraio 2012, 00:06:37
Ragazzi ma perchè a questa riga: xp = CFloat(Mid(stringa, px + 1, py - px - 1))
ho sempre lo stesso errore: Type mismatch: wanted float, got string instead
uff.. ma che ho fatto di male...  :'(
Hai guardato bene il puntamento in stringa di px+1 e la relativa lunghezza datya da py-px-1?
Io credo che tenti di convertire in un numero float un valore non numerico o, possibilmente, NULL. Verifica.
Ciao.
Titolo: Re: Utilizzare array
Inserito da: nello79 - 07 Febbraio 2012, 00:17:03
Esatto era proprio quello l'errore finalmente sono riuscito a venirne fuori yuppiiiii  :rotfl:
Titolo: Re: Utilizzare array
Inserito da: Top Fuel - 17 Ottobre 2012, 23:11:09
Riprendo questa vecchia discussione per una mia richiesta: è possibile creare array dinamici con più di una dimensione?
Per dire, facendo:

Dim mioarray As New Integer [ ]

dovrebbe essere monodimensionale. E se volessi crearne uno bidimensionale, è possibile?
Titolo: Re: Utilizzare array
Inserito da: vuott - 17 Ottobre 2012, 23:18:58
Non vorrei fare il Ceskho della situazione  :-\ , però se fai la ricerca nel forum inserendo la parola chiave "bidimensionale", ti esce un po' di roba.
Titolo: Re: Utilizzare array
Inserito da: Top Fuel - 17 Ottobre 2012, 23:36:58
Ceskhonite a parte :), la parola "bidimensionale" c'è solo in questa discussione... :(
Titolo: Re: Utilizzare array
Inserito da: vuott - 17 Ottobre 2012, 23:50:30
Ceskhonite a parte :), la parola "bidimensionale" c'è solo in questa discussione... :(
http://www.gambas-it.org/smf/index.php?topic=2268.0
http://www.gambas-it.org/smf/index.php?topic=2320.msg25498#msg25498
http://www.gambas-it.org/smf/index.php?topic=2204.0
http://www.gambas-it.org/smf/index.php?topic=256.msg2340#msg2340
Titolo: Re: Utilizzare array
Inserito da: Top Fuel - 17 Ottobre 2012, 23:54:08
Avevo fatto male la ricerca, e mi ricordo che il primo link l'avevo pure già letto... :hard:
Portate pazienza, il mio cervello ha la ram di un Vic20. :-[
Titolo: Re: Utilizzare array
Inserito da: vuott - 17 Ottobre 2012, 23:58:10
Avevo fatto male la ricerca, e mi ricordo che il primo link l'avevo pure già letto... :hard:
Portate pazienza, il mio cervello ha la ram di un Vic20. :-[
Quel "more beer" ti fa male ! Latte... ! ;D
Titolo: Re: Utilizzare array
Inserito da: Picavbg - 18 Ottobre 2012, 00:02:23
Portate pazienza, il mio cervello ha la ram di un Vic20. :-[

Però,  non ti puoi lamentare. Con la crisi europea di questo periodo, 256 KB non sono poi da buttare!  :rotfl:
Titolo: Re: Utilizzare array
Inserito da: Top Fuel - 18 Ottobre 2012, 00:12:29
Ehm, il Vic20 aveva solo 5,5 kb di ram... :-[
Aveva una cpu a 8 bit, impossibile che avesse 256 kb (nel 1980 poi!). :)
Titolo: Re: Utilizzare array
Inserito da: md9327 - 18 Ottobre 2012, 10:43:29
Forse ha un'espansione...  ;D