Forum: Ruby Suma de elementos de un array, problema

Posted by Pablo D. (pablo_d69)
on 2012-09-28 13:44
Hola, estoy empezando con Ruby y estoy haciendo unos tutoriales que
encontré en http://rubytutorial.wikidot.com En el capítulo que habla
sobre Arrays, uno de los ejercicios propuestos es sumar los elementos
que hay almacenados en un vector.

Había planteado el programa de la siguiente manera pero todo el rato
tengo errores que no sé como depurar.

1-He creado una función que suma dos números para sumar el componente
del array correspondiente más las sumas anteriores.

2-He inicializado el sumador parcial (buffer) como 0, para que en la
primera iteración se almacene el primero de los componentes del vector.

3-He intentado hacer la suma de los elementos del vector.

------------------------

vect = [1, 2, 3, 4, 5]

def suma(num,buffer)
  suma = num + buffer
return suma
end

parcial=0

vect.each do |vect|
  sumador = suma(vect,parcial)
  parcial = sumador
return sumador
end

--------------------

El error que me da es el siguiente:

unapruebamas.rb:174:in `block in <main>': unexpected return
(LocalJumpError)
        from unapruebamas.rb:171:in `each'
        from unapruebamas.rb:171:in `<main>'

La fila 171 se corresponde con la de VECT.EACH....

Estoy bastante perdido. Agradecería cualquier tipo de pista :)

Pablo.
Posted by Jan E. (jacques1)
on 2012-09-28 13:55
Hi,

This isn't the spanish Ruby group, so use English, please.

The error message is telling you that you cannot use "return" in this 
context (you're not in a method). I'm not even sure what you want. 
Return from the "each" method? Jump to the next element? As far as I can 
tell, you don't need any of this, so just delete the "return sumador".

In fact, your code is quite complicated for this simple task. Do you 
really need a method just to add two numbers?

I'd simply do this:

vect = [1, 2, 3, 4, 5]
sum = 0
vect.each do |number|
  sum += number
end

That's it. Ruby also has a method for this kind of operation: 
Enumerable#inject
http://ruby-doc.org/core-1.9.3/Enumerable.html#met...

So you could boil it down to:

vect = [1, 2, 3, 4, 5]
vect.reduce :+
Posted by "Jesús Gabriel y Galán" <jgabrielygalan@gmail.com> (Guest)
on 2012-09-28 13:57
(Received via mailing list)
2012/9/28 Pablo D. <lists@ruby-forum.com>:
>
>   suma = num + buffer
>
>
> Estoy bastante perdido. Agradecera cualquier tipo de pista :)

Hola Pablo. Lo primero es que esta lista es en ingles, no s si en
general tendrs muchas respuestas.
Lo segundo, return es para salir de una funcion, no lo puedes usar en un 
bloque.
Yo creo que simplemente quitandolo ya te funcionaria.

Suerte con el Ruby, sigue adelante y vers cmo luego hay otras
maneras ms sencillas de hacer estas tareas.

Jesus.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.