このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/240
#  【1】c言語 【2】二つの西暦で入力された年月日から、その間の日数を計算するプログラムを作成してください。  
#  ここに処理が入る というとこのプログラムをお願いします  
#  プログラムのベース   
#  int uruu(int y); 
#  int monthday(int y, int m);  
#  //----------------------------------------------------  
#  int main(){  
#  int year_a, month_a, day_a;  
#  int year_b, month_b, day_b;  
#  int days; int i; days = 0;  
#  printf("日数計算プログラム\n");  
#  printf("数え始める西暦年月日を入力してください\n");  
#  scanf("%d,%d,%d",&year_a, &month_a, &day_a);  
#  printf("数え終わる西暦年月日を入力してください\n");  
#  scanf("%d,%d,%d",&year_b, &month_b, &day_b);  
#  ここに処理が入いる  
#  printf("%d年%d月%d日から%d年%d月%d日までの日数は%d日です。\n", year_a, month_a, day_a, year_b, month_b, day_b, days);  
#  return 0; } 
#  //うるう年ならtrue(1)、そうでないならfalse(0)を返す関数  
#  int uruu(int y){  
#  int ret;  
#  ここに処理が入る  
#  return ret; } 
#  //年、月を受け取り、その月の日数を返す関数  
#  int monthday(int y, int m){  
#  int d;  
#  ここに処理が入る  
#  return d; } 
# 
# 

'日数計算プログラム' :-
        数え始める西暦年月日を入力してください(_年_1,_月_1,_日_1),
        数え終わる西暦年月日を入力してください(_年_2,_月_2,_日_2),
        日数計算(_年_1,_月_1,_日_1,_年_2,_月_2,_日_2,_日数),
        writef('%d年%d月%d日から%d年%d月%d日までの日数は%d日です。',[_年_1,_月_1,_日_1,_年_2,_月_2,_日_2,_日数]).

数え始める西暦年月日を入力してください(_数え始める西暦年月日) :-
        write('数え始める西暦年月日を入力してください(yyyy,mm,dd) : '),
        年月日の入力(_年,_月,_日).

数え終わる西暦年月日を入力してください(_年,_月,_日) :-
        write('数え終わる西暦年月日を入力してください(yyyy mm dd) : '),
        年月日の入力(_年,_月,_日).

年月日の入力(_年,_月,_日) :-
        readln([_年,_月,_日]).

日数計算(_年_1,_月_1,_日_1,_年_2,_月_2,_日_2,_日数) :-
        _年_2 - _年_1 > 1,
        _開始年の翌年 is _年_1 + 1,
        _最終年の前年 is _年_2 - 1,
        findsum(_年日数,(
                        for(_開始年の翌年,_年,_最終年の前年),
                        一年間の日数(_年,_年日数)),
                _間の年の日数合計),                        
        翌年の正月までの日数(_年_1,_月_1,_日_1,_翌年の正月までの日数),
        積算日(_年_2,_月_2,_日_2,_積算日),
        _日数 is truncate(_翌年の正月までの日数 + _間の年の日数合計 + _積算日).

'年、月を受け取り、その月の日数を返す'(_年,_月,31) :-
        member(_月,[1,3,5,7,8,10,12]),!.
'年、月を受け取り、その月の日数を返す'(_年,_月,30) :-
        member(_月,[4,6,9,11]),!.
'年、月を受け取り、その月の日数を返す'(_年,2,29) :-
        うるう年(_年),!.
'年、月を受け取り、その月の日数を返す'(_年,2,28) :-
        \+(うるう年(_年)).

一年間の日数(_年,365) :- \+(うるう年(_年)).
一年間の日数(_年,366) :- うるう年(_年),!.

積算日(_,1,_日,_日) :- !.
積算日(_年,_月,_日,_積算日) :-
        _前月 is _月 - 1,
        findsum(_月日数,(
                    for(1,_月_1,_前月),
                    '年、月を受け取り、その月の日数を返す'(_年,_月_1,_月日数)),
                _正月から前月末日までの積算日),
        _積算日 is truncate(_正月から前月末日までの積算日 + _日).

翌年の正月までの日数(_年,_月,_日,_翌年の正月までの日数) :-
        findsum(_月日数,(
                    for(_月,_月_1,12),
                    '年、月を受け取り、その月の日数を返す'(_年,_月_1,_月日数)),
                _当月初日から翌年正月までの日数),
        _翌年の正月までの日数 is truncate(_当月初日から翌年正月までの日数 - _日 + 1).

うるう年(_年) :-
        0 is _年 mod 400,!.
うるう年(_年) :-
        0 is _年 mod 100,!,fail.
うるう年(_年) :-
        0 is _年 mod 4,!.
うるう年(_年) :-
        \+(0 is _年 mod 4),
        fail.