Jump to content
Rpg²S Forum
  • 0

Aiuto per imparare l'RGSS


mikb89
 Share

Question

Questo topic non serve per risolvere i problemi con gli script, per quello c'è lo sportello amico, e non contiene neanche un lungo discorso che spiega gli script, ma sarà un corso passo passo con gli utenti che vorranno partecipare e quindi imparare (e se partecipate imparate perchè altrimenti io non mi darò pace).

 

Ogni passo del corso sarà identificato con un numero, che va citato quando gli si riferisce, insieme alla risposta sotto spoiler. Ad esempio questo punto:

 

0) Chi intende partecipare?

 

Per rispondere a questo passo, bisogna scrivere il messaggio così:

 

0) Chi intende partecipare?

 

Io partecipo ^^

 

 

E tutto quello che sta fuori dallo spoiler può essere un commento di altro tipo.

 

La partecipazione è vincolante, nel senso che non andrò avanti col 2° passo se tutti quelli che hanno dichiarato di partecipare non dicono che va bene il primo, quindi partecipate se avete intenzioni serie, altrimenti bloccate tutto ><

 

In qualsiasi momento cmq uno può disdire la partecipazione o uno che non partecipa può iniziare a partecipare.

 

Se chi già conosce gli script nota che sbaglio qualcosa, è pregato di farlo notare, con garbatezza e gentilezza, in modo da non impartire possibili nozioni errate a chi desidera imparare.

 

Credo che sia tutto. Vi aspetto in molti ^^

 

Ecco i link rapidi ai passi già postati.

Passo 1: Le variabili

Passo 2: Gestione delle variabili

Passo 3: Gli array

Passo 4: Le condizioni

Passo 5: I cicli

Edited by mikb89

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • Answers 146
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0
ah... una cosa... sul sito tryruby, seguendo il corso in 15 minuti, non sono riuscita a capire una cosa, e quindi non riesco ad andare avanti... riesci ad aiutarmi? sarei all' help 6...

grazie mille^^

Cosa non hai capito?

http://www.rpg2s.net/awards/bestscripter1.jpg

Se avete bisogno di modifiche, correzioni o creazioni da zero di script RGSS, allora visitate la mia bottega.

La bottega di Sylaer

Link to comment
Share on other sites

  • 0
Link to comment
Share on other sites

  • 0
3) Creare un array contenente: un numero, una stringa, e un altro array con un altro numero (sempre dentro il primo).

Creare un secondo array che contenga: l'addizione dei due numeri inseriti nel primo array, la sottrazione, la moltiplicazione (la divisione no).

Aggiungere al primo array il secondo.

Inserire nel terzo valore del primo array (che è un altro array) la lunghezza del primo array.

 

 

var_giangra=[18,"rpgmxp"[3]]

array_somma=[[18+3],[18-3],[18*3]]

aggiunta=[[18,"rpgmx"]+[3]]

 

 

 

L'ultimo punto dell'esercizio:

Inserire nel terzo valore del primo array (che è un altro array) la lunghezza del primo array

non riesco a capirlo :tongue:

Link to comment
Share on other sites

  • 0

@giangra:

 

 

var_giangra=[18,"rpgmxp"[3]]

array_somma=[[18+3],[18-3],[18*3]]

aggiunta=[[18,"rpgmx"]+[3]]

 

L'ultimo punto dell'esercizio:

Inserire nel terzo valore del primo array (che è un altro array) la lunghezza del primo array

non riesco a capirlo :tongue:

 

allora...

la prima riga è giusta, manca solo la virgola tra la stringa e [3]

 

per la seconda due cose:

1) non c'è bisogno di rinchiudere i numeri dentro ulteriori parentesi quadre (e quindi array)

2) nell'esercizio non chiedevo di riscrivere i numeri, ma di prendere il valore dall' array var_giangra direttamente. se questo punto non ti è chiaro rileggi dalla lezione ^^

 

la terza:

dovevi aggiungere al primo array il secondo, cioè sommare array_somma e var_giangra, quindi non va bene così.

 

allora il terzo valore del primo array sarebbe [3], dato che:

primo valore -> 18

secondo valore -> "rpgmxp"

terzo valore -> [3]

e quindi, dato che è tra parentesi quadre, è un altro array. è a questo array che devi aggiungere la lunghezza di var_giangra, che si ricava tramite una funzione che c'è scritta nella lezione :tongue:

 

mi raccomando se qualcosa non ti è chiara, leggi la lezione e poi riprova. soprattutto queste cose importanti vanno imparate bene.

 

 

 

Edited by mikb89

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0
3) Creare un array contenente: un numero, una stringa, e un altro array con un altro numero (sempre dentro il primo).

Creare un secondo array che contenga: l'addizione dei due numeri inseriti nel primo array, la sottrazione, la moltiplicazione (la divisione no).

Aggiungere al primo array il secondo.

Inserire nel terzo valore del primo array (che è un altro array) la lunghezza del primo array.

 

serie=[1,"+1 fa",[2]]

operazioni=[serie[0]+serie[2][0],serie[0]-serie[2][0],serie[0]*serie[2][0]]

serie=serie+operazioni

serie[2].push(serie.size)

 

 

Link to comment
Share on other sites

  • 0

@alexotter:

 

 

tutto giusto ^^

 

 

Mi sono assentato un pò, ma la lezione l'ho scritta, il tempo di sistemarmi e la posto.

 

manca cmq ancora qualcuno a cui tengo personalmente che faccia l'esercizio =P

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0

Vogliamo andare avanti

vogliamo andare avanti

chi manca?

chi manca?

 

quando scade il termine?

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

A grande richiesta:

 

...

 

 

Passo 4: Le condizioni

Per condizione si intende che se 'qualcosa' allora 'qualcos'altro', cioè al verificarsi di una data condizione, verranno eseguite date operazioni. Abbiamo tre diversi tipi di condizioni in ruby: if, unless e case.

Passiamo al codice, ed impostiamo la variabile 'a' a 4 solo se 'b' è uguale a 2.

a = 4 if b == 2

quindi va scritto: 'operazione' if 'condizione'. Questo metodo si può usare solo con una operazione, ma prima di andare a vedere gli altri metodi, vediamo la condizione. Notate come non va scritto b = 2, ma b == 2. Quando si tratta di assegnare un valore va scritto un solo =, mentre quando si deve controllare l'uguaglianza, ne vanno scritti 2. Oltre all'uguaglianza, si può eseguire una funzione se la comparazione risulta diversa (!=), il primo valore maggiore al secondo (>), il secondo valore maggiore al primo (<), il primo maggiore o uguale al secondo (>=), il secondo maggiore o uguale al primo (<=). Questi segni tra parentesi vanno sostituiti a ==. Quindi scriviamo il codice che imposti 'b' a 2 se è diverso, e 'a' a 8.

if b != 2
b = 2
a = 8
end

in questo caso operazioni e condizione non vengono scritti sulla stessa riga e viene scritta prima la condizione e poi le operazioni. È importante anche ricordarsi di scrivere 'end' dopo la lista di operazioni, tutto quello che sta tra la condizione e 'end' verrà eseguito se la condizione viene riscontrata. In mezzo è anche possibile aggiungere 'else' e le operazioni che lo seguono verranno eseguite se la condizione non viene riscontrata, quindi unendo i due codici scritti sopra verrebbe:

if b == 2
a = 4
else
b = 2
a = 8
end

Abbiamo esaminato 'if', ora passiamo a 'unless'.

unless b == 2
b = 2
a = 8
else
a = 4
end

La differenza tra i due è che if esegue le operazioni se la condizione risulta true, mentre unless le esegue se risulta false. Esatto, nella condizione si può mettere anche una variabile booleana, semplicemente scrivendo il nome della variabile, senza segni di comparazione.

La condizione if può essere scritta anche in un modo "abbreviato", cioè utilizzando "?" e ":". Considerando:

a = 4 if b == 2

nel modo abbreviato andrebbe scritto:

b == 2 ? a = 4 : a = 8

esaminandolo, il metodo è il seguente: 'condizione' '?' 'funzione se condizione vera' ':' 'funzione se condizione falsa'. I due punti (che stanno per 'else') possono anche non essere messi, io li ho messi per completezza.

Un'altra cosa riguardante le condizioni, sono 'and', 'or' e 'not', che possono essere scritti nelle forme abbreviate '&&', '||' e '!'. La loro funzione è quella di fare eseguire una funzione se si verificano più condizioni o se si verifica l'una o l'altra, oppure cambiare una condizione vera in falsa. Faccio degli esempi:

if b == 2 and c == 13
a = 4
end

In questo caso la funzione viene eseguita se b è 2 e c è 13, entrambe devono essere vere.

if b == 2 or d == 24
a = 4
end

In questo caso la funzione viene eseguita se b è 2 oppure se d è 24, basta che una delle due sia vera.

Possiamo anche combinare questi operatori:

if c == 13 and (b == 2 or d == 24)
a = 4
end

Se c è 13 e, b è 2 oppure d è 24, viene eseguita la funzione. Consiglio di utilizzare le parentesi in questi casi per non crearvi confusione e per non crearne al programma, che senza parentesi potrebbe anche interpretarla così:

if (c == 13 and b == 2) or d == 24
a = 4
end

cioè se le prime due sono vere oppure se lo è solo la terza. Quindi mettete le parentesi.

not serve per negare, mettiamo caso che vogliamo eseguire la funzione se b è diverso da 2.

if not b == 2
a = 4
end

not può essere anche combinato con and e or. Per fare un esempio:

if (c == 13 and not b == 2) or d == 24
a = 4
end

Mi sembra abbastanza semplice, no?

Passiamo a 'case'. A differenza dei due citati sopra, case esegue operazioni a seconda del valore della condizione, cioè se b == 1 allora questo, se b == 2 quest'altro, se b == 3 ecc. Il codice sarà così:

case b
when 1
# operazioni
when 2
# operazioni
when 3
# operazioni
else
# operazioni
end

Con case non abbiamo segni di comparazione, e la variabile che gli diamo può restituire qualsiasi cosa, non solo true o false, siamo noi poi a scegliere quali valori ci interessano. Mettendo else, verranno eseguite le operazioni se la variabile non restituisce nessuno dei valori che abbiamo specificato con i when. Per il resto mi sembra abbastanza intuitivo. È ovvio che a tutte e tre le condizioni oltre che il valore di una variabile possiamo passare il valore di una funzione, ma lo vedremo quando passeremo alle funzioni.

 

L'esercizio ^^

4) Partendo da questo codice:

a = 1
b = 5
c = []

creare una condizione che incrementi a di 2 se '(' b è diverso da 5 e la grandezza dell'array c è 1 ')' oppure anche se la grandezza dell'array c è 0 (vuoto). Dopodichè aggiungere tanti elementi all'array c quanto è il valore di a, sempre tramite condizione.

 

gli esercizi si cominciano a fare tosti...

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0
4) Partendo da questo codice:

a = 1
b = 5
c = []

creare una condizione che incrementi a di 2 se '(' b è diverso da 5 e la grandezza dell'array c è 1 ')' oppure anche se la grandezza dell'array c è 0 (vuoto). Dopodichè aggiungere tanti elementi all'array c quanto è il valore di a, sempre tramite condizione.

 

 

if (b!=2 && c.size==1) || c.size==0								  
 a+=2																 
end
case a															  
 when 1															   
c.push(1)															
 when 2															   
c.push(1)															
c.push(2)															
 when 3															   
c.push(1)															
c.push(2)															
c.push(3)															
 else																 
print("a troppo grande o troppo piccolo")											 
end

 

 

Va bene così? Perchè per "aggiungere tanti elementi all'array c quanto è il valore di a", in teoria a potrebbe assumere tantissimi valori, con un case altrettanto grande. Io ci avrei messo un bel for, poi non so.

Fiero membro della:

[img]http://img87.imageshack.us/img87/9409/yumenosoftgw5.png[/img]

[url="http://rpg2s.net/forum/index.php?showtopic=1529"][img]http://img225.imageshack.us/img225/8845/tenshibanxd5.png[/img][/url] [color="#0000FF"][b]A [i][url="http://yumeno.altervista.org/"][color="#9932CC"]YumeNo-Soft[/color][/url][/i] Production[/b][/color]
Link to comment
Share on other sites

  • 0
4) Partendo da questo codice:

CODICE

a = 1

b = 5

c = []creare una condizione che incrementi a di 2 se '(' b è diverso da 5 e la grandezza dell'array c è 1 ')' oppure anche se la grandezza dell'array c è 0 (vuoto). Dopodichè aggiungere tanti elementi all'array c quanto è il valore di a, sempre tramite condizione.

 

 

 

if (b != 2 and c.size == 1) or c.size == 0

a += 2

end

 

 

 

 

Dopodichè aggiungere tanti elementi all'array c quanto è il valore di a, sempre tramite condizione.

Questo esercizio non l'ho capito molto, me lo puoi rispiegare...il try ruby, mi da' errore se lascio l'else vuot, cosa ci scrivo? Deve per forza esserci l'else?

 

EDIT: inserisco la seconda parte dell'esercizio:

 

 

 

case a

when 1

c.push(1)

when 2

c.push(1)

c.push(2)

when 3

c.push(1)

c.push(2)

c.push(3)

end

 

 

 

ora è giusto? non ho messo else come mi hai detto. Domanda: ma se mettevo un "when 4" mi dava errore perchè "a" era grande 3?

Edited by Losco individuo

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

nono else non è assolutamente obbligatorio, si mette solo se serve, e in questo caso non serve, quindi non scriverlo proprio.

 

@kamahl:

 

si, hai ragione, ma ancora i cicli non li ho spiegati, e poi volevo vedere anche come ve la cavate con case ^^. L'esercizio è giusto.

 

 

@losco:

 

la prima parte è corretta. in quella che non hai capito, si devono aggiungere valori a caso all'array c. Quanti se ne devono aggiungere? tanti quanto è il valore di a dopo averlo incrementato. quindi tramite condizione devi mettere che se a è 1, all'array c va aggiunto un solo valore, se a è 2 ne vanno aggiunti 2, se a è 3 ne vanno aggiunti 3. Per aggiungere all'array intendo aumentare la dimensione dell'array, non i valori (anche perchè è vuoto). spero di essermi spiegato meglio ^^

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0
ho finito l'esercizio nel primo post, ho fatto un edit con una domanda Edited by Losco individuo

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

ti rispondo qui.

no, non ti dava errore, semplicemente a non è uguale a 4, quindi le funzioni che metti non vengono eseguite. forse forse potrebbe dare errore se metti when "stringa" quando la variabile è un numero, ma non so, non ci ho mai provato.

 

l'esercizio va bene, l'end finale penso che l'hai solo dimenticato, no?

 

 

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0
l'esercizio va bene, l'end finale penso che l'hai solo dimenticato, no?

 

 

eh gia ^^ ora correggo

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

 

if (b!= 5 and c.size== 1)|| c.size==0																										
a += 2																																	   
end																  
																
case a																																	   
when 1																																	   
c.push(1)																																	
when 2																																	   
c.push(1)																																   
c.push(2)																																	
when 3																																	  
c.push(1)																																	
c.push(2)																																	
c.push(3)																																	
when 4																																	   
c.push(1)																														   
c.push(2)																																  
c.push(3)																												
c.push(4)																	   
end

 

 

non so perchè, ma mi mette dei valori accapo...

Edited by Niki#94#
Link to comment
Share on other sites

  • 0

boh

 

va bene comunque^^

 

 

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0

ma perchè c'è gente che prende impegni e danneggia gli altri non mantenedoli?

 

Mik...credo di avere il consenso di tutti i presenti se dico: VAI AVANTI!

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

hai ragione losco, scusate per il ritardo ma ho avuto una settimana impegnata, purtroppo all'università è così, ci sono settimane in cui non fai nulla e altre in cui ti tocca studiare seriamente o non dai l'esame e se questo si aggiungono tutti i casini che di questo periodo ci sono a Roma, bhè puoi capire benissimo quanto tempo ho passato al pc...in ogni caso non sono l'ultimo ad aver postato e cmq l'ho fatto prima che mik avesse scritto la successiva lezione ;) mik io consiglio di fare una lezione a settimana e chi c'è c'è, non puo' recupera successivamente

 

tornando all'esercizio ho avuto problemi al secondo punto, potrebbe andare così?

creare una condizione che incrementi a di 2 se '(' b è diverso da 5 e la grandezza dell'array c è 1 ')' oppure anche se la grandezza dell'array c è 0 (vuoto). Dopodichè aggiungere tanti elementi all'array c quanto è il valore di a, sempre tramite condizione.

 

 

 

a = 1

b = 5

c = []

if (b!=5 and c.size == 1) or c.size == 0

a=a+2

end

 

case a

when 1

c[0].push(a)

when 2

c[0].push(a)

when 3

c[0].push(a)

else

c[0].push(a)

end

 

 

 

edit: ho aggiunto lo spoiler

Edited by Alexotter
Link to comment
Share on other sites

  • 0
si ma tanto non sei solo tu ^^

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

  • 0

@alexotter:

 

il codice è giusto.

solo questa parte:

case a
when 1
c[0].push(a)
when 2
c[0].push(a)
when 3
c[0].push(a)
else
c[0].push(a)
end

non è esatta.

intanto quando scrivi push, non è necessario specificare il numero dell'array, basta scrivere c.push(a). la differenza è questa:

 

c[0].push(a):

c = [[3]]

 

c.push(a):

c = [3]

 

capito? cioè scrivendo il numero crei un altro array all'interno; è solo per specificare.

 

quello che chiedeva l'esercizio cmq è che dovevi aggiungere all'array più di un elemento. quanti elementi? quanto è il valore di a. quindi se a è 1 devi scrivere push 1 volta, se a è 2 lo devi scrivere 2 volte, se a è 3 3 volte, ecc... per adesso ve lo sto facendo fare a mano, poi quando li studieremo questa cosa andrà fatta coi cicli.

 

cmq va bene, non c'è bisogno che posti di nuovo con le correzioni, sono piccolezze. ^^

 

 

 

mi dovete scusare, è colpa mia che sono stato impegnato e ho avuto problemini al pc. appena posso posto la lezione sui cicli infiniti, dopodichè faremo i cicli finiti e per ultima la lezione su moduli, classi e funzioni. quella sui cicli ho pensato di dividerla perchè è lunga, e la gestione degli errori non credo che la tratteremo.

 

con queste elencate sopra finiamo il linguaggio generale del ruby, poi passeremo a studiare l'RGSS.

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0

ce l'ho fatta! XD

i cicli, tutti in una volta.

 

Passo 5: I cicli

 

Per ciclo intendiamo del codice che viene ripetuto dal programma per un numero determinato o indeterminato di volte, modificando dei valori, se necessario, in base al numero di giri che ha già fatto il codice.

Per fare un'esempio semplice, prendiamo un'array che deve contenere il numero di variabili indicato a sua volta da un'altra variabile. L'esempio chiarirà.

a = 4 # impostiamo "a" a 4
c = [] # creiamo l'array "c"
case a # se "a"
when 1 # è 1:
c.push(1) # aggiungi all'array "c" l'elemento 1
when 2 # è 2:
c.push(1, 2) # aggiungi all'array "c" gli elementi 1 e 2
when 3 # è 3:
c.push(1, 2, 3) # aggiungi all'array "c" gli elementi 1, 2 e 3
[...]

Ovviamente del codice del genere non può esistere, sia perchè occupa spazio inutilmente, sia perchè non copre tutti i casi e sia perchè in sè non serve a niente...

a = 4 # impostiamo "a" a 4
c = [] # creiamo l'array "c"
for n in 1..a # ciclo da 1 a "a"
c.push(n) # aggiungi all'array "c" l'elemento "n"
end # fin qui

Questo è un ciclo, per l'esattezza un ciclo "for"; ci sono altri cicli che andremo a vedere.

Possiamo notare che con poche righe il risultato è pure migliore di quello che avevamo con case. Questo non significa che case non va usato, ma va usato tutto, nei momenti opportuni.

Vediamo meglio il ciclo for.

In tutti i casi, dovremo scrivere "for" all'inizio del blocco di codice e "end" alla fine. "n" è una variabile creata dal ciclo ed impostata al numero di partenza specificato (1 in questo caso) che ad ogni giro viene incrementata di 1. "in" è una parola chiave che va specificata dopo il nome della variabile. "1..a" specifica il numero di giri da eseguire. In questo caso, a vale 4, quindi questo codice verrà eseguito in questo modo:

ciclo con n = 1
aggiungi 1 all'array c
ciclo con n = 2
aggiungi 2 all'array c
ciclo con n = 3
aggiungi 3 all'array c
ciclo con n = 4
aggiungi 4 all'array c
n è uguale ad a quindi stop

ottenendo c = [1,2,3,4].

Occorre specificare che, in 1..a, a (il secondo valore) deve essere più grande o uguale ad 1 (il primo valore) per essere eseguito il ciclo. Ed entrambi i numeri devono essere interi.

Oltre a 1..a si può scrivere 1...a che equivale a 1..a-1. Questo metodo/tecnica viene usato solitamente quando si trattano array, infatti se c è [1,2,3,4], c.size sarà 4, mentre per prendere o modificare i dati di c, saranno indicati con c[0], c[1], c[2] e c[3], non con c[4]. I possibili codici possono quindi essere:

c = [1,2,3,4] # impostiamo i valori dell'array c

# metodo 1
for n in 0..c.size - 1 # ciclo da 0 fino alla grandezza di c - 1 (3)
c[n] = n + 1 # aggiungi nella posizione n di c, n + 1
end # fin qui

#metodo 2
for n in 0...c.size # ciclo da 0 fino alla grandezza di c - 1 (3)
c[n] = n + 1  # aggiungi nella posizione n di c, n + 1
end # fin qui

#metodo 3
for n in 1..c.size # ciclo da 1 fino alla grandezza di c (4)
c[n - 1] = n  # aggiungi nella posizione n - 1 di c, n
end # fin qui

Questi sono soltanto esempi, le possibilità sono infinite (o quasi), e servono solo per rendere l'idea.

Nel caso di array, 1..a può essere completamente sostituito con il nome dell'array o direttamente con il contenuto ([1, 4, 6]), ma attenzione, in questo caso n non conterrà il numero di giri, ma gli elementi dell'array a turno. Inquest'esempio:

c = [4,7,3,2] # impostiamo i valori dell'array c

for n in c # ciclo per ogni elemento di c
p n # stampa il valore di n
end # fin qui

Verranno stampanti a schermo in sequenza 4, 7, 3, 2, e non 0, 1, 2, 3.

Colgo l'occasione per introdurre quest'importante funzione "p", che seguita da un numero, del testo tra virgolette, una variabile, un'array o un'oggetto, mostrerà il contenuto tramite una finestra di messaggio (di Windows).

 

Gli altri cicli sono principalmente "while", "until" e "do".

I cicli while e until non hanno un numero determinato di giri e non sono complicati come for da impostare. Semplicemente:

while [condizione]
[istruzioni]
end

until [condizione]
[istruzioni]
end

a [condizione] va sostituita una condizione come quelle del passo precedente (però senza if, unless, case e ?), mentre [istruzioni] è il codice che viene eseguito.

La differenza fra i due è in un certo qual modo, la stessa che passa tra if e unless, e cioè while esegue le istruzioni fino a quando la condizione resta vera, mentre until smette di seguirle non appena la condizione è vera. Riporto un esempio di utilizzo valido dei due cicli:

num = 0 # impostiamo num a 0
while num < 3 # ciclo mentre num resta minore di 3
p num # stampa il valore di num
num += 1 # incrementa num di 1
end # fin qui
# in questo modo num viene incrementato
# fino a che la condizione
# non sia più soddisfatta

arr = [] # creiamo l'array arr
until arr.size == 3 # cicla finche la dimensione di arr arriva a 3
arr.push("valore qualsiasi") # inseriamo la stringa nell'array arr
end # fin qui

Inoltre, come per if, while e until, possono essere utilizzate anche in una riga. Faccio l'esempio con until, dato che il metodo è lo stesso di while, e nel codice le istruzioni dell'until stanno su una riga.

arr = [] # creiamo l'array arr
arr.push("valore qualsiasi") until arr.size == 3 # inseriamo la stringa fino a quando la dimensione è 3

 

Discorso a parte per do i cui casi di utilizzo sono più ampi.

Può essere utilizzato in questo modo:

loop do # cicla senza limiti
[istruzioni]
end # fin qui

e ripeterà continuamente; in quest'altro:

3.times do # cicla 3 volte
[istruzioni]
end # fin qui

e, dato un numero o una variabile numerica prima di .times, ciclerà per il numero di volte indicato; così:

"stringa".each_line do |a| # cicla 1 volta
[istruzioni]
end # fin qui

e, data una stringa, ciclerà per il numero di linee (in questo caso una soltanto) di essa, mettendo in a il contenuto; e in molti altri modi che si possono trovare nella guida.

 

Le ultime cose importanti prima di concludere sono le istruzioni next e break. L'istruzione next serve per far saltare il giro e break per terminare tutto il ciclo. Queste due istruzioni vanno inserite tra la definizione del ciclo e l'istruzione end, e non sono obbligatorie. Faccio un esempio giusto per evidenziare qualche possibilità.

a = 0 # impostiamo a a 0
no = [2, 4, 5, 8] # creiamo l'array no con qualche numero
loop do # cicla senza limiti
a += 1 # incrementa a di 1
break if a >= 11 # interrompi se a supera o eguaglia 11
next if no.include?(a) # salta il codice successivo se a è inclusa in no
p a # mostra il valore di a
end # fin qui

Questo codice mostra il contenuto di a se il numero è diverso da quelli contenuti nell'array no e smette quando a è 11 o più. Conviene inserire il >= in questi casi per evitare che l'accidentale caso di salto di un numero faccia continuare all'infinito il ciclo e quindi bloccare il programma. In questo codice non succede perchè a viene incrementato prima,ma se è possibile farlo, inserire >= invece di == può convenire.

 

Questa è forse la lezione più complicata da capire per uno che inizia coi linguaggi di programmazione, e forse no, ma è comunque importante e va imparata bene.

5) Creare un array globale vuoto.

Aggiungere all'array i tre numeri 1, 2 e 8 utilizzando un ciclo a scelta.

Impostare un ciclo che continui finchè i tre valori contenuti nell'array sono diversi (quindi che smette quando sono uguali).

Fate in modo che il programma non si blocchi e come ho fatto in questo passo, mettete in ogni riga un commento che ne spiega la funzione.

Ho cercato di essere più chiaro nello scrivere l'esercizio. Lo sono stato?

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

  • 0
5) Creare un array globale vuoto.

Aggiungere all'array i tre numeri 1, 2 e 8 utilizzando un ciclo a scelta.

Impostare un ciclo che continui finchè i tre valori contenuti nell'array sono diversi (quindi che smette quando sono uguali).

Fate in modo che il programma non si blocchi e come ho fatto in questo passo, mettete in ogni riga un commento che ne spiega la funzione.

Ho cercato di essere più chiaro nello scrivere l'esercizio. Lo sono stato?

l'ultima parte non tanto, cioè non ho capito che intendi per "Fate in modo che il programma non si blocchi", per caso intendi che l'ultimo ciclo non deve essere infinito?, io l'ho interpretato così:

 

 

$arr=[] #creo l'array globale vuoto

for i in1..8 #per i che va da 1 a 8

if i==1 || i==2 || i==8 #se i é = a 1,2 o 8

$arr.push(i) #aggiungi i all'array

end #fine if

end #fine for

while $arr[0]!=$arr[1] || $arr[0]!=$arr[2] #finchè il primo valore dell'array é diverso dal secondo e dal terzo

#cambia i valori dell'array con uno a caso (round per avere 0 o 1)

$arr[0]=rand.round

$arr[1]=rand.round

$arr[2]=rand.round

end

 

 

 

Fiero membro della:

[img]http://img87.imageshack.us/img87/9409/yumenosoftgw5.png[/img]

[url="http://rpg2s.net/forum/index.php?showtopic=1529"][img]http://img225.imageshack.us/img225/8845/tenshibanxd5.png[/img][/url] [color="#0000FF"][b]A [i][url="http://yumeno.altervista.org/"][color="#9932CC"]YumeNo-Soft[/color][/url][/i] Production[/b][/color]
Link to comment
Share on other sites

  • 0
5) Creare un array globale vuoto.

Aggiungere all'array i tre numeri 1, 2 e 8 utilizzando un ciclo a scelta.

Impostare un ciclo che continui finchè i tre valori contenuti nell'array sono diversi (quindi che smette quando sono uguali).

Fate in modo che il programma non si blocchi e come ho fatto in questo passo, mettete in ogni riga un commento che ne spiega la funzione.

senti, io ho una mente malata, e guarda se questo scempio abominevole può anche solo esistere: il try ruby lo prende, magari esiste, ma l'esercizio è sbagliato. Io ho cercato di cavarmela in qualche modo^^

 

cominciamo:

Creare un array globale vuoto.

Aggiungere all'array i tre numeri 1, 2 e 8 utilizzando un ciclo a scelta.

 

 

 

$losco=[] #creo l'array globale losco

if $losco=[] #se l'array losco è vuoto

$losco.push(1) #aggiungi 1 all'array

2.times do #parte il ciclo di due giri

case $losco #nel caso losco

when1 #sia =[1]

$losco.push(2) #aggiungi 2 => losco=[1,2]

when2 #sia =[1,2]

$losco.push(8) #aggiungi 8 => losco=[1,2,8]

end #fine if

end #fine ciclo

 

 

 

ma non esiste il when0? altrimenti invece della prima condizione avrei usato direttamente when0, when1, when2

 

Impostare un ciclo che continui finchè i tre valori contenuti nell'array sono diversi (quindi che smette quando sono uguali).

 

 

questo non sono capace, ho guardato quello che ha fatto Kamahl, ma tutte le volte usa comandi, che non hai spiegato...mannaggia a kamahl, che non si può copiare ><!!

Edited by Losco individuo

http://i428.photobucket.com/albums/qq5/losco_individuo/2cmly83.png

 

http://i428.photobucket.com/albums/qq5/losco_individuo/BannerNGMI-1.png

Membro Alfa della: "Nuova Generazione del Making Italiano"

"Richiedi anche tu il bannerino della NGdMI e contribuisci alla sopravvivenza della specie...avrai un numero tuo di identificazione e un posto nella storia del making!"

Il making con il cuore

http://i62.servimg.com/u/f62/13/12/87/37/nuovob11.png

Nuovo LegendRpgMania

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...