Category: Bài tập nghiên cứu lần 1


Giới thiệu các ngôn ngữ lập trình thông dụng nhất hiện nay.

Đây là danh sách các NNLT, từ những NN đã có cách đây hàng chục năm đến những NN mới xuất hiện gần đây, chủ yếu là các NN tổng quát. Các NN được nhóm theo các tính năng tương đồng. Vì giá trị lịch sử, có một số NN “chết” hay ít được sử dụng hiện diện trong danh sách. Danh sách này có thể chưa đầy đủ.
1. NGÔN NGỮ MÁY dùng các số 0 và 1 để “ra lệnh” cho bộ xử lý. Tập lệnh chỉ tương thích trong cùng họ CPU và rất khó lập trình.

2. NGÔN NGỮ ASSEMBLY gần giống như NN máy nhưng có ưu điểm là tập lệnh dễ đọc . Nói chung mỗi lệnh trong Assembly (như MOV A,B) tương ứng với một lệnh mã máy (như 11001001). Chương trình Assembly được biên dịch trước khi thực thi. Nếu cần tốc độ và kích thước chương trình thật nhỏ, Assembly là giải pháp.

3. C đạt được sự thỏa hiệp giữa việc viết code hiệu quả của Assembly và sự tiện lợi và khả năng chạy trên nhiền nền tảng của NNLT cấp cao có cấu trúc. NN hơn 20 năm tuổi này hiện vẫn được tin dùng trong lĩnh vực lập trình hệ thống. Có các công cụ thương mại và miễn phí cho gần như mọi HĐH.

4. C++ là NN được dùng nhiều nhất hiện nay, đa số phần mềm thương mại được viết bằng C++. Tên của NN có lý do: C++ bao gồm tất cả ưu điểm của C và bổ sung thêm các tính năng hướng đối tượng. Có các công cụ thương mại và miễn phí cho gần như mọi HĐH.

5. C# [phát âm ‘C sharp“] là lời đáp của Microsoft đối với Java. Do không đạt được thỏa thuận với Sun về vấn đề bản quyền, Microsoft đã tạo ra NN với các tính năng tương tự nhưng chỉ chạy trên nền Windows.

6. JAVA là phiên bản C++ được thiết kế lại hợp lý hơn, có khả năng chạy trên nhiều nền tảng; tuy nhiên tốc độ không nhanh bằng C++. Có các công cụ miễn phí và thương mại hỗ trợ cho hầu hết các HĐH hiện nay. Tuy Microsoft đã gỡ bỏ hỗ trợ Java khỏi cài đặt mặc định của các phiên bản Windows mới, nhưng việc bổ sung rất dễ dàng.

7. PASCAL được thiết kế chủ yếu dùng để dạy lập trình, tuy nhiên nó đã trở nên phổ biến bên ngoài lớp học. Pascal yêu cầu tính cấu trúc khá nghiêm ngặt. Có các công cụ thương mại và miễn phí cho DOS, Windows, Mac, OS/2 và các HĐH họ Unix. Trình soạn thảo website BBEdit được viết bằng Pascal.

8. DELPHI là phiên bản hướng đối tượng của Pascal được hãng Borland phát triển cho công cụ phát triển ứng dụng nhanh có cùng tên. Môi trường Delphi được thiết kế để cạnh tranh với Visual Basic của Microsoft, hỗ trợ xây dựng giao diện nhanh bằng cách kéo thả các đối tượng và gắn các hàm chức năng. Khả năng thao tác CSDL là một ưu điểm khác của NN. Borland, có các công cụ thương mại cho Windows và Linux.

9. BASIC [‘Beginner’s All-purpose Symbolic Instruction Code“] là NNLT đầu tiên dùng cho máy vi tính thời kỳ đầu. Các phiên bản hiện đại của BASIC có tính cấu trúc hơn. Có các công cụ thương mại và miễn phí cho DOS, Windows, Mac và các HĐH họ Unix.

10. VISUAL BASIC [phiên bản của Basic cho môi trường đồ hoạ] là NN đa năng của Microsoft. Nó bao gồm BASIC, NN macro của Microsoft Office (VBA – Visual Basic for Application), và công cụ phát triển ứng dụng nhanh. Tiếc là ứng dụng VB chỉ có thể chạy trên Windows và bạn bị lệ thuộc vào những chính sách thay đổi của Microsoft. (Chương trình viết bằng VB 6 hay các phiên bản trước sẽ không hoàn toàn tương thích với VB.NET)

11. ADA phần lớn dựa trên Pascal, đây là một dự án của Bộ Quốc Phòng Mỹ. ADA có nhiều điểm mạnh, như cơ chế kiểm soát lỗi, dễ bảo trì và sửa đổi chương trình. Phiên bản hiện thời có cả các tính năng hướng đối tượng.

12. ICON là NN thủ tục cấp cao. Xử lý văn bản là một trong những điểm mạnh của nó. Có các phiên bản cho Windows, HĐH họ Unix và các môi trường Java; các phiên bản cũ hơn hỗ trợ các HĐH khác.

13. SMALLTALK môi trường phát triển hướng đối tượng và đồ hoạ của Smalltalk chính là nguồn cảm hứng cho Steve Jobs và Bill Gates ‘phát minh“ giao diện Mac OS và Windows.

14. RUBY hợp một số tính năng tốt nhất của nhiều NN khác. Đây là NN hướng đối tượng thuần túy như Smalltalk, nhưng có cú pháp trong sáng hơn. Nó có khả năng xử lý văn bản mạnh tương tự như Perl nhưng có tính cấu trúc hơn và ổn định hơn.

15. PERL thường được xem đồng nghĩa với “CGI Scripting”. Thực tế, Perl “lớn tuổi” hơn web. Nó ‘dính“ vào công việc lập trình web do khả năng xử lý văn bản mạnh, rất linh động, khả năng chạy trên nhiều nền tảng và miễn phí.

16. TCL (phát âm ‘tickle“) có thể tương tác tốt với các công cụ dùng văn bản như trình soạn thảo, trình biên dịch… dùng trên các HĐH họ Unix, và với phần mở rộng TK nó có thể truy cập tới các giao diện đồ hoạ như Windows, Mac OS và X-Windows, đóng vai trò kết dính các thành phần lại với nhau để hoàn thành các công việc phức tạp. Phương pháp mô-đun này là nền tảng của Unix

17. PYTHON là NN nguồn mở, hướng đối tượng, tương tác và miễn phí. Ban đầu được phát triển cho Unix, sau đó ‘bành trướng“ sang mọi HĐH từ DOS đến Mac OS, OS/2, Windows và các HĐH họ Unix. Trong danh sách người dùng của nó có NASA và RedHat Linux.

18. PIKE cũng là NN nguồn mở, miễn phí được phát triển cho nhu cầu cá nhân, và hiện được công ty Roxen Internet Software của Thuỵ Điển phát triển dùng cho máy chủ web trên nền Roxen. Đây là NN hướng đối tượng đầy đủ, có cú pháp tương tự C, và có thể mở rộng để tận dụng các mô-đun và thư viện C đã biên dịch để tăng tốc độ. Nó có thể dùng cho các HĐH họ Unix và Windows.

19. PHP (Hypertext Pre-Processor) là NN mới nổi lên được cộng đồng nguồn mở ưa chuộng và là mô-đun phổ biến nhất trên các hệ thống Apache (web server). Giống như CFML, mã lệnh nằm ngay trong trang web. Nó có thể dễ dàng truy cập tới các tài nguyên hệ thống và nhiều CSDL. Nó miễn phí và tính khả chuyển đối với các HĐH họ Unix và Windows.

20. MACROMEDIA COLDFUSION có mã lệnh CFML (Cold Fusion Markup Language) được nhúng trong trang web rất giống với thẻ lệnh HTML chuẩn. Rất mạnh, có các công cụ để truy cập nhiều CSDL và rất dễ học. Hạn chế chính của nó là giá cả, tuy nhiên có phiên bản rút gọn miễn phí. Chạy trên Windows và các HĐH họ Unix.

21. ACTIVE SERVER PAGES (ASP) được hỗ trợ miễn phí với máy chủ web của Microsoft (IIS). Thực sự nó không là NNLT, mà được gọi, theo Microsoft, là ‘môi trường lập kịch bản phía máy chủ“.Nó dùng VBScript hay JScript để lập trình. Chỉ chạy trên Windows NT/2K. Microsoft đã thay NN này bằng ASP.NET, tuy có tên tương tự nhưng không phải là bản nâng cấp.

22. JAVASERVER PAGES (JSP) là NN đầy hứa hẹn. Nó dùng Java, có phần mềm máy chủ nguồn mở và miễn phí (Tomcat). Có thể chạy trên hầu hết các máy chủ web, gồm Apache, iPlanet và cả Microsoft IIS.

23. LISP [‘LISt Processing“] là NNLT ‘có thể lập trình“, được xây dựng dựa trên khái niệm đệ quy và có khả năng thích ứng cao với các đặc tả không tường minh. Nó có khả năng giải quyết những vấn đề mà các NN khác không thể, đó là lý do NN hơn 40 năm tuổi này vẫn tồn tại. Yahoo Store dùng Lisp.

24. PROLOG [“PROgramming in Logic”] được thiết kế cho các bài toán luận lý, ví dụ như “A bao hàm B, A đúng, suy ra B đúng” – một công việc khá khó khăn đối với một NN thủ tục.

25. COBOL [“Common Business-Oriented Language”] có tuổi đời bằng với điện toán thương mại, bị buộc tội không đúng về vụ Y2K, và dù thường được dự đoán đến hồi cáo chung nhưng nó vẫn tồn tại nhờ tính hữu dụng trong các ứng dụng xử lý dữ liệu và lập báo cáo kinh doanh truyền thống. Hiện có phiên bản với các tính năng hướng đối tượng và môi trường phát triển tích hợp cho Linux và Windows.

26. FORTRAN [“FORmula TRANslation”] là NN xưa nhất vẫn còn dùng. Nó xuất sắc trong công việc

đầu tiên mà máy tính được tin cậy: xử lý các con số. Theo đúng nghĩa đen, đây là NN đưa con người lên mặt trăng (dùng trong các dự án không gian), một số tính năng của NN đã được các NN khác hiện đại hơn “mượn”.

27. dBase [“DataBASE”] là NN lệnh cho chương trình quản lý CSDL mang tính đột phá của Ashton-Tate. Khi chương trình phát triển, NN cũng phát triển và nó trở thành công cụ phát triển. Tới thời kỳ xuất hiện nhiều công cụ và trình biên dịch cạnh tranh, nó chuyển thành chuẩn.

28. Foxpro là một nhánh phát triển của dBase dưới sự “bảo hộ” của Microsoft. Thực ra nó là công cụ phát triển hơn là NN. Tuy có lời đồn đại về sự cáo chung, nhưng NN vẫn phát triển. Hiện Foxpro có tính đối tượng đầy đủ và có công cụ phát triển mạnh (Visual Foxpro).

29. Erlang [“Ericsson LNAGuage”] thoạt đầu được hãng điện tử Ericsson phát triển để dùng riêng nhưng sau đó đưa ra bên ngoài như là phần mềm nguồn mở. Là NN cấp thấp xét theo việc nó cho phép lập trình điều khiển những thứ mà thường do HĐH kiểm soát, như quản lý bộ nhớ, xử lý đồng thời, nạp những thay đổi vào chương trình khi đang chạy… rất hữu ích trong việc lập trình các thiết bị di động. Erlang được dùng trong nhiều hệ thống viễn thông lớn của Ericsson.

30. HASKELL là NN chức năng, nó được dùng để mô tả vấn đề cần tính toán chứ không phải cách thức tính toán.

Nguồn: sưu tầm từ internet

CURRICULUM VITAE
NGUYEN HUU THIEN

2, Pham Van Ngu Street

Ward 5, district Ben Luc, provinces Long An

E-mail : Mario.alpha@yahoo.com.vn

Tel : 01234614379

PERSIONAL DETAILS

Date of Birth May 10, 1993
Gender Male
Marital Status Single
Permanent Address 2, Pham Van Ngu Street, Ward 5, District Ben Luc, Provinces Long An
Mobile phone 01234614379
E-mail Mario.alpha@yahoo.com.vn

OBJECTIVE

  •  To be a good job.
  • To have good opportunities to get promotion in my job.
  • Develop my skills with development of company,I want to prove myself.

EDUCATION

2011-2015          

The University of Sciences – HCM, Vietnam

Bachelor of Science in Information Technology(Graduated – 2015)

Subjects studied :

+       Operating Systems : Windows XP, 7, Linux, Cloud.

+      Programming languages : C, C++, C#, Java, PHP, MySQL, HTML, XML, ASP, ASP.NET, JavaScript, Object-C.

+       Databases : MS SQ, Oracle 9i.

+      And subjects : Object – Oriented Programming(using Java language ), Design and develop website, Design Pattern, Web Security, System Analysis and Design, Software Project Management, Algorithm on Graph.

+      I have 3 years programming experience

2011 – 2015

The University of Sciences – HCM, Vietnam (Granduated 2015)

2008 – 2011

Le Quy Don High School , Long An

EXPERIENCE

  • Take part in ACM World Final in 2013
  • Writing eBook “C family” with talent class 2011
  • Design and Programming games “Banh Chung, Banh Day”
  • Manage Project “Bus for Students” with free version and bussines version.

 

SKILLS

+         Design and Deveplo Web with Javascript, PHP, CSS, Dreamwever  – expert – 2 years

+         C++ programming – expert – 4years. (Programming some mini-games)

+         Object – Oriented Programming

+         Programming Applications on mobile devices (iOS, Android,…): Games, Dictionary, Map,… with Object-C, Flash.

+         Managing SQL database system

+         Team work

+         Communication skills, other soft skills…

  • English skills: spoken, read and written

INTERESTS

  • Drawing Comics, Design Card, Logo.
  • Reading Sciences Books, IT Books, Manga, Comics…
  • Watching Cinéma films, Cartoon film, Documents film,…

Ho Chi Minh City, January 10, 2012

Declarant’s signature

Nguyen Huu Thien

Lâu lâu tìm hiểu về mấy cái này cũng thấy vui vui, thay đổi không khí tí vậy :D!

Download Excelfile

[Problem]

Bài 1: Cho số tự nhiên A. Hãy tìm số tự nhiên N nhỏ nhất sao cho N lũy thừa N (nhân N cho chính nó N lần) chia hết cho A. Hãy viết chương trình tìm số N đó và xuất ra màn hình. Trong đó A có giá trị: 1 ≤ A ≤ 10^9.
Ví dụ:
Số nhập vào là A          Số xuất ra là N
8                                       4
13                                     13

[Solution]

Lần đầu tiên nhìn vào bài toán, nhiều bạn có thể tròn mắt nói rằng: số gì mà lớn vậy kiểu nào chứa nổi trời? Đúng thật, nếu nhìn ban đầu thì có lẽ chúng ta phải bó tay trước bài toán này. Nhưng nếu biết khóe léo vận dụng vài kiến thức của số học + vài nhận xét thì bạn có thể giải bài toán một cách nhẹ nhàng.
Trước hết quan sát trằng để N^N chia hết cho A, thì N phải chia hết cho các ước nguyên tố của A.
Mặt khác, nếu viết:
A= pr[1]^e[1]  *  pr[2]^e[2]  *  …  *  pr[k]^e[k];
Như vậy, với mỗi pr[.] cần xuất hiện ít nhất một lần trong N, nghĩa là N= pr[1]^t1 * pr[2]^t2 * … * pr[k]^tk, với ti>=1

Bước 1: Phân tích A ra tích các thừa số nguyên tố và số mũ của nó. Việc này có thể thực hiện nhanh chóng bằng sàng Eratosthenes, lưu ý các bạn không nên cài 1 hàm kiểm tra số nguyên tố và kiểm tra từng số nguyên tố từ 2 tới round(sqrt(A)) như vậy sẽ rất mất thời gian!

Bước 2: Ta xét các trường hợp cụ thể sau:
Trường Hợp 1 – A chỉ có 1 ước số nguyên tố:
Lúc này A=pr[1]^e[1], cần tìm N= pr[1]^x;
x sẽ chạy giá trị từ 1 tới ceil(e[1] / pr[1]) Cho đến khi x*pr[1]^x >= e[1] thì dừng, Lúc này N= pr[1]^x;

Trường Hợp 2 – A chỉ có 2 ước số nguyên tố:
Ta dùng 2 vòng lặp for lồng nhau để tìm ra N

kq = n;

for (int t1 = 1, temp1 = pr[1]; t1 <= e[1]; ++t1, temp1 *= pr[1])

for (int t2 = 1, temp = temp1 * pr[2]; t2 <= e[2]; ++t2, temp *= pr[2])

if (temp * t1 >= e[1] && temp * t2 >= e[2])

if (temp < kq) kq = temp;

Trường Hợp 3 – A có từ 3 ước nguyên tố trở lên:
Ta có 1 số nhận xét sau:
Do A <= 10^9 < 2^30 do đó khi N có 3 ước nguyên tố trở lên N >= pr[1]*pr[2]*pr[3] >= 2*3*5=30
mà với giới hạn đó thì số mũ tối đa của một cơ số (cụ thể là 2) không thể vượt quả 30. Vì vậy trong trường hợp này, giả dụ A có k ước nguyên tố N = pr[1] * pr[2] * … * pr[k].
Đến đây bài toán đã được giải quyết xong! 🙂
Bonus: Nói vậy thôi, bài này chủ yếu là dựa vào Google + chịu khó đọc hiểu bài giải có sẵn là có thể làm được, hihi :D!

[Code]

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define lim 50000

bool
a[lim];
int
pr[lim/2], e[lim/2];

void SanNgTo(void)
{

memset(a,true,sizeof(a));

int i,j;
i = 1;
a[1]=false;

while (i*i<=lim){
while
(!a[i]) i++;

j=2;
while
(j*i<=lim){

a[j*i]=false;
j++;
}

i++;
}
}

void PhanTich(int n, int& k)
{

int
i=1;

k=0;
while
(n!=1){
while
(!a[i]) i++;

if (n%i==0){
k++;
pr[k]=i;

e[k]=0;
}

while
(n%i==0){

e[k]++;
n/=i;
}

i++;
}
}

int
Solve(int k, int n)
{

int kq;
switch
(k){
case
1:

int t;
t=e[1]/pr[1];

if (e[1]%pr[1]!=0) t++;

kq=1;
for
(int i=1; i<=t; i++)
{

kq*=pr[1];

if (kq*i>=e[1]) break;
}

break
;

case 2:
int
temp1, temp;
kq = n;

for (int t1 = 1, temp1 = pr[1]; t1 <= e[1]; ++t1, temp1 *= pr[1])

for (int t2 = 1, temp = temp1 * pr[2]; t2 <= e[2]; ++t2, temp *= pr[2])

if (temp * t1 >= e[1] && temp * t2 >= e[2])
if
(temp < kq) kq = temp;
break
;

default:
kq=1;
for
(int i=1;i<=k;i++)
kq*=pr[i];
}

return kq;
}

int
main(void)
{

SanNgTo();

int n, a, k=1;
printf(“Nhap A= “);

scanf(“%d”,&a);
PhanTich(a,k);
n = Solve(k,a);

printf(“So N nho nhat can tim: %d\n”,n);
printf(“va %d^%d chia het cho %d\n”,n,n,a);

getch();
}

Download Source Code (*.CPP)

Thuật toán sàng nguyên tố Eratosthenes là một công cụ mạnh mẽ để giải quyết những bài toán đòi hỏi phải kiểm tra số nguyên tố nhiều lần. Ban đầu, nhà toán học Eratosthenes sau khi tìm ra thuật toán, đã lấy lá cọ và ghi tất cả các số từ 2 cho đến 100. Ông đã chọc thủng các hợp số và giữ nguyên các số nguyên tố.

Thuật toán:
Dùng 1 mảng bool có N phần tử, với giá trị khởi tạo cho các phần tử của mảng đều là True, với ý nghĩa các số từ 1..N đều là số nguyên tố.
Gán a[1]=false (1 không phải là số nguyên tố);
B1: i++ cho đến khi a[i]= true;
B2: Điền các phần tử của mảng a có chỉ số là 2*i, 3*i… là false (với ý nghĩa các số này ko phải là số nguyên tố)
B3:Nếu i*i>=N thoát chương trình, nếu không quay lại bước 1.

pseudocode:

Input: an integer n > 1

Let A be an array of Boolean values, indexed by integers 2 to n,
initially all set to true.

for i = 2, 3, 4, ..., while in/2:
  if A[i] is true:
    for j = 2i, 3i, 4i, ..., while jn:
      A[j] = false

Now all i such that A[i] is true are prime.

Ngoài ra bạn có thê tham khảo công cụ mạnh hơn (nhưng cài đặt cũng phức tạp hơn) đó là sàng Atkin.

[Problem]

Xem công thức tính sau đây (đề thi tuyển sinh cao học ngành KHMT, năm 2011):

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-1. 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.

[Solution]

Nếu như không có yêu cầu cuối cùng (chỉ dùng 1 vòng lặp và không dùng mảng) thì bài toán có lẽ đã đơn giản hơn nhiều. Ý tưởng để giải bài toán này là xét xem liệu biểu thức Aver có thể được tính sau khi đã kết thúc quá trình nhập hay không?
Đầu tiên ta xét tổng:

Nếu ta khai triển (ai-Max)^2 bằng hẳng đẳng thức đáng nhớ học hồi cấp II 😛 ta được: ai^2 – 2*ai*Max + Max^2. Lúc này ta sẽ có:

  1. a0^2 + a1^2 + a2^2+  … + a(n-1)^2
  2. n*Max^2
  3. -2*Max*Sum,
    với  Sum  = a0 + a1 + a2 + … + a(n-1) <- Cái này có thể tính dễ dàng

Như vậy nhìn cái tổng có vẻ rắc rối trên bằng với: (1) + (2) + (3).
Đến đây mọi chuyện đã có vẻ khá rõ ràng. Vừa nhập vừa tính Sum và cập nhật Max, Min. Kết thúc quá trình nhập kết tất cả lại theo cách tính được nêu ra ở trên (!) 🙂

[Code]

#include <stdio.h>
#include <conio.h>
main()
{

float min, max, Aver, sum, sumbp, a;

int n;
printf(“Nhap n = “);
scanf(“%d”,&n);

printf(“Nhap a0 = “);
scanf(“%f”,&a);
max = a;

min = a;
sum = a;
sumbp = a*a;

for (int i=1; i<=n1; i++){

printf(“Nhap a%d = “,i);
scanf(“%f”,&a);
if
(min>a) min=a;

if (max<a) max=a;
sum+=a;

sumbp+=a*a;
}

Aver= n*max*max + n*min*min + 2*sumbp 2*max*sum 2*min*sum + (float)n/2*(maxmin)*(maxmin);

printf(“Aver = %f\n”,Aver);
getch();
}


Download Source Code (*.CPP)

#include <stdio.h>

main()

{

        printf(“Hello WordPress :)!“);

}