Re: Yet another simple question.

• To: mathgroup at smc.vnet.net
• Subject: [mg47190] Re: Yet another simple question.
• From: "Peter Pein" <no at spam.no>
• Date: Mon, 29 Mar 2004 04:22:36 -0500 (EST)
• References: <c438uh\$emi\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```"George" <gtsavdar at auth.gr> schrieb im Newsbeitrag
news:c438uh\$emi\$1 at smc.vnet.net...
> As i'm new to this amazing world of Mathematica, i'm not able yet to
> do
> simple things that for an experienced user seem ridiculous.
>
>  So i want to ask a simple question. If:
> +++++++++++++++++++++++++++++++++++++++++++++++
> y,m,day : integer positive variables
>
> yr,mr   : integer positive variables which depend on y and m
>
> fff[day_] = Mod[day + 2*mr + Quotient[3*(mr + 1), 5] + yr + 2 +
> Quotient[yr, 4] + Quotient[yr, 400] - Quotient[yr, 100], 7];
> +++++++++++++++++++++++++++++++++++++++++++++++
>
>  Now for a specific day=D i want to find the value of the integer
> variable Q which belongs to (D,D+7], so fff[Q]=1 would be true.
>
> So i write:
>
> Do[Q = Which[fff[x] == 1, x], {x, D + 1, D + 7, 1}]
>
> and i expect Q to take the appropriate value. But this doesn't work.
> Can anyone show me the way to the light?
>
> Thank you.
>

George,

11.: You shall not use function names for variables.

Do[q=Which...] assigns q seven times a value (Null or the actual value of
x). Your Do loop could be rewritten as q=If[fff[d+1]==1,x,Null].
You should stop evaluation of the loop, as soon as a solution has been
found:
q = Catch[Do[If[fff[x] == 1, Throw[x]], {x, d + 1, d + 7, 1}]]
or (slightly simpler):
q = Scan[If[fff[#1] == 1, Return[#1], \$Failed] & , d + Range[7]].

If there is more than 1 possible solution,
d + Flatten[Position[fff /@ (d + Range[7]), 1]]
would give you a list of them.

These examples work iff values are assigned to yr, mr and d (_not_ D).

Peter
--
Peter Pein, Berlin
StringReplace["petsie at arcand.de",