СИ. Календарные задачи
Код:
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
#define KPD 11
struct struct_date
{
int day;
int month;
int year;
};
int what_day(const struct struct_date* date) // Формула вечного календаря
{
int a = (14 - date->month) / 12;
int y = date->year - a;
int m = date->month + 12 * a - 2;
return (7000 + (date->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}
void Holliday()
{
int j=0;
int M[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int mas_pr[2][KPD]={ {1,2,7,8,1,2,9,28,25,7,8},{1,1,1,3,5,5,5,6,8,11,11}}; // Праздничные даты( {день},{месяц})
int Uyear=0,T=0;
printf("Введите год:n");
while((!scanf("%d", &Uyear))||(Uyear<=0))
{
printf("Повторите ввод года:n");
fflush(stdin);
}
if((Uyear%4==0)&&(Uyear%100==0)&&(Uyear%400==0))
M[1]=29;
for(int i=mas_pr[1][0]; i<11;i++)
{
for( j=mas_pr[0][j]; j<=KPD; j++)
{
struct_date a={j, i+1, Uyear};
T=what_day(&a);
if((T==6)||(T==0)) printf("Праздник совпадает с выходным %d-го числа %d-го месяцаn", j,i+1);
}
}
}
int main()
{
setlocale(LC_ALL, "rus");
Holliday();
_getch();
return 0;
}
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
#define KPD 11
struct struct_date
{
int day;
int month;
int year;
};
int what_day(const struct struct_date* date) // Формула вечного календаря
{
int a = (14 - date->month) / 12;
int y = date->year - a;
int m = date->month + 12 * a - 2;
return (7000 + (date->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7;
}
void Holliday()
{
int j=0;
int M[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int mas_pr[2][KPD]={ {1,2,7,8,1,2,9,28,25,7,8},{1,1,1,3,5,5,5,6,8,11,11}}; // Праздничные даты( {день},{месяц})
int Uyear=0,T=0;
printf("Введите год:n");
while((!scanf("%d", &Uyear))||(Uyear<=0))
{
printf("Повторите ввод года:n");
fflush(stdin);
}
if((Uyear%4==0)&&(Uyear%100==0)&&(Uyear%400==0))
M[1]=29;
for(int i=mas_pr[1][0]; i<11;i++)
{
for( j=mas_pr[0][j]; j<=KPD; j++)
{
struct_date a={j, i+1, Uyear};
T=what_day(&a);
if((T==6)||(T==0)) printf("Праздник совпадает с выходным %d-го числа %d-го месяцаn", j,i+1);
}
}
}
int main()
{
setlocale(LC_ALL, "rus");
Holliday();
_getch();
return 0;
}
Неправильно вычисляются даты, потому что циклы не правильно написаны. В этом ошибка