30/09/2018, 18:52
Hãy Giúp em chỉ ra lỗi sai trong đoạn CODE với. Nó cho kết quả sai và em chưa thể sửa nó!
`
#include <stdio.h>
#include <conio.h>
int thuTuNgay(int Ngay, int Thang, int Nam);//ham kiem tra thu tu ngay
bool ktNamNhuan(int Nam);//ham kiem tra nam nhuan
void main()
{
int Ngay, Thang, Nam;
do{
printf("Nhap ngay= ");
scanf("%d", &Ngay);
if(Ngay< 0) printf("Ban nhap ngay sai, xin nhap lai
");
}while(Ngay< 0);
do{
printf("Nhap Thang= ");
scanf("%d", &Thang);
if(Thang< 0) printf("Ban nhap Thang sai, xin nhap lai
");
}while(Thang< 0);
do{
printf("Nhap Nam= ");
scanf("%d", &Nam);
if(Nam< 0) printf("Ban nam ngay sai, xin nhap lai
");
}while(Nam< 0);
int kq= thuTuNgay(Ngay, Thang, Nam);
if(kq== 1) printf("Thu 2
");
if(kq== 2) printf("Thu 3
");
if(kq== 3) printf("Thu 4
");
if(kq== 4) printf("Thu 5
");
if(kq== 5) printf("Thu 6
");
if(kq== 6) printf("Thu 7
");
if(kq== 7) printf("chu nhat
");
getch();
}
bool ktNamNhuan(int Nam)
{
if((Nam%400== 0) || (Nam%4== 0 && Nam%100!= 0)) return true;
else return false;
}//kiem tran nam nhuan
int thuTuNgay(int Ngay, int Thang, int Nam)
{
int thuTuNgay= 0,//thu tu ngay trong thang
soTuan= 0,//so tuan
soNgayLe= 0;//so ngay le trong nam
int dem= 0;// tinh so thang da trai qua tinh tu thang 1
switch(Thang){
case 1: thuTuNgay= Ngay;
break;
case 2: thuTuNgay= Ngay+ 31;
break;
case 3: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 60;
}
else thuTuNgay= Ngay+ 59;
break;
case 4: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 91;
}
else thuTuNgay= Ngay+ 90;
break;
case 5: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 121;
}
else thuTuNgay= Ngay+ 120;
break;
case 6: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 152;
}
else thuTuNgay= Ngay+ 151;
break;
case 7: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 182;
}
else thuTuNgay= Ngay+ 181;
break;
case 8: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 213;
}
else thuTuNgay= Ngay+ 212;
break;
case 9: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 244;
}
else thuTuNgay= Ngay+ 243;
break;
case 10: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 274;
}
else thuTuNgay= Ngay+ 273;
break;
case 11: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 305;
}
else thuTuNgay= Ngay+ 304;
break;
default: if(ktNamNhuan(Nam)== true){
thuTuNgay= Ngay+ 335;
}
else thuTuNgay= Ngay+ 334;
break;
}//end switch()
for(int i= 1; i< Thang; i++){
if(i<= Thang) dem++;
}
soTuan= dem*4;
soNgayLe= (thuTuNgay-(soTuan*7))% 7;
return soNgayLe;
}//ham tinh so ngay le de xet thu may
Bài liên quan
Có một cách ngắn gọn, tham khảo ở đây nhé
stackoverflow.com
Correctness of Sakamoto's algorithm to find the day of week
Em up lỗi lên anh xem cho
nó chạy bình thường anh ạ, nhưng mà kết quả sai thôi ạ, em suy nghĩ thì nó đúng rồi mà chạy xong đáng ra là chủ nhật nó lại cho ra là thứ 5
Em chưa dc dung mảng cho bài tập này ạ,
Nhưng cũng cảm ơn anh nhiều vì đã quan tâm ạ