Programa para simular el lanzamiento de un dado en Ruby

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
ExpLin_11
Forista Nuevo
Forista Nuevo
Mensajes: 34
Registrado: Dom Nov 13, 2011 10:28 pm

Programa para simular el lanzamiento de un dado en Ruby

Mensaje por ExpLin_11 » Sab Sep 01, 2012 4:19 am

Hola a todos.

Estoy tratando de hacer un programa para simular el lanzamiento de un dado 500 veces, luego tengo que colocar esos datos en un arreglo, y en otro arreglo colocar los valores que mas salieron.
El problema viene al tratar de calcular los valores que mas salieron, si en lugar de 500 veces, por decir un numero coloco por ejemplo 10 o 20 veces, el programa calcula sin problemas los valores que mas se repiten, pero con 500, el programa no funciona ya que calcula mal las veces que se repite un numero.

Este es el código que estaba realizando:

Código: Seleccionar todo

a=[]
b=[]
max=500

def inicializo(n,max)
   vec=[]
   for i in 0..max-1
      vec[i]=0
   end
   return vec
end

for i in 0..max-1
	a[i]=rand(6)+1
end
puts "Vector: #{a}"

cant=[max]
cant=inicializo(a,max)

for i in 0..a.length-1
	for j in 0..a.length-1
		if a[i]==j
			cant[j]=cant[j]+1
		end
	end
end

def se_repiten(vec,canti,max)
   salida = ""
   for i in 0..max-1
     if vec[i] == canti
        salida = salida + i.to_s + " "  
     end
   end
   return salida 
end

puts "Los valores que mas salieron fueron: "
for i in 0..max-1
	puts "Salio #{i} vez el numero: #{se_repiten(cant,i,max)}"
end

for i in 0..max-1
    b[i]=b[i]+cant[i]
end

puts "El Vector con los valores que mas salieron queda: #{b}"
Obviamente si ustedes consideran otra forma mejor de calcular los valores que mas salieron, bienvenido sea, lo que ocurre es que trate de adaptarlo mediante un ejercicio parecido que tuve que hacer, pero no es exactamente igual, y a lo mejor no es la forma correcta de hacerlo.

Gracias.
Snark1994
Forista Menor
Forista Menor
Mensajes: 76
Registrado: Sab Abr 02, 2011 11:43 pm

Re: Programa para simular el lanzamiento de un dado en Ruby

Mensaje por Snark1994 » Dom Sep 02, 2012 7:11 pm

Tu código funciona hasta

Código: Seleccionar todo

cant=inicializo(a,max)
pero escribiría

Código: Seleccionar todo

#!/usr/bin/env ruby
# encoding: utf-8

tiradas = [] #debes utilizar nombres descriptivos
max = 500 

while tiradas.length < max
    tiradas.push(rand(6)+1)
end

puts "Tiradas: #{tiradas}"
(es más corto y más fácil leer)

Después, sin embargo, no es tan bueno como antes. El resto del código no tiene sentido - sobre todo, pienso que confunde 500 (max) y 6 (el número más alto que se puede lanzar con un dado) - no hace lo que me dijes en tu pregunta. Pero pienso que este es más cercano a lo que pensaste de hacer:

Código: Seleccionar todo

puts "Los valores que más salieron fueron: "
for i in 1..6
    puts "Salió #{tiradas.count(i)} vez el número #{i}"
end 
Este muestra los valores que más salieron, como quisiste, pero no comprendo todo de los salidos que su código creaba. Si te he entendido mal, me corrige. :)
No soy hispanohablante - si he cometido un error con mi español, dime por favor :) me gustaría mejorarlo
ExpLin_11
Forista Nuevo
Forista Nuevo
Mensajes: 34
Registrado: Dom Nov 13, 2011 10:28 pm

Re: Programa para simular el lanzamiento de un dado en Ruby

Mensaje por ExpLin_11 » Mar Sep 04, 2012 1:48 am

Muchas gracias. Una ultima cosa como hago para llenar el vector con los numeros que mas salieron en orden descendente (de mas a menos repetidos), como podria hacer?
Snark1994
Forista Menor
Forista Menor
Mensajes: 76
Registrado: Sab Abr 02, 2011 11:43 pm

Re: Programa para simular el lanzamiento de un dado en Ruby

Mensaje por Snark1994 » Mar Sep 04, 2012 12:54 pm

Se debe crear un nuevo vector con las frecuencias y los números correspondientes, y lo pone en orden:

Código: Seleccionar todo

#...el código es el mismo hasta que imprime "tiradas"
valores = []
for i in 1..6
    valores.push([i,tiradas.count(i)])
end 

valores.sort!{|x,y| y[1] <=> x[1]}
puts "Los valores que más salieron fueron: "
for i in 0..5
    puts "Salió #{valores[i][1]} vez el número #{valores[i][0]}"
end 

print "En orden de frecuencia (más a menos): "
for i in 0..5
    print "#{valores[i][0]} "
end
print "\n"
No soy hispanohablante - si he cometido un error con mi español, dime por favor :) me gustaría mejorarlo
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje