Amigos
Muy buenas noches, necesito Urgente un Funcion que me permita Calcular Costo Minimo de la siguiente Tupla:
Tengo una Lista de la Siguiente Forma con (Tamaño, Precio): Lista_pre=[(1,1),(2,5),(3,8),(4,9),(5,10),(6,17),(7,17),(8,20)], donde:
Para ello me ingresaran una Madera de largo " N ", y debo cortarla en trozos cuya dimencion o tramaño se encuentren el la lista, la cual tiene asociado el Costo de cada corte.
Ejemplo Elementos (2,5)
1. Primer Elemento = Dimencion 2
2. Segundo Elemento = Costo 5
Necesito poder realizar un proceso de Cortes, con una funcion que me calcule en Costo minimo de trozar:
Ejemplo: Una Madera de Dimencion 4, tiene un costo de 9, debo cortarla en dimenciones menores, pero al minimo costo:
Resultado: ( 1,1,1,1) Esto indica, que puedo hacer 4 cortes de largo 1 y cada corte cuesta 1, por lo que el Costo de Corte es 4)
Alguien pueda tener una funcion Similar que pueda calcular Costo Minimo, asi podria guiarme o adptarla, si no es mucha la molestia.
Muchas gracias y muchos saludos.
Consulta Sobre Funcion Calcular Costo Minimo
Re: Consulta Sobre Funcion Calcular Costo Minimo
Hola Remtec.
Asi a bote pronto sin optimizar nada...
algo asi.
Saludos
Jose
Asi a bote pronto sin optimizar nada...
algo asi.
Code: Select all | Expand
Function CalcOpc(nlargo,aMedidas)
local n, m, ntrozos, nprecioTemporal, nMejorPrecio:= 0
Local aLongitudes := {}, aPrecios := {} , aSolucion:= {}
Local lPrimeraVez:= .T.
FOR n:= 1 TO Len(aMedidas)
AAdd(aLongitudes,aMedidas[n,1])
AAdd(aPrecios,aMedidas[n,2])
ENDFOR
FOR n:=1 TO Len(aLongitudes)
IF (aLongitudes[n]<= nlargo) .AND. ((nlargo%aLongitudes[n]) =0 )
ntrozos:= nlargo/aLongitudes[n]
nprecioTemporal := ntrozos*aPrecios[n]
IF lPrimeraVez
nMejorPrecio:= nprecioTemporal
AAdd(aSolucion,aLongitudes[n])
AAdd(aSolucion,aPrecios[n])
lPrimeraVez:= .F.
ELSEIF !lPrimeraVez .AND. (nprecioTemporal<nMejorPrecio)
nMejorPrecio:= nprecioTemporal
aSolucion[1]:= aLongitudes[n]
aSolucion[2]:= aPrecios[n]
ENDIF
ENDIF
ENDFOR
Return aSolucion
Saludos
Jose
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Re: Consulta Sobre Funcion Calcular Costo Minimo
Hola amigo
Mas optimizado,
creo que mejor devuelve el indice del array que es mejor opcion,
Se puede optimizar mas, pero no tengo mas tiempo.
Un saludo
Jose
Mas optimizado,
creo que mejor devuelve el indice del array que es mejor opcion,
Se puede optimizar mas, pero no tengo mas tiempo.
Code: Select all | Expand
Function Main()
Local aMedidas := { {1,3},{2,6},{3,10},{4,5},{5,2},{6,1},{7,2},{8,2}}
Local n, nLargo:= 8
n:= nCalcOpc(nLargo,aMedidas)
? "Indice del array", n
? aMedidas[n,1], aMedidas[n,2]
Inkey(0)
Return nil
Function nCalcOpc(nlargo,aMedidas)
local n, r, ntrozos, nprecioTemporal, nMejorPrecio:= 0
Local aSolucion:= {}
Local lPrimeraVez:= .T.
FOR n:=1 TO Len(aMedidas)
IF (aMedidas[n,1]<= nlargo) .AND. ((nlargo%aMedidas[n,1]) =0 )
ntrozos:= nlargo/aMedidas[n,1]
nprecioTemporal := ntrozos*aMedidas[n,2]
IF lPrimeraVez
nMejorPrecio:= nprecioTemporal
r := n
lPrimeraVez:= .F.
ELSEIF !lPrimeraVez .AND. (nprecioTemporal<nMejorPrecio)
nMejorPrecio:= nprecioTemporal
r := n
ENDIF
ENDIF
ENDFOR
Return r
Un saludo
Jose
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
Re: Consulta Sobre Funcion Calcular Costo Minimo
Jose
Hola como estas, Mil gracias por tu ayuda.
Me has salvado, lo probare.
Muchos saludos.
Hola como estas, Mil gracias por tu ayuda.
Me has salvado, lo probare.
Muchos saludos.
FWH 22.10 - HARBOUR - PELLES C
Re: Consulta Sobre Funcion Calcular Costo Minimo
Hola Jose.
Solo me entrega en Costo minimo. Necesito que me registre el detalle de los cortes que debo realizar por ese costo.
He tratado de registrarlo, pero no logro hacer la lista de detalle de cortes.
Muchos Saludos
Solo me entrega en Costo minimo. Necesito que me registre el detalle de los cortes que debo realizar por ese costo.
He tratado de registrarlo, pero no logro hacer la lista de detalle de cortes.
Muchos Saludos
FWH 22.10 - HARBOUR - PELLES C
Re: Consulta Sobre Funcion Calcular Costo Minimo
Hola amigo:
Mira la funcion sin codigo redundante y con el esto en el Main tiene el despieze que tienes que hacer en nCortes
el precio minimo y el indice del elemento del subarray que tienes que utilizar.
Espero que esto si solucione el asunto
Saludos.
Jose.
Mira la funcion sin codigo redundante y con el esto en el Main tiene el despieze que tienes que hacer en nCortes
el precio minimo y el indice del elemento del subarray que tienes que utilizar.
Code: Select all | Expand
Function Main()
Local aMedidas := { {1,1},{2,6},{3,10},{4,2},{5,2},{6,3},{7,2},{8,2}}
Local n, nCortes, nLargo:= 24
n:= nCalcOpc(nLargo,aMedidas) // Devuelve el indice del subarray a utilizar
nCortes := nLargo/aMedidas[n,1] // Despiece a realizar
QOut("Para el largo", nLargo)
QOut("Indice del array", n)
QOut("Longitud del corte",aMedidas[n,1],"Precio del Corte",aMedidas[n,2])
QOut("Numero de Cortes",nCortes,"Precio", aMedidas[n,2])
QOut("Total Precio Minimo= ",(nCortes * aMedidas[n,2]) ) // Con este tienes despiece y precio por elemento
Inkey(0)
Return nil
Function nCalcOpc(nlargo,aMedidas)
local n, r, ntrozos, nprecioTemporal, nMejorPrecio:= 0
Local lPrimeraVez:= .T.
FOR n:=1 TO Len(aMedidas)
IF ((nlargo%aMedidas[n,1]) =0 )
ntrozos:= nlargo/aMedidas[n,1]
nprecioTemporal := ntrozos*aMedidas[n,2]
IF lPrimeraVez
nMejorPrecio:= nprecioTemporal
r := n
lPrimeraVez:= .F.
ELSEIF !lPrimeraVez .AND. (nprecioTemporal<nMejorPrecio)
nMejorPrecio:= nprecioTemporal
r := n
ENDIF
ENDIF
ENDFOR
Return r
Espero que esto si solucione el asunto
Saludos.
Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64