1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

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

 私は

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

掲示板1

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

No.5818

カレンダー表示
投稿者---ハム(2006/06/16 13:50:15)


カレンダーを表示するプログラムは完成しているのですが
横に3月分表示するにはどうすればいいですか??

年・月・曜日は3月分表示できるのですが
日付表示でつまづいてしまいました

このソースは1月分の表示プログラムです

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int y, m, hi, zeller;
    int month[]={ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    char Y[10], M[10];

    puts("カレンダーを表示します。\n");
    puts("年と月を入力してください。");

    /* 年・月入力 */
    printf("年=");   gets(Y);   y = atoi(Y);
    printf("月=");   gets(M);   m = atoi(M);

    /* 年・月・曜日を表示 */
    printf("      %4d年%2d月\n", y, m);
    puts(" 日 月 火 水 木 金 土");

    /* うるう年なら2月の日数を29へ */
    if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
    {   month[2]=29;
    }

    /* 曜日のズレ計算 */
    zeller = y +(y-1)/4 -(y-1)/100 +(y-1)/400;

    /* 表示する月までの日数を加算 */
    for(hi=0;hi<m;hi++)
    {   zeller=zeller + month[hi];
    }

    /* 週日数で割って余分なズレを排除 */
    zeller = zeller % 7;

    /* 初日のズレを修正 */
    for(hi=0;hi<zeller;hi++)
    {   printf("   ");
    }

    /* 日付を表示 */
    for(hi=1;hi<=month[m];hi++)
    {   printf(" %2d", hi);
        if((zeller + hi) % 7 == 0)
        {   printf("\n");
        }
    }
    puts("");

    getchar();

    return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:カレンダー表示 5819 Yuki 2006/06/16 14:58:53
<子記事> Re:カレンダー表示 5826 たかぎ 2006/06/16 19:30:42


No.5819

Re:カレンダー表示
投稿者---Yuki(2006/06/16 14:58:53)


完成イメージを描いてみると良いアイディアが出てくるかもしれません。

      2006年 5月            2006年 6月           2006年 7月
 日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
     1  2  3  4  5  6               1  2  3                     1
  7  8  9 10 11 12 13   4  5  6  7  8  9 10   2  3  4  5  6  7  8
 14 15 16 17 18 19 20  11 12 13 14 15 16 17   9 10 11 12 13 14 15
 21 22 23 24 25 26 27  18 19 20 21 22 23 24  16 17 18 19 20 21 22
 28 29 30 31           25 26 27 28 29 30     23 24 25 26 27 28 29
                                             30 31



この投稿にコメントする

削除パスワード

No.5820

Re:カレンダー表示
投稿者---ハム(2006/06/16 15:41:06)


イメージはそのとうりなんですけど…どうもfor文の組み込み方がわからないんです

    /* 初日のズレを修正 */
    for(hi=0;hi<zeller;hi++)
    {   printf("   ");
    }

    /* 日付を表示 */
    for(hi=1;hi<=month[m];hi++)
    {   printf(" %2d", hi);
        if((zeller + hi) % 7 == 0)
        {   printf("\n");
        }
    }

このあたりをどうすればいいのか…

(3回){ 初日のズレを修正→日付表示 }→改行→
(最終日まで){ (3回){ 日付表示 }→改行 }

この時に1つめ、2つめ、3つめそれぞれの月の日数が必要って事や、最終日からの空白が必要って事はわかるんですけど

考えてるうちにわけわからなくなっちゃいます


この投稿にコメントする

削除パスワード

No.5821

Re:カレンダー表示
投稿者---Yuki(2006/06/16 16:31:52)


>(3回){ 初日のズレを修正→日付表示 }→改行→
>(最終日まで){ (3回){ 日付表示 }→改行 }

改行を入れると横並びにならないので、それぞれ
{ 1月目の初日のズレを修正→1月目の日付表示 }→月替わりのスペース等→
{ 2月目の初日のズレを修正→2月目の日付表示 }→月替わりのスペース等→
{ 3月目の初日のズレを修正→3月目の日付表示 }→改行→

(最終日まで)
{ 1月目の日付表示 }→月替わりのスペース等→
{ 2月目の日付表示 }→月替わりのスペース等→
{ 3月目の日付表示 }→改行

とすれば良いのではないでしょうか?

あのイメージですと、7月の最終週を表示する前に5、6月の最終週が終わってしまうので
その部分のカラクリを考える必要がありますね。

まずできるとこまでを実装してみてから、微調整をしてみてはいかがでしょうか。



この投稿にコメントする

削除パスワード

No.5822

Re:カレンダー表示
投稿者---ハム(2006/06/16 16:54:55)


>改行を入れると横並びにならない
(3回){ 初日のズレを修正→日付表示 }→改行→

これは  {}の文を(3回)繰り返してから改行って意味で書きました

>できるとこまで実装
曜日表示までが精一杯です

空白分や初日、最終日からの空白、日付表示のループをどう記述すればいいのかわからないのです
いろいろ考えてやってみましたが、そのうちにわけがからなくなってしまって…

      2006年 5月            2006年 6月           2006年 7月
 日 月 火 水 木 金 土  日 月 火 水 木 金 土  日 月 火 水 木 金 土
     1  2  3  4  5  6   7  8  9 10 11 12 13  14 15 16 17 18 19 20  
 21 22 23 24 25 26 27  …

ってなってしまいました>_<;

土曜日を表示終えたら6月の変数へ切り替えて必要なら空白表示
って事はわかるんですけど、その場合曜日変数も分けていって…
そこで混乱しちゃいます


この投稿にコメントする

削除パスワード

No.5823

Re:カレンダー表示
投稿者---Yuki(2006/06/16 18:09:51)


>土曜日を表示終えたら6月の変数へ切り替えて必要なら空白表示
>って事はわかるんですけど、その場合曜日変数も分けていって…
>そこで混乱しちゃいます

必要なら変数を追加してもかまわないと思われますが?

はじめから効率良いプログラムを目指そうとすると
ツボにハマってしまうので、まずは自分のわかる範囲で
作ってみてください。




この投稿にコメントする

削除パスワード

No.5827

Re:カレンダー表示
投稿者---ハム(2006/06/16 20:56:29)


>必要なら変数を追加してもかまわないと思われますが?
例え変数を追加しても方法が思いつかないのでどうしようもないです


この投稿にコメントする

削除パスワード

No.5825

Re:カレンダー表示
投稿者---ゾン兵衛(2006/06/16 18:58:29)


 それぞれの月の日付を、空白を"0"に置き換えながら一旦配列に入れて、
その配列を"0"を空白に置き換えながら7つずつ順に表示する、
というのはどうでしょう。



この投稿にコメントする

削除パスワード

No.5828

Re:カレンダー表示
投稿者---ハム(2006/06/16 21:00:05)


>一旦配列に入れて
>"0"を空白に置き換えながら7つずつ順に表示
この方法でなんとか解決しました〜
ありがとうございました!!


この投稿にコメントする

削除パスワード

No.5826

Re:カレンダー表示
投稿者---たかぎ(2006/06/16 19:30:42)
http://takagi.in/


>カレンダーを表示するプログラムは完成しているのですが
>横に3月分表示するにはどうすればいいですか??

一番簡単な方法は、例えば100×100(値は適当)程度の配列を用意して、
まずは、そこに画面イメージを書き込みます。
画面イメージができれば、後は、一行ずつ出力します。
多少メモリ効率は落ちますが、一番簡単で、応用が効く方法かと思います。



この投稿にコメントする

削除パスワード

No.5829

Re:カレンダー表示
投稿者---ハム(2006/06/16 21:09:56)


この方法でもなんとかできました
ありがとうございました!!

これなら9×9マスの数独を作れそうです(^^)



この投稿にコメントする

削除パスワード

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





掲示板提供:(有)リアル・インテグリティ