Problemi con funzioni

Salve, sono uno studente universitario e da poco sto apprendendo il
linguaggio di programmazione Ruby.
Mi sono incappato in un problema sui parametri da assegnare ad una
funzione.
Il mio programma consiste sul calcolo della somma degli elementi
all’interno di un array (vedere Immagine1)
Per prova, ho tentato di passare alla funzione che mi calcolava la somma
l’array, che l’ho istanziato con un ciclo times per l’inserimento degli
elementi da tastiera nell’array. Solamente che quando eseguo il
programma, dopo che ho inserito gli elementi nell’array, il mio
programma non mi funziona più dato che ha riscontrato problemi sui
parametri da passare al metodo(Immagine2).
Stranamente ho provato anche istanziare semplicemente l’array in questo
modo:
A=[1,2,3] e in questo caso il programma funziona. Ma quando si tratta di
programmi simili ai miei (con gli inserimenti da tastiera) va tutto in
fallimento.
Mi potete aiutare gentilmente a risolvere questo problema?!
Vi ringrazio anticipatamente. Cordiali saluti.
Walter Mulas

Ciao Walter,

se il problema ti arriva solo quando i dati sono dati da tastiera andrei
a
controllare che l’array sia popolato correttamente. Magari bisogna
ripulire
meglio quanto viene scritto. Prova ad usare il metodo
chomphttp://ruby-doc.org/core-1.9.3/String.html#method-i-chomp
.

Per la somma poi, potresti usare il metodo
injecthttp://stackoverflow.com/questions/1538789/how-to-sum-array-members-in-ruby
.

sum = 0
array.inject{ |sum,x| sum + x }

Buon proseguo.

On Tue, Mar 27, 2012 at 12:06 AM, Walter Mulas
[email protected]wrote:

programma non mi funziona pi dato che ha riscontrato problemi sui
Attachments:


Andrea R.
Lelylan | reThink your house
http://lelylan.com

Ciao Walter,
come ti ha detto Andrea il problema che l’array sporco quando vai
a sommare i suoi elementi. Infatti quando fai

a = Array.new(3)

viene creato un array contenente 3 valori inizializzati con il valore
nil ([nil, nil, nil]).

Nel momento in cui vai a richiedere e pushare nell’array un nuovo
elemento questo viene inserito in coda (es.[nil, nil, nil, 2] ).
Una soluzione potrebbe essere quella di ripulire l’array da tutti gli
elementi nil con il metodo chomp, un’altra inizializzare l’array vuoto
in modo da non creare quei 3 elementi settati a nil ( a = Array.new
invece di a = Array.new(3) ).

Ciao

Il 27 marzo 2012 00:18, Andrea R. [email protected] ha
scritto:

grazie Gabriele, in effetti il metodo giusto compact.

A presto

Il 27 marzo 2012 17:33, gabriele renzi [email protected] ha scritto:

Andrea, Gabriele e Alberto vi ringrazio per l’aiuto. Ora il mio
programma funziona alla perfezione! :smiley: Alberto, comunque è meglio il
secondo procedimento perchè si risparmiano più righe dato che l’array
che voglio io deve essere fissato a una dimensione unica (che è 10).
Tramite il ciclo times definisco, oltre il numero di volte di
inserimento degli elementi dell’array, anche implicitamente la
dimensione dell’array per il mio programma.
Grazie mille a tutti! :slight_smile:

2012/3/27 Alberto V. [email protected]:

elemento questo viene inserito in coda (es.[nil, nil, nil, 2] ).
Una soluzione potrebbe essere quella di ripulire l’array da tutti gli
elementi nil con il metodo chomp, un’altra inizializzare l’array vuoto
in modo da non creare quei 3 elementi settati a nil ( a = Array.new
invece di a = Array.new(3) ).

credo alberto intendesse scrivre #compact (leva i nil da un array),
pi che #chomp (leva gli \r\n da una stringa) :slight_smile:

a=Array.new 3
=> [nil, nil, nil]
a.chomp
NoMethodError: undefined method chomp' for [nil, nil, nil]:Array from (irb):2 from /Users/riffraff/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in
a.compact
=> []

Per visto che in ruby gli array sono dinamici, non serve a molto
preassegnare la dimensione, quindi io eviterei.

Una nota che forse ti pu servire in futuro: se leggi il messaggio di
errore

  (NilClass can't be coerced into Fixnum)

sostenzialmente sta dicendo:

hai chiamato un operazione mischiando un Fixnum (intero "piccolo")

e un valore nil

e da l basta che capisci cosa sia nil per risolvere :slight_smile:

(quello che succede veramente quando fai somme, e come funziona
#coerce in ruby puoi leggerlo qua se sei curioso)


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: cascaad.com circleme.com