30/09/2018, 16:40

Phải chăng đây là lý do lập trình luôn đếm từ 0

Một câu chuyện về Nhà toán học Wacław Sierpiński. Ông được biết đến bởi những đóng góp quan trọng trong lý thuyết tập hợp (nghe đâu vụ tập hợp là phần quan trọng trong lập trình, nhất là bên khoa học máy tính, em chưa học chưa biết), lý thuyết số, hàm số, … (công bố hơn 700 bài báo và 50 cuốn sách).
Mình cũng xài nhiều thành quả của ổng, và cũng có thuật toán mà IT mình dựa trên ổng, điển hình là Sierpiński Gasket hay là Sierpiński Triangle.
Thôi PR đủ rồi, đây là câu chuyện

Waclaw Sierpinski là một nhà toán học nổi tiếng người Ba Lan. Người ta kể lại rằng ông là người khá lơ đãng. Một hôm, ông và vợ ông phải chuyển nhà. Hai ông bà mang đồ đạc xuống để bên vệ đường rồi bà Sierpinski mới nói với chồng rằng “Bây giờ anh đứng đây coi chừng mười thùng đồ này cho em để em đi gọi taxi”. Vài phút sau bà quay lại thì ông nheo mắt nói với bà “Anh tưởng em nói với anh coi chừng mười thùng đồ, nhưng sao anh đếm chỉ thấy có chín thùng.” Bà vợ hốt hoảng tưởng là ông chồng mình lơ đãng để người ta trộm mất một thùng đồ, “Không, em chắc chắn là mười thùng mà!”, “Không, em đếm lại đi, anh vừa đếm xong, đúng là chín thùng. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9!”

Có lẽ nguyên nhân là do khi nghiên cứu về lý thuyết tập hợp, ông thường chơi khác người là lấy phần tử đầu tiên là phần tử thứ 0

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

hehe, cái này chắc là không phải rồi. Bữa trước đọc ở đâu nói về vụ vùng nhớ mà anh lười quá không quan tâm nên đọc lướt. Nhưng đại ý của đoạn đó nói về việc quản lý vùng nhớ thì bắt đầu bằng số 0 sẽ thuận tiện hơn cho compiler.

en.wikipedia.org

Zero-based numbering

Zero-based numbering or index origin = 0 is a way of numbering in which the initial element of a sequence is assigned the index 0, rather than the index 1 as is typical in everyday non-mathematical/non-programming circumstances. Under zero-based numbering, the initial element is sometimes termed the zeroth element, rather than the first element; zeroth is a coined ordinal number corresponding to the number zero. In some cases, an object or value that does not (originally) belong to a given Numbe...

Đây, đã tìm ra. Lý do là nếu mình để ý sẽ thấy con trỏ và mảng có mối liên hệ mật thiết với nhau. Nếu ta có con trỏ p trỏ tới mảng arr thì

p+0 tương đương với phần tử đầu tiên của arr
p+1 tương đương với phần tử thứ hai của arr

nhatlonggunz viết 18:46 ngày 30/09/2018

Vâng, không chắc chắn nên em mới để ở mục Fun

Nguyễn Minh Dũng viết 18:47 ngày 30/09/2018

Ừ, anh thấy mà mà cái này đúng là cũng vui mà cũng nhức đầu. Thời gian đầu học lập trình cứ bị nhầm hoài. Đến bây giờ thì nếu thấy ngôn ngữ nào bắt đầu bằng 1 là lại thấy khó, không muốn sử dụng.

Bài liên quan
0