Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Math help needed

qwertymkqwertymk Member Posts: 2
I'm trying to write a c or c++ program that will figure out what ratios of ingredients are needed for a given food. For example I have a cheesecake snack which contains only cream cheese, sour cream, sugar and eggs. I know from the box the nutritional facts of the box, and I know the nutritional facts about each ingredient. Now with this information I should be able to figure out the ratios with a program that just tries every possibility and checks to see if the numbers work. for example

[code]

#define close_enough 0.01

main()
{
char facts[] = {"fat (grams)", "calcium (%)", "carbs (grams)", "vitamin D (%)", "cholesterol (%)" };
double eggs[] = {4, 0, 0, 1, 4};
double creamcheese[] = {9, 3, 4, 0, 0};
double sugar[] = {0, 0, 15, 0, 0};

int numbers_should_equal_this[] = { 15, 43, 4, 7 ,3};

int looper[3];

for (looper[0] = 0 ; looper[0] < 100 ; looper[0]++)
for (looper[1] = 0; looper[1] < 100 - looper[0]; looper[1]++)
for (looper[2] = 0; looper[2] < 100 - (looper[0] + looper[1]) ; looper[2]++)
if (eggs[0] * (looper[0] / 100.0) < close_enough)
if (creamcheese[0] * (looper[1] / 100.0) < close_enough)
if (sugar[0] * (looper[1] / 100.0) < close_enough)


[/code]



well you get the idea. Anyway I was wondering if you guys have any ideas on how to write a program like this (I got writers block) and also is there was a mathematical way to solve for an equation like this. Thanks alot guys


PS seems a shame to erase the above but I would have probably done this in real life:

[code]

#define close_enough 0.01

main()
{
char facts[] = {"fat (grams)", "calcium (%)", "carbs (grams)", "vitamin D (%)", "cholesterol (%)" };

double ingred[3][5] =
{
{ 0, 1, 2, 4, 3 },
{ 3, 4, 5, 0, 3 },
{ 0, 6, 0, 7, 8 }
};

int numbers_should_equal_this[] = { 15, 43, 4, 7 ,3};

int looper[3];

for (looper[0] = 0 ; looper[0] < 100 ; looper[0]++)
for (looper[1] = 0; looper[1] < 100 - looper[0]; looper[1]++)
for (looper[2] = 0; looper[2] < 100 - (looper[0] + looper[1]) ; looper[2]++)
if (ingred[0][0] * (looper[0] / 100.0) < close_enough)
if (inged[1][0] * (looper[1] / 100.0) < close_enough)
if (sugar[2][0] * (looper[1] / 100.0) < close_enough)

[/code]
you see what I mean

Comments

  • BitByBit_ThorBitByBit_Thor Member Posts: 2,444
    : well you get the idea. Anyway I was wondering if you guys have any
    : ideas on how to write a program like this (I got writers block) and
    : also is there was a mathematical way to solve for an equation like
    : this. Thanks alot guys
    :

    Mathematically, say n ingredients, C being the final amount of calories, and c[leftbr]i[rightbr] being the amount of calories per unit of ingredient i (0 <= i < n).
    We take x[leftbr]i[rightbr] to be the amount of ingredient i.
    Then we have the n-dimensional linear equation:
    [code] c[0] x[0] + c[1] x[1] + ... + c[n-1] x[n-1] = C [/code]
    If we have only 2 ingredients, n=2 and this reduces to a well-known case:
    [code]
    //n = 2
    c[0] x[0] + c[1] x[1] = C
    //or more regularly written as:
    a x + b y = c <-> y = -a/b x + c/b = p x + q
    [/code]
    In this case we already see that rather than a unique x and y (x[leftbr]0[rightbr] and x[leftbr]1[rightbr]) we get a straight line of possibilities.

    In the general n>1 case we get the same result. The best we can do is to get a linear equation of n-1 variables. So there is no 'unique' solution.

    I have forgot to mention here though that most of the solutions you'll get give a negative value for at least one of the ingredients.

    One technique I can think of to find a ratio of ingredients is this:
    Start at a certain ratio (I'll call it a point) with total calories added up smaller than C.
    Then find an accompanying point with total calories added up larger than C
    Next you take a point in between (for instance a ratio that is in the middle of the two other ratio's). Depending on whether or not the value of this point/ratio is greater than C, you take the Start point and this new point (new value > C), or this new point and the end point (new value < C).
    Then repeat this process, until you are close enough to C as you want.
    Mathematics guarantee that you approximate a point with value C.

    There are some details about this approach that I haven't thought through fully yet :( So I'm afraid that in it's current form it won't work.

    Maybe you can think of other, better methods? It's always fun to think about such challenges.
    Best Regards,
    Richard

    The way I see it... Well, it's all pretty blurry
  • qwertymkqwertymk Member Posts: 2
    : : well you get the idea. Anyway I was wondering if you guys have any
    : : ideas on how to write a program like this (I got writers block) and
    : : also is there was a mathematical way to solve for an equation like
    : : this. Thanks alot guys
    : :
    :
    : Mathematically, say n ingredients, C being the final amount of
    : calories, and c[leftbr]i[rightbr] being the amount of calories per
    : unit of ingredient i (0 <= i < n).
    : We take x[leftbr]i[rightbr] to be the amount of ingredient i.
    : Then we have the n-dimensional linear equation:
    : [code]: c[0] x[0] + c[1] x[1] + ... + c[n-1] x[n-1] = C [/code]:
    : If we have only 2 ingredients, n=2 and this reduces to a well-known
    : case:
    : [code]:
    : //n = 2
    : c[0] x[0] + c[1] x[1] = C
    : //or more regularly written as:
    : a x + b y = c <-> y = -a/b x + c/b = p x + q
    : [/code]:
    : In this case we already see that rather than a unique x and y
    : (x[leftbr]0[rightbr] and x[leftbr]1[rightbr]) we get a straight line
    : of possibilities.
    :
    : In the general n>1 case we get the same result. The best we can do
    : is to get a linear equation of n-1 variables. So there is no
    : 'unique' solution.
    :
    : I have forgot to mention here though that most of the solutions
    : you'll get give a negative value for at least one of the ingredients.
    :
    : One technique I can think of to find a ratio of ingredients is this:
    : Start at a certain ratio (I'll call it a point) with total calories
    : added up smaller than C.
    : Then find an accompanying point with total calories added up larger
    : than C
    : Next you take a point in between (for instance a ratio that is in
    : the middle of the two other ratio's). Depending on whether or not
    : the value of this point/ratio is greater than C, you take the Start
    : point and this new point (new value > C), or this new point and the
    : end point (new value < C).
    : Then repeat this process, until you are close enough to C as you
    : want.
    : Mathematics guarantee that you approximate a point with value C.
    :
    : There are some details about this approach that I haven't thought
    : through fully yet :( So I'm afraid that in it's current form it
    : won't work.
    :
    : Maybe you can think of other, better methods? It's always fun to
    : think about such challenges.
    : Best Regards,
    : Richard
    :
    : The way I see it... Well, it's all pretty blurry

    can you explain a little more? I got lost. And can you give an example of using this system? Thank you

Sign In or Register to comment.