Les dejo una clase en ruby que cuenta las veces que se repite cada elemento en un vector, si alguien se idea otra manera de hacerlo mas eficiente, se lo agradezco que lo comparta. Gracias
class Repetidos
def llenar
v = []
loop do
puts "Ingrese numero "
n = gets.to_i
return v if n == 0
v << n
end
end
def imprimir(a,b)
for i in 0..a.size-1
puts "#{a[i]} -- #{b[i]}"
end
end
def repetidos(vector)
v1 = []
v2 = []
v1[0] = vector[0]
v2[0] = 0
for i in 0..vector.length-1
s = 0
for j in 0...v1.length
if vector[i] == v1[j]
v2[j] = v2[j] + 1
s = 1
end
end
if s == 0
v1 << vector[i]
v2 << 1
end
end
return v1, v2
end
end
x = Repetidos.new
vec = x.llenar
v1, v2 = x.repetidos(vec)
x.imprimir(v1, v2)
Bajar archivo fuente
Ahora veremos la version de Daniel y Ruby; la cual me parece muy buena, quedaria mucho mejor si utilizara clases, metodos y parametros, pero igual, esta buena.
#llenar un vector
def self.llenar
@v=[]
i=0
while i <=4
puts "Ingrese numero:"
num = gets.chomp.to_i
@v[i]=num
i=i+1
end
end
def self.imprimir
@v.sort!
c=0
i=0
while c <= @v.size
con=0
while @v[c] == @v[i]
con=con+1
i=i+1
end
puts "#{@v[c]} - #{con}"
c=i
return if i == @v.size
end
end
llenar
imprimir
Bajar archivo fuente
Otra mas, les dejo la version de Erley.
v=[5,2,5,3,5,2,9,1]
v.sort!
c1=0
while c1<=7
a=0
for c2 in 0..7
if v[c2]==v[c1]
a+=1
end
end
puts "el #{v[c1]} esta #{a} veces"
c1+=a
end
Archivo fuente