- ベストアンサー
カレンダー表示のこと
senjyuの回答
- senjyu
- ベストアンサー率25% (7/27)
下で解答したsenjyuです。 積算ではなく加算です。 失礼しました。
関連するQ&A
- カレンダーがうまく表示されない
開始月と終了月を指定して、3か月ごとにカレンダーを改行する プログラムを作ってみました。 ところが、動作をさせてみたところ7月が配列tuki[12]において31日 と指定しているのにも関わらず25日分しか表示されません。 それと、たまに4月分が24日分しか表示されません。(試した限りでは、 4月を終了月に指定するとそうなりました。) なにがおかしいためにこうなってしまうのでしょうか。 よろしくお願いいたします。 #include<stdio.h> #include<string.h> /*月の最初の日をメインプログラムに返す*/ int getyoubi(int year,int month,int day) { if(month==1 || month==2 ) { year--; month +=12; } return ((year+year/4-year/100+year/400+(13*month+8)/5 + day)%7); } /*カレンダーを3か月分表示させる*/ void print(char s[3][7][22],int n) { int i,j; for(i=0;i<n;i++) { printf("%s ",s[i][0]); } printf("\n"); for(i=0;i<n;i++) { printf(" 日 月 火 水 木 金 土 "); } printf("\n"); for(i=0;i<n;i++) { printf("---------------------- "); } printf("\n"); for(i=1;i<7;i++) { for(j=0;j<n;j++) { printf("%s ",s[j][i]); } printf("\n"); } printf("\n"); } int main(void) { int nen1,tuki1,nen2,tuki2,tukiho,nenho,tukih,w,j; char sbuf[3][7][22]; int tuki[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int k; char tmp[4]; int count=0; printf("カレンダーを表示します。\n"); printf("開始年月を入力せよ。\n"); printf("年:"); scanf("%d",&nen1); printf("月:"); scanf("%d",&tuki1); printf("終了年月を入力せよ。\n"); printf("年:"); scanf("%d",&nen2); printf("月:"); scanf("%d",&tuki2); /*最大3カ月分のカレンダーを格納する。*/ do{ w=getyoubi(nen1,tuki1,1); sprintf(sbuf[count][0],"%10d / %02d ",nen1,tuki1); for(k=1;k<7;k++) { sbuf[count][k][0]='\0'; } sprintf(sbuf[count][1],"%*s",3*w,""); k=1; for(j=1;j<=tuki[tuki1-1];j++) { sprintf(tmp,"%3d",j); strcat(sbuf[count][k],tmp); if((j+w-1)%7==6) { k++; } } do{ if((j+w-1)%7==6) { sprintf(sbuf[count][k],"%21s",""); } else { do{ strcat(sbuf[count][k]," "); j++; }while((j+w-1)%7!=0); } k++; }while(k!=7); count++; if(count==3) { print(sbuf,count); count=0; } tuki1++; if(tuki1==13) { tuki1=1; nen1++; } }while(nen1<nen2 || nen1==nen2 && tuki1<=tuki2); if(count) { print(sbuf,count); } return 0; }
- 締切済み
- C・C++・C#
- C#でカレンダーを作っているのですがここから先がわかりません。どなたかおしえてもらえませんか?
using System; using System.Collections.Generic; using System.Text; namespace 万年カレンダー { class MyEventCiass { static void Main(string[] args) { int nen, tuki,tukinohi,youbi; //西暦の入力 System.Console.Out.WriteLine("西暦を入力してください。"); nen = int.Parse(Console.ReadLine()); //月の入力 System.Console.Out.WriteLine("月を入力してください。"); tuki = int.Parse(Console.ReadLine()); //西暦と月の出力 Console.WriteLine(nen + "年" + tuki + "月"); switch (tuki) { case 2: if (nen % 4 == 0 && (nen % 100 != 0 || nen % 400 == 0)) tukinohi = 29; else tukinohi = 28; break; case 4: case 6: case 9: case 11: tukinohi = 30; break; default: tukinohi = 31; break; } if (tuki == 1 || tuki == 2) { nen = nen -1 ; tuki = tuki + 12; } //曜日の出力 Console.WriteLine("日 月 火 水 木 金 土"); youbi = (nen + nen / 4 - nen / 100 + nen / 400 + (13 * tuki + 8) / 5 + 1) % 7; if (youbi == 0) youbi = 7; for (int i = 1; i <= youbi ;i += 1 ) { Console.Write(i.ToString()); } for (int i = 4; i <= tukinohi; i += 1) { Console.Write(i.ToString()); } Console.ReadLine(); } } }
- 締切済み
- C・C++・C#
- カレンダーのプログラム
指定した開始月と終了月を入力して、それを横に最大3つまで並べて 納まりきらないときは改行するというプログラムを作りたいです。 イメージとしては、2009年の9月から2009年の12月まで指定した場合は… 2009 / 9 2009 / 10 2009 / 11 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 8 9 10 11 12 13 14 8 9 10 11 12 13 14 15 16 17 18 19 20 21 15 16 17 18 19 20 21 15 16 17 18 19 20 21 21 22 23 24 25 26 27 21 22 23 24 25 26 27 21 22 23 24 25 26 27 28 29 30 28 29 30 31 28 29 30 2009 / 12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29 30 31 (最初の日数などは適当ですし、ちょっとずれてしまっていますがご了承ください。あくまでもイメージなので…) ところが下のプログラムを動作させようとしたところ全く 動きません。何がおかしいために動作しないのでしょうか? よろしくお願いします。 #include<stdio.h> #include<string.h> int getyoubi(int year,int month,int day) { if(month==1 || month==2 ) { year--; month +=12; } return ((year+year/4-year/100+year/400+(13*month+8)/5 + day)%7); } int main(void) { int nen1,tuki1,nen2,tuki2,tukiho,nenho,tukih,w,i,j; char sbuf[3][7][22]; int tuki[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int k; char tmp[4]; printf("カレンダーを表示します。\n"); printf("開始年月を入力せよ。\n"); printf("年:"); scanf("%d",&nen1); printf("月:"); scanf("%d",&tuki1); printf("終了年月を入力せよ。\n"); printf("年:"); scanf("%d",&nen2); printf("月:"); scanf("%d",&tuki2); do{ /*3つのカレンダー分の格納する*/ for(i=0;i<3;i++) { w=getyoubi(nen1,tuki1,1); sprintf(sbuf[i][0],"%10d /%3d ",nen1,tuki1); for(k=1;j<7;k++) { sbuf[i][k][0]='\0'; } sprintf(sbuf[i][1],"%*s",3*w,""); k=1; for(j=1;j<tuki[tuki1];j++) { sprintf(tmp,"%3d",j); strcat(sbuf[i][k],tmp); if(j%7==6) { k++; } } do{ if(j%7==6) { sprintf(sbuf[i][k],"%21s",""); } else { do{ strcat(sbuf[i][k]," "); j++; }while(j%7!=6); k++; } }while(k!=7); tuki1++; if(tuki1==13) { tuki1=1; nen1++; } if(nen1>nen2 || nen1==nen2 && tuki1>tuki2) { break; } } /*3つためたカレンダーを出力する。*/ for(i=0;i<3;i++) { printf("%s",sbuf[i][0]); } printf("\n"); for(i=0;i<3;i++) { printf(" 日 月 火 水 木 金 土 "); } printf("\n"); for(i=0;i<3;i++) { printf("----------------------"); } printf("\n"); for(i=1;i<7;i++) { for(j=0;j<3;j++) { printf("%s",sbuf[j][i]); } } /*指定した年の月になるまでループ*/ }while(nen1<nen2 || nen1==nen2 && tuki1<=tuki2); return 0; }
- ベストアンサー
- C・C++・C#
- 月だけを加算したい
例えば、 dates=new Date(); と設定すると、月日、曜日、時分秒が取れますが、このdatesの月だけを1加えたい(取得するデータが9/15なら10/15にしたい)ときにどうすれば出来るのでしょうか?教えてください。
- ベストアンサー
- JavaScript
- perlについて質問です。
perlの曜日から日付を表示するスクリプトについて質問です。 (問)1月1日が土曜日の平年(例えば、2011年)について曜日の入力データからその月日を全て表示する。 (実行結果) 曜日を入力してください(1:日-7:土): 4↓ 水曜日の月日は : 1月:5,12,19,26 2月:2,9,16,23 3月:2,9,16,23,30 4月:6,13,20,27 5月:4,11,18,25 6月:1,8,15,22,29 7月:6,13,20,27 8月:3,10,17,24,31 9月:7,14,21,28 10月:5,12,19,26 11月:2,9,16,23,30 12月:7,14,21,28 このように表示するために「for命令」と「while命令」を使用して作成したいのですがどのように作成できますでしょうか?(printとchomp使用) 回答よろしくお願いいたします。
- 締切済み
- その他(学問・教育)
- エクセルでカレンダーを作りたいのですが。
エクセル2003を使用しています。 次のようなカレンダーを作成したいと思います。 A1に2006などの年、A2、B2~に3/6などの月日、そしてA3、B3~に曜日(月、火…)の入ったカレンダーです。 A1の「年」やA2の「月日」を変更したら自動的に日にち(30日まで31日まで)や曜日が変わるようにするにはどうしたらいいですか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 万年カレンダー
万年カレンダーの日にちが、一日ずれて表示されますのでその原因を教えてください。 void main() { int nen,tuki,niti; int ff,i,n; int carender[6][7]; niti=0; for(i=0;i<6;i++)for(n=0;n<7;n++) carender[i][n]=0; printf("西暦(4桁)→"); scanf("%d",&nen); printf("month:"); scanf("%d",&tuki); ff=youbi_chk(nen,tuki,1); for(i=ff;i<7;i++) {carender[0][i]=niti;++niti;} for(n=1;n<6;n++){ for(i=0;i<7;i++){ if(niti<=niti_chk(tuki,nen)) {carender[n][i]=niti;++niti;}} } printf(" SUN MON TUE WED THU FRI SAT\n"); for(n=0;n<6;n++){ for(i=0;i<7;i++) if(carender[n][i]==0)printf(" ");else printf("%4d",carender[n][i]); printf("\n");} } int youbi_chk(int y,int m,int d) { int youbi; if(m<3) {y--; m+=10;} else {m-=2;} youbi=(y+(y/4)-(y/100)+(y/400)+(13*m-1)/5+d)%7; return youbi; } int uru_chk(int y) { if(y%400==0) return 1; if(y%100==0) return 0; if(y%4==0) return 1; return 0; } int niti_chk(int m,int y) { int hi[12]={31,28,31,30,31,30,31,31,30,31,30,31}; hi[1]+=uru_chk(y); return hi[m-1]; } プロトタイプ宣言は、省いてます。
- 締切済み
- C・C++・C#
- php カレンダーの休み表示
PHP初心者です。 以下のように『今日』から14日分の日付と曜日の <select>を作ったのですが、定休日の’月’と’金’の日付だけ 表示を消したいのですが、どうしたらよいのでしょうか? (表示イメージ) 9月11日(火) 9月12日(水) 9月13日(木) 9月15日(土) 9月16日(日) 9月18日(火) ・ ・ ・ <select> <?php $week = array( '日', '月', '火', '水', '木', '金', '土' ); for($i=0; $i<=14; $i++){ $w = $week[(date(w)+$i)%7]; $date = date('m/d' , strtotime("$i day")) . "($w)"; print '<option value="'.$i.'">' . $date . '</option>'; } ?> </select> ↑ これをどのようにアレンジしたらよいのでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
- 曜日を求めるプログラムはどうやるの?
ただいま、C言語に苦戦中です。教えてください 2001年の月日の入力データから、曜日を求めるプログラム。 (実行結果例) 月を入力してください: 9↓ 日を入力して下さい : 15↓ 9月15日は土曜日です。
- ベストアンサー
- C・C++・C#
- エクセルVBAで、期間内にある指定した数字を自動入力
下のように月日(A列)のみが書いてある表があります。 ここに定価を自動入力させたいと考えています。 ただ条件が複雑で・・・。 期間内にあるもので、曜日により値を振り分けする必要があります。 例えば、 ■月日(from) 3/1 ■月日(to) 3/3 ■値 土・日・・・500 月・・・・・450 このような条件で、下の[入力前]の表の「値」の列に [入力前] 月日 曜日 値 3/1 (土) 3/2 (日) 3/3 (月) 3/4 (火) 3/5 (水) 3/6 (木) 下のようにそれぞれ入力させたいのです。 [入力後] 月日 曜日 値 3/1 (土) 500 3/2 (日) 500 3/3 (月) 450 3/4 (火) 3/5 (水) 3/6 (木) どこかのスペースに ■月日(from) 3/1 ■月日(to) 3/3 ■値 土・日・・・500 月・・・・・450 このような条件入力をするところを設けて、マクロを実行すると入力するようにしたいのですが、こんな複雑な振り分け設定ってVBAでもできるでしょうか?
- ベストアンサー
- オフィス系ソフト
補足
コンパイルエラーは出ないのですが、日にちがその日の前まですべて加算されて出てしまうのです。結局はエラーてことですね。それと、申し遅れましたが、このカレンダーは2001年度版でやってみていますので、今年の日付を○月○日は何曜日だと表示するように取り組んでいます。