Thứ Năm

[Fit - Hcmus] Phản hồi môn học


Trong bài viết này tôi xin trình bày quan điểm cá nhân về các môn học, giảng viên mà tôi được học ở khoa CNTT, trường ĐH KHTN trong học kì vừa qua.
Học kì đầu tiên chúng tôi được học 3 môn từ khoa CNTT

Môn nhập môn lập trình: đây là môn học tôi thích nhất trong học kì vừa qua. Đây là môn học mở đầu với nghề lập trình đúng như tên gọi của nó nên không quá khó chịu với sinh viên. Rất may mắn ngay môn này chúng tôi được học với thầy trưởng khoa trong môn học này - thầy Trần Đan Thư. Cái mà tôi nhận thấy và yêu mến thầy là sự gần gũi với sinh viên cũng như sự tận tâm với việc giảng dạy. Thầy dạy rất kĩ những phần quan trọng và khuyến khích sinh viên tự tìm hiểu những phần mở rộng. Thầy luôn hướng sinh viên đến sự tỉ mỉ, rõ ràng trong việc trình bày mã nguồn, tối ưu thuật toán, mã nguồn tái sử dụng.
Phần thực hành của môn học của chúng tôi do thầy Đỗ Nguyên Kha phụ trách, thầy là người vui vẻ với sinh viên, mặc dù đôi lúc hơi hời hợt. Bài tập thầy đưa ra vừa tầm với khả năng của sinh viên.

Môn nhập môn CNTT 1: đây là môn học rất hay. Cung cấp cái nhìn tổng quát về ngành CNTT, hướng dẫn cho sinh viên cách sử dụng các phần mềm cơ bản và cần thiết cho công việc. Thầy dạy lí thuyết Trần Thái Sơn là người hiểu biết rất rộng về ngành CNTT, cách giảng bài hiệu quả giúp sinh viên dễ dàng tiếp thu. Cuôi mỗi buổi học thầy luôn cho các từ khóa để sinh viên có thể tự tìm hiểu thêm.
Phần thực hành do thầy Trương Phước Hưng phụ trách. Thầy luôn giới thiệu các kĩ năng cần thiết cho sinh viên từ những việc nhỏ nhặt nhất, luôn đề cao vấn đề bản quyền - đạo đức nghề nghiệp. Tuy nhiên một số một số lần phải nộp deadline ngay trong buổi học làm khó cho sinh viên.

Môn kĩ năng mềm: cũng là một môn học hay từ khoa CNTT.
(updating)

Thứ Ba

Suy nghĩ về Latex và Microsoft Word


Cái dễ dàng nhận thấy nhất là Word dễ sử dụng hơn Latex rất nhiều. Vì sản phẩm của Microsoft được xây dựng với phương châm "what you see is what you get" nên người dùng có thể thấy sản phẩm của họ ngay trong quá trình soạn thảo còn Latex phải qua công đoạn biên dịch.

Dùng Latex chúng ta sẽ chẳng cần quan tâm đến cách trình bày bởi vì mọi thứ sẽ đã được đặt sẵn từ trước, trong khi dùng Word ta cần phải chú ý tới nhiều thứ hơn như căn lề, tiêu đề, công thức toán, vị trí hình ảnh...

Nhưng không chỉ đơn giản như vậy, mới bắt đầu dùng Latex cá nhân tôi thấy nó khá rắc rối, bởi cách định dạng theo kiểu đánh dấu như HTML, muốn làm được một sản phẩm hoàn chỉnh phải biết nhiều "khá" phức tạp, trong khi đó với Word ta có thể thao tác trực tiếp lên sản phẩm của mình kết hợp với thị giác.
(updating)

Thứ Hai

Giải mã thông điệp

Đề: Viết chương trình hỗ trợ người ra đề phát sinh ra dãy thông điệp đã mã hóa và hỗ trợ người chơi kiểm tra kết quả giải mã.

Tính hàm số F(x)

Đề: Cho hàm F(x), x ≥ 0 được định nghĩa như sau:
   
    F(x) = x, nếu x ≤ 9
    
    F(x) = F(S(x)), nếu x > 9
    
    Trong đó S(x): tổng các chữ số của x.

Yêu cầu: Hãy viết chương trình tính F(n!), với 1 <= n <= 500.

Bài giải: 
Với 1  n ≤ 3 thì n! ≤ 9 => F(n!) = n!
Với  n = 4 thì n! > 9 nên F(n!) = F(S(n!)) = 6
Với  n = 5 thì n! > 9 nên F(n!) = F(S(n!)) = 3
Với  n  6 thì n! > 9 nên F(n!) = F(S(n!))
    Nếu F(n!) > 9 thì F(n!) có giá trị F(S(n!)) cứ như thế cho đến khi F(n!) ≤ 9 
    Ta có n! = 1x2x3x4x5x6x...x(n-1)xn = 6!x..x(n-1)xn
    Vì 6! chia hết cho 9 nên n! cũng chia hết cho 9
    Vì "một số chia hết cho 9 thì có tổng các chữ số chia hết cho 9" F(n!) luôn chia hết cho 9 mà F(n!) ≤ 9 nên F(n!) = 9

Mã nguồn:
  1. #include <stdio.h>
  2. void main()
  3. {
  4. int result, n;
  5. scanf_s("%d",&n);
  6. switch (n)
  7. {
  8. case 0:
  9. result=0;
  10. break;
  11. case 1: case 2: case 3:
  12. result=1;
  13. for (int i=1;i<=n;i++) result*=i;
  14. break;
  15. case 4:
  16. result=6;
  17. break;
  18. case 5:
  19. result=3;
  20. break;
  21. default:
  22. result=9;
  23. break;
  24. }
  25. printf("%d",result);
  26. }


Tính biểu thức Aver

Đề: Tính:
  

Trong đó Max, Min lần lượt là giá trị  lớn nhất, nhỏ nhất của n số  thực (được nhập vào từ thiết bị nhập chuẩn) a0, a1,..., an

Chỉ  dùng duy nhất 1 vòng lặp (for hoặc while), đề  xuất cách thức để  nhập n số  thực như trên  và  tính  giá  trị  của  biểu thức Aver,  xuất  kết  quả  tính  ra  thiết  bị  xuất  chuẩn.  Viết  chương trình để minh họa đề xuất đó.

Lưu ý: Phần này sinh viên chưa học về  mảng, như vậy vấn đề  chính của bài toán này là không thể dùng mảng để lưu giá trị của n số thực nói trên. Như vậy phải đề xuất một giải pháp “thông minh” để nhập và tính toán mà không đưa trước các số thực này vào mảng.

Bài giải: Biến đổi ta được:


                     

                                        
Đặt:

 


Ta có thể tính Sum1 và Sum2 một cách dễ dàng trong quá trình thực hiện vòng lặp nhập ai

Mã nguồn:
  1. #include <stdio.h>
  2. void main()
  3. {
  4. unsigned int n,i;
  5. double Aver,sum1,sum2,max,min,a0;
  6. scanf_s("%d",&n);
  7. scanf_s("%lf",&a0);
  8. max=a0;
  9. min=a0;
  10. sum1=a0*a0;
  11. sum2=a0;
  12. for (i=1;i<=n-1;i++)
  13. {
  14. double ai;
  15. scanf_s("%lf",&ai);
  16. sum1+=ai*ai;
  17. sum2+=ai;
  18. if (ai>max) max=ai;
  19. if (ai<min) min=ai;
  20. }
  21. Aver=2*sum1+1.0*n*(max*max+min*min)-2*(max+min)*sum2
  22. +1.0*n/2*(max-min)*(max-min);
  23. printf("%lf",Aver);
  24. }