Autore Topic: Del genere, come affogare in un bicchiere d'acqua.  (Letto 1935 volte)

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Del genere, come affogare in un bicchiere d'acqua.
« il: 28 Gennaio 2009, 23:11:25 »
Allora, sono nuovo a questo forum, Salve a tutti!
Vi parlo direttamente del mio "problema" , per fare programmazione a scuola solitamente usiamo la shell grafica di VB! Ma siccome mi interessava un alternativa free per il mio uso privato ho ripiegato su Gambas, ecco tutto perfetto, se non fosse OVVIAMENTE che alcuni controlli non sono gli stessi! Ecco stavo cercando di realizzare un programma che:
Dovendo inserire 10 valori in un vettore (con conseguente comparsa di un input box) venga fatto un ciclo For e vengano inseriti in una listbox i dati numeri.
Il principale problema è che non riesco a dichiarare il vettore!
Io sono portato a fare come su VB!
Questo È quello che scriverei su vb:

dim vettore (1 to 10) as integer
dim i as integer

private sub cmdbutton_click()
   for i=1 to 10
      numeri(i)= inputbox ("che valore vuoi?")
         listbox.additem numeri(i)
then

End sub


Questo È tutto quello che m'interessa per il momento! Nelle guide che ho trovato su internet non erano presenti esempi del genere...
Grazie per l aiuto!
(ovviamente questi sono programmi elementari a livello scolastico, ma mi serve solo come esempio per poter capire un pò come varia VB dal Gambero azzurro!) :aiuto:
:cappello:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #1 il: 28 Gennaio 2009, 23:25:30 »
non ti do la risposta già belle che completa ma te la do a gradi così ti diverti di +  :-P


un vettore monodimensionale che viene chiamato array si dichiara così:

dim numeri as integer[10]


in questo modo inizializzi un array integer con 10 posizioni inizializzte con valori  0

per inserire  un valore in una posizione dell' array

numeri.add(valore da memorizzare ,posizione in cui memorizzarlo)

il ciclo for si fa +o- uguale

for i=0 to 10

...istruzuini..

next

per inserire valori nella listbox:


listbox1.add(numeri)


buon divertimento

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #2 il: 28 Gennaio 2009, 23:33:43 »
XDXDXD Grazie!! Ecco probabilmente era questo che fregava, il fatto del non dover impostare la grandezza del vettore con 1 to 10, ma dando il valore direttamente ora provo poi dico com È andata!
:cappello:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #3 il: 28 Gennaio 2009, 23:39:16 »
Niente di più facile (premettendo ovviamente che hai inserito un oggetto ListBox nel form principale):
Codice: [Seleziona]

PUBLIC SUB Form_Open()
DIM Vettore[10] AS String
DIM I AS Integer

  ListBox1.Clear
  FOR I = 0 TO 9
    Vettore[I] = InputBox("Valore n°" & CStr(I + 1) & ":")
    ListBox1.Add(Vettore[I])
  NEXT
 
END


Ricordati che:
1) InputBox restituisce dati in formato String;
2) la numerazione di vettori, oggetti, ecc... in Gambas parte sempre da 0 (zero);
3) il NEXT non necessita della variabile specificata nel FOR perché chiude in automatico il primo ciclo FOR aperto;
4) esiste anche un metodo dinamico per dichiarare Vettore in modo che non hai bisogno di sapere quanti elementi introdurrai durante il tuo esercizio:
Codice: [Seleziona]

PUBLIC SUB Form_Open()
DIM Vettore AS NEW String[]
DIM I AS Integer
DIM C AS String
  ListBox1.Clear
  i = 0
  WHILE TRUE
    C = InputBox("Valore n°" & CStr(I + 1) & ":")
    IF C THEN
      Vettore.Add(C)
      ListBox1.Add(Vettore[I])
      I += 1
    ELSE
      BREAK
    END IF
  WEND  
END

In questo esempio dichiaro Vettore dinamico: la parola NEW crea fisicamente la variabile in memoria con il numero di elementi specificati tra le parentesi []. In questo caso, non assegno a priori una dimensione fissa, per cui il vettore può crescere arbitrariamente.
Creo un ciclo infinito e leggo un input dall'utente finché questi non preme Invio senza inserire nulla, caso in cui esco dal ciclo.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #4 il: 29 Gennaio 2009, 15:47:11 »
Allora grazie per l'aiuto, con i vettori adesso funziona ed ho poi provato a modificare il testo del programma per avviarlo con il ciclo "for" ma non funge e non capisco dove sbagli:
Public sub form_click()
dim vettore as integer [10]
dim i as integer
end
public sub button1_click
   for i=1 to 10
      numeri= inputbox ("Che valore vuoi?")
         listbox1.add numeri
   Then
end

Ecco ho provato anche a togliere le parenti tonde e mettere le quadre e altre varizioni che credevo avrebbero funzionato ma così non È andata. Credo ci sia qualche errore nell'impostare il "for". Questo programma lo vorrei fare con il For e non con il while!
Ma non mi accetta i vettori nella listbox perchÈ integer e non string?

Thanks :aiuto:
:cappello:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #5 il: 29 Gennaio 2009, 18:44:57 »
l' indice dei vettori parte sempre da 0 quindi un vettore a 10 posizioni avra come indici da 0 a 9

quindi devi dichiarare

for i =0 to 9

ed al posto di then devi mettere next

inoltre come a detto leo inputbox restituisce un valore stringa

per cui il vettore dovra essere di tipo string[] e non integer[] a meno che non converti il valore dato da inputbox in un integer tramite Cint(string)

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #6 il: 29 Gennaio 2009, 20:44:20 »
Che stupido XDXDXDXD !!!!!!!! Era il then --> next che ho sbagliato XD no il bello è che ne ero anche convinto ...vabbè È stata una svista stupida grazie per tutto!
:cappello:

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #7 il: 29 Gennaio 2009, 22:31:03 »
Ecco ho fatto come avete detto e questo È il mio codice:
PUBLIC SUB form_click()
  DIM vettore AS Integer[10]
  DIM i AS Integer
END
PUBLIC SUB button1_click()
 FOR i = 1 TO 10
 vettore = inputbox("Che valore vuoi?")
 listbox1.add numeri
 NEXT
END

Ma non mi riconosce la variabile di "i" O.o
Mi dice: unknown identifier i alla linea 7 di Fmain.class

Forse sembrerò un bambino con questi perchÈ, ma effetivamente qual'è la ragione per cui non me la riconosce?
:cappello:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #8 il: 29 Gennaio 2009, 22:45:38 »
non te la riconosce perchè hai dichiarato i nella funzione  form_clik() invece che nella funzione button1_click

in tal modo i ha validità solo nella funzione dove è stata dichiarata

se vuoi che una variabile sia utilizzabile in + funzioni devi dichiararla con PRIVATE i as integer (se sara visibile solo all' interno del form o modulo dove è dichiarata) oppure PUBLIC i as integer (se sarà disponibile in qualsiasi form o modulo del progetto)

queste due dichiarazioni vanno poste subito dopo la scritta

' Gambas class file

il codice da usare è questo:

Codice: [Seleziona]

PUBLIC SUB Button1_Click()

 
  DIM numeri AS Integer[10]
  DIM i AS Integer



      FOR i = 0 TO 9
              numeri[i] = inputbox("Che valore vuoi?")
              listbox1.add(numeri[i])
      NEXT
END

 

Offline Giuseppe

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
    • http://non ho nessun sito
Re: Del genere, come affogare in un bicchiere d'acqua.
« Risposta #9 il: 29 Gennaio 2009, 22:54:34 »
PERFETTO!!!! Grazie mille!
:cappello: