Bài 1:Những kỹ năng cơ bản cần thiết của người lập trình

nguyenac

Administrator
Staff member
18/11/08
22.562
1
38
Từ lúc tập tành viết code đủ loại ngôn ngữ, có lẽ rất nhiều người đều mắc chung "nhiều" "bệnh"(lỗi) lúc lập trình, tui cũng vậy. Bài này xem như là kinh nghiệm của tui, các bạn ai có kinh nghiệm nào hay, tốt hơn, có thể share để cùng nhau học tập:87:

Xin nói trước rằng, điều đầu tiên là lập trình bằng bất cứ ngôn ngữ nào tức cài đặt chương trình(viết code) chỉ là 1 phần nhỏ trong tất cả các bài toán cần giải quyết. Các bạn thấy rằng nhiều hiện nay, Việt Nam đang cố gắng trở thành một Ấn Độ Thứ 2(Nước có nền sản xuất phần mềm cao), các Cty phần mềm ở Việt Nam ta rất thiếu nhân lực trình độ cao trong lĩnh vực lập trình sản xuất phần mềm.
Nói cao sang, cao xa vậy chứ biết đâu, một trong các bồ là một Lập trình viên giỏi thì sao? tất nhiên là tui chưa đạt đến đẳng cấp ấy rồi, chỉ là mày mò code cho vui, chứ viết được một soft hoàn thiện thì không phải một người mà cả nhóm nhiều người.

Các bạn học lập trình lần đầu bao giờ cũng học ngôn ngữ đầu tiên là Pascal, nên trong các bài tập hoặc ví dụ mình cũng minh họa bằng pascal, nếu có sai sót gì các bạn cứ post lại (có thể bằng ngôn ngữ khác như C++ chẳng hạn) để mình sửa, và để mọi người tham khảo. Và những ý kiến về kỹ năng cơ bản sẽ post ở topic này, post chỗ khác là ko được đâu đấy.:74:
Chắc [you] đang nghĩ "sao thằng cha này nói dài thế", ừ thì bắt đầu đây.

Ta sẽ nhắc lại các kỹ năng về ngôn ngữ pascal, và phần quan tâm nhất là thao tác với mảng và file. Đồng thời sẽ nêu lỗi mà các bạn thường mắc phải(có thể tui cũng nằm trong số đó:028:)

  1. Cấu trúc lựa chọn
Trong pascal có 2 loại : [hlight]IF ... Then[/hlight] và [hlight]CASE ... OF[/hlight]
- Loại Case : dùng trong trường hợp có nhiều sự lựa chọn
- Loại IF(kể cả loại đầy đủ có else) : dùng khi các điều kiện chọn ko diễn đạt được thuận tiện với các kiểu dữ liệu rời rạc.
Ví dụ 1 : kết quả xếp loại học sinh theo điểm trung bình, diễn đạt đời thường như sau :
Mã:
Nếu DTB>=9 thì xếp loại xuất sắc,
Nếu 8<=DTB<9 thì xếp loại giỏi,
Nếu 7<=DTB<8 thì xếp loại khá,
Nếu 5<=DTB<7 thì xếp loại trung bình,
Nếu 5
  • Lỗi ngữ nghĩa trong cấu trúc điều kiện :
Ví dụ 2 :
Mã:
if x>y then[COLOR=Red][B];[/B][/COLOR]
x:=x-y;
Bạn thấy dấu ; màu đỏ chứ, đó là lỗi, thực ra là thói quen khi bạn viết 1 câu lệnh xong rồi chấm phẩy, tất nhiên là đúng nhưng trường hợp này là sai vì dùng ; sau then dẫn đến câu lệnh tương ứng là rỗng. Trong ví dụ trên thì x-y vẫn gán cho x dù điều kiện x>y có đúng hay kô đi chăng nữa.


  • Đã sử dụng câu lệnh if liên tiếp với các điều kiện kô loại trừ nhau thì thực tế máy vẫn hiểu là đã loại bỏ các điều kiện đó rồi(tự loại trừ)
Ví dụ 3 :
Mã:
if DTB>=9 then xeploai:="Xuat Sac";
if DTB>=8 then xeploai:="Gioi";
v.v...
Lúc này phép gán tương ứng với điều kiện cuối cùng sẽ được thực hiện
tức
Mã:
...
else xeploai:="Trung Binh";
và bạn chẳng phải cần if chi cho mệt nữa vì trong nhiều trường hợp cách này không phù hợp
  • Bạn quên dùng khối lệnh hoặc dùng kô đúng khối lệnh làm hành động tương ứng không phù hợp với điều kiện dẫn đến kết quả sai. (đôi lúc tui cũng mắc phải lỗi này:105:)
Ví dụ 4 : đoạn giải pt bậc 2
Mã:
if delta>0 then
x1:=(-b+sqrt(delta))/2/a;
x2:=(-b-sqrt(delta))/2/a;
...
  • Cấu trúc Case..of : dùng các tập giá trị giao nhau làm một điều kiện tương ứng với nhiều hành động khác nhau làm các điều kiện không hợp với ý nghĩa của bài toán.
Bài tập
1) viết lại chương trình theo ví dụ 1 và ví dụ 4.
2) viết chương trình xác định năm công tác
nếu : thâm niên 18 năm đến < 20 năm thì "chuẩn bị nghỉ hưu"
nếu : thâm niên > 20 năm thì "chuyển hồ sơ để nghỉ hưu"
nếu : thâm niến < 18 năm thì "chẳng làm gì cả"
viết cả 2 cách dùng case hoặc if và so sánh
3) viết chương trình xách định số ngày trong tháng.
ví dụ : nhập tháng là 3 xuất là : "tháng 3 có 31 ngày"
4) viết chương trình xác định năm âm lịch dựa vào năm âm lịch.
gợi ý : can = dương lịch mod 10; chi = dương lịch mod 12.

(còn tiếp)
 

nguyenac

Administrator
Staff member
18/11/08
22.562
1
38
Tiếp theo phần 1 nhỏ, cấu trúc lựa chọn
2. Cấu trúc lặp : cơ bản pascal thì các bạn biết rồi kô nói nữa để khỏi dài dòng, ai mới học thì vui lòng xem sách hoặc trên lớp nhỉ:035:.
Lặp trong pascal có 2 loại là lặp xác định và kô xác định

  • Lặp xác định : dễ hiểu, dễ dùng. Chắc you đoán ra đó là vòng for
ví dụ :
Mã:
for i:=1 to n do ;
hoặc
Mã:
for i:=1 to n do <điều kiện>
  • Lặp kô xác định : có 2 loại
- Kiểm tra điều kiện trước [hlight]while[/hlight]
Ở phát biểu while bạn suy nghĩ một cách dễ hiểu là "trong khi biểu thức đk đúng thì làm"
Lỗi mà bạn mắc phải ở vòng while này là dễ bị vòng lặp vô tận, tức là thực hiện 1 công việc không bao giờ ngừng bởi bạn dùng
Mã:
while true do S
S : 1 công việc nào đó
và để tránh khi dùng loại này là bạn phải dùng 1 phát biểu [hlight]goto[/hlight] trong S để nhảy khỏi vòng while
- Kiểm tra điều kiện sau
bởi Repeat có tác dụng là dù gì đi chăng nữa nó cũng phải thực hiện tối thiểu 1 công việc nào đó nên lỗi thì tui chưa gặp:99:, mà chắc có bạn cũng chưa gặp. Ta có thể xác định rằng [hlight]từ for có thể chuyển thành while nhưng kô thể làm ngược lại được[/hlight]. Cỏ thể ví von thế này: Em biết Anh, Em cũng biết Anh Kia Nhưng chưa chắc Anh Biết Anh Kia:traitim:
Nhưng có thể nhận định rằng rất ít người dùng repeat mà kô biết rằng anh chàng này có 1 lợi thế đó là nhập liệu một cách tốt nhất, tốt hơn cả for nữa. Ví dụ nhập liệu cho chương trình giải pt bậc 2, theo bạn thì nhập sao, còn mình thì làm thế này
Mã:
repeat write('a='); readln(a);
until a<>0;
Lỗi hay mắc phải :
- Dùng ; tương ứng sau do là 1 câu lệnh rỗng
Mã:
[COLOR=Black]for i:=1 to n do; write(i);[/COLOR]
- Kô dùng khối lệnh hoặc dùng nhưng kô tương ứng với hành động cần lặp lại.
- Hay thay đổi biến đếm trong vòng lặp
- thứ tự các lệnh kô đúng trong vòng lặp kô xác định làm thiếu hoặc thừa hành động.
- Dùng vòng lặp đưa ra nhiều kết quả thì không nên đưa thông báo kết quả vào vòng lặp mà đưa 1 thông báo chung rồi dùng vòng lặp đưa ra kết quả.
- Vì vậy Sử dụng cấu trúc lặp nào lúc viết code phụ thuộc tình huống cụ thể, ưu tiên viết đơn giản, phù hợp với bản chất vấn đề.
- Một số tình huống lặp xác định có thể chuyển sang lặp không xác định tốt hơn. Bạn đừng nghĩ viết ngắn thì tốt hơn chứ, nhưng viết dài thì độ nhanh và tối ưu lúc nào cũng hơn.
ví dụ : chuyển for sau đây sang while và xem cái nào tốt hơn
Mã:
for i:=1 to n do
if i mod 2 = 0 then s:=s+i;
chuyền thành while như sau
Mã:
 i:=2;
while i begin s:=s+i; i:=i+2; end;
Bài tập
1) Viết chương trình tính a mũ n & a!.
2) Tính tổng các số gõ từ bàn phím đến khi nhập vào một số 0
3) Nhập 1 số tự nhiên n và xác định nó có phải là số nguyên tố kô
4) Như bài 3 nhưng thêm
a) đếm các số nguyên tố nhỏ hơn n
b) tính tổng các số nguyên tố nhỏ hơn n
5) Nhập 1 số nguyên không âm n, nếu n âm thì yêu cầu nhập lại
6) Tìm ước số lẻ lớn nhất của một số nguyên dương x
gợi ý: chia x cho 2 nhiều lần đến khi nào ko chia được nữa.
Yêu cầu : dùng repeat & while và thử so sánh xem nào.
Tạm thời xong rồi, còn tiếp.... đi chơi cái đã:51:
 

Facebook Comment

Find Diễn đàn Công nghệ thông tin và truyền thông on mobile

Thành viên trực tuyến

Không có thành viên nào trực tuyến.

Thống kê diễn đàn

Chủ đề
31.055
Bài viết
33.114
Thành viên
5.971
Thành viên mới nhất
hoangyen721

Mobile app users
0
Latest mobile user

Tài nguyên mới