Code về ngày tháng bị sai kết quả

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\n");
    }while(Ngay< 0);

    do{
        printf("Nhap Thang= ");
        scanf("%d", &Thang);
        if(Thang< 0) printf("Ban nhap Thang sai, xin nhap lai\n");
    }while(Thang< 0);

    do{
        printf("Nhap Nam= ");
        scanf("%d", &Nam);
        if(Nam< 0) printf("Ban nam ngay sai, xin nhap lai\n");
    }while(Nam< 0);

    int kq= thuTuNgay(Ngay, Thang, Nam);
    
    if(kq== 1) printf("Thu 2\n");
    if(kq== 2) printf("Thu 3\n");
    if(kq== 3) printf("Thu 4\n");
    if(kq== 4) printf("Thu 5\n");
    if(kq== 5) printf("Thu 6\n");
    if(kq== 6) printf("Thu 7\n");
    if(kq== 7) printf("chu nhat\n");

    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

Có một cách ngắn gọn, tham khảo ở đây nhé

1 Like

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 :frowning: 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 ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?