![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
F-BASICの下記の問題がどうしても分からなくて困っています。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ツェラーの公式を使い、年と月を入力すればその月のカレンダーを以下の例のように表示するプログラムを作成せよ。ただし、ツェラーの公式は次のように与えられる。西暦年、月、曜日を
y%,m%,d% とすると
(y%+y%\4-y%\100+y%\400+(13*m%+8)\5+d%)MOD 7
ただし、m%<=2 のときは上の式で
y%=y%-1,m%=m%+12 とおく。
この結果、0なら日曜、1なら月曜・・・、6なら土曜となる。
例 2003年6月
1 日
2 月
3 火
4 水
5 木
・
・
・
・
28 土
29 日
30 月
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一週間悩んだのですが、分かりませんでした。
どうかよろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
>たてに全部表示したいのですが
1日から月末日まで
1 火
2 水
・・
・・
31 木
のように画面に出したいと言うことだと思いますが
そうなりませんか。掲出のプログラムのロジック上はそうなると思いますが。
>半分で切れてしまいます。
半分で切れるとは?
-----
横にならべては。
'----月前半
for i=1 to 15
print i;" ";week$((K-i+1)mod 7);
next i
'----月後半
for i=16 to days(M)
print i;" ";week$((K-i+1)mod 7);
next i
No.4
- 回答日時:
#3です。
補足に対して。>F-BASICでどうしても作らないといけないのです
だから、#3のVBAは旧DOS-BASICで書いたようなものですから、Cells()の行をPrint文に置きかえれば、どんなBASICでも動くはずです。
Cellsを除くと、Int、Mod,ForNextしか使ってないじゃないですか。
一応のロジックを紹介するために載せました。
(1)月末対応と(2)1,2月対応が入れてないので
、そっくりそのまま使えなくて申し訳ないですが、その点はお出来になると言うことでよろしく。
この回答への補足
遅くなってしまい申し訳ありません。
あれから教えていただいたのを参考に
自分なりにやってみました。
ですがどうもうまくいきません。
たてに全部表示したいのですが、半分で切れて
しまいます。そこで、スペースキーなどを
押して前半部分、後半部分を表示したいのですが
どうすればよいでしょうか?
以下、imogasiさんのを参考にして
自分なりに考えたものです。
var Y as integer
var M as integer
var D as integer
var K as integer
var CURX as integer
var cury as integer
dim days(12) AS INTEGER
for I=1 TO 12
read days(I)
next I
data 31,28,31,39,31,30,31,31,30,31,30,31
dim weeks(6)
weeks$(0)="日"
weeks$(1)="月"
weeks$(2)="火"
weeks$(3)="水"
weeks$(4)="木"
weeks$(5)="金"
weeks$(6)="土"
input "西暦年、月";Y,M
if Y mod 4=0 and Y mod 100>0 or Y mod 400=0 then
DAYS(2)=29
endif
D=1
if M<3 then
Y=Y-1
M=M+12
endif
K=(Y+Y¥4-Y¥100+Y¥400+(13*M+8)¥5+D) mod 7
for i=1 to days(M)
print i;week$((K-i+1)mod 7)
next i
DUMMY$=input$(1)
end
No.3
- 回答日時:
サイトを参考にして作りました。
F-Basicが私にはなくて、エクセルVBAでやりました。
ツェラーの公式は完全には理解で来てないのですが
4年1回100年1回400年1回のグレゴリオ歴修正
が入っていることは判ります。
コーディングのご参考になれば幸いです。2003年
6,7,8月はあっています。
Sub test02()
y = 2003 ' 2003
m = 8 '6
'------
c = Int(y / 100)
y = y - c * 100
w1 = Int(c / 4)
w2 = -2 * c
w3 = Int(y / 4)
w4 = y
w5 = Int((26 * m + 16) / 10) + 14
'------
For d = 1 To 31
w6 = d
Cells(d, "A") = d
Cells(d, "B") = (w1 + w2 + w3 + w4 + w5 + w6) Mod 7
Next d
End Sub
Cells(・・)のところ2箇所はPrint文で置換えて見てください。
1,2月の13,14月にする部分は組み入れていません。月末日対応もしていません。For d=1 to 31
の部分。
http://www.mogami-wire.co.jp/unix/isholiday.html
と
http://cluster.f7.ems.okayama-u.ac.jp/~t2/textin …を参考にしましたが
後者の式(誤り)を修正しました。w5の+14も私が入れました。
ごめんなさい、F-BASICでどうしても作らないといけないのです・・・。
エクセルVBAがどんなものなのか知らないのですが
私なんかのために時間を割いてくださり、どうも
ありがとうございました。感謝します。
No.2
- 回答日時:
No.1のymmasayanです。
>>年、月、日 ですよね。
>いえ、入力するのは年と月だけなのです。
>年と月だけ入力してその年のその月の
>カレンダー表示をするプログラムなんです。
問題で入力するのは年月ですが、ツェラーの公式には年月日が必要です。
だから日=1をプログラムで入れてやるのです。
>閏年や、月によって日数が違う時には
>どうすればよいのでしょうか?
これは自分で月の日数を決めてやるしかありません。
大の月、小の月、2月の3つに分けた処理をします。
うるう年については
(1)西暦が400の倍数なら閏年。
(2)西暦が4で割リ切れて100で割リ切れなければ閏年。
ということから2月の日数が決まります。
注意して欲しいのはツェラーの公式の但し書きです。
「ただし、m%<=2 のときは上の式でy%=y%-1,m%=m%+12 とおく。」
これはツェラーの式の計算前に実行する必要があります。
少しだけ添削しておきます。
input "年";y%
input "月";m%
ここで日付けd%に1代入。
ここで但し書き実行・・IF文
N=y%+y%\4-y%\100+y%\400+(13*m%+8)\5+d%)MOD 7
ここで閏年の判定
ここでその月の日数の決定(S)
ここでループをまわす.(For i=1to S)
J=(N-1+I) MOD 7
Jを日本語の曜日に変換(表示)
NEXT I
end
この回答への補足
添削してくださり、ありがとうございました。
ですが、BASIC初心者の私には難しく
お恥ずかしながら、ヒントを頂いてもほとんど
分かりませんでした。
差し出がましいお願いなのですが、全部作ってくださると大変うれしいです。
よろしくお願いします。
No.1
- 回答日時:
ヒントだけ。
>西暦年、月、曜日を y%,m%,d% とすると
年、月、日 ですよね。
2003年6月なら2003年6月1日を式で計算します。結果をNとします。
1日から30日までの日付をIとするとIに対する曜日(数字)Jは
J=(N-1+I) MOD 7となります。
あとはJで曜日テーブルを引けばいいでしょう。
曜日テーブルは0~6が日曜~土曜に対応するものです。
この回答への補足
>年、月、日 ですよね。
いえ、入力するのは年と月だけなのです。
年と月だけ入力してその年のその月の
カレンダー表示をするプログラムなんです。
お答えくださってありがとうございます。
しかし、私の能力不足で分かりません。
閏年や、月によって日数が違う時には
どうすればよいのでしょうか?
↓できるところまで作ってみました。
よろしくお願いいたします。
input "年";y%
input "月";m%
y%+y%\4-y%\100+y%\400+(13*m%+8)\5+d%)MOD 7
(この間分かりません)
d$=input$(1)
end
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
- Visual Basic(VBA) 祝日を除いた月曜から土曜までの1週間分の日付行を選択し、別シートへカットアンドペーストしたい 13 2023/07/13 22:46
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- 地球科学 太陽系の惑星と週(日曜日~土曜日)、月(1月~12月)に付いての質問です。 太陽系には、8つの惑星が 3 2022/10/08 22:32
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) Excel2019、2021の売り上げなどの集計表について 4 2022/11/29 14:03
- Excel(エクセル) 条件付き書式で文字入力 6 2022/08/29 10:40
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで 自動的に◯や数字を...
-
[Excel] ある日の曜日が当月の"...
-
毎○曜日って、使いますか?
-
週2回のペースって だいたい何...
-
毎週同じ曜日にラブホに行くと...
-
日本語問題 昨日は何曜日ですか...
-
よくある 『 第○(1・2・3・4・...
-
月の第一週とは
-
一年の第何週目であるかを判断...
-
今週とは何曜日から何曜日まで...
-
エクセルで毎月第2週日の水曜日...
-
C言語始めたてで先生にこれ進め...
-
平日朝の国道246線混雑状況につ...
-
ユーザー定義の(aaa)
-
プルダウンで日付と曜日を取得する
-
F-BASIC ツェラーの公式...
-
一度会っただけで忘れられない...
-
曜日のなぞ
-
曜日を求めるプログラムはどう...
-
すいません。教えてください。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
月の第一週とは
-
6月の第2 第4火曜日は何日...
-
よくある 『 第○(1・2・3・4・...
-
エクセルで毎月第2週日の水曜日...
-
[Excel] ある日の曜日が当月の"...
-
週2回のペースって だいたい何...
-
毎○曜日って、使いますか?
-
VBA。複数のChangeイベントをま...
-
土曜日の26時って何曜日の何時...
-
毎週同じ曜日にラブホに行くと...
-
今週とは何曜日から何曜日まで...
-
ユーザー定義の(aaa)
-
曜日のなぞ
-
第○曜日であるかを取得する関数
-
カレンダープログラム、曜日の...
-
燃えるゴミの日は何曜日ですか?
-
曜日を求めるプログラムはどう...
-
Consolidateメソッドの引数のSo...
-
曜日派?日付派??
-
Excelで第一〇曜日を求める方法...
おすすめ情報