dポイントプレゼントキャンペーン実施中!

このたび、情報の授業で班ごとにプログラムを作ることになりました
しかし、私にはセンスが皆無なのでしょうが、プリントを読んだり調べたりしてもさっぱり理解できません

このままだと私が足を引っ張ることになり、とても困ります


どうやら、やる内容は、西暦と第何曜日かを決めて、日にちを求めるプログラムを組まなくてはならないようです


今のところなんとか足掻いて書いたのが以下のようなものです



Sub hi()

nserial = DateSerial(seireki, tsuki, hi)





Select Case hiindex

case1
hi = 1

case2
hi = 2

case3
hi = 3

case4
hi = 4

case5
hi = 5

case6
hi = 6

case7
hi = 7

case8
hi = 8

case9
hi = 9

case10
hi = 10

case11
hi = 11

case12
hi = 12

case13
hi = 13

Case14
hi = 14

case15
hi = 15

case16
hi = 16

case17
hi = 17

case18
hi = 18

case19
hi = 19

case20
hi = 20

case21
hi = 21

case22
hi = 22

case23
hi = 23

case24
hi = 24

case25
hi = 25

case26
hi = 26

case27
hi = 27

case28
hi = 28

case29
hi = 29

case30
hi = 30

case31
hi = 31









End Sub






どなたか助けてください!!!
もうさっぱり手も足もでないので、どんなアドバイスでもうれしいです!!

A 回答 (4件)

まずは、問題の意味を把握して、入力が何で、出力が何なのかをはっきりさせましょう。



入力値は、西暦、何週目、曜日、の3つで、出力値は、日付(何月何日)、ということですよね。

手順としては、

入力西暦から、1月1日が何曜日なのかを調べることができます。調べ方はここには書きませんが。

そうすると、入力曜日の第1週目が何日(1月1日から1月7日のどれか)なのかが解ります。

あとは、入力週から、求める日が解ります。

これはほんの一例で、他にもやりかたはいろいろあると思います。

頑張ってください。
    • good
    • 0
この回答へのお礼

本当にありがとうございます!
先生もそのようなことをおっしゃっていたのですが、自分の理解力不足で大変でした!
ありがとうございました
参考にしてみます^^

お礼日時:2008/09/19 09:36

学校の問題なのですね。


どこまで、要求されるのか不明だが。

私が思うには、本当なら、学校の問題だから、
当然、DateSerial(seireki, tsuki, hi) の関数を使うとか、Weekday の関数を
使うとか、その他の日付関数を使う事事態邪道だとおもいます。

四則演算のみで求めるのが理想では?。

しかし、そんなのしても、先生が理解できんかも?。先生も日付関数をつかうのだろね。
本当は間違いなのだけど。

日付関数を一切使わないの方法は?。自分で日付関数に相当するのを作る言です。
それほどステップは必要ありません。

ヒントは、うるう年の計算がきっちりと出来ればOKです。

あと、自分で作る関数は、ある年月日を与えると、
ある基点日(例えば、1989/12/31 windowsはこれを基点日にしている)から何日目かを求める
関数があればいいのです。


function nisuu(in_yyyy,in_mm,in_dd)
{
dim k_yyyy;
dim k_mm;
dim k_dd;

k_yyyy=1989
k_mm=12
k_dd=31


ここに四則演算のみを入れる

nisuu=答え(1989/12/13から何日目)
}

上の関数があれば、1989/12/31の曜日が仮に木曜日だとすると、任意の日付の曜日は上の関数で
もとめた日数を7で割れば曜日がでます。

上の関数ができれば、
ある年の1月1日の曜日は簡単にもとまりますね。

あとは、第何曜日は、それに7を掛けて、かつ、曜日の補正(スタート曜日に注意)
をすれば、その年の1月1日から何日目かわかります。

何日目がわかれば、上で作成したnisuu関数を利用すれば直ぐに何日か求まります。
ただ、この場合上で作成したnisuu関数をそのまま利用できませんね。なぜなら、
その関数は日付をいれて何日目かを求める関数だから。逆の何日目を与えて
日付を求めるのだから、一見不可能な様に思えます。しかし、ここは、ちゃんと
上で作成したnisuu関数のみで求める言ができます。

不思議と思いますね。しかし、この様にある関数の逆の性質の関数は、逆の性質の
関数がなくても、その関数で逆の答えを導き出す事が出来ます。

通常、日常業務では、金利の逆計算時によく用いられます。たとば、あるものを
買えば、頭金幾らで、毎月幾らかは、金利率から簡単に計算できます。
しかし、毎月幾ら払えば、頭金は幾らになるか。この場合、計算式を2つ用意する
としても、金利計算には小数点以下端数がつくから、逆の計算式を用いても、
頭金に若干の誤差がでます。この様な誤差も出さない様にしようとおもえば、
計算式は1個でないと駄目になります。故に毎月幾ら払えば、頭金がいくらかは、
頭金が幾らなら、毎月幾らかの計算式のみで求める事になります。
参考までです。
    • good
    • 0

#1です。


何度もすみません。

今回のプログラムの場合、年ごとのカレンダーが手元にあると仮定して、西暦何年の第何週目の何曜日が何月何日なのか、をプログラムではなく、自分でカレンダーを見て調べるときに、どういう手順で調べますか?
その曜日をカレンダーの上から順に数えていきますよね?

そのやり方を、そのままプログラムにすれば良いだけなんですよ。
最初から「プログラム!」と気負ってしまうから、わけが解らなくなるんです。
    • good
    • 0

#1です。



ついでに、質問文のプログラムのダメだしを。

(1)
変数は、必ずDimで定義する癖をつけましょう。
オプションによっては、定義しなくても動くようにもできますが、それをやると、バグが出たときにデバッグしにくいです。

(2)
Select Case で hiindex によって場合わけをして、その結果 hi の値を決めています。
hiindex は何で、hi は何ですか?
このSelect Case構文で、何をしようとしていましたか?

(3)
hiというサブルーチンの引数がありません。
そして、seireki、tsuki、hi、hiindex、という変数に何の値も入力されいないまま計算に使っています。


この課題をやれるだけの基礎知識が足りないんでしょうね。
たぶん、上記のダメだしも、前の回答内容も、理解できないかもしれませんね。

「プリントを読んだり調べたりしてもさっぱり理解できません」ということですが、まったくその通りなんだろうと思います。
自力だけで解ろうとせずに、せっかく班を組んでいるのだから、班のメンバーに解らないところを聞きましょうよ。
このままだと、単位を取れないかもしれませんよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!