Primi Programmi Ruby

Ciao ragazzi, sono tornato (purtroppo per voi…)
Sto sviluppando i primi programmi con ruby, per approdare meglio a
Rails.
in particolare ne sto facendo uno (semplicissimo) che mi permetta di
gestire le ore della settimana.

vorrei che alla fine le ore finissero in un array (per memorizzare le
settimane…) ma non sono capace…

Qualcuno, che abbia tempo e soprattutto voglia, mi puo’ aiutare??
Ho usato solo puts e gets…

Allego codice e ringrazio anticipatamente…

puts "Inserisci la settimana "
$stdout.flush
sett = gets #inserisco la settimana es. 1-8ott
puts "OK. Gestiamo i dati della settimana " + sett

puts “Inserire ore gioco:”
$stdout.flush
gioco = gets
$stdout.flush

puts “Inserire ore dormire:”
$stdout.flush
dormire = gets
$stdout.flush

puts “Inserire ore studiare:”
$stdout.flush
studiare = gets
$stdout.flush

puts “Inserire ore Malattia:”
$stdout.flush
sick = gets
$stdout.flush

puts “Inserire ore Lavoro:”
$stdout.flush
lav = gets
$stdout.flush

puts “Inserire ore Straordinario:”
$stdout.flush
extra = gets
$stdout.flush

puts
puts

puts "Riepilogo: "
$stdout.flush
puts "Gioco: "+gioco
puts "Dormire: "+dormire
puts "Studiare: "+studiare
puts "Malattia: "+sick
puts "Lavoro: "+lav
puts "Straordinario: "+extra

che problema hai esattamente? non ho capito.

Ciao,
io vorrei che i dati che inserisco ogni settimana (es:inserisco
settimana 1-8ottobre) vadano in un array apposito che contenga il
riepilogo delle ore.
Così innanzitutto i dati si memorizzerebbero (il mio programma funziona
solo per la settimana corrente), ed io li potrei richiamare (es non mi
ricordo più cosa ho fatto nella settimana 12-19luglio).
Spero di essere stato un pò più chiaro.
Grazie mille.

Dovresti fare un hash di array …
La chiave dell’hash sarebbe la settimana e il contenuto sarebbe
un’array con le ore di quella settimana …

In questo modo potresti inserire il tuo riepilogo
così:sett[“1-8sett”]=[4,7,7,6,5,2]
sett[“9-16sett”]=[6,9,2,0,7,5]
e con sett[“1-8sett”] recuperi l’array contenente il riepilogo di
quella settimana.

Spero di esserti stato utile.

2006/10/19, biancoc_sdc [email protected]:

Come lo hai scritto tu sarebbe un hash di hash … ma dovresti scriverlo
così:sett[“1-8sett”]={“gioco”=>2, “dormire”=>4}

Ti consiglio di provare a farlo da irb, aiuta un sacco :wink:

Cmq se tu ti definisci un hash settimane=Hash.new e nella parte del
riepilogo lo valorizzi
così:settimane[sett]={“gioco”=>gioco,“dormire”=>dormire}

in questo modo puoi recuperare le ore di gioco della settimana
“1-8sett” facendo semplicemente settimane[“1-8sett”][“gioco”]

Se non hai problemi con l’inglese ti suggerisco “Programming Ruby”
ottimo manuale :wink:

2006/10/20, biancoc_sdc [email protected]:

Ciao Federico,
ti ringrazio per la spiegazione ma non e’ che abbia capito molto…

l’hash verrebbe fuori cosi’??
sett[“1-8sett”]=[“gioco”=>4, “dormire”=>2]

dove va inserito, come lo richiamo?

Imparero’ mai Ruby???

Federico,
ho dato un’occhiata a quanto scritto ed ho consultato un paio di guide
on line.
Ma purtoppo mi devo arrendere.
Al momento non capisco.
Se avrai tempo per scrivermi il codice compilato (funzionante, con il
mio caso) cerchero’ di studiare quello.
Sono l’ulitmo…
Grazie davvero

Non ti spaventare che si tratta di una cavolata …
Prendi il codice che hai scritto tu, inserisci come prima riga
settimane=Hash.new

poi dopo la tua riga
sett = gets #inserisco la settimana es. 1-8ott

aggiungi
settimane[sett]=Hash.new

poi modifichi tutte le righe come gioco = gets dormire = gets etc etc
… con
settimane[sett][“gioco”]=gets.to_i
settimane[sett][“dormire”]=gets.to_i
etc etc …

infine sostituisci la parte del riepilogo con
sett.each { |x,y|
puts "Settimana "+x
y.each { |w,z|
puts "Ho passato “+z.to_s+” ore a "+w
}
}

se trovi nomi più significativi di x,y,w e z forse è meglio :wink:

Dopo queste modifiche ti stampa:
Settimana 1-8sett
Ho passato 4 ore a dormire
Ho passato 2 ore a gioco

Se serve altro aiuto chiedi pure …

2006/10/20, biancoc_sdc [email protected]:

Federico,
commento il tuo codice cosi’ vediamo se quel poco che so e’ giusto…(se
i termini sono errati correggi pure…)

settimane=Hash.new #dichiarazione dell’hash

settimane[sett]=Hash.new #inizializzo l’hash

settimane[sett][“gioco”]=gets.to_i #la prima parte non la so…la seconda dovrebbe essere: quello che inserisci convertilo in intero

sett.each { |x,y| #per ogni oggetto in x
puts "Settimana "+x #stampa settimana x
y.each { |w,z| #non lo so…
puts "Ho passato “+z.to_s+” ore a "+w #non lo so…
}
}

Il tutto mi da quest’errore:
f.rb:56: undefined method `each’ for nil:NilClass (NoMethodError)

Non ho capito bene dove ho messo non lo so…se hai tempo/voglia di
spiegarmi ti sono grato…
La mia documentazione di riferimento e’ questa:

http://pine.fm/LearnToProgram/?Chapter=00

ma come vedi sono ancora piu’ che un volenteroso beginner…

Grazie per l’aiuto, davvero!!!

2006/10/20, biancoc_sdc [email protected]:

settimane=Hash.new #dichiarazione dell’hash
esatto

settimane[sett]=Hash.new #inizializzo l’hash
errato
dichiara settimane[sett] come un nuovo Hash … immaginati una
tabella, la prima riga continene “1-8sett”,“9-16sett” e così via …
mentre ogni colonna contiene i vari dati relativi alla settimana
{“gioco”=>2, “dormire”=>4} (ovviamente con valori diversi)

settimane[sett][“gioco”]=gets.to_i #la prima parte non la so…la seconda dovrebbe essere: quello che inserisci convertilo in intero
settimane[sett][“gioco”] fa riferimento alle ore di gioco della
settimana sett

sett.each { |x,y| #per ogni oggetto in x
puts "Settimana "+x #stampa settimana x
y.each { |w,z| #non lo so…
puts "Ho passato “+z.to_s+” ore a "+w #non lo so…
}
}

Il tutto mi da quest’errore:
f.rb:56: undefined method `each’ for nil:NilClass (NoMethodError)
errore mio, non è sett.each ma settimane.each :wink:

Io ti consiglio di fare tutte queste prove con irb, è comodissimo per
imparare e testare :wink:

Figurati, è sempre un piacere aiutare gli altri.
Mi spiace che tu debba usare windows :frowning:

irb == interactive ruby

Sotto win non l’ho mai provato ma sotto linux ti permette di scrivere
in ruby e di vedere cosa ritorna ogni istruzione (sotto win dovrebbe
essere la stessa cosa con i più i bug di windows :-D).

Se hai altre domande fai pure :wink:

2006/10/20, biancoc_sdc [email protected]:

in SciTe sotto tools dovresti avere irb. lo lanci e poi vai nella output
window, dove puoi inserire i comandi valutati da irb.

ok grazie ragazzi.
purtoppo uso ruby perchè ho gli skills troppo bassi al momento per
passare a linux, my next goal…

Grazie davvero per la spiegazione!!!

ps:io uso scite sia come editor che come output. irb è compreso nel
pacchetto d’installazione di ruby o lo devo scaricare a parte? (ho
ruby-185-21, e nella cartella d’installazione c’è interactive ruby che è
una shell dos.)

ciao e ancora grazie!!!

oppss…volevo dire windows…
come lanci irb da scite?
tools-go?
ciao!

??? non sono certo di aver capito. forse intendevi SciTe invece di
Ruby? o
windows?

Io mi trovo bene entro SciTe la maggior parte del tempo. con rails hai
bisogno di un po più dilavoro da command line invece.

On 10/21/06, biancoc_sdc [email protected] wrote:

Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


Chiaroscuro

: : i’m a miner : : | therubymine.com

no, tools | run-irb
dovrebbe essere impostato nello SciTe che viene con l’installation pack
di
ruby per windows.