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

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

 詳しくはこちら



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

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


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

No.19296

カレンダーの行事をいれる事について
投稿者---kiki(2005/01/18 14:53:37)


年月などを入れてカレンダーを作る事はできたんですが
今度それに行事などをいれようと思っています。
カレンダーは以下のように作ったのですが
その行事をいれるのにファイルを作って
例えば2005.1.txtに何日になにがあると入力していたら
プログラムを実行したときにファイル名をかいたらそれが出力させるようにしたいと思っています。アドバイスをお願いします。
#include <stdio.h>

void print(int ca[12][24][7])        //配列で12は月、6は最大の週、7は一週間の日数
{
    int a,b,c;

    for(a=0;a<24;a++){
        for(b=0;b<1;b++){                        
            for(c=0;c<7;c++){
                if(ca[b][a][c]){
                    printf("%10d ", ca[b][a][c]);    //配列に関係するときその数字を入力
                }
                else{
                    printf("           ");                       //それ以外の時はスペース
                }
            }
                
        }
            printf("\n");
    }
        
}
int number(int y,int m){
        int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

        if(m==2 && y%4==0 && (y%100 != 0 || y%400==0)){          //うるう年の計算
            return 29;
        }
        else{
            return days[m-1];                               //うるう年以外の2月の表示28
        }
}
int nissu(int y,int m,int d){
        if(m<=2){
            y--;
            m +=12;
        }
            return (y+y/4-y/100+y/400+(13*m+8)/5+d)%7;
}
int first(int y,int m){
        return nissu(y,m,1);
}

int main(void)
{
        int ca[12][24][7]={0};
        int y,m,d,e,days,youbi;
        printf("カレンダーを表示する年を入力 :  ");
        scanf("%d",&y);
        printf("カレンダーを表示する月を入力 : ");
        scanf("%d",&m);
            days=number(y,m);
            youbi = first(y,m);
            e=0;                                       //最初の数値を0とし、日数は1からその月の最大
            for(d=1;d<=days;d++){                  //までいき、それを配列と連結させて、youbiが7に
                ca[m-1][e][youbi] = d;           //なったらyoubiを0に戻し、eを追加する
                if(++youbi == 7){
                    youbi =0;
                    e +=4;
                }
            }
       printf("%40年\n\n",y);
        printf("%40d月\n""         日       月      火      水       木       金      土\n",m);
            print(&ca[m-1]);
        
        return 0;
}








この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:カレンダーの行事をいれる事について 19299 επιστημη 2005/01/18 15:30:01
<子記事> Re:カレンダーの行事をいれる事について 19300 ぽこ 2005/01/18 15:39:40


No.19299

Re:カレンダーの行事をいれる事について
投稿者---επιστημη(2005/01/18 15:30:01)


>その行事をいれるのにファイルを作って
>例えば2005.1.txtに何日になにがあると入力していたら
>プログラムを実行したときにファイル名をかいたらそれが出力させるようにしたいと思っています。アドバイスをお願いします。

どんなアドバイスが欲しいのでしょうか?

y年m月表示の際に y.m.txt を読み出しておき、
for ( d = 1; d <= 最大日; ++d ) {
 if ( d日に行事がある ) {
  表示する。
 }
}

それだけでは?



この投稿にコメントする

削除パスワード

No.19300

Re:カレンダーの行事をいれる事について
投稿者---ぽこ(2005/01/18 15:39:40)


>アドバイスをお願いします。
現時点で躓いている点がないのであれば、kikiさんご自身が示したとおりに
実装すれば良いのでは?としか言い様がありません。

>printf("%40年\n\n",y);
printf("%40d年\n\n",y);ですよね?


この投稿にコメントする

削除パスワード

No.19360

Re:カレンダーの行事をいれる事について
投稿者---kiki(2005/01/20 17:33:40)


配列を使いやろうと思っているのですがカレンダーの日にちと行事を区別しないでしようと思っています。日にちの1が数字として書かれるんではなくて文字としてかかれるように。そして例えばca[24][7][6]で3次元配列にして一日に6文字を3行ずつ入力できるようにしたいと思っているのですが日にちの(ないところの)スペースや行事の(ないところの)スペースをどう対処していいかわかりません。よろしくお願いします


この投稿にコメントする

削除パスワード

No.19362

Re:カレンダーの行事をいれる事について
投稿者---επιστημη(2005/01/20 17:53:24)


> 日にちの(ないところの)スペースや行事の(ないところの)スペースをどう対処していいかわかりません。よろしくお願いします

安直な解としては、絶対に使わない文字、たとえば'_'を'ないところ'に埋めておきます。


この投稿にコメントする

削除パスワード

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