jcglen

asked on

# Iteration Calculation

What is the best/right way to do an iteration calculation in Delphi? For example:

Item1 <Number>

Item2 <Number>

Item3 <Number>

Item4 <15% of Total>

Item5 <Number>

Total <Total of Above>

Thanks in advance

James

Item1 <Number>

Item2 <Number>

Item3 <Number>

Item4 <15% of Total>

Item5 <Number>

Total <Total of Above>

Thanks in advance

James

Not sure what you mean - can you explain a bit better?

The Neil =:)

The Neil =:)

I am not sure is this is that you want:

Total=(Item1+Item2+Item3+Item5)*100/(100-Item4)

Ivan

P.S. The question is not very clear.

Total=(Item1+Item2+Item3+I

Ivan

P.S. The question is not very clear.

ASKER

My apologies...I guess when you're inside the paradigm you can't see it.

Let me try and clarify

Item 1 32,308

Item 2 1,341

Item 3 10,293

Item 4 Has to equal 15% of total of Items 1-5

Item 5 53,231

Total Total of Items 1 through 5

The problem here is you can't figure out what 15% of the Total is until you figure out what the Total is. I think a human calculating this would keep trying (ie iterate) different numbers in the Item 4 and Total variables until it actually worked.

I was hoping that there was a preferred/correct/best way to do it in the Delphi world.

I hope this clarifies things a bit. If not check out the Iteration setting in MS-Excel.

Thanks

James

Let me try and clarify

Item 1 32,308

Item 2 1,341

Item 3 10,293

Item 4 Has to equal 15% of total of Items 1-5

Item 5 53,231

Total Total of Items 1 through 5

The problem here is you can't figure out what 15% of the Total is until you figure out what the Total is. I think a human calculating this would keep trying (ie iterate) different numbers in the Item 4 and Total variables until it actually worked.

I was hoping that there was a preferred/correct/best way to do it in the Delphi world.

I hope this clarifies things a bit. If not check out the Iteration setting in MS-Excel.

Thanks

James

So, what is wrong with Ivan's comment...doesn't that satisfy the conditions? You don't need to do trial-and-error thing here. Add items 1, 2, 3, and 5, divide that by 0.85 and you get the total. Multiply that by 0.15 and you will get item 4 (which is what Ivan is saying).

Could you clarify one step further?

Could you clarify one step further?

Total := Item1 + Item2 + Item3 + Item5 + (0.15 * (Item1 + Item2 + Item3 + Item5 )) / 0.85

ASKER

This does work as advertised. Thanks. I think what I'm really looking for is an single function/algorithm that can take any number of Items that have any number of Items with a "% of Total" setting and provide the answers for both the Total and all of the % of Total entires.

If the above examples from Ivan (and now Epsylon) will fit the bill then I apologize for belabouring the point.

If the above examples from Ivan (and now Epsylon) will fit the bill then I apologize for belabouring the point.

Lets have :

y1+k1*Total+y2+y3+....+ym+kn*total=total

We know y1+y2+...+ym = Y;

Then :

Y = total*(1-k1-k2-...-kn) or

total = Y/(1-k1-...-kn)

Replace Total in

k1*Total = k1*Y/(1-k1-k2-...-kn)

......

kn*Total = kn*Y/(1-k1-k2-..-kn)

y1+k1*Total+y2+y3+....+ym+

We know y1+y2+...+ym = Y;

Then :

Y = total*(1-k1-k2-...-kn) or

total = Y/(1-k1-...-kn)

Replace Total in

k1*Total = k1*Y/(1-k1-k2-...-kn)

......

kn*Total = kn*Y/(1-k1-k2-..-kn)

ASKER CERTIFIED SOLUTION

membership

This solution is only available to members.

To access this solution, you must be a member of Experts Exchange.

hi. iteration is an engineering problem and, are we having trouble with the iteration algorythm or application of some mathematical techniques to delphi?

i think i've understood the problem but am i wrong? (iteration is good. unless it diverges :)

i think i've understood the problem but am i wrong? (iteration is good. unless it diverges :)

Might I propose some simplifications to Epsylon's code (the whole reproduced with edits):

procedure TForm1.Calculate(values, percentages: array of Double);

var totval, totperc, total: Double;

i: Integer;

begin

totval := 0;

for i := Low(values) to High(values) do

totval := totval + values[i];

totperc := 0;

for i := Low(percentages) to High(percentages) do

totperc := totperc + percentages[i];

Total := TotVal / (1-totperc)

for i := Low(values) to High(values) do

ListBox1.Items.Add('Item ' + IntToStr(i) + ' : ' + FloatToStr(values[i]));

for i := Low(percentages) to High(percentages) do

ListBox1.Items.Add('ItemP ' + IntToStr(i) + ': ' +

FloatToStr(Total * percentages[i]) +

' (' + FloatToStr(percentages[i] * 100) + '%)');

ListBox1.Items.Add('Total : ' + FloatToStr(total));

end;

procedure TForm1.Calculate(values, percentages: array of Double);

var totval, totperc, total: Double;

i: Integer;

begin

totval := 0;

for i := Low(values) to High(values) do

totval := totval + values[i];

totperc := 0;

for i := Low(percentages) to High(percentages) do

totperc := totperc + percentages[i];

Total := TotVal / (1-totperc)

for i := Low(values) to High(values) do

ListBox1.Items.Add('Item ' + IntToStr(i) + ' : ' + FloatToStr(values[i]));

for i := Low(percentages) to High(percentages) do

ListBox1.Items.Add('ItemP ' + IntToStr(i) + ': ' +

FloatToStr(Total * percentages[i]) +

' (' + FloatToStr(percentages[i] * 100) + '%)');

ListBox1.Items.Add('Total : ' + FloatToStr(total));

end;

Good example Eps, but the formula is the same like my.

Ivan

Ivan

Well Ivan, yes, but he made it a generic solution.

> the formula is the same like my.

My formula doesn't have 'item4' in it so it's not the same....

Or am I missing something?

My formula doesn't have 'item4' in it so it's not the same....

Or am I missing something?

ASKER

Comment accepted as answer

ASKER

Thanks everyone for taking a run at this... I have a feeling that I will be back a few times on this whole iteration issue as my current project is chock full of it. Nevertheless Epsylon's solution works for the task at hand (and then some).

James

James

http://www.torry.ru/expressions.htm

Or use the F1Book component from the ActiveX tab.