Visual Basic - Algoritmo... Solo para Bravos

Life is soft - evento anual de software empresarial
 
Vista:

Algoritmo... Solo para Bravos

Publicado por Roberto Alexander (2 intervenciones) el 28/08/2003 18:25:16
Tabla: t_item

codigo cantidad
A001 -10
A001 -20
A001 100
A001 180
A001 -80
A001 -90
A001 100
A001 -100
A001 -100
A001 40
A001 -10
A001 -10
A001 -10
A001 15
A001 20

Cuando se imprima se va hacer de 5 en 5(registros) quedando de esta
manera.
1ER REPORTE
codigo cantidad
A001 -10
A001 -20
A001 100
A001 180
A001 -80
TOTAL-------------> 170

2DO REPORTE
codigo cantidad
A001 -90
A001 100
A001 -100
A001 -100
A001 40
TOTAL-------------> -150

3ER REPORTE
codigo cantidad
A001 -10
A001 -10
A001 -10
A001 15
A001 20
TOTAL-------------> 5

La idea es que ningun total sea negativo, partiendo de que todos los
registros estan en una sola tabla y que seran dividios en varios
reportes y ninguno de estos su total debe ser negativo y si lo es jugar con los registros hasa que todos los totales sean positivos??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Algoritmo... Solo para Bravos

Publicado por Edgar (20 intervenciones) el 28/08/2003 21:11:31
La solucion que te propongo es la siguiente

Separa los registros en dos tablas, en una colocas los positivos y en la otra los negativos.

La tabla de registros positivos las ordenas de mayor a menor y la de los negativos la ordenas de menor a mayor

Agregas el primer registro positivo y luego.. vas agregando los registros negativos en orden hasta no poder mas (porque la suma te daria negativa) o hasta que llegues a los 5 registros, en ese momento agregas el siguiente registro positivo y repites la misma operación.

Esta solución puedes hacerla tambien sobre la misma tabla pero creo que es un poco mas complicado.

Avisame si te funciona..

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Algoritmo... Solo para Bravos

Publicado por bla (230 intervenciones) el 28/08/2003 23:55:53
Sólo hacerte notar que en algunos casos puede no tener solución.
Por ejemplo tenemos seis registros:
1 = 500
2 = -100
3= -80
4= -20
5=-100
6=-90
Tenemos 6 registros cuyo total es positivo, pero que no podemos dividir en dos grupos de 5 positivos por la sencilla razón de que sólo tenemos menos números positivos que grupos necesarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Algoritmo... Solo para Bravos

Publicado por Edgar (20 intervenciones) el 29/08/2003 02:19:08
Hola

De por si, el cualquier algoritmo debe cumplir con una buena cantidad de precondiciones para que se pueda hallar una solución.. tu mostraste una y obviamente otra es que la suma no puede ser negativa.

Sin embargo, aun cumpliendose las condiciones anteriores, podria encontrarse casos en que tampoco se consiga una solución factible..

Por ejemplo...
1 = -220
2 = 50
3 = 50
4 = 50
5 = 50
6 = 60

No hay solución.. ¿por que? porque no se puede conseguir 4 elementos positivos que sumen mas de 220...

Resulta obvio que el algoritmo que propuse (y cualquiera que se proponga) no podrá resolver este problema en ciertos casos porque las condiciones que tiene lo hacen imposible.

Sin embargo.. me imagino que es posible que, dependiendo de cual sea tu programa, puedas hallar una buena solución siempre que se garantize que no se van a cumplir estos casos como los que describio "Bla" o el que te describi anteriormente

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar