Witam.
Stoję przed takim problemem:
mamy zestaw wierszy (krotek) o atrybutach
CENA RABAT PODATEK CENA_Z_RABATEM ILOSC WARTOSC_NETTO WARTOSC_BRUTTO
Wartości są obliczone następująco:
CENA - liczba z dwiema cyframi po przecinku (np 199.99)
PODATEK = 0.23
RABAT - dowolny współczynnik, np. 0.95
CENA_Z_RABATEM - powstaje przez przemnożenie CENY przez współczynnik RABAT i (uwaga) zaokrąglenie wyniku mnożenia do 2 cyfr po przecinku
ILOSC - całokowita (np. 1,2,3,..,10,.. - nie więcej niż 200)
WARTOSC_NETTO = ILOSC * CENA_Z_RABATEM - (2 miejsca po przecinku, ponieważ WARTOSC_NETTO ma 2msc)
PODATEK_KWOTA = WARTOSC_NETTO * PODATEK (czyli WARTOSC_NETTO * 0.23) uwaga ponowie (drugie zaokrąglenie) zaokrąglone do 2 msc po przec.
Zaokrąglenia są naturalne (0.5 zaokrąglone w górę do jeden)
Zadanie:
Mając dany zbiór wierszy CENA RABAT PODATEK CENA_Z_RABATEM ILOSC WARTOSC_NETTO WARTOSC_BRUTTO
Wykonać możliwe małe - w sensie proporcji "delty" do ceny pierwotnej operacje na kolumnie CENA, aby w wyniku tych modyfikacji:
- suma kolumny WARTOSC_NETTO pozostała niezmieniona
- suma kolumny WARTOSC_NETTO po przemnożeniu przez PODATEK i zaokrągleniu do 2 msc po przec była sumą kolumny WARTOSC_BRUTTO
Przykład:
CENA RABAT PODATEK ILOSC CENA_Z_RAB WARTOSC_NETTO PODATEK_KWOTA
2759.00 0.94 0.23 1 2593.46 2593.46 596.50
1740.00 0.94 0.23 1 1635.60 1635.60 376.19
SUMA(WARTOSC_NETTO)=4229.06
SUMA(PODATEK_KWOTA) = 972.69
Tymczasem 4229.06*0.23 = 972,6838, co zaokrąglone do 2 msc = 972,68 (różnica 0.01)
Rozwiązanie (wiersze po zmianie)
2758.99 0.94 0.23 1 2593.45 2593.45 596.49
1740.01 0.94 0.23 1 1635.61 1635.61 376.19
SUMA(WARTOSC_NETTO)=4229.06
SUMA(PODATEK_KWOTA) = 972.68
Poszukuję pomysłów na rozwiązanie tego w ogólnym przypadku.
Za rozwiązanie chętnie odwdzięczę się (np. finansowo)
Poniżej kilka trudniejszych przykładów:
1.
172.44 0.750000 0.230000 1.000000 129.33 129.33 29.75
172.44 0.750000 0.230000 1.000000 129.33 129.33 29.75
131.86 0.750000 0.230000 1.000000 098.90 098.90 22.75
044.26 0.750000 0.230000 1.000000 033.20 033.20 7.64
0737.00 0.900000 0.230000 1.000000 0663.30 0663.30 152.56
0737.00 0.900000 0.230000 1.000000 0663.30 0663.30 152.56
2420.00 0.900000 0.230000 1.000000 2178.00 2178.00 500.94
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0309.00 0.900000 0.230000 1.000000 0278.10 0278.10 063.96
0968.00 0.900000 0.230000 1.000000 0871.20 0871.20 200.38
1730.00 0.900000 0.230000 1.000000 1557.00 1557.00 358.11
1089.00 0.900000 0.230000 1.000000 0980.10 0980.10 225.42
1032.00 0.900000 0.230000 1.000000 0928.80 0928.80 213.62
0111.00 0.900000 0.230000 2.000000 099.90 0199.80 045.95
Dodam, że nie chodzi o rozwiązanie optymalne, lecz jakiekolwiek sensowne. :-)
Rozwiązanie typu - wpisujemy zera do wszystkich wierszy oprócz ostatniego, a w ostatnim umieszczamy wartość sumy NIE jest sensowne :-)
Pozdrawiam,
Marcin