Autore Topic: Utilizzare array  (Letto 1547 volte)

Offline nello79

  • Gamberetto
  • *
  • Post: 35
    • Mostra profilo
Utilizzare array
« il: 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.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Utilizzare array
« Risposta #1 il: 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

Offline alcresio

  • Grande Gambero
  • ***
  • Post: 100
    • Mostra profilo
Re: Utilizzare array
« Risposta #2 il: 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...




« Ultima modifica: 04 Febbraio 2012, 19:32:01 da alcresio »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Utilizzare array
« Risposta #3 il: 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:
« Ultima modifica: 04 Febbraio 2012, 23:56:47 da Picavbg »
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Utilizzare array
« Risposta #4 il: 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

Offline nello79

  • Gamberetto
  • *
  • Post: 35
    • Mostra profilo
Re: Utilizzare array
« Risposta #5 il: 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

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Utilizzare array
« Risposta #6 il: 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)


« Ultima modifica: 06 Febbraio 2012, 18:52:27 da fsurfing »

Offline nello79

  • Gamberetto
  • *
  • Post: 35
    • Mostra profilo
Re: Utilizzare array
« Risposta #7 il: 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

Offline nello79

  • Gamberetto
  • *
  • Post: 35
    • Mostra profilo
Re: Utilizzare array
« Risposta #8 il: 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...  :'(

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Utilizzare array
« Risposta #9 il: 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.
:ciao:

Offline nello79

  • Gamberetto
  • *
  • Post: 35
    • Mostra profilo
Re: Utilizzare array
« Risposta #10 il: 07 Febbraio 2012, 00:17:03 »
Esatto era proprio quello l'errore finalmente sono riuscito a venirne fuori yuppiiiii  :rotfl:

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Utilizzare array
« Risposta #11 il: 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?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Utilizzare array
« Risposta #12 il: 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.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Utilizzare array
« Risposta #13 il: 17 Ottobre 2012, 23:36:58 »
Ceskhonite a parte :), la parola "bidimensionale" c'è solo in questa discussione... :(
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »