2015年05月17日

その1「if文で複数の条件式を満たす場合、なぜか思い通りに動作しない」

正しく書いているはずなのに、うまくいかない。
たぶん仕事や授業でプログラミングを経験してきた人にとっては当たり前のことかもしれませんが、独学でやってくると意外とハマりやすいので忘備録に記しておきます。

まず、うまくいかない例

a=6
b=8
if a&2{dialog "check1"}
if b&8{dialog "check2"}
if (a&2)&(b&8){dialog "check3"}

一つ一つの条件式は正しく動作するのに、つなげるとうまくいかない。


この場合は、以下のようにすると動作します。

a=6
b=8
if a&2{dialog "check1"}
if b&8{dialog "check2"}
if (a&2)=2&(b&8)=8{dialog "check3"}

説明は、その分野の方にお任せします。

タグ:HSP
posted by Taddi at 15:08| Comment(0) | HSP忘備録

2015年03月07日

指定年月日から現在の年齢と次の誕生日までの日数を算出

本家掲示板で投稿したものです。
Fairfieldの公式と年齢算出式は
なぜそうなるのか細かな理屈を理解していないので、
自分自身の忘備用に残しておきます。

#module
    #defcfunc getday int y,int m, int d ;Fairfieldの公式によるグレゴリオ暦換算
    return 365 * y + (y/4) - (y/100) + (y/400) + (306 * (m+1) / 10) + d - 428
#global

    mes "生年月日を入力(yyyymmdd)"
    birthday=0 : input birthday,120,20,8
    button "算出",*calc : stop

*calc
    ty=gettime(0) : tm=gettime(1) : td=gettime(3)
    by=birthday/10000 : bm=birthday\10000/100 : bd=birthday\100
    today=ty*10000+tm*100+td : age=(today-birthday)/10000    ;年齢算出
    if (bm*100+bd)-(tm*100+td)<1{cy=ty+1}else{cy=ty}    ;今年の誕生日を迎えている
    next_age=getday(cy,bm,bd)-getday(ty,tm,td)    ;次の誕生日までの日数算出
    dialog "今の年齢は"+age+"歳です。\n"+next_age+"日後に"+(age+1)+"歳になります。"

ちなみに、未来の日付を入力するとエラーは起きませんが、
正しい値を表示しないと思うのでそのあたりはご注意ください。

posted by Taddi at 02:41| Comment(0) | HSP忘備録