Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: borelg - 22 Settembre 2008, 15:22:45

Titolo: Aiuto per nuovo utente
Inserito da: borelg - 22 Settembre 2008, 15:22:45
salve a tutti colgo l' occasione per salutarvi dato che è il mio primo post  :ciao:  :ciao:
Io avrei bisogno di un grosso aiuto, infatti dovrei fare un programma è l' ambiente basic mi era sembrato il + adatto dato che è l' unico che ho studiato un po a scuola... comunque ciò che dovrei fare sarebbe questo:
un programma che generi 3 numeri casuali (da 1 a 50) e che vada a cercare in un file di testo la frase con il numero corrispondente (nel file di testo ci sarebbe un elenco numerato di frasi) e che la faccia vedere nella schermata del programma e che permetta di copiarla. Questa operazione dovrebbe farla con tre frasi alla volta, mi spiego meglio: lui genera 3 numeri es: 45 - 16 - 37. Poi va in 3 file di testo diversi e preleva le 3 frasi la frase AAAAA la frase BBBB e la frase CCCC e le faccia vedere nella schermata del programma in ordine: AAAA. BBBBB. CCCCCC. Inoltre dovrebbe anche avere il tasto tipo "Start" per permettere di ripetere questa operazione, voglio dire un bottone che se schiacciato ripete l' operazione e molstra altre 3 frasi...
Qualcuno sarebbe così gentile da aiutarmi? io non so proprio da dove iniziare...
Vi ringrazio tantissimo in anticipo :-)  :-)
Titolo: Re: Aiuto per nuovo utente
Inserito da: Lux - 22 Settembre 2008, 18:21:47
Ciao, ho dato uno sguardo al tuo problema, ora vado di fretta, ti prometto che stasera ci lavoro su.
comunque, per contare il numero di lettere inserite in una frase puoi utilizzare l'istruzione LENGHT : Numero = Len(testo)
dovresti scrivere una cosa del genere:
Dim testo as string 'dichiari la variabile testo come stringa
Dim numero as integer 'dichiari la variabile numero come intero. Ti serve per contare
                      'il numero di lettere della frase
testo = "prova"   'In questo caso il testo da contare è prova
numero = len(testo) 'Da il numero di lettere che contiene la parola prova
Print numero 'stampa a video il numero

Questo è un esempio di funzionamento dell'istruzione lenght
Ora non ho ben capito quando dici che deve contare delle frasi (fai attenzione perchè la funzione lenght conta come carattere anche gli spazzi quindi la frase "luigi gioca" è composta da 11 caratteri e non 10!) contenute in un file di testo quindi dovresti aprire un faile di testo e leggere quello che c'è dentro? o sbaglio?
Per aprire un file di testo puoi usare il metodo OPEN
"hFile = OPEN "~/documenti/mio file di testo.txt" FOR INPUT
Credo che quindi ci vuole un ciclo che cerchi la frase che ha il numero di caratteri richiesto.
Credo che forse occorre un ciclo anche per dare i tre numeri a caso.
userei la funzione for..
tipo:
dim i as integer
For i = 1 to 3 'hai detto che deve dare 3 numeri
    quì devo pensare cosa scrivere...sorry    
Next
Comunque mi faccio vivo e ti faccio sapere come farei io
ovviamente aspettando qualcuno che ne capisca più di me e che corregga le probabili sciocchezze che ho scritto
ciao.
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 22 Settembre 2008, 18:40:02
allora: per ciò che riguarda l'estrazione casuale dei numeri puoi usare il seguente codice:


Codice: [Seleziona]

Int(Rnd() * num_max) + 1


dove num_max è il numero massimo che vuoi che venga estratto...

per farli fare 3 estrazioni crei 3 variabili

Codice: [Seleziona]

dim num1 as integer
dim num2 as integer
dim num3 as integer


poi crei l'estrazione per il primo numero
Codice: [Seleziona]

num1 = Int(Rnd() * num_max) + 1


poi per il secondo

Codice: [Seleziona]

num2 = Int(Rnd() * num_max) + 1

IF num2 = num1 then Int(Rnd() * num_max) + 1


come vedi ho fatto in mod che se il secondo numero estratto sia uguale al primo l'estrazione viene ripetuta così da non ottenere mai due numerio uguali....

e con il terzo numero farai la stessa cosa....

Mi dispiace ma per ora posso essertio d'aiuto solo così...
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 22 Settembre 2008, 19:56:08
grazie mille per esserti interessato al mio problema ma hai inteso male, probabilmente mi sono spiegato male io...
non deve contare il numero di lettere nelle frasi ma il numero di frasi.
Infatti io ho 3 documenti con 50 frasi ciascuno e vorrei che questo prgramma, dopo aver generato 3 numeri a caso vada a prendere le frasi corrispondenti a quei numeri ovvero per esempio genera i numeri 43, 32, 18 e va nel primo documento cerca la frase n° 43 e la mette per prima nella finestra di testo del programma, poi va nel secondo documento cerca la frase n° 32 e la mette di seguito alla prima nel documento di testo e poi fa così anche cn la riga 18....
dopodichè se voglio che lo faccia 1 altra volta dovrei cliccare il tasto START e poi vorrei tanto anche integrare il tasto COPIA
ps. guarda l' immagine alllegata che così è + chiaro...
ti ringrazio ancora moltissimo per il tuo aiuto... magari il mondo fosse pieno di persone così gentili... :-D
Titolo: Re: Aiuto per nuovo utente
Inserito da: Lux - 22 Settembre 2008, 22:00:13
Ok, allora avevo capito male... :ehm:
rieccomi, ho visto la tua immagine al tasto start devi assegnare il codice che ti ha postato Ceskho, a questo dobbiamo aggiungere un paio di cosucce, devi darmi il tempo di pensare, ora mi metto all'opera...
Io sostituirei il textbox con un ListBox al quale aggiungi le 3 frasi.
Provo a scrivere qualcosa anche se sinceramente non so come fargli contare le parole....
Ciao
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 22 Settembre 2008, 22:09:48
ma non deve contare le parole... ma le frasi... per contare le frasi che sono una sotto l' altra non basta dirgli la riga?
comunque ti ringrazio ancora molto per l' aiuto che mi stai dando... :-)
Titolo: Re: Aiuto per nuovo utente
Inserito da: Lux - 22 Settembre 2008, 22:11:42
Passo 1) ecco il codice per l'estrazione di tre numeri casuali
Codice: [Seleziona]
PUBLIC SUB Main() 
      DIM x AS Integer
      DIM y AS Integer
      DIM z AS Integer
      x = Rnd(1, 30)
      y = Rnd(1, 30)
      IF y = x THEN    
         y = Rnd(1, 30)
      END IF      
      z = Rnd(1, 30)
      IF z = y OR z = x THEN    
         z = Rnd(1, 30)
      END IF
      PRINT x
      PRINT y
      PRINT z
END
Titolo: Re: Aiuto per nuovo utente
Inserito da: Lux - 22 Settembre 2008, 22:14:37
Perdonami, ora ho capito....numero 22, pesca la frase 22 tra le tante....
Capito. :lol:  :lol:
Titolo: Re: Aiuto per nuovo utente
Inserito da: md9327 - 23 Settembre 2008, 12:55:26
Nella lettura del file, nel loop di lettura (LINE INPUT), durante il loop ti conti quante volte lo fai, e al raggiungimento del numero desiderato, ti salvi la frase in una variabile.
La funzione LINE INPUT legge una riga di file alla volta, e la legge partendo dal primo carattere fino al primo ritorno a capo, la successiva lettura sarà dal successivo carattere dopo il ritorno a capo precedente, fino al successivo ritorno a capo, e così via.
A questo punto il loop ti rende la cosa facile, visto che devi leggere intere frasi (e non singole parole); una variabile Integer per il contatore può andare bene, a meno che il file non sia spropositatamente grande (altrimenti usa un Long). Nel loop, ogni volta che legge una frase, incrementi questo contatore di uno, e così via; quando sei arrivato al numero di frasi voluto (numeri casuali), ti salvi la frase in un'appositiva variabile String, e vai avanti fino alla successiva.
L'ordinamento dei numeri casuali generato (dal più piccolo al più grande) devi farlo, in modo che in una singola lettura ti prendi tutto, altrimenti sei costretto a rileggere nuovamente tutto il file.

Spero di essermi capito ... :-)
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 23 Settembre 2008, 14:15:11
Non penso abbia di questi problemi...può farlo in 3 cicli separati dato che le frasi vengono pescate da 3 file diversi..se non ho capito male...
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 14:39:09
ok ragazzi mi è venuto una idea che magari è + semplice:
da quello che ho capito in gambas ci sono i moduli che sarebbero un po come dei file di testo dove ci puoi mettere delle stringhe o roba così... comunque ditemi se è gusto...
evento: click START
-crea 3 numeri a caso a, b, c, compresi tra 1 e 50
-print (uno dei poki comandi che conosco) riga a (numero generato) del modulo 1 nella testbox1
-print riga b del modulo 2 nella testbox1
-print riga c del modulo 3 nella testbox1

evento: click COPIA
-copia negli appunti il contenuto della testbox1 (come quando selezioni una cosa e spingi il tasto copia... solo che non c'è bisogno di selezionarla....)
cosa ne dite?
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 23 Settembre 2008, 15:52:12
non usare i moduli....usa tre file di testo....in questo modo puoi editarli in seguito cambaindo le frasi o permettendo ad un eventuale esterno di cambiarle a suo piacimento....
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 16:05:15
ah... ok ma io sinceramente non ho la più pallida idea di come fare...
cmq grazie anche a te ceskho per il tuo aiuto...
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 23 Settembre 2008, 16:14:51
ora provo a fare il programma sul mio computer e poi ti dico come fare ok?
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 16:28:45
ok grazie mille!!!
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 18:20:25
Allego esempio. Il programma estrae a caso
tre versi dai primi 50 dell'Inferno e li stampa a video.
Con il tasto Copy li salva nella tua home. Siccome non
avevo tempo, il file viene salvato con data e ora. Metti tu
qualcosa per rendere il file unico.
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 18:26:57
Allego versione 0.0.2, visto che ti interessa copiare nella clipboard.
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 19:35:57
Ultima versione 0.0.3. Ho eliminato i comandi SHELL. Ora è tutto puro Gambas.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 19:38:20
6 1 GENIO!!!
però ho trovato un piccolo diffetto... scusa se ti faccio lavorare tanto ma credo che non sia difficile das correggere... comuque il problema è che se riclicco start il programma si blocca e in teoria io dovrei poter fare questa operazione all' infinito...
se risolverai anche questo problema ti ringrazierei moltissimo... :-)  :-D
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 20:02:42
A me non si blocca. Che tipo di messaggio ti dà? Comunque prova la versione 0.0.3 e vedi se si blocca ancora.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 20:13:22
con la versione 0.0.3 a volte mi da questo errore:
(trefrasiacaso:6485): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed
e non mi da nessuna frase... ma lo fa ad intervalli irregolari questo errore?
ps. come faccio a sostituire la divina commedia con i 3 documenti di testo?
pps. volendo se è un problema posso mettere tutto in 1 stesso documento e poi modificare il codice in modo che estragga un numero da 1-50 uno da 51-100 e 1 da 101-150... cosa ne dici?
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 20:27:58
ok ce l' ho fatta non c' è + quel problema ho sostituito la divina commedia con il mio file di testo e ho modificato questo codice:
iFrase1 = Int(Rnd(1, 51))
iFrase2 = Int(Rnd(51, 101))
iFrase3 = Int(Rnd(101, 151))
vanno bene le cifre che ho messo? coprono tutte le possibilità oppure ci sono dei numeri che non potranno mai venire?
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 20:58:30
I numeri vanno bene. L'errore sembra venire da un componente Gtk. Io uso Qt e perciò non appare. L'errore pare causato dalla fuzione Conv$ che ho messo per visualizzare bene le lettere à ù è ò ì nella textarea. Se hai qualche frase con lettere accentate potrebbe ricapitare. A quel punto prova a togliere la funzione Conv$, cioè:

TextArea1.Text = sVerso1 & "\n" & sVerso2 & "\n" & sVerso3
TextArea1.Text = Conv$(TextArea1.Text, System.Charset, "UTF-8")

elimina la seconda riga e vedi se va.

Altrimenti ti deve aiutare qualcuno che abbia il tuo sistema. Quindi se ricapita fai sapere che sistema operativo usi e che versione di Gambas. Sarà più facile per gli altri aiutarti. Ciao.
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 21:06:43
Ho provato con le GTK ed in effetti ha un problema
con le lettere accentate, anche togliendo Conv$.
Suggerisco al boss del sito Leonardo di fare una segnalazione a Benoit :-)
con l'esempio 0.0.3. Ciao.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 21:09:30
no adesso funzia tutto perfetto grazie mille ancora una volta... :-D  :-D  :-D  :-D
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 23 Settembre 2008, 21:37:12
ultima cosa che vi chiedo... ho scoperto che la cosa che volevo fare qui su ubuntu non la posso fare ma obbligatoriamente su windows... non è che ci sarebbe un modo di utilizzare gambas su windows oppure di trasformare il progetto in un eseguibile per windows???
grazie in anticipo
Titolo: Re: Aiuto per nuovo utente
Inserito da: Lux - 23 Settembre 2008, 22:19:19
Che io sappia gambas su windows non c'è o se c'è non funziona.
visto che hai usato il basic prova ad utilizzare visual basic express.(anche se non è proprio la stessa cosa, forse dovrai cambiare qualcosa).
ciao.
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 23 Settembre 2008, 22:41:14
Se vuoi usare gambas sotto winzozz devi necessariamente emulare tutto il sistema ubuntu (o chi per lui)...infatti il programma non gira sotto win....

dovresti provare, per l'appunto, a convertire il tuo codice per visual basic.....i comandi non si differienziano di molto..ma nn tutti sono tali e quali...

comunque devi aggiustare il tuo codice....dovrebbe essere così:

Codice: [Seleziona]

iFrase1 = Int(Rnd(1, 51))
iFrase2 = Int(Rnd(52, 102))
iFrase3 = Int(Rnd(103, 153))


infatti col codice che hai scritto tu potrbbe succedere (raro ma può accadere e quindi sarebbe un bug) che esca 2 volte il numero 51 ad esempio e quindi frase1 e frase2 sarebbero uguali..
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 23 Settembre 2008, 22:59:10
scusate....mi sa che ho scritto una baggianata...perdonatemi!

comunque per curiosità ho provato il programma...ho ubuntu...e crasha molto spesso....

posso cliccare al massimo 3 volte...dopodichè crasha!
Titolo: Re: Aiuto per nuovo utente
Inserito da: giulio - 23 Settembre 2008, 23:01:43
infatti dall'help di gambas:

Codice: [Seleziona]

STATIC PUBLIC SUB Main()

  DIM Dice AS Integer

  Randomize

  Dice = Int(Rnd(1, 7))

  'Throws the dice between 1 and 6
  PRINT "You threw a " & dice

END



i numeri andavano bene. ciao.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 24 Settembre 2008, 16:23:28
non è che mi potreste dire cosa devo cambiare in visual basic? io non ci capisco molto....
grazie mille in anticipo?
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 24 Settembre 2008, 19:29:40
per favore ragazzi ne ho assolutamente bisogono... :cry:
Titolo: Re: Aiuto per nuovo utente
Inserito da: leo72 - 24 Settembre 2008, 21:51:02
Scaricati AndLinux e lancia i tuoi programmi in Gambas direttamente dentro una finestra di Windows contenente... Linux.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 24 Settembre 2008, 22:02:31
lo ho installato ma gambas nn mi funziona bene... infatti non si vede l' interfaccia grafica...
ps. quando lo avvio mi dice che manca gb.gui come mai?
Titolo: Re: Aiuto per nuovo utente
Inserito da: leo72 - 25 Settembre 2008, 15:54:30
Immagino che essendo un sistema Linux a tutti gli effetti, devi installare tutte le dipendenze di Gambas prima di poter compilare l'IDE.
Titolo: Re: Aiuto per nuovo utente
Inserito da: borelg - 25 Settembre 2008, 21:53:23
ok ce l' ho fatta a farlo funzionare con andLinux ma sarebbe molto + comodo con visual basic... non c' è proprio nessun modo per trasformare il codice di questo programma in uno adatto a vb6?
Titolo: Re: Aiuto per nuovo utente
Inserito da: Ceskho - 25 Settembre 2008, 22:31:01
certo che esiste...basta scrivere direttamente il codice in visual basic....:P
Titolo: Re: Aiuto per nuovo utente
Inserito da: md9327 - 26 Settembre 2008, 11:08:24
Perdona il mio intervento ma, se non ricordo male il VB è nato prima di Gambas, e oltre al fatto che gira solo su windowz, credo sia poco probabile che qualcuno si sia dato briga di costruire un apposito programma di traduzione, tra le altre cose all'indietro (verso VB).
A parte il discorso di scontro tra i due sistemi operativi, a chi vuoi interessi una cosa del genere a parte te?
Già il fatto di nominare VB6, ed ora c'è dotnet, pensa se qualcuno si mette a fare programmi o studiare metodi di traduzione da Gambas e VB...
Al massimo potrebbe accadere l'inverso, ovvero tradurre VB verso Gambas...

Credo che, se ne hai assolutamente bisogno, ti toccherà mettere mano tu direttamente al codice, per poter fare questa trasposizione. Tieni presente che, però, a parte il puro codice (le istruzioni) che potrebbero essere facilmente tradotte, tutta la parte grafica sarebbe un bel problema, dato che Gambas, come per VB, usano metodi di costruzione proprietari e codificati in modo diverso (vedi file .form). La traduzione di questi file comporterebbe un bel dispendio di tempo e di fatica, con tutti i relativi problemi che ha questo tipo di traduzione.