お久しぶりの更新となりますね。
今回は、お誕生日からツェラーの公式の公式というものを使い曜日を求めたいと思います。
そのプログラムが下記に示すコードになります。
色々とプログラムをしていて楽しかったです。是非、皆さんも一度、チャレンジしてみてはいかがでしょう?


すべてのソースコードが見えないと思いますので
ソースコードの始まりから終わりまで
コピー&ペーストし、メモ帳なんかに張り付ければ全文見えます


 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*****************************************************************************
ツェラーの公式参考元サイト
URL : http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1129133746
http://tsunashima-origami.hatenablog.com/entry/2014/07/23/225434
******************************************************************************/
#include<iostream>
#include<string>
using namespace std;

void main( ) {
int w, tmp, h, y, m, d;
string str;

cout << " 誕生日から曜日を求めます。\n";
cout << " 西暦年( 整数 ) で入力してください。\n";
cout << " 生まれ年入力 ----> "; cin >> h;
cout << " 生まれ月入力 ----> "; cin >> m;
cout << " 生まれ日入力 ----> "; cin >> d;

tmp = h;
h = h; // h 百年
y = tmp /* % 10 */; // y 年
m = m; // m 月
d = d; // d 日

// 誕生日の生まれ月が、 1 月または 2 月の時 昨年の 1 月, 2 月にする。
if( m == 1 ) {
y--;
h--;
m = 13;

} else if( m == 2 ) {
y--;
h--;
m = 14;

}

// ツェラーの公式より曜日を求める
w = ( y + y / 4 - y / 100 + y / 400 + ( 13 * m + 8 ) / 5 + d );

// 条件分岐でツェラーの公式の戻り値と曜日を関連付ける
switch( w % 7 ) {
// 日曜日
case 0 :
str = "日曜日";
break;
// 月曜日
case 1 :
str = "月曜日";
break;
// 火曜日
case 2 :
str = "火曜日";
break;
// 水曜日
case 3 :
str = "水曜日";
break;
// 木曜日
case 4 :
str = "木曜日";
break;
// 金曜日
case 5 :
str = "金曜日";
break;
// 土曜日
case 6 :
str = "土曜日";
break;

}

cout << "\ndebug\n" << h << ", " << y << ", " << m << ", " << d << ", " << w << "\ndebug\n";
cout << str << "\n" << "\n";


}

syntax2html
/******************************************************************
お久ぶりのブログの更新となりますね、最近、色々なことが起きすぎて
 更新するのが遅くなってしまいましたm(__)m
 さて、早速ですが、本題に入りたいと思います。
 今回、作成したまたもや!?C言語を使用しての簡易電卓プログラムです
 多分!?前よりは、プログラムが高度になっているはず!?です。
 理解できない方は、WEBという情報の宝庫から自分で調べて見てください
 勉強になりますよ。
*******************************************************************/

#include //stdio.h

int main() {

int w, val[2]; //整数型で宣言
float fval[2]; //実数型で宣言

do {

printf("** 計算メニュー **\n");
printf("\n 1.足し算\n 2.引き算\n 3.掛け算\n 4.割り算\n");
printf("\n 0.終了\n");
printf("\n処理を選んでください");
scanf("%d", &w);

switch(w) {

case 1 : {

printf("\n** 足し算をおこないます **\n");
printf("数1?");
scanf("%d", &val[0]);
printf("数2?");
scanf("%d", &val[1]);
printf("\n");
printf("\n %d + %d = %d\n", val[0], val[1], val[0] + val[1]);

break;

}

case 2 : {

printf("\n** 引き算をおこないます **\n");
printf("数1?");
scanf("%d", &val[0]);
printf("数2?");
scanf("%d", &val[1]);
printf("\n");
printf("\n %d - %d = %d\n", val[0], val[1], val[0] - val[1]);

break;

}

case 3 : {

printf("\n** 掛け算をおこないます **\n");
printf("数1?");
scanf("%d", &val[0]);
printf("数2?");
scanf("%d", &val[1]);
printf("\n");
printf("\n %d × %d = %d\n", val[0], val[1], val[0] * val[1]);

break;

}

case 4 : {

printf("\n** 割り算を行います **\n");
printf("数1?");
scanf("%f", &fval[0]);
printf("数2?");
scanf("%f", &fval[1]);
printf("\n");
printf("\n %f ÷ %f = %f\n", fval[0], fval[1], fval[0] / fval[1]);

break;

}

default : {

if(w == 0) {}

else {

printf("そのような処理はありません\n");

}

}

}

printf("\n");

}while(w != 0);

printf("** 処理を終了します **\n");

return 0; //戻り値なしに設定


}

前回の記事から約五か月ぶりの更新となりますね(笑)
今回は、前回、投稿したWhile文での九九を簡潔にしたバージョンになります。
多少、前回よりは高度になっております。(自分的には)
論理的な考え方が出来てC言語に応用が利く方なら困らないかもしれません。
それでは、コード(ソース)の方に入っていきましょう!!!
アメブロの仕様上#includeのところの括弧で囲うと消えてしまうのでこのような表記になっています。

#include //stdio.h→括弧の付け忘れに注意!!
#include //windows.h→括弧の付け忘れに注意!!

void main() {

int j,i,n,y,z;

printf("何の段まで計算をしますか? = ");
scanf("%d段",&i);
printf("\n");
printf("どの位の倍数まで計算しますか? = ");
scanf("%d段",&z);
printf("\n");

y = i;
j = 0;
i = 0;

while( 1 ) { /*無限ループ*/
i++; /*iに一ずつ足していく*/
n = i * j;

printf("%d × %d = %d",j,i,n); /*画面表示*/
printf("\n");

if( i == z ) {
i = 0;
j++;
printf("\n");

}

if( z * y == n ) { //j×iの値がnと等しかったら
break;

}

}

}

実行結果は、縦に掛け算が表示されていくような形になっています。