Forum: Italian Ruby user group Aiuto su un problema

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 13:31
Attachment: duccio.rb (2 KB)
Attachment: duccio.rb (2 KB)
Salve a tutti ... premetto che ho imparato ruby da poco e ho bisogno del
vostro aiuto allora io ho creato questo programma che è un archivio di
merci in magazzino.
 immettendo per esempio il prodotto 'cemento'
il programma restituisce il prezzo di un singolo sacco ' 4.00 $'.
Dopo ti avvisa della quantita disponibile di cemento che hai in
magazzino restituendo (esempio: 'Quantità in magazzino: 100')
poi chiede la quantità che vuoi richiedere (per esempio
facciamo 50) quindi il programma restituisce il totale  della
moltiplicazione tra ('4.00$' il prezzo di un sacco per '50' la quantita
richiesta quindi restituisce 'totale 200 $')
chiudendo il programma xò se io immetto nuovamente nella ricerca il
prodotto 'cemento' la quantita disponibile in magazzino rimane
invariata cioè il programma non salva l'operazione che ho
precedentemente fatto,restituendo sempre (quantita in magazzino :100) e
non (quantita in magazzino: 50) .
Allora a me serve un metodo con il quale io conservo i dati per
farsi che il programma tenga traccia delle operazioni precedentemente
svolte .

Vi allego un esempio di questo programma, ha in magazzino soltanto il
prodotto cemento.. Apprezzo tanto qualsiasi vostro consiglio un saluto a
tutti
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-03-18 14:15
(Received via mailing list)
Ciao Francesco,

innanzitutto complimenti per aver dimostrato di aver sbattuto un po' la
testa con il problema, al posto di aver richiesto da subito la pappa
pronta
:-)

Ci sono davvero tante cose da affrontare, ma per partire ti consiglio di
vedere questo gist (è un tipo particolare di repository git):

https://gist.github.com/olistik/a9c4f56986be9f6675ef

Prima ancora della necessità di persistere (da qualche parte, in questo
caso su file) la quantità rimasta nel magazzino, ho modificato i nomi
delle
variabili e la gestione logica del ciclo.
In seguito ho aggiunto una semplice logica di persistenza su file.

Spero che il codice sia sufficientemente auto esplicativo, diversamente
chiedi pure lumi :-)

2015-03-18 13:31 GMT+01:00 Francesco Villafranca <pollopoop@gmail.com>:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 15:00
Ti ringrazio tantissimo non sai qnt ore sono stato su qst problema !!!
per prima cosa devo cominciare ha riscrivere la parte logica e quindi mi
vado a studiare il tuo codice perchè alcune cose per esempio non le ho
capite bene ma spero si tratta solo di approfondire cmq ti ringrazio
ancora davvero tanto ti faro sapere grazie ancora a presto
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 18:24
Attachment: nuovo.rb (10 KB)
Ciao Maurizio innanzitutto ancora una volta GRAZIE per avermi illustrato
la strada da seguire, grazie al tuo aiuto sono riuscito a dimezzare il
mio lavoro,non finirei mai di dirtelo GRAZIE !! Allora per qnt riguarda
la parte logica è tutto chiaro semplice ... ma ho qualche lacuna di
sintassi nella prima parte vorrei approfondire ancora meglio perche a me
piace avere TUTTO Molto chiaro quindi se potresti spiegarmi meglio come
si traduce la prima parte cioè :

if File.exists?(nome_file)
  quantita_rimasta = File.read('quantita_rimasta.txt').to_i
else
  quantita_rimasta = 100
  File.write(nome_file, quantita_rimasta)
end

per il resto è tutto molto chiaro infatti ho cominciato a riscrivere il
programma ..ti allego il file, ho fatto il primo reparto e sto
cominciando tutto il resto.

Non so cosa altro dirti davvero grazie grazie di cuore
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 18:31
ancora una cosa , ho aggiunto l'elenco dei reparti ma devo fare in modo
che lo visualizzi soltanto all'avvio e non ad ogni ciclo ,ci lavorero su
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 18:50
Attachment: nuovo.rb (10 KB)
bastava soltanto uscirlo fuori dal ciclo cmq preso dalla foga ti ho
allegato il programma con qualche elementare errore... lo allego di
nuovo
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-18 19:22
(Received via mailing list)
Refactoring a prima vista: sostituisci gli if scelta == ... elsif scelta
==
... else ... end con un case:

scelta = gets.chomp

case scelta
when 'totale'
  continua_ciclo = false
when prod0
  ...
else
  puts 'Prodotto non presente.'
  puts ' '
end

Poi ti consiglio di indentare meglio e in generale di seguire la Ruby
coding style guide https://github.com/bbatsov/ruby-style-guide ,
altrimenti
guardando il tuo codice non si capisce niente :)

--

Maurizio De Santis

Il giorno 18 marzo 2015 18:50, Francesco Villafranca
<pollopoop@gmail.com>
ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-03-18 20:00
(Received via mailing list)
C' effettivamente una quantit significativa di elementi su cui dovrebbe
porre l'attenzione.
Suppongo che nel suo caso, sia utile un percorso graduale che possa
fargli
capire i singoli elementi di refactoring, a partire dal suo approccio
iniziale.
On Mar 18, 2015 7:21 PM, "Maurizio De Santis"
<desantis.maurizio@gmail.com>
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-18 20:35
(Received via mailing list)
S ci sarebbe tanto da dire :) intanto riguardo la questione coding style
(du cui ne hai bisogno soprattutto per interagire con gli altri
programmatori... Calcola che su stack overflow con quel codice ti
prenderebbero a pesci in faccia) consiglio una gemma molto utile che fa
da
"correttore automatico", rubocop https://github.com/bbatsov/rubocop

Il giorno mer 18 mar 2015 20:00 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 21:40
Attachment: nuovo.rb (60 KB)
Si scusate devo smettere di usare diminuitivi, li uso ovunque anche per
scrivere 'prezzo1' uso 'prez1' e ovviamente questo non aiuta una facile
comprensione del codice.. a parte questo c'è una guida che posso
consultare per comprendere il concetto di refactoring e tanti altri
concetti importanti? sono davvero interessato a proseguire i miei studi
potreste darmi qualche dritta su cosa studiare?
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-18 21:57
Prima di tutto devo sostituire tutte le abbreviazioni con le parole
intere, spero sia questo il principale problema di comprensibilità del
codice vi postero il codice a breve
0a226d8c20c793c3e8fd2eb2fe89ded4?d=identicon&s=25 Enrico Rubboli (Guest)
on 2015-03-18 22:21
(Received via mailing list)
Francesco, non e' solo questione di abbreviazioni, una cosa
fondamentale che devi imparare a fare e' riconoscere le ripetizioni
nel tuo codice ed evitarle.

Come primo passo ti consiglio di imparare ad usare metodi*, array e
iteratori. Non ho idea di una buona guida in italiano .. prova a
googlare queste cose e cerca di capire da solo come sfruttarle per
ridurre il numero di righe del tuo codice.

E

* metodi sono (per dirla grezza) funzioni di oggetti ma non ti
preoccupare di tutto cio ancora.

2015-03-18 21:57 GMT+01:00 Francesco Villafranca <pollopoop@gmail.com>:
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-18 23:25
(Received via mailing list)
Un altro favore che ti chiedo Francesco  di essere un po' pi conciso e
preciso quando possibile: sia per te, cos ricevi risposte pi esatte, sia
per noi, cos non siamo costretti a fare grandi sforzi per capire cosa
vuoi; per esempio, riguardo questo pezzo di codice del buon De Magnis
che
ti aveva lasciato qualche dubbio:

if File.exists?(nome_file)
  quantita_rimasta = File.read('quantita_rimasta.txt').to_i
else
  quantita_rimasta = 100
  File.write(nome_file, quantita_rimasta)
end

Cosa non ti  chiaro di preciso? La logica che ti  dietro? O ci sono
parti
della sintassi del linguaggio che non comprendi?



--

Maurizio De Santis

Il giorno 18 marzo 2015 22:19, Enrico Rubboli <rubboli@gmail.com> ha
scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-03-19 12:25
(Received via mailing list)
@Francesco, lungi me dallo scoraggiarti (anzi, spacca tutto! :-D)
ammetto
che quando ti ho scritto: "Ci sono davvero tante cose da affrontare"
intendevo più o meno ciò che il mio omonimo (ciao Maurì) ed Enrico hanno
detto.
Dal codice che hai prodotto, si vede che stai iniziando a "masticare"
Ruby,
ma ci sono ancora tantissimi concetti che devi conoscere prima.
Ci siamo passati tutti, secondo differenti strade, e l'aspetto positivo
è
che hai un enorme margine di miglioramento :-)
Oltre ai concetti specifici di Ruby, vedo che ti mancano anche dei
concetti
più basilari della programmazione (ma non demordere :-)).
Prima ancora di scrivere in Ruby, dovresti avere uno schema mentale
*rigoroso* di come il programma si deve comportare.
Hai mai sentito parlare di diagrammi di flusso?

http://it.wikipedia.org/wiki/Diagramma_di_flusso

Ogni sviluppatore (Ruby, Python, C, Pascal, etc) li conosce e li usa per
definire il comportamento dell'algoritmo che deve implementare.
Mano a mano che diventi più esperto, l'uso dei diagrammi di flusso
diventa
più inconscio perché con l'esperienza assimili automaticamente questo
tipo
di rappresentazione formale degli algoritmi.

Praticamente: prova a rivedere la tua prima versione del ciclo while e
confrontala con quella che ti ho fornito io.
Prova a capire come mai la mia contiene meno istruzioni.

Secondariamente, la ripetizione del codice è male praticamente in ogni
caso
in cui un insieme di operazioni viene ripetuto tante volte, variando
solo
alcuni elementi.

Per esempio, la procedura che carica la quantità rimasta in magazzino:

if File.exists?(qnt0)
  qnt_rim0 = File.read('qnt_rim0.txt').to_i
else
  qnt_rim0 = 100
  File.write(qnt0, qnt_rim0)
end

Se ci pensi, è codice ripetuto tantissime volte che varia solo per
alcuni
parametri.
Hai agito così probabilmente per due motivi:

1) non sai come si scrive una funzione in Ruby
2) non hai maturato ancora abbastanza esperienza da sentire "dolore"
dovuto
a questo tipo di ripetizione

1) si risolve abbastanza facilmente, mentre 2) dipende quasi
completamente
dall'esperienza (diretta, tramite letture di articoli/codice altrui o
tramite il confronto con altri sviluppatori).

Prova a pensare a quanto tedioso e a rischio di errore sia dover
modificare
la procedura di caricamento, per tutti i materiali di ogni reparto.

Un primissimo metodo per migliorare questa situazione è proprio l'uso
delle
funzioni:

def nomefunzione(parametro_1, parametro_2)
  # fai cose con parametro_1 e parametro_2
  # eventualmente restituisci un valore a chi ha chiamato questa
funzione
end

def somma(a, b)
  a + b
end

x = somma(1, 3)
puts "x = " + x.to_s

Nel tuo caso:

def carica_quantita_rimasta(indice_reparto, indice_prodotto)
  nome_file = 'qnt_rim_' + indice_reparto.to_s + '_' +
indice_prodotto.to_s
+ '.txt'
  if File.exists?(nome_file)
    quantita = File.read(nome_file).to_i
  else
    quantita = 100
    File.write(nome_file, quantita_rimasta)
  end
  quantita
end

qnt_rim0 = carica_quantita_rimasta(0, 1)
qnt_rim0_1 = carica_quantita_rimasta(0, 2)
# ...
qnt_rim21_15 = carica_quantita_rimasta(21, 15)

In questo caso, quando avrai necessità di modificare la procedura di
caricamento delle quantità rimaste a magazzino, dovrai modificare solo
un
punto del tuo sorgente.

Ti anticipo anche altre migliorie, lasciando a te l'onere di sbatterci
di
nuovo un po' la testa ;-)

https://gist.github.com/olistik/cd3673ee0901593f1d96

Tieni bene a mente che ci sono vari modi per risolvere il tuo problema,
il
sorgente che ti ho passato deve solo servire per darti un'idea degli
strumenti e approcci che potresti usare.
Non è sicuramente il metodo migliore, quello lo devi trovare te che
conosci
il dominio applicativo di riferimento :-)

Al prossimo round ;-)




2015-03-18 23:23 GMT+01:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-19 16:16
Si come prima cosa devo assimilare il diagramma del flusso cosi da avere
una visione chiara, nonostante conoscessi le funzioni ahimè non avevo
capito l'importanza di essi in praticamente le ho ignorate 'perdendo'
ore e ore di lavoro soltanto per non averle prese in considerazione.
Sicuramente so che questo non è neanche l'inizio per comprendere appieno
le potenzialità di questo linguaggio ma sono deciso a continuare.
dopotutto sono passati 2 mesi da quando ho iniziato a studiare e
all'inizio ho cominciato così per 'gioco' dedicandomi nel tempo libero.
Adesso so quali argomenti devo affrontare seguirò le tue indicazioni
passo passo! vi ringrazio davvero tanto c sentiremo presto.
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 13:58
scusate veramente per la domanda ma io non riesco a capire  le funzioni
, in teoria è semplicissimo ma non ho chiaro come si applicano quando
devono puntare a un array o a qualsiasi variabile,
prendendo l'esempio che mi ha dato maurizio :

def nomefunzione(parametro_1, parametro_2) [Prima questione: (i
parametri perche nn possono essere anche degli Array?)

# fai cose con parametro_1 e parametro_2 [seconda questione:( perchè non
riesco ad usare IL METODO .EACH DO in questo caso ?  )

  # eventualmente restituisci un valore a chi ha chiamato questa
funzione
end

da stamattina ho cominciato a rivedere il concetto di funzione e
applicarla quando si tratta di piccole cose non è difficile, il problema
sorge non appena devo far puntare ad un oggetto ( o ad un array). sarei
grato se qualcuno potrebbe chiarirmi le idee perchè mi sento davvero
spiazzato...
5ce16d85034e08079db3cafeb5b8ff09?d=identicon&s=25 Davide Rambaldi (Guest)
on 2015-03-20 14:06
(Received via mailing list)
Caro Francesco


> if File.exists?(nome_file)
>  quantita_rimasta = File.read('quantita_rimasta.txt').to_i
> else
>  quantita_rimasta = 100
>  File.write(nome_file, quantita_rimasta)
> end


A) Se il file esiste: la quantita rimasta viene letta direttamente dal
file.
B) Se il file non esiste: inizializza la quantita rimasta  (100) e
scrivilo su file


alla prima esecuzione del programma viene eseguito B (il file non
esiste), pre le altre esecuzioni viene esguito A (il file esiste).

Sapresti dirmi cosa succede se eseguo il programma con un file
quantita_rimasta.txt vuoto?
Come controlleresti questa eccezione?


D
5ce16d85034e08079db3cafeb5b8ff09?d=identicon&s=25 Davide Rambaldi (Guest)
on 2015-03-20 14:15
(Received via mailing list)
Eccoti un esempio di funzione con array come parametro:

https://gist.github.com/tucano/c836b4f47036f43e1553
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 14:23
ciao davide  ti ringrazio per avermi chiarito la sintassi
cmq dovrebbe essere questa la soluzione


if File.exists?(qnt0)
  qnt_rim0 = File.read('qnt_rim0.txt').to_i

else
  qnt_rim0 = 100
  File.write(qnt0, qnt_rim0)

if qnt_rim0 = 0

puts ' Prodotto esaurito'

end
end
5ce16d85034e08079db3cafeb5b8ff09?d=identicon&s=25 Davide Rambaldi (Guest)
on 2015-03-20 14:35
(Received via mailing list)
In verita volevo farti prendere in considerazione il caso in cui hai un
file vuoto.

Su unix puoi provare con:

> touch quantita_rimasta.txt

che crea un file vuoto

E poi lo passi al programma:

irb(main):001:0> File.exists? "quantita_rimasta.txt"
=> true

Il file esiste, non ce dubbio.

Cosa succede se lo converto to integer?

irb(main):002:0>  File.read('quantita_rimasta.txt').to_i
=> 0

Ritorna 0

Ma sei sicuro che sia quello che vuoi?

Prendi in considerazione il Caso klingon:

1) Scrivi il tuo programma per calcolare la quantita di cememento
rimasta e lo metti in una cartella
2) Arriva un klingon che vuole rovinarti la vita e mette nella stessa
cartella un file vuoto con nome quantita_rimasta.txt
3) Ora, qualsiasi cosa farai, il programma ti dira:  'Prodotto esaurito'

Vedi come e facile per un klingon bloccare la produzione di cemento dei
terrestri?


Ma Va bene lo stesso, sono io che sono un rompicazzo ed oggi devo
trovare qualcosa di alternativo a quello che dovrei fare.

DR
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 14:45
Attachment: prova.rb (2 KB)
scusami ma l'esempio non mi è chiaro ho bisogno di capirlo in un
contesto in cui trovo un riscontro logico anche so che è corretto il tuo
esempio io purtroppo nn capisco... mi sembrano cose astratte ... questo
è il mio caso potresti farmi un esempio con questo codice
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 14:49
ti ringrazio so che il tempo è prezioso e capisco che dover perdere
tempo con me non è proprio il massimo ... ti ringrazio
5ce16d85034e08079db3cafeb5b8ff09?d=identicon&s=25 Davide Rambaldi (Guest)
on 2015-03-20 14:57
(Received via mailing list)
Lascia stare i klingon :-)


Piuttosto guarda questo errore:

qnt_rimasta = carica_quantita_rimasta(0, 0)

def carica_quantita_rimasta(indice_prodotto)
  qnt = 'qnt_rimasta' + indice_reparto.to_s + '_' + indice_prodotto.to_s
+ '.txt'

if File.exists?(qnt)
    quantita = File.read(qnt).to_i
  else
    quantita = 100
    File.write(qnt, quantita_rimasta)
  end
  quantita
end

Stai passando 2 parametri ad una funzione con un solo parametro.

Se vuoi passargli un Array dovresti fare:

qnt_rimasta = carica_quantita_rimasta([0, 0])

Forse questo risolve i tuoi dubbi sugli arrai come parametri?

Ciao

P.S; torno al lavoro e non ripondo oltre sorry :-)
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-20 15:56
(Received via mailing list)
Francesco tranquillo, a chiedere non sbagli mai :)

--

Maurizio De Santis

Il giorno 20 marzo 2015 14:57, Davide Rambaldi
<davide.rambaldi@gmail.com>
ha scritto:
5ce16d85034e08079db3cafeb5b8ff09?d=identicon&s=25 Davide Rambaldi (Guest)
on 2015-03-20 15:56
(Received via mailing list)
A volte (spesso) invece io sbaglio le riposte e gli esempi

:-)
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 16:09
anche modificando con
qnt_rimasta = carica_quantita_rimasta([0, 0])

l'errore non cambia a parte quello è qlks altro a causarlo ed sarà cosi
banale eppure non riesco a capire
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-20 16:27
sto riscontrando tanti problemi usando gli array e le funzioni, ma per
oggi stacco la spina sono stanco e anche frustrato perche da stamattina
non riesco a capire una cosa cosi elementare ma davvero importante
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-23 21:28
Problema risolto con le funzioni ma non riesco a far salvare i file
delle quantita rimaste in cartelle diverse per esempio : le quantita
rimaste cemento,calce etc.. li devo far salvare nella cartella 'sacchi'
ma scrivendo :

if File.exists?(qnt0)
  cemento = File.read(sacchi'cemento.txt').to_i
else
  cemento = 100
  File.write(qnt0, cemento)
end

il programma non va a leggere il file nella cartella sacchi ma
ovviamente genera nuovamente il file
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-23 22:41
(Received via mailing list)
File.read(sacchi'cemento.txt')

Non  una sintassi corretta in Ruby (a meno che sacchi sia un metodo e
'cemento.txt' un argomento, ma non credo), sei sicuro il codice che hai
postato funzioni?

--

Maurizio De Santis

Il giorno 23 marzo 2015 21:28, Francesco Villafranca
<pollopoop@gmail.com>
ha scritto:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-24 11:19
no non va.. sto provando come mi hai suggerito def sacchi (cemento)
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2015-03-24 14:25
(Received via mailing list)
Fammi capire questo codice che hai scirtto:

if File.exists?(qnt0)
  # ^^^^^^^^^^ il metodo exists? prende come argomento un path a un file
  # che cosa contiene qnt0 ?
  cemento = File.read(sacchi'cemento.txt').to_i
  # ^^^^^^^^^^ questa riga  sicuramente sbagliata per quanto gi detto
  # immagino che tu volessi dire `File.read('sacchi/cemento.txt')`
visto che parli della cartella sacchi
else
  cemento = 100
  File.write(qnt0, cemento)
end





2015-03-23 21:28 GMT+01:00 Francesco Villafranca <pollopoop@gmail.com>:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-24 18:20
questo è il codice

qnt0   = 'cemento.txt'

if File.exists?(qnt0)
  cemento = File.read('cemento.txt').to_i
else
  cemento = 100
  File.write(qnt0, cemento)
end

prod0 =  'cemento'
prez0  =  4.00

continua_ciclo = true
totale = 0

while continua_ciclo

puts ' '

puts 'Inserire prodotto da ricercare :'.center(amp + 50)

puts ' '

scelta = gets.chomp
if scelta == 'totale'
continua_ciclo = false

elsif scelta == prod0
    puts 'cad.'.center(amp - 10) + prez0.to_s + ' $'
    puts ' '
    puts 'Quantita disponibile in magazzino: ' + cemento.to_s
    puts ' '
                print 'Inserire quantita richiesta: '
    qnt_ric = gets.chomp.to_i
    somma0 = (prez0 * qnt_ric).to_f
    puts 'TOTALE: '.center(amp + 10) + somma0.to_s + ' $'
    cemento = cemento - qnt_ric
    puts 'Quantita rimasta: ' + cemento.to_s
    puts ' '

else
    puts ' '
                puts 'Prodotto non presente.'
                puts ' '
  end
end


totale = somma0.to_f

puts ' '
puts 'SUBTOTALE: '.center(amp + 10 ) + totale.to_s + ' $'

File.write(qnt0, cemento)
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2015-03-24 18:51
(Received via mailing list)
Nelle prime righe del file farei un controllo per vedere se la
directory 'sacchi' esiste. Se non esiste gi la crei. E poi ogni volta
che devi leggere o scrivere un file devi specificare il percorso
rispetto alla directory locale.

Es. File.read('sacchi/cemento.txt') o File.write('sacchi/cemento.txt')

Altrimenti come pensi che il software sappia che vuoi usare una
directory 'sacchi', se non lo specifichi da nessuna parte?
Prima pensa a farlo funzionare cos, poi penserai a come rimuovere la
ridondanza usando delle funzioni.


On Tue, Mar 24, 2015 at 6:20 PM, Francesco Villafranca
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-24 19:22
ho risolto grazie per i tuoi preziosi consigli, ho molte lacune nella
sintassi ma grazie a voi sto imparando
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-27 18:39
fino ad ora ho avuto la necessita di creare manualmente le cartelle dove
salvare i file ma se volessi creare una cartella quale sarebbe il
codice?
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-28 01:34
(Received via mailing list)
Puoi usare Dir.mkdir

Il giorno ven 27 mar 2015 18:40 Francesco Villafranca
<pollopoop@gmail.com>
ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-03-28 09:38
(Received via mailing list)
Non era FileUtils.mkdir ?
On Mar 28, 2015 1:33 AM, "Maurizio De Santis"
<desantis.maurizio@gmail.com>
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-28 11:42
(Received via mailing list)
Pure, ma con l'altro fa una require in meno :-)

Il giorno sab 28 mar 2015 09:37 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-03-28 11:45
(Received via mailing list)
Ti piace vincere facile ;-)
On Mar 28, 2015 11:42 AM, "Maurizio De Santis"
<desantis.maurizio@gmail.com>
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-03-28 20:01
quindi per esempio per creare la cartella documenti

Dir.mkdir 'documenti' ?

per verificare se esiste quindi

if Dir.exists?(documenti)
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-03-28 20:15
(Received via mailing list)
Esattamente :-)

Il giorno sab 28 mar 2015 20:01 Francesco Villafranca
<pollopoop@gmail.com>
ha scritto:
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2015-03-28 23:15
(Received via mailing list)
Per restare in tema di "economia", puoi evitare il controllo exists? e
usare

FileUtils.mkdir_p 'documenti'

che non da errore se la cartella esiste.

@Francesco a titolo di esercizio ti invito a studiare  mkdir_p per
scoprire che altra caratteristica interessante ha rispetto al normale
mkdir.



2015-03-28 20:14 GMT+01:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-04-02 22:29
in questi giorni Ho pensato di dare una bella rivisitata al mio sito web
e mi chiedevo se è possibile cambiare il format del mio programma in
ruby utilizzando le mie conoscenze sul css ...
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-04-02 22:38
(Received via mailing list)
Se  un sito statico ti consiglio Middleman https://middlemanapp.com/ ,
un generatore di siti statici scritto in Ruby: praticamente funziona
generando l'HTML del tuo sito a partire dai layout e dalle viste.  un
ottimo modo per entrare nel fantastico mondo della programmazione web
con
Ruby senza affrontare subito Rails, che  una bella botta di vita :-)

Il giorno gio 2 apr 2015 22:29 Francesco Villafranca
<pollopoop@gmail.com>
ha scritto:
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-04-02 23:02
(Received via mailing list)
Ti consiglio anche di guardarti Rack http://rack.github.io/ , la
libreria
alla base della quasi totalit dei web framework scritti in Ruby: calcola
che volendo potresti realizzare il tuo sito anche solo con Rack.

--

Maurizio De Santis

Il giorno 2 aprile 2015 22:38, Maurizio De Santis <
desantis.maurizio@gmail.com> ha scritto:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-04-03 16:24
il sito è statico ma per ora non voglio programmare sul web, è un
argomento che affronterò piu tardi, io intendevo quale strumento dovrei
utilizzare per cambiare il layout del programma scritto in ruby . Dovrei
aprire il file.rb con un altro programma? o posso usare anche qualcosa
come i fogli di stile sul html?
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2015-04-03 17:04
(Received via mailing list)
Ciao, non sto seguendo il thread molto da vicino quindi scusa se cado
dalle nuvole.Se stai studiando e il codice  pubblicabile ti
suggerisco di pubblicare un repo su github o almeno una gist e linkare
una pagina o una riga di codice, cos si capisce meglio di cosa parli.
Altrimenti io per esempio non ho idea di cosa sia file.rb.
Poi scusami se mi permetto ma un pizzico pi di specificit nel
subject non guasta. :)

2015-04-03 16:24 GMT+02:00 Francesco Villafranca <pollopoop@gmail.com>:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-04-03 19:05
la domanda è semplicissima , si puo cambiare il modo in cui viene
visualizzato il programma...? cioè la classica finestra nera del prompt
dei comandi puo essere superata visualizzando una schermata diversa da
quella che viene visualizzata avviando il programma?
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-10 21:36
Attachment: aiuto.txt (482 Bytes)
Salve a tutti mi rivolgo nuovamente a voi chiedendo un aiuto dopo aver
dato pure l'anima ... da qualche settimana, ho passato ore su ruby doc,
ma non riesco a trovare la soluzione a questo '(insignificante)
ovviamente per molti di voi' problema che mi sta facendo fondere il
cervello.
ho allegato un file un cui spero di essere chiaro ma come mio solito non
riesco a spiegarmi chiaramente cmq spero che qualcuno gli dia un
occhiata
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-11 11:52
(Received via mailing list)
Dato che l'esempio  molto breve (bene! faciliti molto la vita) potevi
inserirlo direttamente nel testo. Lo riporto io dandogli una formattata:


# esempio

subtotale = 4 + 5
entrate = 'subtotale.txt'
File.write(entrate, subtotale)

# in questo modo il programma salvera l'operazione '4+5'
# sempre sul file subtotale sovrascrivendo ad ogni esecuzione i dati
'4+5=9'
# io invece devo creare ad ogni esecuzione un nuovo file
# che abbia come titolo la data e l'ora in cui viene creato
# e come testo i risultati che via via devo salvare
# ho passato ore a studiare le classi Time e File ma non sono riuscito a
risolvere


Vado con la risposta. Per ottenere una stringa con il timestamp al
momento
dell'esecuzione puoi usare Time.now; per formattarla nel modo desiderato
si
usa il metodo Time#strftime
http://docs.rubydocs.org/ruby-2-2-2/Ruby%202.2.2/c...
:

Time.now.strftime('%F_%H-%M-%S_%z') #=> "2015-05-11_11-32-12_+0200"

Per convertire dalla stringa in istanza di Time, nel caso ti servisse,
si
usa Time.strptime
http://docs.rubydocs.org/ruby-2-2-2/Ruby%202.2.2/c...
:

# Per usare Time.strptime occorre caricare 'time' dalla stdlib
require 'time'
Time.strptime Time.now.strftime('%F_%H-%M-%S_%z'), '%F_%H-%M-%S_%z' #=>
2015-05-11 11:34:18 +0200

Ora scrivere il timestamp nel nome del file viene da s:

file_content = 4+5
current_timestamp = Time.now.strftime('%F_%H-%M-%S_%z') #=>
"2015-05-11_11-32-12_+0200"
filename = "subtotale_#{current_timestamp}.txt" #=>
"subtotale_2015-05-11_11-32-12_+0200.txt"

File.write file_content, filename

--

Maurizio De Santis

Il giorno 10 maggio 2015 21:36, Francesco Villafranca <
villafrancacristofar@gmail.com> ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-11 14:46
chiarissimo solo non capisco perche si usa la sintassi ' #{ } ' non l'ho
incontrata prima d'ora... grazie sempre per la disponibilita
064b4168b3b914d3274aa2943bc2ec36?d=identicon&s=25 Ivan Lasorsa (jeanvaljean)
on 2015-05-11 14:49
Francesco Villafranca wrote in post #1173396:
> chiarissimo solo non capisco perche si usa la sintassi ' #{ } ' non l'ho
> incontrata prima d'ora... grazie sempre per la disponibilita

E' la sintassi di string interpolation. Non sei obbligato ad usarla. Per
esempio

"#{user.first_name} #{user.last_name}" # Mario Rossi

e

user.first_name + " " + user.last_name # Mario Rossi

In questo caso il risultato è lo stesso.
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2015-05-11 14:53
(Received via mailing list)
Interpolazione. Occhio che con stringhe definite con apice singolo non
funziona.

http://en.wikibooks.org/wiki/Ruby_Programming/Synt...

Qui trovi altri modi per farlo.

2015-05-11 14:46 GMT+02:00 Francesco Villafranca
<villafrancacristofar@gmail.com>:
71845161952bbfcb58f4e474164453ef?d=identicon&s=25 asd asd (cris_1986)
on 2015-05-11 14:58
(Received via mailing list)
Generalmente pare che per concatenare le stringhe si ottengano
prestazioni
migliori usando l'interpolazione.

Il giorno 11 maggio 2015 14:52, Fabrizio Regini <freegenie@gmail.com> ha
scritto:
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-11 16:17
(Received via mailing list)
> Generalmente pare che per concatenare le stringhe si ottengano prestazioni
migliori usando l'interpolazione.

Il vero vantaggio dell'interpolazione  che sottintende il .to_s, cosa
che
con la concatenazione sarebbe necessario esplicitare:

quantita = 3
"Hai comprato #{quantita} sacchi di patate"
#=> "Hai comprato 3 sacchi di patate"
"Hai comprato " + quantit + " sacchi di patate"
#=> TypeError: no implicit conversion of Fixnum into String
"Hai comprato " + quantit.to_s + " sacchi di patate"
#=> "Hai comprato 3 sacchi di patate"

--

Maurizio De Santis

Il giorno 11 maggio 2015 14:57, Cristiano Gregnanin <
cristiano.gregnanin@gmail.com> ha scritto:
Eff93e9bbe063b7136c9b6f218071a09?d=identicon&s=25 Marco Mastrodonato (marcomd)
on 2015-05-12 09:56
Il migliore come prestazioni velocistiche e memoria è il metodo <<
derivato  da c ma molto unsafe code.
Concatenare le stringhe è scomodo, lento e costoso come utilizzo memoria
e abbastanza unsafe code.
Con l'interpolazione si hanno prestazioni migliori come memoria
consumata, comodo da scrivere e sicuro per il to_s

irb(main):006:0> a='a'
=> "a"
irb(main):007:0> b=nil
=> nil

irb(main):008:0> a + ' ' + b
TypeError: can't convert nil into String

irb(main):009:0> '' << a << ' ' << b
TypeError: can't convert nil into String

irb(main):010:0> "#{a} #{b}"
=> "a "
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-14 16:18
Salve prima di tutto grazie a tutti per gli utilissimi consigli sempre
preziosi, mi ritrovo nuovamente bloccato da un paio di giorni su questo
problema:

#salvando una serie di file su una cartella salvata con il nome'entrate'

current_timestamp = Time.now.strftime('%F_%H-%M-%S_%z')

entrate = "entrate/subtot_#{current_timestamp}.txt"

File.write entrate, subtot

# Ho necessita di andare a sommare il contenuto
# di questi file che ovviamente contengono numeri
# In poche parole non riesco a trovare il modo per sommare dei file
all'interno di una cartella
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-14 16:33
Ovviamente so che devo per prima cosa far leggere al programma il
contenuto dei file, ma visto che sto salvando questi file con il nome
della data e l'ora in cui vengono salvati,non ho un riferimento fisso,mi
occorre far leggere al programma tutti i file all'interno di una
cartella per poi sommarli
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-05-14 18:35
(Received via mailing list)
sum = Dir['*.txt'].map do |filename|
  File.read(filename)
end.map do |content|
  content.strip.to_f
end.inject(&:+)
On May 14, 2015 4:33 PM, "Francesco Villafranca" <
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-14 19:05
(Received via mailing list)
Non gli devi dire di partire da 0 alla inject?

Il giorno gio 14 mag 2015 18:35 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-05-14 19:12
(Received via mailing list)
Gotcha
On May 14, 2015 7:05 PM, "Maurizio De Santis"
<desantis.maurizio@gmail.com>
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-05-14 19:14
(Received via mailing list)
Mmh, ma sai che forse no?
Forse basta aggiungere || 0 in coda alla inject.
On May 14, 2015 7:05 PM, "Maurizio De Santis"
<desantis.maurizio@gmail.com>
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-14 19:16
(Received via mailing list)
E infatti my fault:

> If you do not explicitly specify an initial value for memo, then the
first element of collection is used as the initial value of memo.

Il giorno gio 14 mag 2015 19:14 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-14 22:35
scusate ragazzi ma giuro che non vi seguo ...

perche il segno * è presente qui:
sum = Dir['*.txt']

avendo sempre un nome diverso i file non vedo come potrei risolvere
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-05-14 22:43
(Received via mailing list)
Ti consiglio vivamente di:

- aprire il terminale
- posizionarti nella cartella contenente i file .txt
- lanciare la console Ruby con: irb
- provare ad eseguire alcuni comandi come: Dir['*.txt']

è il principale vantaggio di Ruby ;-)

2015-05-14 22:35 GMT+02:00 Francesco Villafranca <
villafrancacristofar@gmail.com>:
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2015-05-14 22:44
(Received via mailing list)
In realtà con la tua osservazione ho pensato che la mia soluzione non
coprisse il caso in cui Dir['*.txt'].count == 0 :-)
Infatti [].inject(&:+) # => nil

2015-05-14 19:15 GMT+02:00 Maurizio De Santis
<desantis.maurizio@gmail.com>:
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-15 01:27
(Received via mailing list)
* nei nomi dei file spesso indica una wildcard, cioè tutto ciò che c'è
in
quel punto: per cui con *.txt prendi tutti i file che finiscono per .txt

Il giorno gio 14 mag 2015 22:44 maurizio de magnis <
maurizio.demagnis@gmail.com> ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 08:48
# per esempio eseguendo il programma e avendo come:

subtotale = 9

#salvando il file nella cartella entrate:

current_timestamp = Time.now.strftime('%F_%H-%M-%S_%z')

entrate = "entrate/subtotale_#{current_timestamp}.txt"

File.write entrate, subtot

#eseguendo il programma varie volte mi ritrovo vari file nella
#cartella entrate ad esempio

subtotale_2015-05-15_08-14-39_+0200.txt

subtotale_2015-05-15_08-30-30_+0200.txt

#a fine giornata devo eseguire l'operazione di sommare i vari subtotale
# quindi a questo punto

chiusura = gets.chomp
if chiusura == 'chiusura serale'
sum = Dir['entrate/*.txt'].map do |entrate|
  File.read(entrate)
end.map do |content|
  content.strip.to_f
end.inject(&:+)

non riesco a capire come riuscire a sommarli
217fa9b23f7dc0016b64fb0edc89382d?d=identicon&s=25 Giovanni Messina (gmgp)
on 2015-05-15 09:47
(Received via mailing list)
# dal tuo codice

testi = Dir['entrate/*.txt'].map do |entrate|
  File.read(entrate)
end
# testi # ["1","2.3","3"]

valori = testi.map do |content|
  content.strip.to_f
end

# valori # [1.0, 2.3, 3.0]

sum = valori.inject(&:+)

# sum # 6.3

# gioca con irb per vedere cosa sisalva nelle variabili come ti
suggerivano
# Gio
Il 15/mag/2015 08:48 "Francesco Villafranca"
<villafrancacristofar@gmail.com>
ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 11:13
Continuo a non capire quali valori dovrei inserire se non ho un nome
fisso per i file dato che cambia continuamente la data e l'ora .
Poi non capisco come avviare irb partendo dalla directory del programma
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 11:17
Ad esempio scrivo

C:\Users\PC>desktop\meva\entrate\irb

non va , mi parte avviando normalmente cosi :

C:\Users\PC>irb
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-15 11:20
(Received via mailing list)
> Continuo a non capire quali valori dovrei inserire se non ho un nome
fisso per i file dato che cambia continuamente la data e l'ora .

Allora fai cos:

- Tramite terminale posizionati nella cartella d'interesse: cd
/percorso/verso/entrate
- Lancia questo comando: ruby -e 'p Dir["*.txt"]'

Vedrai la lista dei tuoi file .txt: questo perch "*.txt" sta per "prendi
tutti i file che finiscono con .txt".

> Poi non capisco come avviare irb partendo dalla directory del programma

Basta che prima di lanciare irb entri nella cartella d'interesse:

cd /percorso/verso/entrate
irb

--

Maurizio De Santis

Il giorno 15 maggio 2015 11:13, Francesco Villafranca <
villafrancacristofar@gmail.com> ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 14:09
scusami per la mia stupidaggine se lo ripeto ancora una volta,
allora apro il prompt dei comandi e scrivo la directory dei file

desktop\meva\entrate e premo invio

e mi restituisce questo

"desktop\meva\entrate" non è riconosciuto come comando interno o
esterno,
 un programma eseguibile o un file batch.

come faccio a posizionarmi nella cartella e lanciare il comando ruby -e
'p Dir["*.txt"]'
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-15 14:13
(Received via mailing list)
Devi fare cd: cd C:/users/PC/desktop/meva/entrate

Il giorno ven 15 mag 2015 14:09 Francesco Villafranca <
villafrancacristofar@gmail.com> ha scritto:
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 14:20
ok ora si , a cosa si riferisce cd
9a03cb7769095162c11cae47f407aa95?d=identicon&s=25 Francesco Villafranca (francesco92)
on 2015-05-15 14:55
finalmente ho capito come utilizzare al meglio un altro importantissimo
strumento irb, tuttavia posso dire al programma di leggere questi file
ma il ragionamento logico con il quale far si che li sommi tra di loro
non riesco proprio a capirlo
Dc70f4a04726fada8b9db8a18ff40412?d=identicon&s=25 Maurizio De Santis (succhiateste)
on 2015-05-16 15:05
(Received via mailing list)
Guarda, fondamentalmente la logica  questa:

1. Prendi la lista di tutti i file della cartella
2. Ne tiri fuori i rispettivi contenuti
3. Li converti in interi
4. Sommi le conversioni ottenute

Per cui:

# 1.
files_list = Dir['entrate/*.txt']

# 2.
files_contents = files_list.map { |v| File.read(v) }

# 3.
numbers = files_contents.map { |v| v.to_i }

# 4.
sum = numbers.reduce(&:+)

--

Maurizio De Santis

Il giorno 15 maggio 2015 14:55, Francesco Villafranca <
villafrancacristofar@gmail.com> ha scritto:
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-12-16 16:46
=begin
un saluto a tutti, da qualche giorno ho necessita di risolvere una
questione.
Vorrei sapere se, passando come parametro di un metodo un elemento di un
array, elaborandolo all'interno del metodo posso andarlo a sostituire
all'interno dell'array da cui è stato preso. Per esempio avendo una
situazione del genere:
=end

array = [10, 20, 30, 40]

def sommare primo_elemento

puts 'Inserire il numero da sommare al primo elemento'

richiesta = gets.chomp

somma = richiesta + primo_elemento

end

sommare 10

=begin
devo andare a sostituire il valore del primo_elemento dell'array "10"
con il valore dato dalla variabile somma ( se per esempio avremmo
inserito "5") l'array risultante dovrebbe avere questi elementi :

[15, 20, 30, 40]

spero di essere stato chiaro e ringrazio tutti quelli che mi daranno una
mano in questa piccola questione

=end
12d5a4e7ab8e22907b4f712d7fa25041?d=identicon&s=25 Francesco Villafranca (pollopoop92)
on 2015-12-16 17:36
=begin
Un altro problema sugli array che ho riscontrato è qst:
Ho bisogno di trovare un elemento specifico dell'array e trovata una
corrispondenza, lo faccio passare come parametro di un metodo
Esempio:
=end

prodotti = ['pasta', 'pane', 'farina', 'etc']
prezzi = [ 1.00, 2.00, 3.00, 4.00 ]


def spesa alimenti, prezzo

puts 'prezzo del ' + alimenti + ' = ' + prezzo.to_s

puts 'Quanto prodotto ti serve?'

richiesta = gets.chomp.to_i

totale = richiesta * (prezzo.to_i)

puts' Totale: $ ' + totale.to_s
end

# Apertura programma

puts 'Quali prodotti intendi acquistare ?'
operazione = gets.chomp

if operazione == 'pasta'

spesa prodotti[0], prezzi[0]

elsif operazione == 'pane'

spesa prodotti[1], prezzi[1]

elsif operazione == 'farina'

spesa prodotti[2], prezzi[2]

else

puts 'operazione non disponibile'

end


=begin
E' ovvio che così avro una ripetizione di codice assurda quindi devo
trovare il modo per far cercare alla variabile "operazione" uno
specifico elemento che non appena viene trovato sia passato come
parametro.

Ho provato ad usare alcuni metodi della classe "enumerable"
ma senza successo sarei molto felice se qualcuno mi potesse aiutare
=end
This topic is locked and can not be replied to.