• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Cuộc thi] Kỹ năng lập trình - Kì 1

Các đề tài, cuộc thi, chủ đề chung của diễn đàn

Điều hành viên: Điều hành

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

[Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » CN 08/08/2010 1:21 pm

Chào các bạn,

Nhằm giúp làm sôi động thêm diễn đàn và góp phần giúp các bạn nâng cao kỹ năng lập trình cho các thành viên Câu lạc bộ VB, đặc biệt là VB.NET, 2 mod của box VB.NET & C# là vo_minhdat2007 và Uzamaki Naruto quyết định mở một loạt các chủ đề về lập trình.

Mục đích: Giúp thành viên vận dụng kiến thức lập trình của mình để giải quyết những vấn đề thực tế do đề bài đưa ra, từ đó nâng cao kĩ năng.
Đối tượng: Tất cả thành viên diễn đàn, trừ BQT (Admin, SMOD, MOD). Advance Member được quyền tham gia. Tuy nhiên, Admin, SMOD, MOD vẫn có thể gửi đáp án để làm cơ sở nhận xét. Advance Member được tham gia, nhưng nếu có kết quả hòa giữa Advance Member và thành viên thường thì sẽ ưu tiên cho thành viên.
Quy định:
- Mỗi tuần sẽ có 1 topic được mở ra, đưa ra đề bài, đưa lên mục chú ý và tạm khóa topic.
- Các bài giải sẽ được gửi cho MOD vo_minhdat2007 trong 5 ngày kể từ ngày đưa lên (nếu đăng vào buổi tối thì sẽ được tính thêm 1 ngày) bằng chức năng nhắn tin của diễn đàn hoặc email vo_minhdat2007@yahoo.com.vn . Mục đích là để các bạn tự suy nghĩ ra cách giải tốt nhất đối với mình.
- Sau 5 ngày, topic sẽ được mở khóa, MOD sẽ đưa các bài giải của các bạn lên và nhận xét, chấm điểm và xếp hạng. Các bạn sẽ tiếp tục thảo luận nếu có giải pháp hay hơn, hoặc đưa ra các nhận xét. Vài ngày sau thì bắt đầu kì mới. Các giải pháp mới vẫn được chấp nhận.
- Chú ý: Trong phần tính điểm có tính cả điểm xử lí tình huống lỗi, kể cả lỗi dữ liệu đầu vào!

Đáp án:
Mỗi đề bài đưa ra sẽ bao gồm yêu cầu, kèm theo 1 form mẫu (ở đây dùng VS2008, các bạn dùng bản cũ hơn thì xem cách downgrade ở topic Chú ý còn lại) nếu các bạn không muốn thiết kế lại form. Khi gửi đáp án các bạn có 2 cách:
- Gửi cả project qua email hoặc chức năng nhắn tin (đã ghi ở mục trên).
- Chỉ gửi code bằng chức năng nhắn tin của diễn đàn, code được cho vào thẻ code tương ứng, và phải chạy được khi mình copy vào form mẫu đã post.

Giải thưởng:
Hiện tại do chưa có tài trợ nên mình rất tiếc không thể có giải thưởng cho các bạn, nhưng mục đích chính là để nâng cao kỹ năng xử lí tình huống thực tế, nên mong các bạn tham gia cho vui :)



KÌ 1


Tình huống:
Chà, bây giờ nếu online thì chắc các bạn gặp rất nhiều trang web cho phép tạo các chữ ngược đúng không? Ví dụ như nhập vào "VB Club" thì sẽ đưa ra "qnןɔ qʌ". Thực ra là do trong bảng mã Unicode có đầy đủ các kí tự viết ngược của chúng, và mình đã tìm ra, tương ứng từ "a" đến "z" như sau:

Mã: Chọn hết

z ʎ x ʍ ʌ n ʇ s ɹ b d o u ɯ ן ʞ ظ ı ɥ b ɟ ǝ p ɔ q ɐ
592,113,596,112,477,607,98,613,305,1592,670,1503,623,117,111,100,98,633,115,647,110,652,653,120,654,122


untitled.JPG
untitled.JPG (15.49 KiB) Đã xem 8793 lần


Yêu cầu thế này nhé: Người dùng nhập vào ô Dữ liệu vào, và chúng ta sẽ xuất ra các kí tự đảo dọc như vậy, nhưng ra 2 ô textbox, 1 ô đảo ngang và 1 ô không đảo. Chỉ đảo các kí tự từ "a" đến "z", các kí tự in (nhưng vẫn thuộc từ "A" đến "Z") thì chuyển thành chữ thường. Các kí tự khác thì giữ nguyên (vẫn đảo ngang). Thực hiện những việc này đồng thời với user, user gõ đến đâu thì mình thể hiện đến đấy. Ví dụ:

Tập tin đính kèm untitled.JPG hiện tại không còn trên máy chủ


Yêu cầu để đạt điểm tối đa: Hạn chế đến mức thấp nhất số lượng biến (trừ biến lưu tạm để làm ngắn code, nghĩa là không dùng biến đó cũng có thể thay thế được) và vòng lặp. Dữ liệu ra bắt buộc chính xác từng kí tự.

Gợi ý: Sử dụng 2 hàm ChrW và AscW. Ngoài ra, các bạn nên dùng AscW("A") thay vì dùng 65, nhưng mình không bắt buộc phần này.



ĐÁP ÁN


Nhìn chung, với đề bài này thì tất cả các chương trình mà các bạn dự thi đều đưa ra kết quả chính xác, do không có bẫy hay trường hợp suy biến. Vì vậy mà lần này, điểm số chênh lệch chủ yếu ở mức chịu đựng dữ liệu lớn mà thôi ;) . Ngoài ra, các bạn biết sử dụng những cách ngắn gọn và đơn giản nhất sẽ được điểm cao hơn.

Bài giải:

Lần này, mình bổ sung thêm form đáp án một chút, là giải theo 2 phương pháp (tùy người dùng chọn Option Box), phương pháp số 1 sử dụng vòng lặp For, duyệt từng kí tự: không thể chịu nổi bộ test lớn. Còn phương pháp 1 thì khá thoải mái ;)

  1. Public Class Form1
  2.  
  3.     Dim Chars() As Integer = {592, 113, 596, 112, 477, 607, 98, 613, 305, 1592, 670, 1503, 623, 117, 111, 100, 98, 633, 115, 647, 110, 652, 653, 120, 654, 122}
  4.  
  5.     Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
  6.         Const A As Integer = AscW("A")
  7.         Const Z As Integer = AscW("Z")
  8.         Const _a As Integer = AscW("a")
  9.         Const _z As Integer = AscW("z")
  10.  
  11.         txtOutput.Text = ""
  12.         txtROutput.Text = ""
  13.  
  14.         If optPP1.Checked Then
  15.             For i As Integer = 0 To txtInput.Text.Length - 1
  16.                 Dim C As Integer = AscW(txtInput.Text(i))
  17.                 If C >= A AndAlso C <= Z Then C += _a - A
  18.                 If C >= _a AndAlso C <= _z Then C = Chars(C - _a)
  19.  
  20.                 txtOutput.Text &= ChrW(C)
  21.             Next
  22.             txtROutput.Text = StrReverse(txtOutput.Text)
  23.  
  24.         Else
  25.             Dim St As String = txtInput.Text
  26.  
  27.             For i As Integer = A To Z
  28.                 St = St.Replace(ChrW(i), ChrW(i + (_a - A)))
  29.                 St = St.Replace(ChrW(i + (_a - A)), ChrW(Chars(i - A)))
  30.             Next
  31.  
  32.             txtOutput.Text = St
  33.             txtROutput.Text = StrReverse(St)
  34.         End If
  35.        
  36.     End Sub
  37.  
  38. End Class
  39.  


Bộ test:

1. "///;;;ABCdefGHI;;;..."
2. 5.000 kí tự "A"
3. "qwer;;..qwer" và 5.000 kí tự "A" và "qwer;;..qwer"

Xếp hạng:

1. NovaFooc 9/10
2. T7 9/10
3. minhduc4477 8/10
4. vuathongtin 5/10
5. luungocqua 3/10
Tập tin đính kèm
untitled_1.JPG
untitled_1.JPG (12.21 KiB) Đã xem 8793 lần
Sửa lần cuối bởi vo_minhdat2007 vào ngày CN 22/08/2010 7:34 pm với 1 lần sửa.



Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi lungocqua » T.Hai 09/08/2010 3:38 pm

Cái này dùng Font cho mấy ô TextBox là Lucida Sans Unicode ngoài Font này còn Font nào khác được nữa không? :-/
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 09/08/2010 3:47 pm

Cứ dùng Font mặc định là OK!

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi lungocqua » T.Hai 09/08/2010 3:49 pm

Sao dùng Font mặc định máy mình nó hiện dấu gạch màu đen đen là sao? :-/
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 09/08/2010 3:58 pm

"ɐ", "q", "ɔ", "p", "ǝ", "ɟ", "b", "ɥ", "ı", "ظ", "ʞ", "ן", "ɯ", "u", "o", "d", "b", "ɹ", "s", "ʇ", "n", "ʌ", "ʍ", "x", "ʎ", "z"

Đây này, font Unicode là nó hỗ trợ thôi!

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vuathongtin » T.Hai 09/08/2010 4:02 pm

Sao trong quy định ko thấy đề cập đến số lần gửi bài giải thế ? Nếu lần 1 đã gửi rùi nhưng sau đó lại có ý tưởng giải hay hơn thì có đc phép nộp lại bài giải khác đc hok ? :)
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 09/08/2010 4:09 pm

OK, lấy kết quả lần gửi cuối :D Sẽ bổ sung ở kì tới. Cảm ơn đã góp ý :D

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi lungocqua » T.Hai 09/08/2010 4:24 pm

Đây nè!
Ở trên là font mặc định còn ở dưới là cái Font khác. Sau nó hiện như vậy thì sao mà mình làm được. :(
Hình ảnh
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vuathongtin » T.Hai 09/08/2010 4:40 pm

Mình dùng font mặc định Microsoft Sans Serif đâu thấy có lỗi j.
Hình ảnh
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi lungocqua » T.Hai 09/08/2010 5:00 pm

Sao kì vậy ta? Paste vào Notepad, WordPad thì có hình vuông bên. Còn paste vào TextBox thì có hình dấu gạch đen đen đó. Mỉnh cũng dùng font Microsoft Sans Serif mà. Ôi! chán! [-(
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 09/08/2010 8:24 pm

Vào Regional & Language Options, qua thẻ Language đánh thêm 2 dấu check xem sao?

Hình đại diện của người dùng
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 94
Ngày tham gia: T.Sáu 11/12/2009 2:15 pm
Been thanked: 1 time

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi minhduc4477 » T.Ba 10/08/2010 5:07 pm

Ngay cả cái đề thì nhìn cũng hok rõ thì làm seo làm???
Hình ảnh
Tình yêu là vĩnh cữu, chỉ có người tình là thay đỗi.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 10/08/2010 8:18 pm

À, các bạn nên dùng Firefox nhé ;) Mình nghe nói IE và Google Chrome có vấn đề với hiển thị các kí tự này :-?

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 10/08/2010 8:28 pm

Bài của bạn vuathongtin:

Code:

  1. Public Class Form1
  2.  
  3.     Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
  4.         txtOutput.Text = ""
  5.         txtROutput.Text = ""
  6.         DaoNguocKiTu()
  7.         txtROutput.Text = StrReverse(txtOutput.Text)
  8.     End Sub
  9.  
  10.     Sub DaoNguocKiTu()
  11.         Dim str As String = txtInput.Text
  12.         Dim kt As String
  13.         Dim lst_ktcu As New List(Of String)
  14.         Dim lst_ktmoi As New List(Of String)
  15.  
  16.         lst_ktcu.AddRange(New String() {"a", "b", "c", "d", "e", "f", "g", "h", "i", "g", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", ",", "'", ";", "/", "\", ">", "<", "!", "(", ")"})
  17.         lst_ktmoi.AddRange(New String() {"ɐ", "q", "ɔ", "p", "ǝ", "ɟ", "b", "ɥ", "ı", "ظ", "ʞ", "ן", "ɯ", "u", "o", "d", "b", "ɹ", "s", "ʇ", "n", "ʌ", "ʍ", "x", "ʎ", "z", "'", ",", "؛", "\", "/", "<", ">", "¡", ")", "("})
  18.  
  19.         For i As Integer = 0 To str.Length - 1
  20.             If lst_ktcu.Contains(LCase(str.Substring(i, 1))) Or lst_ktcu.Contains(str.Substring(i, 1)) Then
  21.                 kt = LCase(str.Substring(i, 1))
  22.                 If lst_ktcu.IndexOf(kt) <> -1 Then Mid(str, i + 1, 1) = kt.Replace(lst_ktcu.Item((lst_ktcu.IndexOf(kt))), lst_ktmoi.Item((lst_ktcu.IndexOf(kt))))
  23.                 txtOutput.Text += Mid(str, i + 1, 1)
  24.             Else
  25.                 txtOutput.Text += Mid(str, i + 1, 1)
  26.             End If
  27.         Next
  28.     End Sub
  29.  
  30.     'Code Cua Vuathongtin - 8_8_2010'
  31. End Class


Nhận xét:

Code của bạn vừa thủ công mà lại vừa phức tạp và không chịu nổi những test nặng.

Điểm: 5/10.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 10/08/2010 8:28 pm

Bài của Advance Member T7:

Code:

  1. Public Class Form1
  2.     Dim a() As Integer = {592, 113, 596, 112, 477, 607, 98, 613, 305, 1592, 670, 1503, 623, 117, 111, 100, 98, 633, 115, 647, 110, 652, 653, 120, 654, 122}
  3.  
  4.     Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
  5.         Dim i As Long, s() As Char
  6.         txtOutput.Text = txtInput.Text
  7.         For i = 0 To 25 'a..z to A..Z
  8.             txtOutput.Text = txtOutput.Text.Replace(ChrW(i + 97), ChrW(i + 65))
  9.         Next
  10.         For i = 0 To 25
  11.             txtOutput.Text = txtOutput.Text.Replace(ChrW(i + 65), ChrW(a(i)))
  12.         Next
  13.         s = txtOutput.Text.ToCharArray
  14.         Array.Reverse(s)
  15.         txtROutput.Text = s
  16.     End Sub
  17.  
  18. End Class


Nhận xét:

Code của bạn khá ngắn và đơn giản, nhìn chung ý tưởng rất giống bài giải của mình, mặc dù vậy, tốc độ chạy của T7 lại tệ hơn do sử dụng Array.Reverse! Nếu không tin bạn hãy thử test với bài giải của mình nhé ;)

Điểm: 9/10.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 10/08/2010 8:28 pm

Bài của bạn NovaFooc:

Code:

  1. Public Class Form1
  2.  
  3.     Const normal As String = "zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"
  4.     Const fliped As String = "zʎxʍʌnʇsɹbdouɯlʞɾıɥɓɟǝpɔqɐzʎxʍʌnʇsɹbdouɯlʞɾıɥɓɟǝpɔqɐ"
  5.  
  6.     Dim ac() As Char, i As Integer
  7.  
  8.     Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
  9.         ac = txtInput.Text.ToCharArray
  10.  
  11.         For j As Integer = 0 To ac.Length - 1
  12.             i = normal.IndexOf(ac(j))
  13.             If i > -1 Then ac(j) = fliped(i)
  14.         Next
  15.  
  16.         txtOutput.Text = New String(ac)
  17.         Array.Reverse(ac)
  18.         txtROutput.Text = New String(ac)
  19.     End Sub
  20.  
  21. End Class


Nhận xét:


Code của bạn khá ngắn và đơn giản, nhìn chung ý tưởng rất giống bài giải của mình, mặc dù vậy, tốc độ chạy của bạn NovaFooc lại tệ hơn chương trình mẫu! Nếu không tin bạn hãy thử test với bài giải của mình nhé ;)

Điểm: 9/10.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 10/08/2010 8:28 pm

Bài của bạn minhduc4477:

Code:

  1. Public Class Form1
  2.  
  3.     Private ChuoiThuong(25) As String
  4.     Private ChuoiHoa(25) As String
  5.     Private ChuoiDaoNguoc(25) As String
  6.  
  7.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.  
  9.         Dim Temp() As String = Split("592,113,596,112,477,607,98,613,305,1592,670,1503,623,117,111,100,98,633,115,647,110,652,653,120,654,122", ",")
  10.         For i = 0 To 25
  11.             ChuoiThuong(i) = ChrW(97 + i)
  12.             ChuoiHoa(i) = ChrW(65 + i)
  13.             ChuoiDaoNguoc(i) = ChrW(temp(i))
  14.         Next
  15.     End Sub
  16.  
  17.     Private Function ChuyenDoi(ByVal Str As String, Optional ByVal DaoNgang As Boolean = True)
  18.  
  19.         If Str.Length = 0 Then Return vbNullString
  20.  
  21.         For i As Integer = 0 To 25
  22.             Str = Replace(Str, ChuoiThuong(i),ChuoiDaoNguoc(i))
  23.             Str = Replace(Str, ChuoiHoa(i), ChuoiThuong(i))
  24.         Next
  25.  
  26.         If DaoNgang Then
  27.             Dim temp2 As String
  28.             For i = 0 To Str.Length - 1
  29.                 temp2 += Str.Substring(Str.Length - 1 - i, 1)
  30.             Next
  31.             Str = temp2
  32.         End If
  33.  
  34.         ChuyenDoi = Str
  35.     End Function
  36.  
  37.     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  38.         TextBox2.Text = ChuyenDoi(TextBox1.Text, False)
  39.         TextBox3.Text = ChuyenDoi(TextBox1.Text)
  40.     End Sub
  41. End Class


Nhận xét:

Dù giống nhau về ý tưởng làm bài, nhưng kĩ thuật viết code của bạn chưa thực sự tốt lắm. Bạn đảo ngược chuỗi bằng tay nên nhìn chung, tốc độ không cao lắm. Ngoài ra, không hiểu sao bạn phải dùng kiểu chuỗi cho dữ liệu mình cho sẵn, rồi lại dùgn Split?

Điểm: 8/10.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Tư 11/08/2010 8:41 pm

Bài cua bạn luungocqua:

Code:

  1. Public Class Form1
  2.     Dim Mau As New Dictionary(Of Char, Integer), kq1 As String = "", kq2 As String = ""
  3.  
  4.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.         Mau.Add("a", 592)
  6.         Mau.Add("b", 113)
  7.         Mau.Add("c", 596)
  8.         Mau.Add("d", 112)
  9.         Mau.Add("e", 477)
  10.         Mau.Add("f", 607)
  11.         Mau.Add("g", 98)
  12.         Mau.Add("h", 613)
  13.         Mau.Add("i", 305)
  14.         Mau.Add("j", 1592)
  15.         Mau.Add("k", 670)
  16.         Mau.Add("l", 1503)
  17.         Mau.Add("m", 623)
  18.         Mau.Add("n", 117)
  19.         Mau.Add("o", 111)
  20.         Mau.Add("p", 100)
  21.         Mau.Add("q", 98)
  22.         Mau.Add("r", 633)
  23.         Mau.Add("s", 115)
  24.         Mau.Add("t", 647)
  25.         Mau.Add("u", 110)
  26.         Mau.Add("v", 652)
  27.         Mau.Add("w", 653)
  28.         Mau.Add("x", 120)
  29.         Mau.Add("y", 654)
  30.         Mau.Add("z", 122)
  31.  
  32.     End Sub
  33.  
  34.     Private Sub txtInput_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtInput.TextChanged
  35.         kq1 = ""
  36.         kq2 = ""
  37.         With Me
  38.             .txtOutput.Text = ""
  39.             .txtROutput.Text = ""
  40.             For i As Integer = 0 To .txtInput.Text.Length - 1
  41.                 Dim kt As Integer = Strings.AscW(.txtInput.Text(i).ToString.ToLower)
  42.                 'Xét kí tự thường.
  43.                 If kt >= 97 AndAlso kt <= 122 Then
  44.                     'Xuất ra ô kq1.
  45.                     kq1 = kq1 & Strings.ChrW(Mau(.txtInput.Text(i).ToString.ToLower))
  46.                     .txtOutput.Text = kq1
  47.                 Else
  48.                     'Xuất ra ô kq1.
  49.                     kq1 = kq1 & .txtInput.Text(i)
  50.                     .txtOutput.Text = kq1
  51.                 End If
  52.             Next
  53.             'Ngược đảo kq1 & xuất ra kq2.
  54.             For i As Integer = 0 To .txtOutput.Text.Length - 1
  55.                 kq2 = kq2 & .txtOutput.Text(.txtOutput.Text.Length - 1 - i)
  56.             Next
  57.             .txtROutput.Text = kq2
  58.         End With
  59.     End Sub
  60. End Class


Nhận xét:

Phải nói mình rất khâm phục... sự chăm chỉ của bạn. Giả sử mình không cho 26 kí tự nữa, mà là 100 hay 1000 kí tự thì sao? Thêm nữa là bạn xử lí từng kí tự, nên chương trình không thể chịu nổi bộ test nặng. Cần cố gắng hơn ở lần sau. Ngoài ra, code bạn thừa cấu trúc With Me, điều này hoàn toàn không cần thiết!

Điểm: 3/10.

NovaFooc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 307
Ngày tham gia: T.Ba 11/08/2009 3:27 pm

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi NovaFooc » T.Bảy 14/08/2010 7:37 pm

sao dạo này cả 2 topic im lặng thế nhở :-?

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 1

Gửi bàigửi bởi vo_minhdat2007 » T.Bảy 14/08/2010 8:00 pm

Mình đang chấm bạn à, vì mình vào học rồi nên hơi bận, các bạn thông cảm!


Quay về “Đề tài chung”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách