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
X viết 21:08 ngày 30/09/2018

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

stackoverflow.com
Nemo

Correctness of Sakamoto's algorithm to find the day of week

c, algorithm, dayofweek, correctness
answered by Nemo on 12:46PM - 17 Jun 11

Đỗ Trung Quân viết 20:59 ngày 30/09/2018

Em up lỗi lên anh xem cho

Hồ Sỹ Kiên viết 21:05 ngày 30/09/2018

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

Hồ Sỹ Kiên viết 21:05 ngày 30/09/2018

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 ạ

Bài liên quan
0