[ create a new paste ] login | about

Link: http://codepad.org/sEYZbYc2    [ raw code | output | fork ]

C, pasted on Dec 13:
#include<stdio.h>
#include<conio.h>
const int minYear = 1900, maxYear = 10000;
struct Ngay
{
       int Day, Month, Year;
};
typedef struct Ngay NGAY;

void NhapNgay(NGAY &);
void XuatNgay(NGAY);

bool KiemTraNamNhuan(NGAY);

int TinhSoThuTuNgayTrongNam(NGAY);
int TinhSoThuTuNgayTuNgayChoTruoc(NGAY);

int TimNgayKhiBietNamVaSoThuTuNgayTrongNam(int, int);
int TimNgayKhiBietSoThuTuNgayChoTruoc(int);

NGAY TimNgayKeTiep(NGAY);
NGAY TimNgayHomQua(NGAY);

NGAY TimNgayKeDoKNgay(NGAY, int);
NGAY TimNgayTruocDoKNgay(NGAY, int);

int TimKhoangCach2Ngay(NGAY);
int SoSanh2Ngay(NGAY);

void TinhThuTrongTuanCua1NgayBatKyTrongNam(NGAY);

//596 Kiểm tra năm nhuận
bool KiemTraNamNhuan(NGAY a)
{
	return (a.Year % 4 == 0 && a.Year % 100 != 0) || (a.Year % 400 == 0);
}

bool KiemTraNamNhuan(int i)
{
    if (i % 4 == 0 && i % 100!=0)
        return true;
    if (i % 400 == 0)
        return true;
    return false;
}
int TimSoNgayTrongThang(NGAY a)
{
	int NgayTrongThang;
	switch(a.Month)
	{
	case 1: case 3: case 5: case 7: case 8: case 10: case 12:
		NgayTrongThang = 31;
		break;
	case 4: case 6: case 9 : case 11:
		NgayTrongThang = 30;
		break;
	case 2:
		int Check = KiemTraNamNhuan(a);
		if(Check == 1)
		{
			NgayTrongThang = 29;
		}
		else
		{
			NgayTrongThang = 28;
		}
	}
	return NgayTrongThang;
}

//594 Nhập ngày
void NhapNgay(NGAY &a)
{
	do
	{
		printf("\nNhap vao nam: ");
		scanf("%d", &a.Year);
		if(a.Year < minYear || a.Year > maxYear)
		{
			printf("\nDu lieu nam khong hop le. Xin kiem tra lai!");
		}
	}while(a.Year < minYear || a.Year > maxYear);

	do
	{
		printf("\nNhap vao thang: ");
		scanf("%d", &a.Month);
		if (a.Month < 1 || a.Month > 12)
			printf("\nDu lieu thang khong hop le. Xin kiem tra lai!");
	}while(a.Month < 1 || a.Month > 12);

	int NgayTrongThang = TimSoNgayTrongThang(a);
	do
	{
		printf("\nNhap vao ngay: ");
		scanf("%d",&a.Day);
		if(a.Day < 1 || a.Day > NgayTrongThang)
		{
			printf("\nDu lieu ngay khong hop le. Xin kiem tra lai!");
		}
	}while(a.Day < 1 || a.Day > NgayTrongThang);
}

//595 Xuất ngày theo định dạng (ng/th/nm)
void XuatNgay(NGAY ng)
{
	printf("%d/%d/%d", ng.Day, ng.Month, ng.Year);
}

//597 Tính số thứ tự ngày trong năm
int TinhSoThuTuNgayTrongNam(NGAY a)
{
	/*
int n[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (KiemTraNamNhuan(a))
        n[1] = 29;
    int stt = 0;
    for (int i = 0; i < a.Month - 1; i++)
        stt += n;
    return stt + a.Day;
*/
	int S = a.Day;
	for(int i = 1; i < a.Month; i++) 
	{ 
		switch (i)
		{
			case 4: case 6: case 9 : case 11: S += 30; break;
			case 2: S += (a.Year % 4 == 0 && a.Year % 100 != 0 || a.Year % 400 == 0) ? 29 : 28;
				break;
		default: S += 31;
		}
	}
	return S;
}
//598 Tính số thứ tự ngày kể từ ngày 1/1/1
int TinhSoThuTuNgayTuNgayChoTruoc(NGAY a)
{
	int stt = 0;
	for(int i = 1; i < a.Year; i++)
	{
		if(KiemTraNamNhuan(i))
		{
			stt += 366;
		}
		else
		{
			stt += 365;
		}
	}
	return stt + TinhSoThuTuNgayTrongNam(a);
}

// 599 Tìm ngày khi biết năm và số thứ tự của ngày trong năm
int TimNgayKhiBietNamVaSoThuTuNgayTrongNam(int Year, int STT)
{
	int n[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	if (KiemTraNamNhuan(Year))
        n[1] = 29;
    for (int i = 0; i < 12; i++)
    {
        if (n[i] < STT)
            STT -= n[i];
        else
            break;
    }
    return STT;
}
// 600 Tìm ngày khi biết số thứ tự ngày từ năm 1/1/1

int TimNgayKhiBietSoThuTuNgayChoTruoc(int STT)
{
	int Year = 1;
	while(1)
	{
		if(KiemTraNamNhuan(Year))
		{
			if(STT > 366)
			{
				STT -= 366;
			}
			else
			{
				return TimNgayKhiBietNamVaSoThuTuNgayTrongNam(Year, STT);
			}
		}
		else
		{
			if(STT > 365)
			{
				STT -= 365;
			}
			else
			{
				return TimNgayKhiBietNamVaSoThuTuNgayTrongNam(Year, STT);
			}
		}
		Year++;
	}
	return -1;
}
//601 Tìm ngày kế tiếp
NGAY TimNgayKeTiep(NGAY a)
{
	int NgayTrongThang = TimSoNgayTrongThang(a);
	if (a.Day < NgayTrongThang)  // Tăng ngày lên
	{
		a.Day++;
	}
	else if (a.Month < 12)     // Ngày kế tiếp là đầu tháng
	{
		a.Day = 1; a.Month++;
	}
	else                      // Ngày kế là đầu năm mới tức là hiện tai đang là tháng 12
	{
		a.Day = a.Month = 1;
		a.Year++;
	}
	return a;
}
//602 Tìm ngày hôm trước
NGAY TimNgayHomQua(NGAY a)
{
	int NgayTrongThang = TimSoNgayTrongThang(a);
	if(a.Day == 1)            // Nếu ngày nhập vào là 1
	{
		a.Day = NgayTrongThang;        // ngày trước đó là số ngày trong tháng trước 
		if(a.Month == 1)            // Nếu tháng là 1
		{
			a.Month = 12;
			a.Year--;
		}
		else                     // Tháng khác 1
			a.Month--;
	}
	else                // Ngày khác 1
		a.Day--;
	return a;
}
//603 Tìm ngày kế đó k ngày
NGAY TimNgayKeDoKNgay(NGAY a, int k)
{
	while(k > 0)
	{
		a = TimNgayKeTiep(a);
		k--;
	}
	return a;
}
//604 Tìm ngày hôm trước k ngày
NGAY TimNgayTruocDoKNgay(NGAY a, int k)
{
	while(k>0)
    {
        a = TimNgayHomQua(a);
        k--;
    }
    return a;
}
//605 Khoảng cách giữa 2 ngày
int TimKhoangCach2Ngay(NGAY a, NGAY b)
{
	int STTa = TinhSoThuTuNgayTrongNam(a);
	int STTb = TinhSoThuTuNgayTrongNam(b);

	if(STTa > STTb)
	{
		return STTa - STTb;
	}
	return STTb - STTa;
}


// 606 So sánh 2 ngày
int SoSanh2Ngay(NGAY a, NGAY b)
{
	int STTa = TinhSoThuTuNgayTrongNam(a);
	int STTb = TinhSoThuTuNgayTrongNam(b);

	if(STTa > STTb)
	{
		return 1;
	}
	if(STTb > STTa)
	{
		return 0;
	}
	return -1;
}

// Tính thứ trong tuần của 1 ngày bất kỳ

/*
Sử dụng công thức Zeller
	dayofweek = (d + y + y/4 - y/100 + y/400 + (31*m)/12) % 7

	với a = (14 - month) / 12
	y = year - a;
	m = month + 12*a - 2
*/
void TinhThuTrongTuanCua1NgayBatKyTrongNam(NGAY a)
{
	/*
	Công thức Zeller
	*/
	a.Year -= (14 - a.Month) / 12;
	a.Month += 12 * ((14 - a.Month) / 12) - 2;

	int dayofweek = (a.Day + a.Year + a.Year / 4 - a.Year / 100 + a.Year / 400 + (31 * a.Month)/12) % 7;

	if(!dayofweek)
		printf("\nChu nhat");
	else 
		printf("\nThu %d", dayofweek + 1);
}

int main()
{
	NGAY a;
	NhapNgay(a);
	XuatNgay(a);

	if(KiemTraNamNhuan(a))
	{
		printf("\nNam %d la nam nhuan", a.Year);
	}
	else
	{
		printf("\nNam %d la nam thuong", a.Year);
	}

	int STTNgay = TinhSoThuTuNgayTrongNam(a);
	printf("\nNgay thu %d trong nam", STTNgay);

	int STT = TinhSoThuTuNgayTuNgayChoTruoc(a);
	printf("\nNgay thu %d trong nam tu ngay 1/1/1", STT);

	int Ngay = TimNgayKhiBietNamVaSoThuTuNgayTrongNam(2015, 365);
	printf("\nNgay thu %d trong nam %d la ngay %d", 365, 2015, Ngay);

	NGAY c = TimNgayKeTiep(a);
	printf("\nNgay ke tiep la ngay %d/%d/%d", c.Day, c.Month, c.Year);

	NGAY d = TimNgayHomQua(a);
	printf("\nNgay hom qua la ngay %d/%d/%d", d.Day, d.Month, d.Year);

	printf("\nNgay ke tiep 5 ngay: ");
	XuatNgay(TimNgayKeDoKNgay(a, 5));
    printf("\nNgay hom truoc 5 ngay: ");
	XuatNgay(TimNgayTruocDoKNgay(a, 5));

	TinhThuTrongTuanCua1NgayBatKyTrongNam(a);
	getch();
	return 0;
}


Output:
Line 17: error: conio.h: No such file or directory
Line 10: error: expected ';', ',' or ')' before '&' token
Line 13: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'KiemTraNamNhuan'
Line 33: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'KiemTraNamNhuan'
Line 38: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'KiemTraNamNhuan'
In function 'TimSoNgayTrongThang':
Line 58: error: expected expression before 'int'
Line 59: error: 'Check' undeclared (first use in this function)
Line 59: error: (Each undeclared identifier is reported only once
Line 59: error: for each function it appears in.)
t.c: At top level:
Line 72: error: expected ';', ',' or ')' before '&' token
In function 'TinhSoThuTuNgayTrongNam':
Line 123: error: 'for' loop initial declaration used outside C99 mode
In function 'TinhSoThuTuNgayTuNgayChoTruoc':
Line 139: error: 'for' loop initial declaration used outside C99 mode
In function 'TimNgayKhiBietNamVaSoThuTuNgayTrongNam':
Line 159: error: 'for' loop initial declaration used outside C99 mode
t.c: At top level:
Line 261: error: conflicting types for 'TimKhoangCach2Ngay'
Line 27: error: previous declaration of 'TimKhoangCach2Ngay' was here
Line 275: error: conflicting types for 'SoSanh2Ngay'
Line 28: error: previous declaration of 'SoSanh2Ngay' was here


Create a new paste based on this one


Comments: