Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Lập trình C | Tính ngày hôm kia của năm trên C?

  1. #1
    Ngày gia nhập
    03 2009
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    58

    Mặc định Lập trình C | Tính ngày hôm kia của năm trên C?

    Mình đã có code nhưng ko hiểu sao nó lại ko sử dụng hàm tinhngayhomkia. ..........Mong mọi người chỉ ra cho bí.Thank
    Code:
    #include <stdio.h>
    #include<conio.h>
    int TinhSoNgayTrongThang(int th, int nm);
    void KiemTraNgayHopLe(int ng, int th, int nm);
    void XuatNgayHomKia(int ng, int th, int nm);
    
    void main()
    {
    	int ng, th, nm;
    
    	printf("Nhap ngay, thang, nam: ");
    	scanf("%d%d%d", &ng, &th, &nm);
    	KiemTraNgayHopLe(ng, th, nm);
    	int songay = TinhSoNgayTrongThang(th, nm);
    	printf("Thang nay co %d ngay\n", songay);	
    	void XuatNgayHomKia(int ng, int th, int nm);
    	getch();
    }
    
    int TinhSoNgayTrongThang(int th, int nm)
    {
    	int songay;
    
    	switch (th)
    	{
    	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 (nm%400==0 || (nm%4==0 && nm%100!=0))
    			songay = 29;
    		else
    			songay = 28;
    	}
    
    	return songay;
    }
    
    void KiemTraNgayHopLe(int ng, int th, int nm)
    {
    	if(ng>31||ng<1)
    	{
    		printf("Ngay da nhap ko hop le.\n");
    	}
    	else
    	{
    		printf("Ngay nhap hop le.\n");
    	}
    	if(th<1||th>12)
    	{
    		printf("Thang da nhap ko hop le.\n");
    	}
    	else
    	{
    		printf("Thang nhap hop le.\n");
    	}
    }
    
    void XuatNgayHomKia(int ng, int th, int nm)
    {
    	if (ng > 2)
    		ng = ng - 2;
    	else // ng == 1 || ng == 2
    	{
    		// Tim thang truoc do
    		if (th > 1)
    			th = th - 1;
    		else // th == 1
    		{
    			th = 12;
    			nm = nm - 1;
    		}
    		if (ng == 1)
    			ng = TinhSoNgayTrongThang(th, nm) - 1;
    		else // ng == 2
    			ng = TinhSoNgayTrongThang(th, nm);
    	}
    
    	printf("Ngay hom kia la %d/%d/%d\n", ng, th, nm);
    }

  2. #2
    Ngày gia nhập
    02 2009
    Bài viết
    56

    cái này là code gì vậy bạn có thể rõ cái đề cho mình dc ko

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    58

    Bài này là bài nhập vào ngày tháng năm in ra ngày hôm kia vd: nhập ngày 3 tháng 3 năm 2009 in ra ngày 1 tháng 3 năm 2009.

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    58

    Mình đã tìm được chỗ sai.Nhưng ko hiểu tại sao làm như vậy lại sai
    Code:
    #include <stdio.h>
    #include<conio.h>
    int TinhSoNgayTrongThang(int th, int nm);
    void KiemTraNgayHopLe(int ng, int th, int nm);
    void XuatNgayHomKia(int ng, int th, int nm);
    
    
    
    int TinhSoNgayTrongThang(int th, int nm)
    {
    	int songay;
    
    	switch (th)
    	{
    	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 (nm%400==0 || (nm%4==0 && nm%100!=0))
    			songay = 29;
    		else
    			songay = 28;
    	}
    
    	return songay;
    }
    
    void KiemTraNgayHopLe(int ng, int th, int nm)
    {
    	if(ng>31||ng<1)
    	{
    		printf("Ngay da nhap ko hop le.\n");
    	}
    	else
    	{
    		printf("Ngay nhap hop le.\n");
    	}
    	if(th<1||th>12)
    	{
    		printf("Thang da nhap ko hop le.\n");
    	}
    	else
    	{
    		printf("Thang nhap hop le.\n");
    	}
    }
    
    void XuatNgayHomKia(int ng, int th, int nm)
    {
    	if (ng > 2)
    		ng = ng - 2;
    	else // ng == 1 || ng == 2
    	{
    		// Tim thang truoc do
    		if (th > 1)
    			th = th - 1;
    		else // th == 1
    		{
    			th = 12;
    			nm = nm - 1;
    		}
    		if (ng == 1)
    			ng = TinhSoNgayTrongThang(th, nm) - 1;
    		else // ng == 2
    			ng = TinhSoNgayTrongThang(th, nm);
    	}
    
    	printf("Ngay hom kia la %d/%d/%d\n", ng, th, nm);
    }
    void main()
    {
    	int ng, th, nm;
    
    	printf("Nhap ngay, thang, nam: ");
    	scanf("%d%d%d", &ng, &th, &nm);
    	KiemTraNgayHopLe(ng, th, nm);
    	int songay = TinhSoNgayTrongThang(th, nm);
    	printf("Thang nay co %d ngay\n", songay);
    	XuatNgayHomKia(ng,th,nm);//ở bài trước mình khai XuatNgayHomKia(int ng,int th,int nm);
    	getch();
    }
    Tại sao khai XuatNgayHomKia(int ng,int th,int nm); ở hàm main thì lại sai.Xin cảm ơn

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Mình đã copy đoạn mã của bạn chạy thử vẫn ok mà. mình chỉ thay void bằng int. Mình dùng dev-c++.
    Đã được chỉnh sửa lần cuối bởi naruto : 09-05-2009 lúc 07:50 PM. Lý do: thiếu

  6. #6
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Mặc định Lập trình C | Tính ngày hôm kia của năm trên C?

    Tại sao khai XuatNgayHomKia(int ng,int th,int nm); ở hàm main thì lại sai.Xin cảm ơn
    Bạn dùng dạng khai báo làm gì? Bạn chỉ cần truyền giá tri vào thôi.
    Mà nó sai thế nào? Mình chưa làm như bạn bao giờ nên không biết. bạn có thể nói rõ xem nó sai thế nào.

  7. #7
    Ngày gia nhập
    03 2009
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    58

    Chào trungkien45 lúc đầu mình có thắc mắc là vì mình đã viết đúng hàm void XuatNgayHomKia(int ng, int th, int nm); nhưng ở hàm main mình gọi lại hàm này thì lại ko xuất ra kết quả ... Phân vân quá nên mình đã bỏ thử các khai báo kiểu dữ liệu int hàm ở trong void main() lúc này mình gọi lại có dạng void XuatNgayHomKia(ng, th, nm); Thì chương trình xuất ra kết quả đúng.Ở đây mình muốn hỏi các bạn tại sao lại như vậy.Hi Hi tớ chỉ mới chơi với C hơn 2 tháng này thôi.Còn khá mập mờ...Cảm ơn các cậu.

  8. #8
    Ngày gia nhập
    02 2009
    Bài viết
    56

    tôi nghỉ nếu
    khai báo ở bài trước mình khai void XuatNgayHomKia(int ng,int th,int nm);
    thì nó nghỉ là bạn đang khai báo 1 hàm mới .Vì nếu bạn bỏ void thì nó sẽ báo lỗi vì bạn chưa có kiểu cho hàm(Tôi nghỉ vậy thôi)
    Cứu pháp lúc gọi hàm là tenham(các tham số thực)

  9. #9
    Ngày gia nhập
    03 2009
    Nơi ở
    Ho Chi Minh City, Vietnam, Vietnam
    Bài viết
    58

    Trích dẫn Nguyên bản được gửi bởi trungkien45 Xem bài viết
    Bạn dùng dạng khai báo làm gì? Bạn chỉ cần truyền giá tri vào thôi.
    Mà nó sai thế nào? Mình chưa làm như bạn bao giờ nên không biết. bạn có thể nói rõ xem nó sai thế nào.
    Mình nghĩ bạn trungkien45 nói đúng ở hàm voidmain mình muốn sử dụng lại hàm trên thì mình chỉ cần truyền giá trị vào thôi.Việc khai báo lại hàm là sai mà mình vẫn chưa hiểu tại sai sao cả.Mong rằng theo dòng thời gian mình sẽ tìm ra và trả lời ở topic này. .
    Thân!!!

  10. #10
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Cái j` chẳng vậy? Khai báo thì chỉ khai báo 1 làn thôi chứ.
    Hơn nữa khai báo hàm thì phải khai báo ngoài main(). Trong main() chỉ gọi hàm đó và truyền giá trị thui.
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

Các đề tài tương tự

  1. Định dạng ngày tháng năm trên C#
    Gửi bởi xuantruongbn trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 12
    Bài viết cuối: 31-10-2013, 04:31 PM
  2. Đồng năm xu trên đường
    Gửi bởi zstar trong diễn đàn Giải trí - Thư giãn
    Trả lời: 1
    Bài viết cuối: 27-10-2011, 12:18 PM
  3. Bài tập C++ Kiểm Tra tính hợp lệ của ngày tháng năm trên C++?
    Gửi bởi gvkatashi01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 17-09-2010, 11:48 AM
  4. Xử lý ngày tháng năm trên Textbox
    Gửi bởi quoccd trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 09-09-2008, 08:23 AM
  5. đề thi học kì 1 năm thứ nhất trên trường đại học
    Gửi bởi jacking_nguyen1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 19-01-2008, 09:38 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn