- ベストアンサー
複数の数字を吐き出す関数(FileMaker)
ファイルメーカーを使っていて、複数の数字を吐き出す関数が作りたいのです。 数字AとBという入力欄があり、AからBまでの整数値を吐いてくれる関数はどう作ったらよいでしょうか。 ・具体的には、4月~6月と入力して4,5,6と出したいのです。 ・12月~3月と入力して、12,1,2,3(または1,2,3,12)と出したいのです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
★お詫び >これを実行してしまうと、 >10月~2月まで咲く花が、10・11・12・1・2と吐かずに >2・3・4・5・6・7・8・9・10と吐いてしまいませんか?? ↑ そうでしたね。 ・では考え方を改めてます。 10月~2月の場合は2月に12ヶ月を加えて14月として処理します。 すると簡単に10月~14月をループして (変数) (表示部) 10⇒10月 11⇒11月 12⇒12月 13⇒13月-12月⇒1月 14⇒14月-12月⇒2月 と表示部で13以上の数は12月分を引いてから表示するようにします。 ・下に擬似言語でまた記述します。 A=10月 ←最初の数字 B=2月 ←最後の数字 if ( A > B ){ B = B + 12; ←12月分を加算 } while ( A <= B ){ if ( A > 12 ){ /* A-12 の数字を表示 */ } else{ /* A の数字を表示 */ } A = A + 1; } ↑ C言語風で記述してみました。 『ファイルメーカー』に while 文ってありますかね。 なかったら Loop~Loop End と If~EndIf と組み合わせて下さい。 ・以上。
その他の回答 (2)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・『ファイルメーカー』ってデータベースの管理ソフトなんですね。 検索して今さっき知りました。 ・それでスクリプトの編集画面で制御関数?を使って出来ると思います。 スクリプトステップ欄に If、Else、End If、Loop、End Loop が用意されているので 繰り返し文を構成して数字 A から数字 B までの整数値を吐く関数を作ります。 ただし、数字 A と数字 B を比較して必ず小さい数から大きい数の順に整数値を吐き出す ように If 関数を使って分岐処理させます。分かりますかね If とか? ・演算子も用意されているので If と組み合わせて使います。 文法がよく分からないので擬似言語としてサンプルを載せます。 サンプル: A ←数字 A が入っているとする B ←数字 B が入っているとする C ←新しい変数(変数って使えるのかな?) If A > B C = A ←数字 A を一時変数 C に代入 A = B ←数字 A に数字 B を代入 B = C ←数字 B に一時変数 C を代入 ↑ この3行で数字 A と数字 B を交換する仕組みです。 End If ここから下が小さい数から大きい数を吐き出す処理 Loop If A <= B A の整数値を吐き出す A に +1 加算する Else 現在のスクリプト終了 End If Loop End 最後に: ・上記のサンプルを元にスクリプトの画面を編集して下さい。 考え方は小さい数(A)から順番に整数値を吐き出して、大きい数(B)までを繰り返すように スクリプトを記述すればよい。繰り返しは Loop~Loop End で構成すると思いますが、 念のためマニュアルなどで確認して下さい。また、処理の分岐も If~Else~End If で 構成すると思いますが、こちらも確認して下さい。 私は『ファイルメーカー』を今日のさっき知ったので記述の仕方は分かりませんが、 プログラミング経験者としてアドバイスしてみました。参考にどうぞ。 ・以上。
補足
遅くなりまして申し訳ありません。 If A > B C = A ←数字 A を一時変数 C に代入 A = B ←数字 A に数字 B を代入 B = C ←数字 B に一時変数 C を代入 これを実行してしまうと、 10月~2月まで咲く花が、10・11・12・1・2と吐かずに 2・3・4・5・6・7・8・9・10と吐いてしまいませんか??
- Oh-Orange
- ベストアンサー率63% (854/1345)
★補足要求します。 ・最初にお聞きしますが、プログラミング言語は何ですか? これが分からないとアルゴリズムのみのアドバイスになります。 ・以上。待っています。
補足
申し訳ありません。遅くなってしまいました。 言語までの詳細は分かりかねます…ごめんなさい。 エクセルレベルの関数を使い分ければ出来ると思っていたもので。 もし出来そうにないなら諦めます。 今は、case関数を使って、 ( x=y ; x ; abs(x-y)=1 ; x¶x+1 ; abs(x-y)=2 ; x¶x+1¶x+2 …) と書いています。
お礼
whileが無いのです…。 でもわざわざお答えくださってありがとうございました。