ショッピングモール  


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


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

No.3172

調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい
投稿者---マリ(2004/12/07 07:54:39)


最近C言語の勉強を始めたばかりの者です。
今、カレンダーを作ろうと思っていて、
調べたい年、月、1日の曜日を入力して。←コレを入れると簡単になるらしい。。その月のカレンダーを表示させたいんです。
forを使えば良いらしいのですが・・・
基本的なことしかわからないので、優しく教えてください。
よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい 3173 マリ 2004/12/07 08:09:08
<子記事> Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい 3174 nop 2004/12/07 08:57:31
<子記事> Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい 3176 通りすがり。 2004/12/07 20:49:40
<子記事> Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい 3194 マリ 2004/12/09 19:51:13


No.3173

Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい
投稿者---マリ(2004/12/07 08:09:08)


2次元配列を使用するらしいのですが、

int day[7] [6]

こんな感じで良いでしょうか?


この投稿にコメントする

削除パスワード

No.3175

Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい
投稿者---円零(2004/12/07 15:37:41)


>2次元配列を使用するらしいのですが、
>
>int day[7] [6]
>
>こんな感じで良いでしょうか?

カレンダーを表示するだけなら二次元配列など不要です。
使おうと思えば使えないこともないかもしれませんが…

また、「カレンダー」と一口に言っても
12/1 (水)
12/2 (木)
12/3 (金)
とか、
12月
水 木 金 土 日 月 火 水 木 金
01 02 03 04 05 06 07 08 09 10
とか、
--------12月--------
日 月 火 水 木 金 土
          1  2  3  4
 5  6  7  8  9 10 11
のように色々書き方があります。

現状では何をどうしたいのかすら満足に言ってくれてない状況なので、
助言のしようもないですね。



この投稿にコメントする

削除パスワード

No.3174

Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい
投稿者---nop(2004/12/07 08:57:31)


まずは、「掲示板ご利用上の注意」をよく読みましょう。


>基本的なことしかわからないので、優しく教えてください。
>よろしくお願いします。

ここは学校ではありません。
全てを優しく教えて欲しいのでしたら、
先生にでも聞いて下さい。

・何がわからないのか?
・どこまでわかっているのか?

これすらも書かれていない質問は、
ただの丸投げです。

# 丸投げなら、どこぞの業者にお金を払って発注して下さい。


この投稿にコメントする

削除パスワード

No.3176

Re:調べたい、年、月、1日の曜日を入力してその月のカレンダーを表示させたい
投稿者---通りすがり。(2004/12/07 20:49:40)


カレンダーを表示するプログラムなら、検索エンジンなどで検索すれば参考になるものがでてくると思いますが・・・。
去年のことですが、私もカレンダーに関するプログラムを作成するときに色々と参考にさせて頂いたので。


この投稿にコメントする

削除パスワード

No.3194

Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい
投稿者---マリ(2004/12/09 19:51:13)


本当に申し訳ありませんでした。
あれから、いろいろ調べて、

#include <stdio.h>

main()
{
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,uruu,i;
printf("year ? ");scanf("%d",&y);
printf("month ?");scanf("%d",&m);

if(y%4==0 && y%100!=0 || y%400==0)
month[2]=29;

uruu=y+(y-1)/4-(y-1)/100+(y-1)/400;
for(i=0;i<m;i++)
uruu=uruu+month[i];
uruu=uruu%7;

printf("日 月 火 水 木 金 土 \n");
for(i=0;i<uruu;i++)
printf(" ");

for(i=1;i<=month[m];i++){
printf("%4d",i);
if((uruu+i)%7==0)
printf("\n);
}
}

コレでも可能なんですが、2次元配列でを使いたいんです。
ドコを変えればよいのでしょうか?



この投稿にコメントする

削除パスワード

No.3196

Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい
投稿者---通りすがり(2004/12/10 00:07:57)


>ドコを変えればよいのでしょうか?

とりあえず質問するならルールくらい守ったらどうですか?
「ソースの添付は「HTML変換ツール」で字下げ!」と一番上にとっても分かりやすく書いてあるでしょう。
読めないならしょうがないですけど。


この投稿にコメントする

削除パスワード

No.3197

これで変換したことになりますか?
投稿者---マリ(2004/12/10 01:28:38)


>本当に申し訳ありませんでした。
SampleSource
*/
#include &lt;stdio.h&gt;

main()
{
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,uruu,i;
printf(&quot;year ? &quot;);scanf(&quot;%d&quot;,&amp;y);
printf(&quot;month ?&quot;);scanf(&quot;%d&quot;,&amp;m);

if(y%4==0 &amp;&amp; y%100!=0 || y%400==0)
month[2]=29;

uruu=y+(y-1)/4-(y-1)/100+(y-1)/400;
for(i=0;i&lt;m;i++)
uruu=uruu+month[i];
uruu=uruu%7;

printf(&quot;日 月 火 水 木 金 土 \n&quot;);
for(i=0;i&lt;uruu;i++)
printf(&quot; &quot;);

for(i=1;i&lt;=month[m];i++){
printf(&quot;%4d&quot;,i);
if((uruu+i)%7==0)
printf(&quot;\n);
}
return 0;
}

</pre>


この投稿にコメントする

削除パスワード

No.3199

Re:これで変換したことになりますか?
投稿者---もぐりん(2004/12/10 07:44:12)


本当に使いました?
字下げになってませんけど?


この投稿にコメントする

削除パスワード

No.3200

Re:これで変換したことになりますか?
投稿者---Hermit(2004/12/10 07:45:20)


投稿時、最後に確認画面が出てくるから、
それで確認しましょう。

変換を2回押したか、どこかのコードを削ってしまったかしているようです。

読めるようなソースになってない(^^;


この投稿にコメントする

削除パスワード

No.3201

変換しときます
投稿者---通りすがり(2004/12/10 09:06:04)


投稿前に確認できるんだからよく見ましょう。
以下、小言です。

・標準はmain()ではなくint main(int argc, char **argv)
・最後のprintfにダブルクォーテーションを付けて文字列にしましょう。
・慣れるまではfor文やif文は{}でしっかり範囲を指定した方が原因の切り分けがしやすいですよ。
・インデントを自動的にしてくれるエディタを使うと間違いにも気付きやすいでしょう。

#include <stdio.h>

main()
{
     int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     int y,m,uruu,i;
     printf("year ? ");scanf("%d",&y);
     printf("month ?");scanf("%d",&m);

     if(y%4==0 && y%100!=0 || y%400==0)
          month[2]=29;
     
     uruu=y+(y-1)/4-(y-1)/100+(y-1)/400;
     for(i=0;i<m;i++)
          uruu=uruu+month[i];
     uruu=uruu%7;
     
     printf("日 月 火 水 木 金 土 \n");
     for(i=0;i<uruu;i++)
          printf(" ");
     
     for(i=1;i<=month[m];i++){
          printf("%4d",i);
          if((uruu+i)%7==0)
               printf("\n);
}
}



この投稿にコメントする

削除パスワード

No.3202

Re:変換しときます
投稿者---REE(2004/12/10 10:32:46)


>・標準はmain()ではなくint main(int argc, char **argv)

ここだけ補足 int main()でも標準です。


この投稿にコメントする

削除パスワード

No.3204

Re:変換しときます
投稿者---通りすがり(2004/12/10 10:43:36)


&gt;&gt;・標準はmain()ではなくint main(int argc, char **argv)
&gt;
&gt;ここだけ補足 int main()でも標準です。

ごめんなさい、抜けてました・・・
REEさん御指摘ありがとうございます。



この投稿にコメントする

削除パスワード

No.3206

Re:変換しときます
投稿者---通りすがり(2004/12/10 10:50:39)


>&gt;&gt;・標準はmain()ではなくint main(int argc, char **argv)
>&gt;
>&gt;ここだけ補足 int main()でも標準です。
>
>ごめんなさい、抜けてました・・・
>REEさん御指摘ありがとうございます。

xyzzyで投稿したら>が&gt;になっちゃいました。
重ね重ねすみません・・・


この投稿にコメントする

削除パスワード

No.3209

Re:変換しときます
投稿者---マリ(2004/12/10 15:56:12)


通りすがりさん。変換いていただきありがとうございました。

変換の仕方なんですが・・・
HTML昆布ってのでSorceCodeに変換したいソースを
貼り付けてConvHTMLのボタンを押して、
SorceCodeに変換された物を
までの物をこちらの掲示板に貼り付けるん
ですよね?


この投稿にコメントする

削除パスワード

No.3210

Re:変換しときます
投稿者---マリ(2004/12/10 15:57:27)


pre 〜 /pre です。


この投稿にコメントする

削除パスワード

No.3213

Re:変換しときます
投稿者---ホワイト(2004/12/10 17:05:03)


こんなのでいいのかな?


#include <stdio.h>

int main(){
    
    int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int y,m,i,h,uruu,count;
    char date[6][7] = {0};  //    日にち格納用配列
    
    printf("year ? ");scanf("%d",&y);
    printf("month ?");scanf("%d",&m);
    
    if(y%4==0 && y%100!=0 || y%400==0){ //   閏年時の日数変更
        month[2] = 29;
    }
 
    uruu = y + (y-1) / 4 - (y-1) / 100 + (y-1) / 400;

    for(i=0;i<m;i++){
        uruu = uruu+month[i];
    }
    h = uruu % 7;
    
    for(i=0,count=1;i<6;i++){
        for(;h<7 && count <= month[m];h++,count++){
            date[i][h] = count;
        }
        h=0;
    }      
        
    printf("日\t月\t火\t水\t木\t金\t土\t\n");
    
    for(i=0;i<6;i++){
        for(h=0;h<7;h++){
            if(date[i][h] != 0){
                printf("%2d\t",date[i][h]);
            }
            else{
                printf("\t");
            }
        }
        putchar('\n');
    }
    return 0;
}



この投稿にコメントする

削除パスワード

No.3212

Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい
投稿者---円零(2004/12/10 16:59:19)


漠然と二次元配列って言われてもどういう風に使いたいのかがわからないんですが…
#include <stdio.h>
int main(void){
    
    int period[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    char calendar[7][111] = {{" 1  2  3  4  5  6  7\n"
                              " 8  9 10 11 12 13 14\n"
                              "15 16 17 18 19 20 21\n"
                              "22 23 24 25 26 27 28\n"
                              "29 30 31"              },
                             {"    1  2  3  4  5  6\n"
                              " 7  8  9 10 11 12 13\n"
                              "14 15 16 17 18 19 20\n"
                              "21 22 23 24 25 26 27\n"
                              "28 29 30 31"           },
                             {"       1  2  3  4  5\n"
                              " 6  7  8  9 10 11 12\n"
                              "13 14 15 16 17 18 19\n"
                              "20 21 22 23 24 25 26\n"
                              "27 28 29 30 31"        },
                             {"          1  2  3  4\n"
                              " 5  6  7  8  9 10 11\n"
                              "12 13 14 15 16 17 18\n"
                              "19 20 21 22 23 24 25\n"
                              "26 27 28 29 30 31"     },
                             {"             1  2  3\n"
                              " 4  5  6  7  8  9 10\n"
                              "11 12 13 14 15 16 17\n"
                              "18 19 20 21 22 23 24\n"
                              "25 26 27 28 29 30 31"  },
                             {"                1  2\n"
                              " 3  4  5  6  7  8  9\n"
                              "10 11 12 13 14 15 16\n"
                              "17 18 19 20 21 22 23\n"
                              "24 25 26 27 28 29 30\n"
                              "31"                    },
                             {"                   1\n"
                              " 2  3  4  5  6  7  8\n"
                              " 9 10 11 12 13 14 15\n"
                              "16 17 18 19 20 21 22\n"
                              "23 24 25 26 27 28 29\n"
                              "30 31"                 }};
    char str[111] = {0};
    int i, year, month, leap = 0, firstday;

    printf("year ? ");
    scanf("%d", &year);
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) leap = 1;
    firstday = year + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;

    printf("month ?");
    scanf("%d",&month);
    for(i = 1; i < month; i++) firstday += period[i];
    if(month > 2) firstday += leap;
    firstday %= 7;

    strncpy(str, calendar[firstday], (firstday + period[month] + (month == 2? leap: 0)) * 3 - 1);
    printf("日 月 火 水 木 金 土\n%s", str);
    return 0;
}

こんなんでいいんでしょうか?
それとも、
#include <stdio.h>

int main(void){
    int period[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int week[6][7] = {0};
    int i, j, year, month, day, leap = 0, firstday, lastday;

    printf("year ? ");
    scanf("%d", &year);
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) leap = 1;
    firstday = year + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;

    printf("month ?");
    scanf("%d",&month);
    for(i = 1; i < month; i++) firstday += period[i];
    if(month > 2) firstday += leap;
    firstday %= 7;
    lastday = period[month];
    if(month == 2) lastday += leap;

    /****二次元配列に格納**/
    day = -firstday;
    for(i = 0; ; i++){
        for(j = 0; j < 7; j++) week[i][j] = ++day;
        if(day >= lastday) break;
    }

    printf("日 月 火 水 木 金 土\n");
    for(i = 0; i < 6; i++){
        for(j = 0; j < 7; j++) {
            if(week[i][j] > 0 && week[i][j] < lastday) printf("%2d ");
            else printf("   ");
        }
        if(week[i][6] >= lastday) break;
    }
    return 0;
}

こんな感じ?


この投稿にコメントする

削除パスワード

No.3215

Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい
投稿者---円零(2004/12/10 17:26:56)


すみません、二番目の最後のところ間違えました。
    printf("日 月 火 水 木 金 土\n");
    for(i = 0; i < 6; i++){
        for(j = 0; j < 7; j++) {
            if(week[i][j] > 0 && week[i][j] < lastday) printf("%2d ", week[i][j]);
            else printf("   ");
        }
        printf("\n");
        if(week[i][6] >= lastday) break;
    }
こうですね。


この投稿にコメントする

削除パスワード

No.3219

Re:調べたい、年、月、日の曜日を入力してその月のカレンダーを表示させたい
投稿者---マリ(2004/12/12 22:05:16)


ホワイトさん円零さんありがとうございます。
二次元配列の使い方がうまくわからなくて・・・
参考にさせていただきます。



この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity