掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23870

カレンダー
投稿者---レオ(2005/10/28 12:19:31)


はじめまして。出力方法でわからない点があるので投稿させていただきます。
作成しているものはカレンダーなのですが。入力された年にあわせて12ヶ月まとめて出力しなければならないもので、4ヶ月づつ縦に出力しなければなりません。
大変初歩的なことかと思いますがどうか教えて下さい。



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:カレンダー 23871 shu 2005/10/28 12:40:47
<子記事> Re:カレンダー 23874 まきじ 2005/10/28 13:00:54


No.23871

Re:カレンダー
投稿者---shu(2005/10/28 12:40:47)


>はじめまして。出力方法でわからない点があるので投稿させていただきます。
>作成しているものはカレンダーなのですが。入力された年にあわせて12ヶ月まとめて出力しなければならないもので、4ヶ月づつ縦に出力しなければなりません。
>大変初歩的なことかと思いますがどうか教えて下さい。

//  全体のイメージ
01 05 09
02 06 10
03 07 11
04 08 12

//  1ヶ月分は、6行以上にはならない
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 -- -- -- --
-- -- -- -- -- -- --
〜
-- -- -- -- -- -- 01
02 03 04 05 06 07 08
09 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 -- -- -- -- --

// 具体的な出力の順序
1月の1行目、5月の1行目、9月の1行目
1月の2行目、5月の2行目、9月の2行目
1月の3行目、5月の3行目、9月の3行目
1月の4行目、5月の4行目、9月の4行目
1月の5行目、5月の5行目、9月の5行目
1月の6行目、5月の6行目、9月の6行目

2月の1行目、6月の1行目、10月の1行目
2月の2行目、6月の2行目、10月の2行目
2月の3行目、6月の3行目、10月の3行目
2月の4行目、6月の4行目、10月の4行目
2月の5行目、6月の5行目、10月の5行目
2月の6行目、6月の6行目、10月の6行目

	・
	・
	・



この投稿にコメントする

削除パスワード

No.23873

Re:カレンダー
投稿者---レオ(2005/10/28 12:49:52)


あと、そのように出力するプログラムを教えていただけませんか?




この投稿にコメントする

削除パスワード

No.23874

Re:カレンダー
投稿者---まきじ(2005/10/28 13:00:54)


>4ヶ月づつ縦に出力しなければなりません。

二次元配列を用意します。
一ヶ月分は 5週/月x7日/週 の 35 要素が必要で
十二ヶ月分だと15(5*3月)x28(7*4月)が必要です。

一月を [0][0] から [4][6] までに格納
二月を [0][7] から [4][13] までに格納
三月を [0][14] から [4][20] までに格納
四月を [0][21] から [4][27] までに格納
五月を [5][0] から [9][6] までに格納
    〜中略〜
八月を [5][21] から [9][27] までに格納
九月を [10][0] から [14][6] までに格納
    〜中略〜
十二月を [10][21] から [14][27] までに格納。

あとは配列を全て出力すれば良い。
cal[y][x] y=15 x=28
x%7 == 0 の時空白を出力。
y%5 == 0 の時空行を出力


この投稿にコメントする

削除パスワード

No.23875

Re:カレンダー
投稿者---レオ(2005/10/28 13:04:50)


>>4ヶ月づつ縦に出力しなければなりません。
>
>二次元配列を用意します。
>一ヶ月分は 5週/月x7日/週 の 35 要素が必要で
>十二ヶ月分だと15(5*3月)x28(7*4月)が必要です。
>
>一月を [0][0] から [4][6] までに格納
>二月を [0][7] から [4][13] までに格納
>三月を [0][14] から [4][20] までに格納
>四月を [0][21] から [4][27] までに格納
>五月を [5][0] から [9][6] までに格納
>    〜中略〜
>八月を [5][21] から [9][27] までに格納
>九月を [10][0] から [14][6] までに格納
>    〜中略〜
>十二月を [10][21] から [14][27] までに格納。
>
>あとは配列を全て出力すれば良い。
>cal[y][x] y=15 x=28
>x%7 == 0 の時空白を出力。
>y%5 == 0 の時空行を出力

わかりました。これを参考にプログラムを作ってみます。
ありがとうございました。


この投稿にコメントする

削除パスワード

No.23876

Re:カレンダー
投稿者---かずま(2005/10/28 20:43:36)


> 一ヶ月分は 5週/月x7日/週 の 35 要素が必要で

1日が土曜日の月は、30日が第6週の日曜日になりますから 6週/月になります。
7行以上にはなることはありませんが。

さて、この掲示板の「ホームページ」から「過去ログ」のページへ行き、
「カレンダー」で検索して出てくる先頭の「過去ログ505」に 3か月ずつ
横に出力するプログラムがあります。
次の 4行を修正すると 4か月ずつ縦に出力するプログラムになります。
16行目: for (m = 1; m <= 12; m += 3)  -->  for (m = 1; m <= 4; m++)
18行目: m, m+1, m+2                   -->  m, m+4, m+8
20行目: for (z = -1; z < 2; z++)      -->  for (z = -1; z < 8; z += 4)
23行目: z==1                          -->  z==7



この投稿にコメントする

削除パスワード

No.23877

Re:カレンダー
投稿者---レオ(2005/10/28 23:10:35)


>> 一ヶ月分は 5週/月x7日/週 の 35 要素が必要で
>
>1日が土曜日の月は、30日が第6週の日曜日になりますから 6週/月になります。
>7行以上にはなることはありませんが。
>
>さて、この掲示板の「ホームページ」から「過去ログ」のページへ行き、
>「カレンダー」で検索して出てくる先頭の「過去ログ505」に 3か月ずつ
>横に出力するプログラムがあります。
>次の 4行を修正すると 4か月ずつ縦に出力するプログラムになります。
><pre>
16行目: for (m = 1; m <= 12; m += 3) --> for (m = 1; m <= 4; m++)
18行目: m, m+1, m+2 --> m, m+4, m+8
20行目: for (z = -1; z < 2; z++) --> for (z = -1; z < 8; z += 4)
23行目: z==1 --> z==7
</pre>

動作確認しました。問題なく出力しました。
ありがとうございます。


この投稿にコメントする

削除パスワード

No.23878

Re:カレンダー
投稿者---かずま(2005/10/28 23:24:59)


> 動作確認しました。問題なく出力しました。

動作確認だけですか?
過去ログのあのプログラムは、わざと分かりにくくかかれているのが問題です。
自分でプログラムを作るといっているのですから、それを示してください。
また、質問をする前に、過去ログを調べなかったことをどう思っていますか?


この投稿にコメントする

削除パスワード

No.23879

Re:カレンダー
投稿者---レオ(2005/10/29 00:02:54)


>> 動作確認しました。問題なく出力しました。
>
>動作確認だけですか?
>過去ログのあのプログラムは、わざと分かりにくくかかれているのが問題です。
>自分でプログラムを作るといっているのですから、それを示してください。
>また、質問をする前に、過去ログを調べなかったことをどう思っていますか?

プログラムはまだ示すほどできていません。
あと、過去ログをあまり調べていなかったことは、
申し訳ないと思っています。



この投稿にコメントする

削除パスワード

No.23880

Re:カレンダー
投稿者---あきき(2005/10/29 00:46:03)


割り込んで申し訳ありませんが、Zは日数を求めていると思います。
1 2月ならば、閏年判定して、28に1又は0を足す。それ以外の月では、30に何をして足しているのでしょうか。ビットを理解していないため、その箇所が分からず困っています。ビットを用いないで平易に表現できないでしょうか。
z = (m==2) ? 28+(y%4==0 && y%100 || y%400==0) : 30+(0x15aa>>m&1);



この投稿にコメントする

削除パスワード

No.23882

Re:カレンダー
投稿者---まきじ(2005/10/29 01:50:05)


>(0x15aa>>m&1);

0x15aa を 2 進数にすると 1010110101010 となります
31 日ある月ビット目が 1 になってます。
m ビットシフトして 1 と AND を取れば
31 日ある月は 1 が返り 30 日ある月は 0 が返ります。


この投稿にコメントする

削除パスワード

No.23883

Re:カレンダー
投稿者---shu(2005/10/29 08:15:51)


>1 2月ならば、閏年判定して、28に1又は0を足す。それ以外の月では、30に何をして足しているのでしょうか。ビットを理解していないため、その箇所が分からず困っています。ビットを用いないで平易に表現できないでしょうか。

ビットを理解していないのだから、解からないのは当然です。
ビット演算をを知らない人が、ビット演算を使ったプログラムを、
平易に表現しようとするからわからない。

>割り込んで申し訳ありませんが、Zは日数を求めていると思います。

日数を求めるプログラムだということ。
いろんな書き方があると思いますが、あききさんにもできるのではないでしょうか?


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧