Archive | Chương 08 – Trừu tượng hóa dữ liệu
RSS for this section
[C] Điểm Oxy
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Điểm trong mặt phẳng Oxy
540 khai báo dữ liệu điểm OXY
541 Nhập tọa độ điểm trong mặt phẳng
542 Xuất tọa độ điểm trong mặt phẳng
543 Tính khoảng cách giữa 2 điểm
544 Tính khoảng cách 2 điểm theo phương Ox
545 Tính khoảng cách 2 điểm theo phương Oy
546 Tìm tọa độ điểm đối xứng qua gốc tọa độ
547 Tìm điểm đối xứng qua trục hoành
548 Tìm điểm đối xứng qua trục tung
549 Tìm điểm đối xứng qua đường phân giác thứ 1 (y=x)
550 Tìm điểm đối xứng qua đường phân giác thứ 2 (y=-x)
551 Kiểm tra điểm thuộc phần tư thứ 1 ko?
552 Kiểm tra điểm thuộc phần tư thứ 2 ko?
553 Kiểm tra điểm thuộc phần tư thứ 3 ko?
554 Kiểm tra điểm thuộc phần tư thứ 4 ko?
Code
/*Nick yahoo: conloyal*/ /*Soft: visual studio 2008*/ #include <stdio.h> #include <math.h> //540 khai báo dữ liệu điểm OXY struct Diem { float fX; float fY; }; //541 Nhập tọa độ điểm trong mặt phẳng void Nhap(Diem &a) { printf("Nhap X: "); scanf_s("%f",&a.fX); printf("Nhap Y: "); scanf_s("%f",&a.fY); } //542 Xuất tọa độ điểm trong mặt phẳng void Xuat(Diem a) { printf("<%.2f,%.2f>", a.fX,a.fY); } //543 Tính khoảng cách giữa 2 điểm float KhoangCach2Diem(Diem a, Diem b) { float X = pow((b.fX - a.fX),2); float Y = pow((b.fY - a.fY),2); return sqrt(X + Y); } //544 Tính khoảng cách 2 điểm theo phương Ox float KhoangCach2DiemTheoOx(Diem a, Diem b) { return fabs(a.fX - b.fX); } //545 Tính khoảng cách 2 điểm theo phương Oy float KhoangCach2DiemTheoOy(Diem a, Diem b) { return fabs(a.fY - b.fY); } //546 Tìm tọa độ điểm đối xứng qua gốc tọa độ Diem DiemDoiXungQuaO(Diem a) { Diem c; c.fX = -1*a.fX; c.fY = -1*a.fY; return c; } //547 Tìm điểm đối xứng qua trục hoành Diem DiemDoiXungQuaOx(Diem a) { Diem c; c.fX = 1*a.fX; c.fY = -1*a.fY; return c; } //548 Tìm điểm đối xứng qua trục tung Diem DiemDoiXungQuaOy(Diem a) { Diem c; c.fX = -1*a.fX; c.fY = 1*a.fY; return c; } //549 Tìm điểm đối xứng qua đường phân giác thứ 1 (y=x) Diem DiemDoiXungQuaPhanGiac1(Diem a) { Diem c; c.fX = 1*a.fY; c.fY = 1*a.fX; return c; } //550 Tìm điểm đối xứng qua đường phân giác thứ 2 (y=-x) Diem DiemDoiXungQuaPhanGiac2(Diem a) { Diem c; c.fX = -1*a.fY; c.fY = -1*a.fX; return c; } //551 Kiểm tra điểm thuộc phần tư thứ 1 ko? bool KiemTraPhanTu1(Diem a) { if (a.fX > 0 && a.fY >0) return true; return false; } //552 Kiểm tra điểm thuộc phần tư thứ 2 ko? bool KiemTraPhanTu2(Diem a) { if (a.fX < 0 && a.fY >0) return true; return false; } //553 Kiểm tra điểm thuộc phần tư thứ 3 ko? bool KiemTraPhanTu3(Diem a) { if (a.fX < 0 && a.fY <0) return true; return false; } //554 Kiểm tra điểm thuộc phần tư thứ 4 ko? bool KiemTraPhanTu4(Diem a) { if (a.fX > 0 && a.fY <0) return true; return false; } void main() { Diem a, b; Nhap(a); Nhap(b); printf("\nDiem a: "); Xuat(a); printf("\nDiem b: "); Xuat(b); printf("\nKhoang cach 2 diem: %.2f", KhoangCach2Diem(a,b)); printf("\nKhoang cach 2 diem theo Ox: %.2f", KhoangCach2DiemTheoOx(a,b)); printf("\nKhoang cach 2 diem theo Oy: %.2f", KhoangCach2DiemTheoOy(a,b)); Diem c; c = DiemDoiXungQuaO(a); printf("\nDiem doi xung qua O cua a: "); Xuat(c); c = DiemDoiXungQuaOx(a); printf("\nDiem doi xung qua Ox cua a: "); Xuat(c); c = DiemDoiXungQuaOy(a); printf("\nDiem doi xung qua Oy cua a: "); Xuat(c); c = DiemDoiXungQuaPhanGiac1(a); printf("\nDiem doi xung qua phan giac 1 cua a: "); Xuat(c); c = DiemDoiXungQuaPhanGiac2(a); printf("\nDiem doi xung qua phan giac 2 cua a: "); Xuat(c); if (KiemTraPhanTu1(a)) printf("\na thuoc phan tu thu 1"); else printf("\na ko thuoc phan tu thu 1"); if (KiemTraPhanTu2(a)) printf("\na thuoc phan tu thu 2"); else printf("\na ko thuoc phan tu thu 2"); if (KiemTraPhanTu3(a)) printf("\na thuoc phan tu thu 3"); else printf("\na ko thuoc phan tu thu 3"); if (KiemTraPhanTu4(a)) printf("\na thuoc phan tu thu 4"); else printf("\na ko thuoc phan tu thu 4"); }
Link source:
[C] Số phức
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Số phức
532 Khai báo biểu diễn thông tin số phức
533 Nhập số phức
534 Xuất số phức
535 Tính tổng 2 số phức
536 Tính hiệu 2 số phức
537 Tính tích 2 số phức
538 Tính thương 2 số phức
539 Tính lũy thừa bậc n số phức
Code
#include <stdio.h> //532 Khai báo biểu diễn thông tin số phức struct SoPhuc { int iThuc; int iAo; }; //533 Nhập số phức void NhapSoPhuc(SoPhuc &a) { printf("Nhap phan thuc: "); scanf_s("%d", &a.iThuc); printf("Nhap phan ao: "); scanf_s("%d", &a.iAo); } //534 Xuất số phức void XuatSoPhuc(SoPhuc a) { printf("%d+%di", a.iThuc,a.iAo); } //535 Tính tổng 2 số phức SoPhuc TinhTong2SoPhuc(SoPhuc a, SoPhuc b) { SoPhuc c; c.iThuc = a.iThuc + b.iThuc; c.iAo = a.iAo + b.iAo; return c; } //536 Tính hiệu 2 số phức SoPhuc TinhHieu2SoPhuc(SoPhuc a, SoPhuc b) { SoPhuc c; c.iThuc = a.iThuc - b.iThuc; c.iAo = a.iAo - b.iAo; return c; } //537 Tính tích 2 số phức SoPhuc TinhTich2SoPhuc(SoPhuc a, SoPhuc b) { SoPhuc c; c.iThuc = a.iThuc * b.iThuc - a.iAo * b.iAo; c.iAo = a.iThuc * b.iAo + a.iAo * b.iThuc; return c; } //538 Tính thương 2 số phức SoPhuc TinhThuong2SoPhuc(SoPhuc a, SoPhuc b) { SoPhuc c; c.iThuc = (a.iThuc * b.iThuc + a.iAo * b.iAo)/(b.iThuc*b.iThuc + b.iAo*b.iAo); c.iAo = (b.iThuc * a.iAo - b.iAo * a.iThuc)/(b.iThuc*b.iThuc + b.iAo*b.iAo); return c; } //539 Tính lũy thừa bậc n số phức SoPhuc LuyThuaBacN(SoPhuc a, int n) { while (n!=0) { a = TinhTich2SoPhuc(a,a); n--; } return a; } void main() { SoPhuc a; SoPhuc b; a.iThuc = 2; a.iAo = 5; b.iThuc = 1; b.iAo = 3; }
Link source:
Số phức
532 Khai báo biểu diễn thông tin số phức
533 Nhập số phức
534 Xuất số phức
535 Tính tổng 2 số phức
536 Tính hiệu 2 số phức
537 Tính tích 2 số phức
538 Tính thương 2 số phức
539 Tính lũy thừa bậc n số phức
[C] Hỗn số
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Hỗn số
523 Nhập hỗn số
524 Xuất hỗn số
525 Rút gọn hỗn số
526 Tính tổng 2 hỗn số
527 Tính hiệu 2 hỗn số
528 Tính tích 2 hỗn số
529 Tính thương 2 hỗn số
530 Kiểm tra hỗn số tối giản
531 Qui đồng 2 hỗn số
Code
/*Nick yahoo: conloyal*/ /*Soft: Visual studio 2008*/ #include <stdio.h> //522 Khai báo dữ liệu để biểu diễn thông tin của một hỗn số struct HonSo { int iNguyen; int iTu; int iMau; }; //523 Nhập hỗn số void Nhap(HonSo &a) { printf("\nNhap phan nguyen: "); scanf_s("%d",&a.iNguyen); printf("\nNhap tu so: "); scanf_s("%d",&a.iTu); printf("\nNhap mau so: "); scanf_s("%d",&a.iMau); } //524 Xuất hỗn số void Xuat(HonSo a) { printf("%d %d/%d", a.iNguyen, a.iTu, a.iMau); } //525 Rút gọn hỗn số int UocChungLonNhat(int a, int b) { while (a!=b) { if (a>b) a-=b; else b-=a; } return a; } HonSo RutGonHonSo(HonSo a) { if (a.iTu > a.iMau) { int tam = a.iTu / a.iMau; a.iNguyen += tam; a.iTu -= a.iMau * tam; } int UCLN = UocChungLonNhat(a.iTu, a.iMau); a.iTu /= UCLN; a.iMau /= UCLN; return a; } //526 Tính tổng 2 hỗn số HonSo TinhTong(HonSo a, HonSo b) { HonSo c; c.iNguyen = a.iNguyen + b.iNguyen; c.iTu = a.iTu * b.iMau + a.iMau * b.iTu; c.iMau = a.iMau * b.iMau; return c; } //527 Tính hiệu 2 hỗn số HonSo TinhHieu(HonSo a, HonSo b) { HonSo c; c.iNguyen = a.iNguyen - b.iNguyen; c.iTu = a.iTu * b.iMau - a.iMau * b.iTu; c.iMau = a.iMau * b.iMau; return c; } //528 Tính tích 2 hỗn số HonSo TinhTich(HonSo a, HonSo b) { a.iTu = a.iTu + a.iNguyen*a.iMau; b.iTu = b.iTu + b.iNguyen*b.iMau; HonSo c; c.iNguyen = 0; c.iTu = a.iTu * b.iTu; c.iMau = a.iMau * b.iMau; c = RutGonHonSo(c); return c; } //529 Tính thương 2 hỗn số HonSo TinhThuong(HonSo a, HonSo b) { a.iTu = a.iTu + a.iNguyen*a.iMau; b.iTu = b.iTu + b.iNguyen*b.iMau; HonSo c; c.iNguyen = 0; c.iTu = a.iTu * b.iMau; c.iMau = a.iMau * b.iTu; c = RutGonHonSo(c); return c; } //530 Kiểm tra hỗn số tối giản bool KtraHonSoToiGian(HonSo a) { int UCLN = UocChungLonNhat(a.iTu, a.iMau); if (UCLN == 1) return true; return false; } //531 Qui đồng 2 hỗn số void QuiDong2HonSo(HonSo &a, HonSo &b) { HonSo c = a; a.iTu = a.iTu * b.iMau; a.iMau = a.iMau * b.iMau; b.iTu = b.iTu * c.iMau; b.iMau = c.iMau * b.iMau; } void main() { HonSo a,b,c; Nhap(a); Nhap(b); printf ("\nHon so a: "); Xuat(a); printf ("\nHon so b: "); Xuat(b); a = RutGonHonSo(a); printf("\na sau khi rut gon: "); Xuat(a); printf("\nTong 2 hon so: "); Xuat(TinhTong(a,b)); printf("\nHieu 2 hon so: "); Xuat(TinhHieu(a,b)); printf("\nTich 2 hon so: "); Xuat(TinhTich(a,b)); printf("\nThuong 2 hon so: "); Xuat(TinhThuong(a,b)); if (KtraHonSoToiGian(a)) printf("\nHon so a toi gian"); else printf("\nHon so a chua toi gian"); QuiDong2HonSo(a,b); printf("\na sau khi qui dong: "); Xuat(a); printf("\nb sau khi qui dong: "); Xuat(b); }
Link source:
[C] Phân số
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Phân số
506 rút gọn phân số
507 Tính tổng 2 phân số
508 Tính hiệu 2 phân số
509 Tính tích 2 phân số
510 Tính thương 2 phân số
511 Kiểm tra phân số tối giản
512 Qui đồng phân số
513 Kiểm tra phâ số dương
514 Kiểm tra phâ số âm
515 So sánh 2 phân số: hàm trả về 1 trong 3 giá trị: 0,-1,1
516 Định nghĩa toán tử operator + cho 2 phân số
517 Định nghĩa toán tử operator – cho 2 phân số
518 Định nghĩa toán tử operator * cho 2 phân số
519 Định nghĩa toán tử operator / cho 2 phân số
520 Định nghĩa toán tử operator ++ cho 2 phân số
521 Định nghĩa toán tử operator — cho 2 phân số
Code
#include <stdio.h> #include <conio.h> struct PhanSo { float fTuSo; float fMauSo; }; void NhapPhanSo(PhanSo &a) { printf("Nhap Tu so: "); scanf_s("%f", a.fTuSo); printf("Nhap Mau so: "); scanf_s("%f", a.fMauSo); } void XuatPhanSo(PhanSo a) { printf("%.2f / %.2f", a.fTuSo, a.fMauSo); } //506 rút gọn phân số float UocSoChungLonNhat(float x, float y) { while (x!=y) { if (x>y) x -= y; else y -=x; } return x; } PhanSo RutGonPhanSo(PhanSo a) { float UCLN = UocSoChungLonNhat (a.fTuSo, a.fMauSo); a.fTuSo = a.fTuSo/UCLN; a.fMauSo = a.fMauSo/UCLN; return a; } //507 Tính tổng 2 phân số PhanSo TinhTong2PhanSo(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo + a.fMauSo * b.fTuSo; kq.fMauSo = a.fMauSo * b.fMauSo; return kq; } //508 Tính hiệu 2 phân số PhanSo TinhHieu2PhanSo(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo - a.fMauSo * b.fTuSo; kq.fMauSo = a.fMauSo + b.fMauSo; return kq; } //509 Tính tích 2 phân số PhanSo TinhTich2PhanSo(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fTuSo; kq.fMauSo = a.fMauSo * b.fMauSo; return kq; } //510 Tính thương 2 phân số PhanSo TinhThuong2PhanSo(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo; kq.fMauSo = a.fMauSo * b.fTuSo; return kq; } //511 Kiểm tra phân số tối giản bool KiemTraPhanSoToiGian(PhanSo a) { PhanSo c = RutGonPhanSo(a); if (c.fTuSo == a.fTuSo && c.fMauSo == a.fMauSo) return true; return false; } //512 Qui đồng phân số void QuiDong2PhanSo(PhanSo &a, PhanSo &b) { PhanSo c; c.fTuSo = a.fTuSo; c.fMauSo = a.fMauSo; a.fTuSo *= b.fMauSo; a.fMauSo *= b.fMauSo; b.fTuSo *= c.fMauSo; b.fMauSo *= c.fMauSo; } //513 Kiểm tra phâ số dương bool KiemTraPhanSoDuong(PhanSo a) { if (a.fTuSo >=0 && a.fMauSo>0) return true; return false; } //514 Kiểm tra phâ số âm bool KiemTraPhanSoAm(PhanSo a) { if (a.fTuSo <0 || a.fMauSo<0) return true; return false; } //515 So sánh 2 phân số: hàm trả về 1 trong 3 giá trị: 0,-1,1 int SoSanh2PhanSo(PhanSo a, PhanSo b) { float kq1 = a.fTuSo / a.fMauSo; float kq2 = b.fTuSo / b.fMauSo; if (kq1 < kq2) return -1; if (kq1 > kq2) return 1; return 0; } //516 Định nghĩa toán tử operator + cho 2 phân số PhanSo operator +(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo + a.fMauSo * b.fTuSo; kq.fMauSo = a.fMauSo * b.fMauSo; return kq; } //517 Định nghĩa toán tử operator - cho 2 phân số PhanSo operator -(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo - a.fMauSo * b.fTuSo; kq.fMauSo = a.fMauSo + b.fMauSo; return kq; } //518 Định nghĩa toán tử operator * cho 2 phân số PhanSo operator *(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fTuSo; kq.fMauSo = a.fMauSo * b.fMauSo; return kq; } //519 Định nghĩa toán tử operator / cho 2 phân số PhanSo operator /(PhanSo a, PhanSo b) { PhanSo kq; kq.fTuSo = a.fTuSo * b.fMauSo; kq.fMauSo = a.fMauSo * b.fTuSo; return kq; } //520 Định nghĩa toán tử operator ++ cho 2 phân số PhanSo operator ++ (PhanSo &a) { a.fTuSo += a.fMauSo; return a; } //521 Định nghĩa toán tử operator -- cho 2 phân số PhanSo operator ++ (PhanSo &a) { a.fTuSo -= a.fMauSo; return a; } void main() { PhanSo a; a.fTuSo = 5; a.fMauSo = 2; PhanSo b; b.fTuSo = 2; b.fMauSo=1; PhanSo c; //Xuat printf("\nPhan so a: "); XuatPhanSo(a); printf("\nPhan so b: "); XuatPhanSo(b); //506 a = RutGonPhanSo(a); printf("\nSau khi rut gon phan so a: "); XuatPhanSo(a); b = RutGonPhanSo(b); printf("\nSau khi rut gon phan so b: "); XuatPhanSo(b); //507 c = TinhTong2PhanSo(a,b); printf("\nTong 2 phan so: "); XuatPhanSo(c); //508 c = TinhHieu2PhanSo(a,b); printf("\nHieu 2 phan so: "); XuatPhanSo(c); //509 c = TinhTich2PhanSo(a,b); printf("\nTich 2 phan so: "); XuatPhanSo(c); //510 c = TinhThuong2PhanSo(a,b); printf("\nThuong 2 phan so: "); XuatPhanSo(c); //511 bool f = KiemTraPhanSoToiGian(a); if (f) printf("\nPhan so a toi gian roi"); else printf("\nPhan so a chua toi gian"); //512 QuiDong2PhanSo(a,b); printf("\nSau khi qui dong"); printf("\nPhan so a: "); XuatPhanSo(a); printf("\nPhan so b: "); XuatPhanSo(b); }
Link source:
[C] Ngày
Tác giả:
- Trần Hán Huy – tranhanhuy.wordpress.com
Sách:
- Bài tập kĩ thuật lập trình C/C++ – Nguyễn Tấn Trần Minh Khang
Đề bài
- Ngày
- 593 Khai báo dữ liệu biểu diễn ngày
- 594 Nhập ngày
- 595 Xuất ngày theo định dạng (ng/th/nm)
- 596 Kiểm tra năm nhuận
- 597 Tính số thứ tự ngày trong năm
- 598 Tính số thứ tự ngày kể từ ngày 1/1/1
- 599 Tìm ngày khi biết năm và số thứ tự của ngày trong năm
- 600 Tìm ngày khi biết số thứ tự ngày từ năm 1/1/1
- 601 Tìm ngày kế tiếp
- 602 Tìm ngày hôm trước
- 603 Tìm ngày kế đó k ngày
- 604 Tìm ngày hôm trước k ngày
- 605 Khoảng cách giữa 2 ngày
- 606 So sánh 2 ngày
Code
/*Nick yahoo: conloyal*/ /*Soft: visual studio 2008*/ #include <stdio.h> //593 Khai báo dữ liệu biểu diễn ngày struct Ngay { int iNgay; int iThang; int iNam; }; //594 Nhập ngày void NhapNgay(Ngay &a) { printf("Nhap ngay: "); scanf_s("%d",&a.iNgay); printf("Nhap thang: "); scanf_s("%d",&a.iThang); printf("Nhap nam: "); scanf_s("%d",&a.iNam); } //595 Xuất ngày theo định dạng (ng/th/nm) void XuatNgay(Ngay a) { printf("%d/%d/%d", a.iNgay, a.iThang, a.iNam); } //596 Kiểm tra năm nhuận bool KiemTraNamNhuan(Ngay a) { if (a.iNam%4==0 && a.iNam%100!=0) return true; if (a.iNam%400==0) return true; return false; } bool KiemTraNamNhuan(int i) { if (i%4==0 && i%100!=0) return true; if (i%400==0) return true; return false; } //597 Tính số thứ tự ngày trong năm int STTNgayTrongNam(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.iThang-1; i++) stt += n; return stt + a.iNgay; } //598 Tính số thứ tự ngày kể từ ngày 1/1/1 int STTNgay(Ngay a) { int stt = 0; for(int i=1; i<a.iNam; i++) { if (KiemTraNamNhuan(i)) stt+=366; else stt+=365; } return stt + STTNgayTrongNam(a); } //599 Tìm ngày khi biết năm và số thứ tự của ngày trong năm int TimNgay(int iNam, int iSTT) { int n[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; if (KiemTraNamNhuan(iNam)) n[1] = 29; for (int i=0; i<12; i++) { if (n < iSTT) iSTT -= n; else break; } return iSTT; } //600 Tìm ngày khi biết số thứ tự ngày từ năm 1/1/1 int TimNgay(int iSTT) { int iNam = 1; while(1) { if (KiemTraNamNhuan(iNam)) { if (iSTT > 366) iSTT -= 366; else return TimNgay(iNam,iSTT); } else { if (iSTT > 365) iSTT -= 365; else return TimNgay(iNam,iSTT); } iNam++; } return -1; } //601 Tìm ngày kế tiếp Ngay TimNgayKeTiep(Ngay a) { bool flag =false; if (a.iNgay == 30 || a.iNgay == 31) { flag = true; a.iNgay =1; } if (a.iThang == 2) { if (KiemTraNamNhuan(a)) { if (a.iNgay == 29) { a.iNgay = 1; flag = true; } } else { if (a.iNgay == 28) { a.iNgay = 1; flag = true; } } } if (flag) { a.iThang++; if (a.iThang == 13) { a.iThang = 1; a.iNam ++; } } else a.iNgay++; return a; } //602 Tìm ngày hôm trước Ngay TimNgayHomTruoc(Ngay a) { if (a.iNgay == 1) { switch(a.iThang) { case 1: case 2: case 4:case 6:case 8:case 9:case 11: { a.iNgay = 31; a.iThang --; if (a.iThang == 0) { a.iThang = 12; a.iNam -- ; } break; } case 3: { if (KiemTraNamNhuan(a)) { a.iNgay = 29; } else { a.iNgay = 28; } a.iThang = 2; break; } default : { a.iNgay = 30; a.iThang--; } } } else a.iNgay--; return a; } //603 Tìm ngày kế đó k ngày Ngay TimNgayKeTiepKNgay(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 TimNgayHomTruocKNgay(Ngay a, int k) { while(k>0) { a = TimNgayHomTruoc(a); k--; } return a; } //605 Khoảng cách giữa 2 ngày int KhoangCach2Ngay(Ngay a, Ngay b) { int STTa = STTNgay(a); int STTb = STTNgay(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 = STTNgay(a); int STTb = STTNgay(b); if (STTa > STTb) return 1; if (STTa == STTb) return 0; return -1; } void main() { Ngay a; NhapNgay(a); printf("\nNgay: "); XuatNgay(a); if (KiemTraNamNhuan(a)) printf("\nLa nam nhuan"); else printf("\nKhong phai nam nhuan"); printf("\nSTT ngay trong nam: %d", STTNgayTrongNam(a)); printf("\nSTT ngay tu ngay 1 thang 1 nam 1: %d", STTNgay(a)); printf("\nTim ngay biet nam 2010, stt 273: %d", TimNgay(2010,273)); printf("\nTim ngay biet stt tu 1/1/1: %d", TimNgay(734046)); printf("\nNgay ke tiep : "); XuatNgay(TimNgayKeTiep(a)); printf("\nNgay hom truoc : "); XuatNgay(TimNgayHomTruoc(a)); printf("\nNgay ke tiep 5 ngay: "); XuatNgay(TimNgayKeTiepKNgay(a,5)); printf("\nNgay hom truoc 5 ngay: "); XuatNgay(TimNgayHomTruocKNgay(a,5)); }
Link source: