Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 4 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Dom Nov 13, 2011 10:28 pm
Mensajes: 34

Nota Publicado: Sab Sep 01, 2012 4:19 am 
Arriba  
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:
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.

 Perfil  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Sab Abr 02, 2011 11:43 pm
Mensajes: 76

Nota Publicado: Dom Sep 02, 2012 7:11 pm 
Arriba  
Tu código funciona hasta
Código:
cant=inicializo(a,max)
pero escribiría
Código:
#!/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:
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

 Perfil  

Desconectado
Forista Nuevo
Forista Nuevo

Registrado: Dom Nov 13, 2011 10:28 pm
Mensajes: 34

Nota Publicado: Mar Sep 04, 2012 1:48 am 
Arriba  
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?

 Perfil  

Desconectado
Forista Menor
Forista Menor
Avatar de Usuario

Registrado: Sab Abr 02, 2011 11:43 pm
Mensajes: 76

Nota Publicado: Mar Sep 04, 2012 12:54 pm 
Arriba  
Se debe crear un nuevo vector con las frecuencias y los números correspondientes, y lo pone en orden:

Código:
#...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

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 4 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
programa en c que me permita simular el comportamiento de los pipes en la shell?

en Programación

cata

0

800

Lun Ene 04, 2010 6:48 am

cata Ver último mensaje

Programa en ruby

en Programación

ExpLin_11

1

578

Vie Ene 30, 2015 8:11 pm

hipersayan_x Ver último mensaje

Lanzamiento de la nueva KDE 4.8

en Noticias y Actualidad

victorhck

6

3007

Jue Ene 26, 2012 2:00 pm

maiku Ver último mensaje

¿Cómo mover/borrar un número dado de archivos?

en Software

cocoyol

2

1137

Mar Sep 01, 2009 12:26 am

neurus Ver último mensaje

Programming for the Web with Ruby (curso)

en Programación

johpunk

2

680

Mar Ene 31, 2012 4:19 pm

ramonovski Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO