#121 Inviato 31 October 2008 - 17:34 PM
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!"
#122 Inviato 31 October 2008 - 18:48 PM
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.
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#124 Inviato 02 November 2008 - 22:44 PM
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 quiQuesto è 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 stopottenendo 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 quiQuesti 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 quiVerranno 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] enda [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 quiInoltre, 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 quie ripeterà continuamente; in quest'altro:
3.times do # cicla 3 volte [istruzioni] end # fin quie, 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 quie, 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 quiQuesto 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.
Ho cercato di essere più chiaro nello scrivere l'esercizio. Lo sono stato?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.
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#125 Inviato 03 November 2008 - 10:46 AM
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.
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ì:Ho cercato di essere più chiaro nello scrivere l'esercizio. Lo sono stato?
#126 Inviato 03 November 2008 - 15:54 PM
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^^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.
cominciamo:
Creare un array globale vuoto.
Aggiungere all'array i tre numeri 1, 2 e 8 utilizzando un ciclo a scelta.
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).
[spoiler]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 ><!!
Modificato da Losco individuo, 03 November 2008 - 18:08 PM.
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!"
#129 Inviato 04 November 2008 - 22:27 PM
1) Creare una costante e una variabile globale che siano rispettivamente float e stringa. Inserire un numero qualsiasi nel nome di una delle due variabili.
easy, fido
#130 Inviato 04 November 2008 - 23:31 PM
@kamahl:
@losco:
@psyko:
un'annotazione che devo fare un pò a tutti riguarda gli spazi e la sistemazione del codice. mantenere un'ordine può sembrare una cosa superficiale, ma invece aiuta molto, quindi è importante metterci attenzione.
in particolare i segni di uguaglianza e le operazioni vanno distanziate dal resto:
a = 5 a += 3 if b == 2 c != a ? b = a + c : a = b = ce lo stesso per le funzioni, forain0..2 non è la stessa cosa di for a in 0..2, darà anche errori di sintassi, quindi badateci.
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#131 Inviato 07 November 2008 - 19:55 PM
Disegnatrice grafica onoraria della: "Nuova Generazione del Making Italiano"
Quello che mi piace:
#132 Inviato 20 November 2008 - 18:39 PM
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#133 Inviato 20 November 2008 - 21:12 PM
#134 Inviato 20 November 2008 - 21:33 PM
secondo-me 0,1
Eberk94 0,1
PSYKO 1,2
giangra 0,1,2
alexotter 0,1,2,3
Losco individuo 0,1,2,3,4
Niki#94# 0,1,2,3,4
Kamahl 0,1,2,3,4,5
così, una lista orientativa.
0 è l'iscrizione, gli altri numeri sono gli esercizi completati. quello che mi preoccupa è che per ogni esercizio si perdono due utenti XD
in ogni caso io son sempre qui, aspetto vostri esercizi^^
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#135 Inviato 29 January 2009 - 21:38 PM
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.
Modificato da Alexotter, 29 January 2009 - 21:40 PM.
#136 Inviato 15 February 2009 - 10:42 AM
cercherò di dare esercizi più senzati, scusatemi ç_ç
cercherò anche di postare a breve quella lezione su moduli, classi e funzioni e rimettermi in linea per postare le lezioni su RGSS
grazie per la sopportazione xD
-
- Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggetti
- Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato
Roba scritta, guide:
- Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto
Applicazioni:
Progetti!
#137 Inviato 17 February 2009 - 16:34 PM
#138 Inviato 18 April 2009 - 15:06 PM
} 2rA - web site {
E' disponibile il primo capitolo completo di 2rA!
} 2rA: Capitolo I {
#139 Inviato 19 April 2009 - 12:34 PM
Se dovete fare una cosa semplice, tipo
if (a==b) c='pippo';else c='pluto';Usate le funzionalita' del linguaggio piu' complicato che esiste:
c=select decode(sign(a-b),0,"pippo","pluto");
#140 Inviato 19 April 2009 - 17:40 PM
mikb89 (colui che tiene il corso) ha problemi di connessione.
Se volete iscrivervi fatelo eseguite i 5 esercizi proposti in precedenza e chiederò io a qualcuno di correggerli.
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!"