Consulta Sobre Funcion Calcular Costo Minimo

Consulta Sobre Funcion Calcular Costo Minimo

Postby remtec » Sun May 05, 2019 3:58 am

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.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Funcion Calcular Costo Minimo

Postby jvtecheto » Sun May 05, 2019 6:47 pm

Hola Remtec.

Asi a bote pronto sin optimizar nada...

algo asi.

Code: Select all  Expand view


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
User avatar
jvtecheto
 
Posts: 593
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Consulta Sobre Funcion Calcular Costo Minimo

Postby jvtecheto » Sun May 05, 2019 7:14 pm

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.

Code: Select all  Expand view

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
User avatar
jvtecheto
 
Posts: 593
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Consulta Sobre Funcion Calcular Costo Minimo

Postby remtec » Sun May 05, 2019 8:57 pm

Jose

Hola como estas, Mil gracias por tu ayuda.

Me has salvado, lo probare.

Muchos saludos.
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Funcion Calcular Costo Minimo

Postby remtec » Sun May 05, 2019 9:20 pm

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
FWH 22.10 - HARBOUR - PELLES C
remtec
 
Posts: 719
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Funcion Calcular Costo Minimo

Postby jvtecheto » Mon May 06, 2019 6:52 am

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.

Code: Select all  Expand view

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
User avatar
jvtecheto
 
Posts: 593
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 50 guests