Chuyển đổi thời gian định dạng 12 giờ thành định dạng 24 giờ bằng C

@Hoang_Tung_Lam: Có chỗ nộp bài không bạn?

2 Likes

define nó chỉ là macros, khai báo lệnh in ra màn hình này nọ vẫn phải kèm dấu ;
ví dụ muốn in cout

#define p(x) cout << x; // không có ; thì compiler nó thay code vào macros sẽ báo lỗi
1 Like

Hm, đang tìm cách khai báo một mảng char không ; và thay đổi phần tử của nó cũng không cần ;. Còn printf thì đơn giản rồi

2 Likes

Nếu bạn tự viết compiler mới thì chắc là pass, chứ đã C thì buộc phải có ;

2 Likes

Thằng bạn mình hình như nó pass bài này rồi. Nên giờ mình mới tìm. Bạn này đang hỏi mức khó nhất được 1.5 điểm.
Đề đây mà
https://drive.google.com/file/d/0B_s3E_YllMagMnRHLWprUW5RZEU/view

3 Likes

Bài giải bài này là 108 kí tự thì phải :smile: biết vậy thôi

2 Likes

Phải làm bằng C bạn ạ :frowning:

@sueruan012 Không có bạn ạ :v:

Có ai biết xử lí ngày giờ không nhỉ?

3 Likes

Code với 2 dấu ;: http://ideone.com/DXwEUP, 248 char (hơi gà)

Cứ đặt cái define vào, nếu cần dùng thì dùng =))

2 Likes

Cái phần chuyển đổi giờ đang thua

2 Likes

Thử nhồi hết lệnh vào if (), phân tách bằng dấu ‘,’ :smiley:

3 Likes

Nhờ @MeigyokuThmn mình đã rút thêm được 1 dấu ; nữa =)) thanks :smile:

1 ;, 241 225 chars
Mới update code. 2 ;, 151 150 chars

1 Like

Code trên điện thoại nên không đếm kí tự được
(đoạn 12:00:00 lười không code nữa :)))


#include <stdio.h>

int main(int c, char a[]){
    if(scanf("%d:",&c),gets(a))
        if(
            a[6]=='P'&&c<12?c+=12:1,
            a[5]='\0',
            printf("%d:%s",c,a)
        ){}
}

Tks @sueruan012 với @MeigyokuThmn gợi ý mấy chỗ quan trọng

2 Likes

có thể bỏ một if đi không?

2 Likes

À ừ nhỉ, bỏ được, cứ nghĩ nó trong if nên chưa có giá trị nên mới tách ra


#include<stdio.h>
int main(int c,char a[]){
    if(
        scanf("%d:",&c),
        gets(a),
        a[6]=='P'&&c<12?c+=12:1,
        a[5]='\0',
        printf("%d:%s",c,a)
    ){}
}
2 Likes

Tks @Dark.Hades =)) vì chi tiết đưa biến vào argv của main =))

Code mình (124 chars):

#include<stdio.h>
char s[10],m[3];
int main(int H){
	if(scanf("%d:%s%s",&H,&s,&m)==3,printf("%d:%s",H+12*(m[0]=='P'),s)){}
}

Sao @Dark.Hades đưa char a[] vào argv của main được nhỉ, mình không quen viết C lắm @@

2 Likes

Nó là biến nhận giá trị ở lúc khởi tạo runtime.
Mình không nhầm thì chương trình/ngôn ngữ nào cũng có cái này, tiếng anh là argument thì phải:

./p.exe --help
c=2 // count của arg
a[0]=p.exe
a[1]=--help
2 Likes

Quả đề oái oăm thật :3, làm cái này thì không biết có tác dụng gì nhỉ, em thấy code của bác @sueruan012 là khó đọc lắm r, cơ mà chân thành cảm ơn các bác @sueruan012, @graktung, @MeigyokuThmn@Dark.Hades đã đóng góp ý kiến để giải bài này. Mặc dù vẫn có 1 dấu chẩm phẩy nhưng em tạm set thành answer đã :3.

p/s: Chắc em cứ truyền thống mà phang cho dễ đọc vậy, chẳng ham hố làm gì đau mắt quá (trình C của em còn cùi, em cũng mới nhập môn thôi) :((

1 Like

Thật ra làm cái này biết cho vui thôi. Hãy nghĩ đơn giản như thế này, nếu điều đó hay ho thì 90% (không phải tuyệt đối nhé) sẽ được chia sẻ lên trên Internet, mọi người được biết :smile:) Vả lại code là cần sự dễ hiểu không chỉ cho bạn mà còn người khác. Code nhiều dòng chưa biết được giỏi hay dỡ và code ít dòng cũng thế.

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