Continuing the discussion from Viết chương trình in ra số ngày trong mỗi tháng, bằng cách sử dụng switch:
Bài tập in ra số ngày trong tháng dùng switch case
switch(month)
{
case 1:
cout << "31 ngay" << endl;
break;
case 2:
if(year%4 == 0 && year%100 !=0 || year % 400 == 0) cout << "29 ngay" << endl;
else
cout << "28 ngay" << endl;
break;
case 3:
....
}
Bạn tự viết tiếp nhé
Em đọc code dưới đây, không hiểu thì debug cho đến khi hiểu nhé,
#include <stdio.h>
// Khai bao kieu NGAY
typedef struct
{
int ngay;
int thang;
int nam;
} NGAY;
// Nguyen mau ham
int KiemTraNamNhuan(int nam);
int TinhSoNgayTrongThang(int thang, int nam);
int KiemTraHopLe(NGAY ng);
void Nhap(NGAY &ng);
void Xuat(NGAY ng, char *thongbao);
int TinhSTTNgayTrongNam(NGAY ng);
int TinhSTTNgay(NGAY ng);
NGAY TinhNgayHomTruoc(NGAY ng);
NGAY TinhNgayHomSau(NGAY ng);
NGAY TinhNgayTruoc(NGAY ng, int k);
NGAY TinhNgaySau(NGAY ng, int k);
int TinhKhoangCach(NGAY ng1, NGAY ng2);
int SoSanh(NGAY ng1, NGAY ng2);
void main()
{
NGAY ng1, ng2;
Nhap(ng1);
Xuat(ng1, "Ngay 1: ");
//Nhap(ng2);
//Xuat(ng2, "Ngay 2: ");
if (KiemTraNamNhuan(ng1.nam) == 1)
printf("Nam %d la nam nhuan\n", ng1.nam);
else
printf("Nam %d khong la nam nhuan\n", ng1.nam);
printf("Ngay 1 la ngay thu %d trong nam %d\n", TinhSTTNgayTrongNam(ng1), ng1.nam);
printf("Ngay 1 la ngay thu %d ke tu 1/1/1\n", TinhSTTNgay(ng1));
Xuat(TinhNgayHomTruoc(ng1), "Ngay hom truoc cua Ngay 1 la: ");
Xuat(TinhNgayHomSau(ng1), "Ngay hom sau cua Ngay 1 la: ");
int k;
printf("Nhap k: ");
scanf("%d", &k);
Xuat(TinhNgayTruoc(ng1, k), "Ngay truoc k ngay cua Ngay 1 la: ");
Xuat(TinhNgaySau(ng1, k), "Ngay sau k ngay cua Ngay 1 la: ");
}
// Dinh nghia ham
int KiemTraNamNhuan(int nam)
{
if (nam % 400 == 0 || (nam % 4 == 0 && nam % 100 != 0))
return 1;
return 0;
}
int TinhSoNgayTrongThang(int thang, int nam)
{
int songay;
switch (thang)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
songay = 31;
break;
case 4:
case 6:
case 9:
case 11:
songay = 30;
break;
case 2:
if (KiemTraNamNhuan(nam) == 1)
songay = 29;
else
songay = 28;
break;
default:
songay = 0;
}
return songay;
}
int KiemTraHopLe(NGAY ng)
{
int hople = 1;
if (ng.nam < 0)
hople = 0;
else
if (ng.thang < 1 || ng.thang > 12)
hople = 0;
else
if (ng.ngay < 1 || ng.ngay > TinhSoNgayTrongThang(ng.thang, ng.nam))
hople = 0;
return hople;
}
void Nhap(NGAY &ng)
{
int hople;
do
{
printf("Nhap ngay: ");
scanf("%d", &ng.ngay);
printf("Nhap thang: ");
scanf("%d", &ng.thang);
printf("Nhap nam: ");
scanf("%d", &ng.nam);
hople = KiemTraHopLe(ng);
if (!hople)
printf("Nhap lai! Ngay khong hop le.\n");
}
while(!hople);
}
void Xuat(NGAY ng, char *thongbao)
{
printf("%s", thongbao);
printf("%d/%d/%d\n", ng.ngay, ng.thang, ng.nam);
}
int TinhSTTNgayTrongNam(NGAY ng)
{
int stt = 0;
// Tinh tong so ngay cac thang truoc do
for (int i=1; i<ng.thang; i++)
stt = stt + TinhSoNgayTrongThang(i, ng.nam);
stt = stt + ng.ngay;
return stt;
}
int TinhSTTNgay(NGAY ng)
{
int stt = 0;
// Tinh tong so ngay cac nam truoc do
for (int i=1; i<ng.nam; i++)
if (KiemTraNamNhuan(i) == 1)
stt = stt + 366;
else
stt = stt + 365;
stt = stt + TinhSTTNgayTrongNam(ng);
return stt;
}
NGAY TinhNgayHomTruoc(NGAY ng)
{
NGAY kq;
if (ng.ngay == 1) // Ngay dau tien cua thang (1/?/?)
{
if (ng.thang == 1) // Thang dau tien cua nam (1/1/?)
{
kq.nam = ng.nam - 1;
kq.thang = 12;
kq.ngay = 31;
}
else
{
kq.nam = ng.nam;
kq.thang = ng.thang - 1;
kq.ngay = TinhSoNgayTrongThang(kq.thang, kq.nam);
}
}
else
{
kq.ngay = ng.ngay - 1;
kq.thang = ng.thang;
kq.nam = ng.nam;
}
return kq;
}
NGAY TinhNgayHomSau(NGAY ng)
{
NGAY kq;
int max = TinhSoNgayTrongThang(ng.thang, ng.nam);
if (ng.ngay == max) // Ngay cuoi cung cua thang
{
if (ng.thang == 12) // Thang cuoi cung cua nam
{
kq.nam = ng.nam + 1;
kq.thang = 1;
kq.ngay = 1;
}
else
{
kq.nam = ng.nam;
kq.thang = ng.thang + 1;
kq.ngay = 1;
}
}
else
{
kq.ngay = ng.ngay + 1;
kq.thang = ng.thang;
kq.nam = ng.nam;
}
return kq;
}
NGAY TinhNgayTruoc(NGAY ng, int k)
{
NGAY kq = ng;
for (int i=0; i<k; i++)
kq = TinhNgayHomTruoc(kq);
return kq;
}
NGAY TinhNgaySau(NGAY ng, int k)
{
NGAY kq = ng;
for (int i=0; i<k; i++)
kq = TinhNgayHomSau(kq);
return kq;
}
int TinhKhoangCach(NGAY ng1, NGAY ng2)
{
return TinhSTTNgay(ng1) - TinhSTTNgay(ng2);
}
int SoSanh(NGAY ng1, NGAY ng2)
{
int kc = TinhKhoangCach(ng1, ng2);
if (kc > 0)
return 1;
else
if (kc < 0)
return -1;
else
return 0;
}
Anh ơi em mới học lệnh if else và lệnh switch trong C thôi.Nhờ anh giúp em với cảm ơn anh nhiều.
mình cũng mới học viết đơn giản v thôi.
1.#include <stdio,h>
2,#include <stdlib.h>
int main()
{
int thang=1;
switch (thang){
case 1:
printf(“thang 1 co 31 ngay”);
break;
case 2 :
printf(“thang 2 co 28/29 ngay”);
break;}
return0;
}
ko biet dung ko. tai moi hoc den day thi lam den day
minh thay dung them cai scanf la qua dep luon hehe
#include
using namespace std;
int main(){
int n;
cout << "Nhap so thang muon biet ngay: ";
cin >> n;
switch (n){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: cout << “Thang co 31 ngay”; break;
case 2: cout << “Thang co 28/29 ngay.”; break;
case 4:
case 6:
case 9:
case 11:cout << “Thang co 30 ngay.”; break;
default:cout << “Nhap loi,xin kiem tra lai!”;
}
system("pause");
return 0;
}
Tui nghĩ như vậy. không biết đúng không.
int main()
{
int a;
printf("nhap so a\n");
scanf("%d",&a);
switch(a)
{
case 12:
case 11:
case 10:
case 9:
case 8:
case 7:
case 6:
case 5:
case 4:
case 3: printf("la 30 ngay or");
case 1: printf(" 31 ngay"); break;
case 2: printf("la 28 or 29 "); break;
default: printf (" xin loi khong co thang do");
}
return 0;
}
for(int i = 1; i <= 12; i++)
{
switch(i)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("\nThang %d co 31 ngay", i);
case 4:
case 6:
case 9:
case 11:
printf("\nThang %d co 30 ngay", i);
case 2:
if(nam % 400 == 0 || (nam % 100 != 0 && nam % 4 == 0))
{
printf("\nThang %d co 29 thang", i);
}
else
{
printf("\nThang %d co 28 ngay", i);
}
}
}
^ vòng for đó là để test?
Sai, người ta cần đúng 30 ngày.
vậy những tháng nào 30 ngày thì gom vào 1 nhóm rồi break hả