Foros del Web » Programando para Internet » Ruby »

Arreglo en Ruby

Estas en el tema de Arreglo en Ruby en el foro de Ruby en Foros del Web. Amigos, Soy nuevo en el Foro, estoy terminando de aprender a programar Ruby Hay un ejercicio que no me esta saliendo bien, por favor le ...
  #1 (permalink)  
Antiguo 12/08/2014, 09:42
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Arreglo en Ruby

Amigos, Soy nuevo en el Foro, estoy terminando de aprender a programar Ruby
Hay un ejercicio que no me esta saliendo bien, por favor le agradeceria como resolver este tema en Arreglo
Un banco desea el desarrollo de un programa que permita calcular el total que un cliente pagara en un período de tiempo por un préstamo realizado. Según el tipo de cliente se tiene un interés mensual según la siguiente tabla.

Tipo de Cliente Interés mensual
Cliente A 4%
Cliente B 9%
Cliente C 12%

Con esta tasa de interés se debe calcular el interés generado en el tiempo por el monto ingresado. El interés es compuesto por lo que mes a mes se generan nuevos montos para el recálculo del interés.

El usuario indicará al sistema el monto del préstamo, el tipo de cliente que es y el tiempo que desea el préstamo y el sistema le dará el monto total a pagar al final del periodo.

Por ejemplo si un cliente tipo B pide 100 soles para un plazo de tres meses el cálculo es el siguiente:

1er mes: (100 * 0.04) = 4 por lo que el nuevo monto es 104 (100+4)
2do mes: (104 * 0.04) = 4.16 por lo que el nuevo monto es 108.16 (104+4.16)
3er mes: (108.16 * 0.04) = 4.3264 por lo que el monto final a pagar es: 112.4864 (108.16+4.3264)

Desarrollar el programa que permita al usuario final obtener el total a pagar al final del periodo.

EL programa con test: ojo los resultados esta en la parte printvali
def calcularTotal(monto,tipoCliente,tiempo)
meses = [1,2,3,4,5,6,7,8,9,10,11,12]
tiempo_cadena = tiempo.to_s
contador_de_tiempo = 0
total = 0
if tipoCliente == "A"
tasa_mensual = 0.04
elsif tipoCliente == "B"
tasa_mensual = 0.09
else
tasa_mensual = 0.12
end
for i in 0..meses.size
puts contador_de_tiempo = contador_de_tiempo[i] + 1
if tiempo[i] > 0
total = total + (monto * tasa_mensual)
end
end
puts monto
puts total.round(2)
return total.round(2)
end


#--- zona de test ----

def test_calcularTotal
print validate(112.49, calcularTotal(100,"A",3))
print validate(1677.10, calcularTotal(1000,"B",6))
print validate(8181.55, calcularTotal(2100,"C",12))
end


def validate (expected, value)
expected == value ? "." : "F"
end

def test


puts "Test de prueba del programa"
puts "---------------------------"
test_calcularTotal
puts " "
end
test
  #2 (permalink)  
Antiguo 12/08/2014, 10:32
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Arreglo en Ruby

Hola, Bienvenido al Foro.

¿Cual es el error?

También procura utilizar el highlight de código.
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 12/08/2014, 10:36
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

EL error no me suma los intereses. y ademas te aclaro que recien estoy aprendiendo a programar Ruby. y la verdad no encuentro como sumar los intereses.
saludos,
  #4 (permalink)  
Antiguo 12/08/2014, 12:25
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Arreglo en Ruby

Ok ya corrí tu código en mi computadora y veo algunos fallos:

1. El "for i in 0..meses.size" que tienes ahi recorre los doce meses, necesitas hacer que solo recorra los meses que vienen desde el parámetro tiempo.
2. El total lo inicializas a 0, cuando debería ser inicialmente igual al monto del préstamo.
3. El calculo del interes lo tienes que hacer en base al total y no al monto.
4. Recuerda usar siempre Float.

Y como recomendación.

Indenta el código y utiliza el highligh del foro.

Avisame si tienes mas dudas.

Saludo!
__________________
>> abimaelmartell.com
  #5 (permalink)  
Antiguo 12/08/2014, 12:29
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

la verdad Abimex, si me puedes dar una mano, te lo agradeceria, solo quiero ver como lo has hecho. nada mas y con tu apoyo aprendere a resolver los demas.
saludos,
  #6 (permalink)  
Antiguo 12/08/2014, 13:09
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 8 meses
Puntos: 137
Respuesta: Arreglo en Ruby

Mira usualmente no me gusta dar códigos, pero tu vas empezando

https://gist.github.com/abimaelmarte...f357371be375f5

Aun le haría muchísimos cambios, pero con lo que modifique parece que funciona.

Saludos!
__________________
>> abimaelmartell.com
  #7 (permalink)  
Antiguo 12/08/2014, 13:19
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: Arreglo en Ruby

Hola que tal, bueno ami se me ocurrio algo asi:

Código Ruby:
Ver original
  1. def calcularTotal(monto,tipoCliente,meses)
  2.   total = 0.0
  3.  
  4.   if tipoCliente == "A"
  5.     tasa_mensual = 0.04
  6.   elsif tipoCliente == "B"
  7.     tasa_mensual = 0.09
  8.   else
  9.     tasa_mensual = 0.12
  10.   end
  11.  
  12.   meses.times do
  13.     total = total + ( monto * tasa_mensual)
  14.   end
  15.  
  16.   return total.round(2)
  17. end
  18.  
  19. print calcularTotal(100,'A', 3)

No esta completo, pero es funcional y se me hace que da el valor esperado. Seria cuestion de que le anexes los testeos y seria todo.



Nota: Lo que te dice abimex con lo de dar formato a tu codigo es usar los HIGHLIGHT asi como se ve mi codigo.
__________________
Your Code as a Crime Scene...
  #8 (permalink)  
Antiguo 12/08/2014, 13:22
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

Gracias Abimex
Me has salvado la vida. Con eso estoy aprendiendo a resolver el problema. Abimex, mira te informo, se que no te gusta a dar codigo, como comprenderas que este programa es un codigo abierto, ademas no es un programa espectacular, es un comienzo de la practica. si yo fuera en tu lugar yo comparto con los programas de Asterisk, Java. En ruby recien estoy aprendiendo, ademas cada creador tiene su manera de hacer el lenguaje mientras cortos los comandos.
De todas maneras te agradezco tu apoyo.
Saludos,
  #9 (permalink)  
Antiguo 12/08/2014, 13:43
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

Hola Drako, gracias por tu pronta respuesta.. El post anterior esta con el test. las respuestas estan al final donde indica print validate, tiene que salir este resultado. A mi parecer te falta, lo que se pide es la suma de los intereses por los tiempos de meses indicados. ademas me gustaria escuchar las opiniones de cada persona, asi poder aprender más y más lluvias de ideas para aprender.
  #10 (permalink)  
Antiguo 12/08/2014, 13:55
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 16 años, 1 mes
Puntos: 58
Respuesta: Arreglo en Ruby

Hola que tal, bueno antes que nada no es que me falte o no, jejejeje es una idea que te puedo dar, solo es cuestion de anexar lo que tu necesitas y con eso quedaria listo

La otra es, times te serviria para que se ejecute por una cantidad de tiempo un ciclo, algo asi como un while, solo que con menos codigo.

Por ejemplo en tu consola pon:

3.times do
print 'Hola '
end

y te pondra 3 veces Hola ( Hola Hola Hola ), sin tener que hacer toda la validacion del while, es de gustos el manejo de cada uno.

Yo también estoy aprendiendo, puesto que vengo de los forms, pero desde que entre a RoR, wow es otra cosa, me atrapo y es algo en lo que quiero seguir desarrollando.
__________________
Your Code as a Crime Scene...
  #11 (permalink)  
Antiguo 12/08/2014, 13:59
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

jajaja, Esta bien.. Todos queremos aprender.. para estan los foros, queremos las lluvias de ideas de cada persona, asi podemos aprender más. y no hay ser eogista en dar los codigos simples, nadie esta pidiendo que haga un programa espectacular como programa de facturacion, contable. noo. Lo que pedimos es algo simple. y Gracias por el post brindado.
  #12 (permalink)  
Antiguo 17/08/2014, 16:52
 
Fecha de Ingreso: agosto-2014
Mensajes: 68
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Arreglo en Ruby

Amigos del Foro
Estoy dando una solucion algunos ejercicios que no me sale la cadena de numero.
Por favor necesito que me oriente en que esta mal.
Le paso el ejercicio y el programa en ruby

La Unión Europea ha creado un conjunto de datos basados en su estadísticas anuales y quiere obtener información de cada uno de ellos. Por tal razón se le solicita a usted lo siguiente:
a) Desarrollar un subprograma que permita determinar el pais con mayor población en un muestra dada.
b) Desarrollar un subprograma que permita ordernar de manera asc (de menor a mayor) los paises basados en su población.
c) Desarrollar un subprograma que permita determinar la población promedio en una muestra dada.
d) Desarrollar un subprograma que permita saber cual es la desviación estándar de las muestras.

Funciones:
Desviación estándar
Código Ruby:
Ver original
  1. #encoding:UTF-8
  2. def paisConMasPoblacion(muestras)
  3.    mas_poblacion = 0
  4.    inicio = muestras[0][1]
  5.    for i in 0...inicio.size
  6.         if mas_poblacion < inicio[i]
  7.             mas_poblacion = inicio[i]
  8.         end
  9.     end
  10.    return muestras[i][0]
  11. end
  12.  
  13. def ordenarPorPoblacion(muestras)
  14.     pais = []
  15.     cantidad = 0 #Array.new
  16.     ordena = muestras[1][0]
  17.     cant = muestras[0][1]
  18.     i = 0
  19.     while i < muestras.size
  20.         cantidad.push(muestras[0][i])
  21.         i = i + 1
  22.     end
  23.     #puts ordena
  24.     puts cant
  25.     #puts pais.sort
  26.     #puts ordena
  27.  
  28. end
  29.  
  30. def poblacionPromedio(muestras)
  31.    
  32. end
  33.  
  34. def desviacionEstandar(muestras)
  35.    
  36. end
  37.  
  38. #--- zona de test ----
  39.  
  40. def test_paisConMasPoblacion
  41.     muestra1 = [['Albania',28750],['Andorra',72766],['Austria',8023244],['Belarus',10415973],['Belgium',10170241],['Bosnia and Herzegovina',2656240]]
  42.     muestra2 = [['Bulgaria',8612757],['Croatia',5004112],['Czech Republic',10321120],['Denmark',5249632],['Estonia',1459428],['Faroe Islands',43857]]
  43.     muestra3 = [['Finland',5105230],['France',58317450],['Germany',83536115],['Gibraltar',28765],['Greece',10538594],['Hungary',10002541]]
  44.     print validate('Belarus', paisConMasPoblacion(muestra1))
  45.     print validate('Czech Republic', paisConMasPoblacion(muestra2))
  46.     print validate('Germany', paisConMasPoblacion(muestra3))
  47. end
  48.  
  49. def test_ordenarPorPoblacion
  50.     muestra1 = [['Albania',28750],['Andorra',72766],['Austria',8023244],['Belarus',10415973],['Belgium',10170241],['Bosnia and Herzegovina',2656240]]
  51.     muestra2 = [['Bulgaria',8612757],['Croatia',5004112],['Czech Republic',10321120],['Denmark',5249632],['Estonia',1459428],['Faroe Islands',43857]]
  52.     muestra3 = [['Finland',5105230],['France',58317450],['Germany',83536115],['Gibraltar',28765],['Greece',10538594],['Hungary',10002541]]
  53.     print validate(['Albania','Andorra','Austria','Bosnia and Herzegovina','Belgium','Belarus'], ordenarPorPoblacion(muestra1))
  54.     print validate(['Faroe Islands','Estonia','Croatia','Denmark','Bulgaria','Czech Republic'], ordenarPorPoblacion(muestra2))
  55.     print validate(['Gibraltar','Finland','Hungary','Greece','France','Germany'], ordenarPorPoblacion(muestra3))
  56. end
  57.  
  58. def test_poblacionPromedio
  59.     muestra1 = [['Albania',28750],['Andorra',72766],['Austria',8023244],['Belarus',10415973],['Belgium',10170241],['Bosnia and Herzegovina',2656240]]
  60.     muestra2 = [['Bulgaria',8612757],['Croatia',5004112],['Czech Republic',10321120],['Denmark',5249632],['Estonia',1459428],['Faroe Islands',43857]]
  61.     muestra3 = [['Finland',5105230],['France',58317450],['Germany',83536115],['Gibraltar',28765],['Greece',10538594],['Hungary',10002541]]
  62.     print validate(5227869.0,   poblacionPromedio(muestra1))
  63.     print validate(5115151.0,   poblacionPromedio(muestra2))
  64.     print validate(27921449.17, poblacionPromedio(muestra3))
  65. end
  66.  
  67. def test_desviacionEstandar
  68.     muestra1 = [['Albania',28750],['Andorra',72766],['Austria',8023244],['Belarus',10415973],['Belgium',10170241],['Bosnia and Herzegovina',2656240]]
  69.     muestra2 = [['Bulgaria',8612757],['Croatia',5004112],['Czech Republic',10321120],['Denmark',5249632],['Estonia',1459428],['Faroe Islands',43857]]
  70.     muestra3 = [['Finland',5105230],['France',58317450],['Germany',83536115],['Gibraltar',28765],['Greece',10538594],['Hungary',10002541]]
  71.     print validate(4886241.63, desviacionEstandar(muestra1))
  72.     print validate(3961012.73, desviacionEstandar(muestra2))
  73.     print validate(34463721.6, desviacionEstandar(muestra3))
  74. end
  75.  
  76.  
  77. def validate (expected, value)
  78.  expected == value ? "." : "F"
  79. end
  80.  
  81. def test
  82.    
  83.   puts "Test de prueba del programa"
  84.   puts "---------------------------"
  85.   test_paisConMasPoblacion
  86.   test_ordenarPorPoblacion
  87.   test_poblacionPromedio
  88.   test_desviacionEstandar
  89.  
  90.   puts " "
  91. end
  92. test

Etiquetas: arreglo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:55.