1. Trang chủ
  2. » Giáo án - Bài giảng

Tin học ứng dụng trong thiết kế và đóng tàu trần công nghị (chủ biên), võ trọng cang

306 705 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 306
Dung lượng 29,59 MB

Nội dung

Công việc xoay quanh các vấn đề thiết kế vỏ tàu và tính toán tính năng bằng những phương pháp kinh điển hoặc phương pháp mới có trợ giúp của phương tiện tính thích hợp, vẽ tàu, phóng dạ

Trang 1

CÔNG NGHỊ (Chủ biên) - VÕ TRỌNG CANG

Trang 3

GT 01 TH(V)

Trang 4

MỤC LỤC

5.1 Đánh giá các chỉ tiêu kinh tế - kỹ thuật của tàu 194

5.6 Tài liệu tham khảo về hệ thống chương trình thiết kế tàu 213

Chương 7 ƯNG DỤNG CAD TRONG THIÊT KẾ MÔ PHỎNG HÌNH DẠNG

Chương 8 PHÁT TRIỂN ỨNG DỤNG CÁC PHAN m e m THIET k ế t à u

Trang 5

LỜI M Ở ĐẦU

Công việc tính toán chọn thông số tàu từ giai đoạn thiết kế ban đầu, tính toán các tính năng tàu dong thiết kế hnợc tàu sau thiết kế, chọn máy, tính giá thành sản phẩm chiếm lượng lớn trong toàn bộ thiết kế tàu Từ khi ra đời, thiết kế tàu không ngừng phát triển, trong chừng mực nhất định nhờ sự hỗ trợ có hiệu quả của các phương pháp tính Những phương pháp số được đưa vào giải quyết các bài toán thiết kế tàu làm cho kết quả chính xác hơn, tốc độ xử lý công việc nhanh hơn Tiến tiếp trên con đường phát triển này,

tự động hóa tính toán làm cho tốc độ xử lý nhanh một cách đột biến Tự động hóa thiết

kế tàu làm cho công việc thiết kế dễ dàng hơn và thời gian giải quyết công việc rút ngắn lại nhiều lần so với cách làm trước nay.

Các phương pháp thiết kế trình bày trong giáo trình TIN HỌC ỨNG DỤNG TRONG

THIÊT KẺ VÀ ĐÓNG TÀU được trình bày theo cách nhìn từ các phương pháp tính Trên

cơ sở các phương pháp tính, những phép tính đặt ra sẽ được giải quyết bằng chương trình

do chúng ta viết, hay nói cách khác, được “tự động” giải quyết Giáo trình bao gồm những nội dung sau:

- Nhừng vấn đề liên quan thiết kế tàu và công trình nổi.

- Những vấn dề liên quan tự động hóa thiết kế tàu, công trình nổi: phương pháp số, thuật toán, chương trình hóa.

- Những mô hình tính trong thiết kế vỏ tàu, những thuật toán xử lý những bài toán thường gặp trong thiết kế thăn tàu.

- Những cách vẽ vỏ tàu và công tác chuẩn bị sản xuất tàu.

Công việc xoay quanh các vấn đề thiết kế vỏ tàu và tính toán tính năng bằng những phương pháp kinh điển hoặc phương pháp mới có trợ giúp của phương tiện tính thích hợp,

vẽ tàu, phóng dạng, khai triển tôn bao theo nghĩa tổng quát Các đặc trưng tính nổi tàu một thân, tính ổn định, tính chịu sóng, tính đi biển, tính toán sức cản vỏ tàu, thiết kế máy đẩy tàu là những đặc trưng không thể thiếu cho thiết kế tàu, được chuyển về mô hình tính và chương trình hóa.

Tác giả rất mong nhận được ý kiến đóng góp của quý dộc giả và các bạn đồng nghiệp Xin chân thành cảm ơn.

Địa chỉ liền hệ: Bộ môn Tàu thủy - Khoa Kỹ thuật Giao thông - Trường Đại học Bách khoa - Đại học Quốc gia Tp Hồ Chí Minh - 268 Lý Thường Kiệt - Q10.

Điện thoại: (08) 8645643 - (08) 8216910

Tiến sĩ TRẦN CÔNG NGHỊ

Trang 6

Chương 1

CÔNG TÁC THIẾT KẾ TÀU

1.1 THIẾT KỂ TÀU

Đê CÓ được một con tàu thực hiện một nhiệm vụ nhất định phải trải qua hai giai

đoạn chính gồm thiết k ế tàu và chế tạo theo thiết kê ấy Thiết kế tàu thủy có vị trí vô

cung quan trọng trong công nghiệp đóng tàu

Thông thường th iết kế tàu phải tiến hành giải quyết những việc gắn liền với sự hình thành con tàu và đề cập toàn bộ tính năng tàu Những nhiệm vụ đầu tiên với tàu thương mại làm nhiệm vụ vận chuyển mà bộ môn thiết kế phải giải quyết là xác định

kích thước chính, quan hệ giữa các kích thước chính, các hệ sô' đầy thân tàu, lượng chiếm

nước, dung tích hầm hàng Đi liền với các thông số đó là các đặc trưng hình học thân tàu gồm hình dáng theo chiều dọc, hình dáng các sườn, hình dáng phần đuôi, hình dáng phần mũi tàu cũng là đối tượng tìm kiếm của thiết kế tàu

Mỗi tàu có nhiệm vụ cụ thể, làm một số việc cụ thể song tấ t cả tàu thương mại đều

có mục đích chung la mang lại hiệu quả kinh tế cao nhất và tàu phải được làm việc trong những diều kiện an toàn nhất

Chính vì lè phái giải bài toán kỷ thuật - kinh tế với những đòi hỏi khó thực hiện đồng thời và nhiều khi khỏng thể thực hiện trọn vẹn, bộ môn th iết kế tàu được những

nhả đóng tàu quan tâm rấ t sớm Từ thế kỷ XVIII những người đóng tàu đã cố gắng tổng

kết kinh nghiệm, rút ra những bài học xác định trọng tải, hình dáng, kích thước tàu cho hạm tàu đang ngày càng phát triển Những nhà toán, vật lý đã tích cực góp phần đưa bộ môn lý thuyết tàu và đi liền theo nó là thiết kế tàu đến chỗ ngày càng hoàn thiện

Lịch sử phát triến bộ môn thiết kế tàu đã ra đời sớm song giai đoạn phát triển

mạnh mẽ nhất phải kế từ thế kỷ XVII - XVIII Trong tài liệu “Traité du navire, de sa

construction et de ses mouvements” xuất bản tại Paris năm 1746 của tác giả người Pháp

Bouguer đã khái quát lý thuyết tàu thủy, khái quát cách chọn thông số chính cho tàu, đề cập ứng dụng các phương pháp toán học khi nghiên cứu tàu thủy và đặc biệt khi xác định các kích thước cho tàu sắp đóng Tại đây cần nói thêm một ít về thuật ngữ dùng cho bộ môn lý thuyết tau thủy và thiết kế tàu Có thể những nhà đóng tàu người Pháp, người Anh như: Sir Anthony Dean (1638 - 1724), Monceaux từ những năm đầu của thế kỷ XVIII đã đưa ra công luận những cuốn sách trình bày những hiểu biết về tàu trong đó đã

sử dụng thuật ngữ “architecture navale”, là những người mở đầu một cách chính thức đưa cụm từ “kiến trúc tàu“, (tương đương tiếng Anh là: naval architecture) làm tên gọi cho

ngành mới: lý thuyết tàu \ Theo đó những người sử dụng “kiến trúc tàu” để vẽ ra những

tàu mới được gọi là “kiến trúc sư tàu thủy - từ tiếng Anh: naval architecf\ ngày nay chúng ta gọi là kỹ sư th iế t kế tàu Trong phạm vi “architecture navale” Monceaux đã

trình bày các công thức toán nhằm xác định chiều dài, chiều rộng, chiều cao, các quan hệ

' theo “Eléments de l ’Architecture navale" của Dulamel de Monceaux.

7

Trang 7

giữa chúng dùng cho tàu chiến, nhằm đảm bảo yêu cầu tác chiến đặt ra thời đó Trong giai đoạn này lượng chiếm nước chưa được lưu V giải quyết.

Người có công rấ t lớn trong việc phát triển lý thuyết tàu và cơ sở thiết kế tàu của thế kỷ XVIII là nhà toán học, cơ học gốc Thụy Sĩ L.p Euler (1707 - 1783), viện sĩ thuộc Viện Hàn lâm Khoa học St Peterbourg Euler đã xác định rõ bằng công thức toán học quan hệ giữa kích thước chính của tàu với các hệ số đầy th ân tàu, cùng tính ổn định của tàu trên nước Công thức tính chiều cao ổn định ban đầu trong quan hệ với chiều rộng,

chiều chìm, các hệ số đầy hình thành dưới thời Euler, vẫn còn được sử dụng như cơ sở lý

luận cho thiết kế tàu trong tấ t cả các Viện nghiên cứu tàu bè cho đến tận ngày nay Những công thức thực nghiệm do Euler tìm ra trở thành công thức đa năng, dùng chung cho tấ t cả kiểu dáng tàu Tài liệu của Euler được trình bày trong đủ các tiếng chuẩn của châu Âu gồm Pháp, Anh, Đức, Ý

Trong th ế kỷ này nhà đóng tàu người Thụy Điển F.H Chapman (1721 - 1808) từ hoạt động thực tế tạ i các xưởng đóng tàu Bắc Âu đã góp phần hoàn chỉnh những cơ sở lý luận của bộ môn th iết kế tàu thủy Trong những công trình khoa học công bố tại Stockholm từ 1775, 1806, Chapman đã trình bày cách giải quyết vấn đề quan hệ giữa lượng chiếm nước và kích thước chính của tàu theo yêu cầu thiết kế Chapman đã xác lập phương trình trọng lượng trong khuôn khổ hàm của lượng chiếm nước Quan hệ giữa lượng chiếm nước và các nhóm trọng lượng được xử lý bằng môn toán học thông kê Cũng chính Chapman đã tìm cách trình bày quan hệ giữa sức chở của tàu với lượng chiếm nước, với kích thước chính của tàu và ảnh hưởng của các thông số trên đến ổn định tàu Từ sáng kiến của Chapman, cách vẽ tàu sơ khai, cách biểu diễn tàu trên các

m ặt cắt, cách tạo lưới cho đồ họa, nghĩa là những yêu cầu cần thiết cho một bản vẽ thiết

kế vỏ tàu đã ra đời từ th ế kỷ XVIII Trong các phần tiếp của tài liệu, chúng ta còn có dịp làm quen với công thức vẽ vỏ tàu mang tên Chapman Ngày nay cách làm của tác giả từ thế kỷ XVIII đang được dùng có hiệu quả trong tự động hóa thiết kế vỏ tàu

Thế kỷ XIX là thời kỳ phát triển ở trình độ cao của ngành chế tạo máy tàu, đóng tàu vỏ kim loại Từ đầu thê kv XIX những nhà đóng tàu tại các nước có nền công nghiệp đóng tàu phát riển tiếp tục hoàn chỉnh cơ sở lý luận thiết kế tàu chiến và tàu thương mại Phương trình trọng lượng đã có từ thời Chapman được xem xét kỹ và hoàn thiện lại Thực tế, phương trình trọng lượng các nhà đóng tàu dùng từ đầu th ế kỷ XIX đang còn hữu ích đến ngày nay Nhà đóng tàu J.A Normand (1839 - 1906) tìm cách loại dần các cách th iết kế “mò m ẫm ”, thay vào đó bằng những công thức gần đủng rút ra từ thực

tế làm việc Mối liên hệ giữa máy tàu và vỏ tàu đã được Normand đưa vào thiết kế Cũng cần kể thêm ý tưởng dùng phương pháp toán gọi là phương pháp vi phân để xác định lượng chiếm nước tàu đã xuất hiện trong các tác phẩm của Normand vào nửa sau của thế

kỷ XIX

Thế kỷ XX thiết kế tàu được đánh dấu bằng các tiến bộ lớn Trong lĩnh vực lý luận thiết kế những năm đầu của th ế kỷ các nhà đóng tàu lần lượt đưa ra những tổng kết hoàn chỉnh giúp cho bộ môn phát triển vững chắc Một điều có thể ghi nhận được, những tài liệu làm cơ sở cho th iế t k ế tàu công bố vào những năm dầu thế kỷ này đang còn đầy

đủ giá trị khoa học cho đến thiên niên kỷ mới mà chúng ta đang sống Một số rất nhỏ trong kho tàng lý luận th iế t kế đầu th ế kỷ XX có thể kể ra đây:

- “The design and construction of ships”, vol I, II, London, 1923 của J.H Biles.

Trang 8

- “Ship design, résistance and screw propulsion”, London, 1948 của G Backer.

- “General design o f warships”, London 192G của w Hovgaard.

- “Approximate rules for the détermination o f the displacement and dimensions of a

ship in accordance with a given programme o f Requirements”, 1901, J.A Normand.

- “Some approximative formulae useful in ship design”, Shipbuilder, 1925 của tác

giả người Nga V Posdunine.

- “Das berichtigungsverfahren als hilfsmittel fur den enwurf der schiffe”, Jahrhuch

des Schiffbautechnische Gesellschaft, 1924 của w Smidt.

- “Sostavlenie tieoreticheskich tchertiejei pri pomoshy progressiki” 1908 - 1908, “Ob odnom metodie opredelienia glavnych razmierov proektiruiemnovo sudna”, 1916, I.G Bubnou.

Nhìn chung cơ sở lý luận thiết kế tàu tại đầu th ế kỷ XX đã được hoàn thiện Từ những năm hai mươi, ba mươi trở đi nhiều nhà khoa học trẻ đã đóng góp cho lĩnh vực này những công trìn h quí giá nhưng khó có thể vượt xa những cơ sở đã hình thành suốt hai thê kỷ qua.0

Cùng với sự p h át triển của công nghệ thông tin, của tự động hóa, lý luận thiết kế tàu cũng phát triển theo hướng cô" gắng bắt kịp tiến bộ mới Những vấn đề đã được giải quyết bằng các phương pháp kinh điển, nhờ vào công cụ tính toán của th ế kỷ trước, ngày nay được xem xét kỹ hơn và những người đóng tàu tìm cách giải bằng phương pháp mới hơn với sự trợ giúp của công nghệ thông tin, tự động hóa

Trong tài liệu chúng ta sẽ tìm hiểu các phương pháp th iết kế đã hoàn thiện cho đến đầu thê kỷ XX, đồng thời tìm hiểu và nắm bắt các cách làm phù hợp với trình độ hiện nay của công nghệ tính toán

1 Các g ia i đ o ạ n t h iế t k ế

Thông thường, theo truyền thống, thiết kế cần trải qua các giai đoạn:

0 Những nhà kiến trúc sư lớn của bộ môn thiết kế tàu trong thế kỷ XX đà phát triển bộ môn khoa học này đến những đỉnh cao Hệ thống các phương pháp hữu hiệu cùng ứng dụng của chủng trong thiết kế tàu, tén tuổi các nhà đóng tàu cùng tài liệu tham khảo được trình bày tại tài liệu chuyên dể Tài liệu tham khảo biên soạn phẩn mở đầu tìm thấy trong các sách hoặc tạp chỉ sau:

R MunrO’ Smith, "Early Estimation of Principal Dimensions and other Technical Data", Shipbuider and Marine Enginer Builder, 1956 Từ loạt bài đăng trên tạp chí Shipbuider and Marine Enginer Builder trong rất nhiều kỳ, Munro-Smith dà viết thành sách dạy thiết kế dưới tên gọi "Lý thuyết tàu ứng dụng - The Applied Naval Architecture".

D.G.M Watson, "Estimating Preliminary Dimensions in Ship Design", TIESS, 1961/1962

E Nonnecke, "Die Wahl der Hauptdaten Trockenfrachter", Schiffbautechnik, 1956.

R.p Johson, H.p Rumble, "Weight, Cost and Design Chararcteristics of Tankers and Dry Cargo Ships", ISP, 1964

D Arnott, "Design and Construction of steel Merchant Ship", N.Y., 1955, Tr SNAME

p Mandel, R Leopold, "Optimization Methods Applied to Ship Design", Tr SNAME, 1966.

T Kuniyatsu, "Application of Computer to Optimization of Principal Dimensions of Ships by Parametric Study", Japan SME, 1968.

H Nowacki, "Computer Aided Ship Design", University of Michigan, 1969.

H Flecken, K Vogt, "Das rechnerische Verzerren von Schiffslinien”, Hansa, 1971.

G.c Manning, "The theory and Technique of Ship Design", N Y, London 1957

và các sách viết bàng tiếng Nga sau:

L.M Nogid, "Proektirovanie morskich sudov", Leningrad 1964

v.v Ashyk, " Proektirovanie sudov", Leningrad 1975.

A I Rakov, N.B Sevasỉianov, "Proektirovanie promyslovych sudov", Leningrad 1981.

9

Trang 9

Xây dựng yêu cầu và nhiệm vụ thiết kế

Công việc mở đầu này thường do người chủ phương tiện đật ra, người thiết kế phải thực hiện đúng và đủ Trong nhiệm vụ thiết kế cần thiết phải đề cập đến công dụng, loại hình, khu vực hoạt động của tàu Những tính năng kỹ thuật chủ yếu của tàu tương lai được trình bày rõ trong yêu cầu thiết kế Trong điều kiện Việt Nam những vấn đề được

đề cập trong nhiệm vụ thiết kế có thể như sau:

- Thiết bị sinh hoạt

- Thiết bị trên tàu (thiết bị boong): thiết bị lái, neo, buộc, phương tiện cứu sinh, phương tiện an toàn, cần cẩu

- Thiết bị buồng máy

- Trên cơ sở kích thước chính, các hệ số đầy, bắt dầu triển khai việc xác dịnh hình dáng hay là dạng vỏ tàu, lập bản vẽ đường hình tàu

- Với tàu tự chạy, bắt đầu tính sức cản vỏ tàu, công suất máy cần thiết để tàu có thể hoạt động đạt yêu cầu đề ra

- Xác định lần nữa lượng chiếm nước và tính ổn định tàu, trên cơ sở đường hình vừa tạo ra

- Kiểm tra tính nổi của tàu trên cơ sở đường hình mới tạo

- Chuẩn bị bô" trí chung, có tính sơ bộ

Trang 10

- Tính trọng lượng, trọng tâm tàu trên cơ sở bố trí chung và các bản vẽ kết cấu banđầu.

Thiết kè kỹ thuật

Trong phần th iết kế kỹ thuật chỉ sử dụng kết quả của một trong rấ t nhiều phương

án từ thiết kế sơ bộ và kết quả ấy đã được thừa nhận Trên cơ sở đường hình tàu đã có,

bố trí chung đã ổn định cho đến thời điểm đang kể, thiết bị máy móc đã được chọn, các

bộ phận th iết kế tiến hành các công việc hợp tác, thiết kế chi tiết hơn, bô" trí chi tiết và

cụ thể hơn, mối liên hệ giữa các bộ phận trên tàu trở thành hiện thực hơn Trong giai doạn này các sơ đồ lắD ráp được hoàn thiện, các thiết kế kết cấu được triển khai đến chi tiết Từ các bản vẽ chi tiết đã có thể tiến hành tính toán giá thành sản phẩm một cách

Bố trí các hệ thống ống liên quan máy chính, máy phụ

Bố trí hệ thống điều khiển mây chính, máy phụ, tự động hóa buồng máy

- Bộ phận diện - điện tử

Cân bằng năng lượng điện trên tàu

Bố trí hệ thống điện trên tàu

Bố trí hệ thếng nhận điện từ bờ

Thiết bị an toàn điện

Bố trí hệ thống máy móc thiết bị điện tử đảm bảo an toàn hàng hải, thông tin, liên lạc Nếu coi quá trình thiết kế là sự hoàn thiện dần các phép tính nhằm thỏa mãn yêu cầu đề ra, quá trình này có thể minh họa dưới dạng sự tiến hóa theo đường xoắn ốc Mọi phép tính, phép thử được tiến hành riêng nhau, theo những qui luật vật lý nhất định Kết quả của phép tính này làm tiền đề cho phép tính tiếp theo, sau đó kết quả của phép tín h tiếp theo này làm tiền đề cho phép tính sau nó Sau mỗi vòng tiến hóa, kết quả của cùng một phép tính sẽ đổi thay so với giá trị ban đầu, và kết quả lần thứ hai (sau đó là thứ ba, thứ tư ) lại làm chức năng dữ liệu đầu vào cho phép tính kế tiếp Chu trình trên lặp lại nhiều lần, theo đường xoắn ÔC, cho đến khi kết quả cuối cùng thỏa mãn các điều kiện đặt ra, với sai sót trong phạm vi cho phép

11

Trang 11

Trên hình xoắn ốc minh họa các chỉ số có

thể mang ý nghĩa như sau:

I - Thử tại bến và thử đường dài

8- Kích thước chính, hệ số đầy; tính nổi

9- Lượng chiếm nước

10- Sức chở, dung tích hầm hàng .

I I - Sức cản vỏ tàu, trang bị máy chính, máy đẩy

12- Đòi hỏi của chủ phương tiện

Hình 1.2

2 N hữ ng p h ư ơ n g trìn h cơ b ản của th iế t k ế tàu

Trong phần này sẽ nhắc lại những phương trình chính đã được trình bày trong tài liệu thiết kế tàu Những thông tin cần cho thiết kế có thể đọc trong sách “Sổ tay kỹ thuật đóng tàu thủy” tập I, nhà xuất bản Khoa học kỹ thuật 1978, phần I Tài liệu cập nhật về thiết kế tàu vận tải, tàu cá tìm trong giáo trình soạn riêng cho sinh viên bộ môn tàu thủy, Đại học Bách khoa Tp Hồ Chí Minh Tài liệu liên quan đến các phần khác được ghi chú dưới đây

Trong ngành tàu chúng ta thường sử dụng khái niệm trọng tải để chỉ sức chở của

tàu chở hàng Trong khái niệm trọng tải, deadweight (viết tắt dwt hoặc tấn DW) được coi

là hiệu số giữa Dt và trọng lượng tàu không D0:

Như vậy trong DWT có cả thành phần hành khách cùng dự trữ lương thực, thực phẩm cho người trên tàu, dự trữ cho máy

Trang 12

Phương trìn h trọng lượng dạng chung được thực hiện như sau:

Đ = ỵ w,1=1trong đó: Wj - trọng lượng các nhóm thành phần, theo cách phân loại trên đây

Tổng trên đây có thể được tách làm hai phần, phần đầu gồm các nhóm trọng lượng phụ thuộc vào bản thân lượng chiếm nước, phần còn lại không phụ thuộc vào lượng chiếm nước:

Giải phương trình trên đây chúng ta xác định được lượng chiếm nước cần thiết của tàu thiết kế Lời giải phương trình được minh họa như tại H.1.2

Phương trình trên có thế viết lại dưới dạng:

Riêng hệ số P c - liên hệ với trọng lượng máy chính

Po - liên hệ với tiêu hao nhiên liệu dùng cho máy chính

Các chỉ số a, b, c - làm chức năng số mũ chỉ mức độ tham gia của nhóm trọng

lượng này trong thành phần trọng lượng

Sô" mũ m xấp xỉ 1/3, n xâ"p xỉ 3 hoặc 3,5

Mặt khác từ phương trình tính nối, lượng chiếm nước tàu được tính bằng công thức:

Trong công thức cuối đã sử dụng các k ý hiệu sau: ô s CB; T = d; còn D s A; V s V Cần nói rõ, trong các công thức tiếp theo, tùy hoàn cảnh cụ thể, các k ý hiệu nối với nhau bằng dâu = là tương đồng và có tính nhất quán

Phương trìn h trọng lượng dạng tương đương giờ đây có thể viết như sau:

yô.L.B.T - F(ô, L, B, T, ) - Wg = 0 (1.10)

Bản thân th àn h phần F(ỗ, L, B, T, ) được hiểu là: Pị

Nếu biểu diễn phương rình trèn dưới dạng:

13

Trang 13

Đạo hàm của hàm trên sẽ được khai triển như sau:

dP = dD - dF()1TỊ1 ỔF , ỔF , T ỔF m

dF = — dô + — dL 4- -~dB +

5 as dô + ° - ? ) d L + L ỡlJ — - — IdB + B ỠBMặt khác nếu chúng ta coi thành phần trọng lượng thứ j là tích của các thành

Dươi đây trìn h bày công thức được Munro-Smith đề nghị trong loạt bài bàn về thiết

kế tàu* Các bài báo dạng này được Smith tổng kết trong sách giáo khoa thiết kế tàu

hiện đại “The Applied Naưal Architecture”.

trong đó: Pi- trọng lượng vỏ tàu; P2- trọng lượng gỗ, trang thiết bị

P3- trọng lượng buồng máy; p4- trọng lượng nhiên liệu

Trang 14

Phương trình dung tích tàu

Tổng dung tích tàu tính bằng công thức:

Cách tính các thành phần Vị phụ thuộc vào chức năng của dung tích thành phần

Ví dụ dung tích hầm hàng tàu vận tải, chở hàng khô sẽ tính như sau:

V v cargo — = k pA cargo

trong đó: Pcargo“ trọng lượng hàng được chở trên tàu

Thể tích buồng máy phụ thuộc vào kích cỡ máy, thông thường với tàu chạy với vận tốc trung bình, thể tích này tính như sau:

- k p

v m — ^m- A mtrong đó: Pm- công suất máy chính, dùng cho việc đẩy tàu

Mặt khác dung tích toàn tàu có thế’ tính trên cơ sở kích thước chính và các hệ số của tàu Công thức tính có thể mang dạng:

trong đó: V- thể tích phần chìm của tàu

Vov- thể tích trong thân tàu, nằm trên đường nước tính toán

VSUp - thể tích (dung tích) thượng tầng

Công thức (1.23) có thê chuyển về dạng tương đồng công thức tính trọng lượng tàu:

Nếu ký hiệu ky- hệ số ảnh hưởng của độ nở các sườn, đường cong yên ngựa dọc boong và độ cong (ngang) của boong; k y = 0,28 ± 0,07, khi tính cho tàu khách và các tàu thông dụng khác, công thức tính dung tích toàn tàu có thể viết:

Trang 15

GT = ki.vtrong đó: ki = 0,20 + 0,021gV

Một số kết quả tính cho ki như sau:

k2 = 0,02 + 0,02Vcargok3 = 1,25(1+ GT.10"4)trong đó: n r số khách trong các buồng dưới tám giường

n2- số khách trong các buồng từ chín giường trở lên

Phương trình ổn định tàu

Đảm bảo ổn định tàu trong mọi điều kiện hoạt động là một trong những yêu cầu cơ bản của thiết kế tàu Điều kiện ổn định của tàu được thể hiện dưới dạng thỏa m ãn một loạt bất đẳng thức sau:

GM0 > GMmin GZ3() > a GZW ) > b

lệ thuộc vào tiêu chuẩn ổn định được chấp nhận tại

mỗi quốc gia Ngày nay phần dồng các nước chấp nhận

a > 0,25m cho tàu dài dưới lOOm, a > 0,2m cho tàu dài

trên lOOm, b > 0 cho các loại tàu, riêng giá trị GMmin

dược yêu cầu ít n h ất lớn hơn 0,35m (hoặc 0,5m trong

một số trường hợp)

Yêu cầu về chu kỳ lắc không tách rời yêu cầu ổn

định

Như đã trìn h bày trong tài liệu của người viết bài

này, GM và tiếp đó đường cong GZ((p), với (p - góc

nghiêng ngang của tàu, phụ thuộc vào kích thước chính của tàu, dặc biệt có quan hệ mật thiết với B và d hoặc với B/d Nếu ký hiệu:

* c3 _

Trang 16

Điều kiện GZXX > giá trị cho trước được thực hiện như sau:

Cánh tay đòn momen phục hồi tính bằng công thức:

GZ = lk - KG sinọtrong đó: lk- tay đòn, tính từ điểm K (Keel) đến

đường tác động lực nổi trong trạng thái tàu nghiêng (p°

Tay đòn này tính trong phần lý thuyết tàu, mục

ổn định ngang Tập hợp họ đường cong lk = F(V, <p) có

tên gọi pantokaren hoặc bằng tiếng Anh Cross

Curves Chương trình tính họ đường pantokaren tìm

thấy trong tài liệu đã dẫn, “Nguyên lý tàu thủy”

Giải thuật và sơ dồ tính được trình bày phần cuối

tài liệu này

Trang 17

Sức càn vỏ tàu, công suất mảy cần thiết

Phương trình cân bằng năng lượng cho tàu đề cập sức cản tàu và máy đẩy tàu nhằm chiến thắng sức cản đó Yêu cầu về năng lượng cũng như yêu cầu cụ thế máy tàu, cách tính sức cản đề nghị xem tài liệu “Sức cản tàu”, Đại học Bách khoa Tp Hồ Chí Minh, do người viết tài liệu này thực hiện

Thiết kế máy đẩy tàu là phần không tách rời cúa thiết kế tàu Chương trình tính giới thiệu trong tài liệu này trình bày cách thiết kê chân vịt nhóm B - Wageningen, SCI cánh từ ba đến năm Với tầu kéo và các tàu thiên về kéo nên sử dụng chân vit Kaplan trong ống đạo lưu do bề’ thử Wageningen công bố Chi tiết về các loại chân vịt xuất xứ từ

Netherlands đề nghị xem trong “Thiết kế máy dẩy tàu \

Sức cản tàu R được xét dưới dạng tổng của ba thành phần: sức cản ma sát, sức cản hình dáng và sức cản là hậu quả của việc tạo sóng tàu Hai thành phần đầu có thế coi là sức cản nhớt Mặt khác hai thành phần sau hợp thành sức cản dư

Trong thành phần sức cản ma sát của vỏ tàu có thể nhìn nhận các thành phần: ma sát vỏ tàu trên nước lặng và lực ma sát bổ sung trong quá trình khai thác

Tập họp các thành phần trên chúng ta có thể đánh giá sức cản dưới cách nhìn khác, rằng đây là tập họp của sức cản nhớt Rv và sức cản tạo sóng Rw

Trong thành phần sức cản nhớt, theo quan niệm mới từ những năm cuồi thế kỷ XX này, Rv gồm sức cản ma sát Rf như chúng ta đã đề cập và sức cản hình dáng Rp Trong thực tế thành phần Rf phụ thuộc vào chất lượng bề mặt còn sức cản sóng Rw và sức cản được ký hiệu Rp như vừa nhắc phụ thuộc vào hình dáng của thân tàu, và có thế coi tập họp của Rvv và Rp là sức cản dư Rr, để từ đó có thể tính R = Rf + Rr

Tổng quát có thể hình dung các thành phần sức cản như sau:

Trang 18

Sức cản toàn bộ R ị

Rw Sức cản ma sát R, Sức cản hình dáng

Rp

Sức cản sóng Rw

Sơ đồ trên đây được lập trên cơ sở giả thuyết về sự độc lập của các thành phần tạo nên sức cản toàn bộ Theo thuyết này sự tạo sóng của tàu chạy không ảnh hưởng và không phụ thuộc vào sức cản nhớt Có thể xét rằng sức cản trong quá trình tạo sóng là hiện tượng vật lý sinh ra trong mồi trường nước lý tưởng, chịu chi phối của lực hút trái đất Trong th àn h phần của sức cản nhớt, sức cản ma sát, sức cản hình dáng phụ thuộc hoàn toàn vào tính chất của chất lỏng, ngoài ra sức cản Rp phụ thuộc vào hình dáng vật thể Nói cách khác sức cản ma sát phụ thuộc vào chiều dày và các tính chất của lớp biên.Dạng chung sức cản tàu trong các bài toán thiết kế được viết dưới dạng hàm của số Reynolds và số Froude Ở đây cần lưu ý bạn đọc tên gọi:

Re (hoặc Rn) = gọi là số Reynolds, tiếng Anh: Reynolds number, Rn, chứ

Vkhông phải hệ số như người ta vẫn thường dùng sai

Fr (hoặc Fn) = gọi là số Froude, trong tiếng Anh được viết Froude number,

V g - Lviết tắ t Fn, chứ không phải hệ sô

Trong hai công thức trên: V- vận tốc tàu, trong hệ metre đo bằng m/s

L- chiều dài đường nước, trong hệ m đo bằng m, g- gia tốc trường trái đất, 9,81 m/s2

V- hệ số nhớt động học, quan hệ với mật độ p và hệ số nhớt động lực học Ịi như

= f(Re) + f(Fr)

Trong khi đó hệ sô" sức cản nhớt tính bằng công thức:

R

- p S v 2 2

f(Re)

Sức cản sóng (tạo ra sóng) là hàm của sô" Froude:

Rw = Cw- —pSv2 =f(Fr)

Một sô" công thức thực nghiệm tính sức cản vỏ tàu đang được dùng có kết quả có

th ể nêu như sau:

Sức cản ma sát

19

Trang 19

Trong số rấ t nhiều phương pháp tính sức cản dư, phương pháp Lap dễ dùng cho mục đích tính sức cản khi thiết kế sơ bộ Sức cản tàu theo cách phân loại của Lap, tùy

thuộc' nhóm tàu mang ký hiệu từ nhóm A đến nhóm E, khác nhau theo hệ số đầy lăng

trụ và khoảng cách tâm nổi so với mặt giữa tàu Hệ số sức cản dư trong các đồ thị của Lap có dạng:

C r =

- p A v 2 2trong đó: A- diện tích m ặt giữa tàu

Công suất cần thiết hay còn gọi công suất kéo EHP tính bằng tích (sức cản X vận tốc) Trong hệ SI:

với R trong kN, V bằng m/s, còn EHP tính bằng kW

Theo truyền thống của những người đóng tàu công suất kéo tính bằng công thức:

trong đó: R- tính bằng kG,

V - tính bằng m/s EHP- tính bằng sức ngựa

Cần lưu ý điểm cách biệt nhỏ giữa hệ thống đo châu Âu và hệ thống Anh - Mỹ, sứcngựa theo cách hiểu của châu Âu thường ký hiệu bằng tiếng Đức PS (viết tắ t từ chữ

Pferdestảrk) hoặc bằng tiếng Pháp c v {Chevaux) tính theo biểu thức Rv/75, còn sức ngựa

theo quan niệm của người Anh và Mỹ 1 HP = R.v/76

Theo cách hiểu của châu Âu hay của thế giới còn lại, ngoài Anh - Mỹ, công thức tính EPS còn được viết dưới dạng:

trong đó: Ct- hệ số cản vỏ tàu

Nếu diện tích m ặt tiếp nước (mặt ướt) của vỏ tàu tính tỷ lệ với đại lượng v 2/3, hoặc

hiểu theo cách là đại lượng tỉ lệ với D23, công thức cuối có thể viết thành:

Trang 20

Phương pháp tính sức cản mang tên E.E Papmieỉ được biểu thị bằng công thức

L C0

Giữa Co và Ce có mối quan hệ:

vDCông suất dẫn đến chân vịt, làm quay chân vịt, tạo lực đẩy tính bằng công thức:

p = R.v

trong đó: các hệ số TỊo, r\t tính đến hiệu suất động lực, ảnh hưởng đường trục, hộp số

Công suất cần th iết cho tàu để đạt tốc độ yêu cầu hoặc đạt sức kéo đặt ra tính theo công thức dạng chung:

p =

A m n

A v rantrong đó: A = D- lượng chiếm nước của tàu; V - vận tốc tàu

c - hằng số, tính theo công thức kinh nghiệm hoặc từ dữ liệu thống kê

Với tàu vận tải dưới 6000t, vận tốc dưới 23 Hl/h, công thức tính p có dạng:

Phương pháp th iết kế không dựa hoàn toàn vào tàu mẫu cũng được coi là một phương pháp tổng hợp Trong cách làm này người ta dựa vào nguyên tắc đi dần đến mục tiêu bằng các phép tính gần đúng dần Một trong những mô hình toán dùng để tính có thể như sau:

Bước 1: xác định lượng chiếm nước theo một trong các cách thông dụng.

Xác định các kích thước chính của tàu và các hệ số đầy

21

Trang 21

Bước 2: xác định sức cản vỏ tàu, xác định công suất máy chính, thiết kê máy đẩy

tàu, xác định vận tốc tàu,

Xác định khối lượng thân tàu

Điều chinh lượng chiếm nước của tàu

Bước 3: xác định chính xác lượng chiếm nước, công suất máy chính, chọn các máy

phụ, thiết bị tau

Bước 4: kiêm tra tính ổn định, chiều cao mạn khô, dung tích hầm hàng, kiểm tra

tính chống chìm, khả năng đi biển và nếu có đòi hỏi, kiếm tra độ bền chung toàn tàu

Bước 5: hiệu chỉnh toàn bộ thòng số đã tính, xác định thông số ở dạng cuối cùng

Cách làm khác có thê như sau:

Bước 1: xác định lượng chiếm nước.

Bước 2: xác định sức cản vỏ tàu, xác định công suất máy chính, thiết kế máy đẩy

tàu, xác định vận tốc tàu

Xác định khôi lượng thân tàu

Điều chỉnh lượng chiếm nước của tàu

Tính chiều dài L, hệ số đầy thế tích

Bước 3: tính H/T

Bước 4: tính B/T theo tiêu chuẩn ổn định

Bước 5: tính các đại lượng khác trên cơ sở D, L, ỗ, H/T, B/T

Dưới đây sẽ giới thiệu tiếp một phương án thiết kế tàu vận tải biển do Watson đềnghị

Các kích thước chính từ 4 đến 6 phụ thuộc vào các hạn chế sau:

4a- L/B, phụ thuộc vào công suất máy

5a- L/H, đảm bảo độ bền tàu

6a- L/T

7- B/H hoặc là H = f(B), đảm bảo ổn định tàu

8- T/B hoặc là T = f(B), ảnh hưởng đến chọn công suất máy tàu

9- T/H hoặc là T = f(H), đảm bảo chiều cao mạn khô

2 T h iết k ế th e o p h ư ơ n g pháp b iế n phân

Theo cách đặt vấn để của giáo sư Nogid, có thê sử dụng phương pháp biến phân xử

lý các bài toán cơ bản của thiết kế tàu

Bài toán xác định giá trị thích hợp nhất của CB (hay là ỗ) vả L/B khi các giá trị

của vận tốc tàu v s, sức chở đã được xác định gần đúng, đưa về dạng:

Trang 22

P ; V econỉ Q ; k; q; = f(CB, L/B, ) theo cách diễn đạt của giác sư Nogid.

Bài toán xác định kích thước tàu thích hợp nhất khi vận tốc tàu đã đặt ra, không được phép hạ thấp, còn trọng tải đã được xác định gần sát

N; Q; k; q; = f(P, CB, L/B)Bài toán mang tính tổng quát hơn được ghi làm hai dạng:

D; N; k; q; = f(CB,L/B, ) với V econ = const D; V econ, k; q; = f(CB, L/B, ) với N = constCách giải theo phương pháp này thông thường theo trình tự sau

D = f(CB, L, B, T, H) + pCác biến sô' tại phần này được ghi bằng ký hiệu được Nogid dùng trong thời bấy giờ: N- công suất máy chính, P- sức chở hàng, k, q- chỉ tiêu kinh tế - kỹ th u ậ t

Thay vào phương trình trên một dãy giá trị của một biến sô', ví dụ: CB = var, với giả thiết các biến khác, ví dụ: B/T = const; H/T = const; và dưới dạng khai triển người

giải bài toán cần thực hiện công việc theo sơ đồ:

trước

L/B

BÍT HÍT

Từ đó có thể nhận được các quan hệ:

D; N = f(CB, L/B) với V econ = const;

D ; V econ = ÍICB, L/B) với N = const; n = const

Để so sánh tính kinh tê' của các phương án, tiến hành vẽ các đồ thị dạng:

q; k = f(CB, L/B)Đồng thời với các chỉ tiêu kinh tế cần tiến hành thiết lập đồ thị cho các chỉ tiêu kỹ

thuật, liên quan đến mỗi phương án, ví dụ:

N; h/B; = f(CB, L/B)

Công việc theo hướng này đòi công sức hết sức lớn, và đòi hỏi sự so sánh cân nhắc cẩn thận khi xét chọn phương án Theo giáo sư Nogid, trong cách làm này, nếu sử dụng phương pháp (đúng từ giáo sư dùng) coi lượng chiếm nước không đổi, công việc làm có

thể được giảm bớt *\

D = Do = consttrong đó: Do - lượng chiếm nước khởi đầu của thiết kế

Thực hiện các phép tính xác định trọng lượng, dung tích, ổn định w cho các phương án theo sơ đồ tính thích hợp, ví dụ sơ đồ sau:

Xác định kích thước chính

1 Nogid L.M "Teoria proektirovania sudov", Sudpromiz, 1955.

23

Trang 23

Xác định công suất máy

CB = CBi cb = c b2

( ì ) ' ( a - ( b ) 3 (*]' (*)■ ( b ) 3 Vecon

23 II 23 < 23 o «T"

^ _ R X Vecon 1

Trang 24

Để chọn được phương án tốt nhất cần thiết phân tích tính kinh tế và tính kỹ thuật của tấ t cả phương án vừa lập Phương án được chọn phải thỏa m ãn tiêu chuẩn được đặt

ra từ trước Có thể hình dung rằng, cách làm này đòi một lượng tính toán khổng lồ liên quan đến tấ t cả phương án

3 T h iết k ế tà u dựa v à o lý th u y ết tối ưu

Khác với phương pháp biến phân, trong đó người th iết kế phải so sánh, đối chiếu hàng loạt phương án th iết kế dùng cho một sản phẩm, cụ thể hơn là cho một con tàu đang được đ ặt lên bàn cân, kết quả của phép so sánh đó là chọn ra một và chỉ một phương án “tốt n h ất” Trong thiết kế dựa vào lý thuyết tòi ưu người th iết kế không phải

so sánh, ảối chiếu các phương án và thực tế người thiết kế không thể làm được việc đó,

mà công cụ lao động được người thiết kế sử dụng “tự” xác định k ết quả “tối ưu” bằng con đường ngắn n h ất tùy thuộc cách điều khiển của người th iết kế Ở đây chúng ta gặp một khái niệm và khái niệm đó trở thành tên môn học chuyên đề là “tự động hóa thiết kế” Trong chuyên đề này khái niệm này để chỉ những công việc mà người th iết kế sai khiến công cụ lao động thay mình tính toán, xử lý Trong cách làm theo lý thuyết tốì ưu chúng

ta không phải để m ắt đến hàng ngàn, hàng triệu thậm chí hàng tỷ “phương án” sẵn sàng bày ra trước m ắt người xem, người thiết kế chỉ cần hướng dẫn công cụ lao động thử tìm vài phương án trong số hàng triệu, hàng tỷ sản phẩm để có căn cứ làm việc và sau

đó đi thẳng đến sản phẩm cần chọn

Bài toán th iết kế tàu trong thực tế không khác bài toán qui hoạch tuyến tính hoặc qui hoạch phi tuyến Giả sử chúng ta cần thiết kế một con tàu dân dụng nhằm mục đích mang lại lợi nhuận nhiều nhất chúng ta phải tính đến lợi ích kinh tế Lợi ích kinh tế ở

đây thường có thể hiểu là tàu sẽ mang lại lợi nhuận nhiều nhất trong phạm vi có thể, hoặc chi phí cho sản xuất và sử dụng tàu ít nhất trong điều kiện cho phép, hoặc hiểu

theo cách thời gian hoàn vốn của công trình đầu tư ngắn n h ất Trong thực tế người thiết kế phải giải bài toán tối ưu sau:

Hàm f(x) trong ngôn từ chuyên môn gọi là hàm mục tiêu Trong thiết kế tàu có thể coi nó dưới dạng hàm chi phí sản xuất, sử dụng hoặc thời gian hoàn vốn Bản thân nó chứa tấ t cả thông sỗ* xác định đặc trưng hình học và động học tàu

Thông thường các thông số trong hàm mục tiêu bị hạn chế trong phạm vi nhất

định, ví dụ chiều dài, chiều rộng, chiều cao tàu không thể là số’ 0 hoặc số âm, tỉ lệ giữa

chiều chìm và chiều cao không thể là số âm và không thể lớn hơn 1 Mặt khác tàu được

th iết kế phải đảm bảo ổn định, an toàn, phải đảm bảo độ bền khi nổi trên nước cũng như khi hoạt động Tất cả nhừng đòi hỏi này trở thành những hạn chế mà bài toán bị ràng buộc Và như vậy điều kiện cần của bài toán trên đây được viết như sau:

aj < Xi < bi

Mô hình toán cụ thể cho từng loại tàu bạn đọc sẽ tìm hiểu tại các phần tiếp theo Tại đây bạn đọc có thể tiến đến bước tiếp của chương trình là chọn phương pháp số cho lời giải ổn định, chương bốn và năm của tài liệu này

25

Trang 25

1.3 NGÔN NGỮ LẬP TRÌNH VÀ Tự 0ỘNG HÓA THIẾT KẾ

Ngôn ngữ lập trìn h là những phần mềm để phát triển các ứng dụng Ngôn ngữ lập trình đã trải qua quá trìn h phát triển và hoàn thiện, là công cụ quan trọng phát triển công nghệ thông tin Tự động hóa tính toán, thiết kế và hiển thị kết quả tính đều thông qua ngôn ngữ lập trình Những ngôn ngữ lập trình có ứng dụng rộng rãi và hiệu quả có thể nêu lên sau đây:

- FORTRAN (viết tắ t từ FORmula TRANslation), ra dời từ những năm năm mươi, chính xác hơn năm 1957, ứng dụng chủ yếu trong các ngành khoa học, kỹ thuật mà ngày nay gọi là công nghệ

Phiên bản đầu của FORTRAN thường được nhắc đến với tên gọi FORTRAN II, song phiên bản được dùng phổ biến nhất là FORTRAN IV Các dàn máy IBM thời bấy giờ nhận dạng phiên bản phổ thồng này dưới tên viết ghép FFORTRAN Ngôn ngữ thích hợp cho việc xử lý những bài toán cỡ lớn của thời đại được dùng trong các chương trình tính toán, thiết kế ô tô, tàu thủy, máy bay và tàu không gian, tính toán độ bền các công trình xây dụng, th iế t kế tôi ưu Có thể coi hơn 90% những chương trình lớn trong các lĩnh vực khoa học, kỹ thuật được viết bằng ngôn ngữ này

Thực tế sử dụng đã nảy sinh vài vấn đề phiền toái Các nhà sản xuất các chương trình đa năng tự cho phép mình viết các bộ dịch cho FORTRAN theo sở trường của riêng mình Tuy phần lớn các nhà sản xuất vẫn dựa vào tiêu chuẩn của ANSI-American National Standards Institute để biên soạn compiler cho FORTRAN IV song chẳng có bộ dịch nào giông bộ dịch nào, vì người nào cũng cô" xé rào khỏi chuẩn ANSI Tình hình ấy bắt buộc ANSI phải ra tay thống nhất, năm 1978 phiên bản cuối cùng mang tên ANSI X3.9-1978 đã đặt dấu chấm cho sự bùng phát tự do Phiên bản này có tên gọi FORTRAN

77, ngày nay được dùng rộng rãi

- Algol, viết tắ t từ Algorithm, ra đời vào đầu những năm sáu mươi với sự tham gia của nhiều nhà toán học, các người viết chương trình chủ yếu từ châu Âu Ngôn ngừ được thiết kế rất trong sáng, clễ học, dễ thực hiện Đây là phiên bản của bộ môn toán tính

dùng trong các ứng dụng máy tính, ngôn ngữ thích hợp cho việc giải quyết những vấn đề

khoa học của thời đại T ất cả các thuật toán chuẩn ra đời trong thời kỳ này được chuyển thành chương trình viết bằng Algol 60 Cho đến những năm cuối bảy mươi chương trình bằng ngôn ngữ Algol còn được chạy trên các dàn máy lớn Những chương trình mẫu giải quyết những vấn đề tính toán theo phương pháp sô", đặc biệt phần đại số tuyến tính, viết bằng Algol từ những năm sáu mươi cho đến tận ngày nay vẫn là những chương trình ưu việt, chưa gì thay được \

Ngôn ngữ này là ngôn ngừ tô"t song không sinh ra tại Mỹ, và theo đó không tìm được chỗ đứng Mỹ, việc ấy đồng nghĩa với sự hạn chê" số người dùng và sự phát triển tiếp theo

- COBOL (Common Business Oriented Language), ra đời năm 1960, áp dụng chủ

yếu trong lĩnh vực kinh doanh, thương mại Ngôn ngữ này được hoàn thiện và còn tìm thấy chỗ đứng tậ n hôm nay

1 Toàn bộ thuật toán thuộc đại số tuiyến tính do các nhà toán học giỏi nhất biên soạn đã được mã hóa- thành chương trình bằng ngôn ngữ Algol 60, in lạ i trong tài liệu do Wilkinson J.H và Reinsch c chủ biên "Handbook for auotomatic computation", Heidelberg Springes, 19 71.

Trang 26

- BASIC (viết tắ t từ Beginner's All-purpose Symbolic Instruction Code) do Kemeny

và Kurtz phát triển từ 1964 tại Mỹ, là ngôn ngữ dùng cho m á y tính nhỏ Basic dễ học và

sử dụng không khó lắm, song khả năng giải quyết công việc khống lớn Điều phiền toái nữa là ngôn ngữ này thuộc dạng “dễ tính” nên được phát triển gần như không kiểm soát được Tồn tạ i quá nhiều “thổ ngữ” từ Basic nên khó chọn thứ tiếng chuẩn mực cho ứng dụng quan trọng

Năm 1975 Gates w viết ngôn ngữ củng mang tên BASIC cho máy Altair, dạng microcomputer đầu tiên Ngôn ngữ mang tên BASIC ngày nay thực tế là các cải biên của thứ tiếng mà Gates đã đưa ra thời đó

- Ngôn ngữ PL (Programming Language) còn được viết dưới dạng PL1 'hoặc PL/1,

cải biên cách viết PL1, được người khổng lồ lúc bấy giờ IBM đặt ra trong thời gian 1963-

1966 sau thành công của FORTRAN và các ngôn ngữ khác tại Mỹ Ngôn ngữ thừa kế những tốt đẹp của FORTRAN, Algol châu Âu,* Cobol Bản thân ngôn ngữ bậc cao này cũng đã có tham vọng sử dụng ngôn ngữ assembly làm các phương tiện nối ghép, chạy chương trình mẫu Người ta đặt thêm số 1 cuối tên gọi với hàm ý “ngôn ngữ lập trình số 1” Tuy ý tưởng hay, th iết kế công phu, song thực tế sử dụng ngôn ngữ không được như ý muôn chủ quan của những người sinh non ra nó Ngôn ngữ được quảng cáo rùm beng, song người dùng không nhiều vì các compiler của PL làm việc quá tồi Ngôn ngữ không thọ được bao lâu, nhờ vậy ngày nay th ế hệ trẻ khỏi phải nghe quảng cáo ngôn ngữ

“number one” nữa

- Pascal ra đời chính thức 1971 Người có công thiết kế ngôn ngữ là Niklaus Wirth Tên gọi của ngôn ngữ Pascal để ghi nhớ công lao nhà toán học lớn th ế kỷ XVII Blaise Pascal Ngôn ngữ Pascal thuộc nhóm có cấu trúc chặt, là ngôn ngữ lập trình tiêu chuẩn

mà bất cứ người lập trình nào cũng nên biết Theo nhận định của các nhà chuyên môn, đây là thứ ngôn ngữ nếu diễn đạt bằng thứ tiếng giành cho những nhà thông thái - tiếng Latin thì đó là “lingua franca”, làm cả chức năng “common tongue”, là tiếng nói chung cho lập trình Ngày nay trong các trường học, trong các lớp học về lập trình, tại các kỳ thi năng khiếu, ngôn ngữ này vẫn còn là ngôn ngữ chính thức để truyền thụ và thi tài

- c là ngôn ngữ lập trình đa năng, ứng dụng vào giải quyết những công việc thực tế nảy sinh từ cuộc sống, c được coi là ngôn ngữ gần “ngôn ngữ máy”, có khả năng giải quyết mọi công việc mà những ngôn ngữ lập trình “bậc cao” sinh trước nó như: Fortran, PLl, Pascal đã làm, đồng thời C ÒĨ1 giải quyết cả những việc mà đàn anh không muôn chạm tới, những việc chỉ giành cho ngôn ngữ gần gũi máy như Assembler giải quyết

Lịch sử phát triển của c có nhiều điều đáng nhắc Yêu cầu thực tế của AT&T là phải có ngôn ngữ dùng cho hệ điều hành UNIX, sử dụng trên máy DEC PDP-11 Việc này được giao cho Dennis Ritchie Hệ điều hành, compiler và chương trình ứng dụng đều được D Ritchie viết bằng c nầm 1972 Thực ra, trước đó Martin Richards đã được giao công việc tương tự và kết quả của nó là ra đời ngôn ngữ có tên viết tắ t BCPL Trên cơ sở BCPL năm 1970 Ken Thompson soạn ngôn ngữ B (có thể bắt nguồn từ cái tên BCPL) và

đã soạn đủ phần mềm để điều hành DEC PDP-7 Vào năm 1972 với sự cộng tác của K Thompson, D Ritchie đã đi từ B đến c Nguồn gốc của tên gọi “C” chỉ đơn giản vậy Năm

1978 nhà xuất bản Prentice-Hall tung ra thị trường “The c Programming Language” do

Brian w Kernighan và Dennis M Ritchie, viết tắ t là K&R, cùng viết Sách ra đời là

27

Trang 27

món quà vô giá đối với giới lập trình, c vượt ra khỏi ranh giới ban đầu là ngôn ngữ của

hệ điều hành UNIX để thâm nhập vào DOS và hệ điều hành của IBM Nàm 1983 American National Standarts Institute (ANSI) thành lập ủy ban để tiêu chuẩn hóa ngôn ngữ c Kết quả làm việc của ủy ban này là khẳng định tính đúng đắn của c và ủy ban chấp nhận (có thêm bớt) ngôn ngữ c với tên “ANSI C” ANSI c chính thức có hiệu lực từ năm 1988 Cuối những năm tám mươi và đầu những năm chín mươi th ế giới lập trình chứng kiến sự bùng nổ ứng dụng c Ngôn ngừ c đang lấn sân của những ngôn ngữ lập trình đàn anh đã một thời vang bóng

Ngoài hệ điều hành UNIX của AT & T, nhiều hãng sản xuất phần mềm xây dựng các bộ dịch c để đưa vào hoạt động Các bộ dịch có độ tin cậy cao gồm:

Turbo C++ Professional, Borland C++

Zortech c cho máy IBM PC

Microsoft c

Mixsoftware’s Power

Điểm mạnh của c được thể hiện trên nhiều mặt c rấ t gần với ngôn ngữ Assembly

và giao tiếp dễ dàng với Assembly, c thao tác trên các bit nhanh chóng, chính xác và hiệu quả như ngôn ngữ máy vẫn làm c chấp nhận làm việc với mọi kiểu dữ liệu, với độ chính xác do người dùng đặt Với biến con trỏ c phát huy th ế mạnh khi thao tác mảng, chuỗi, hàm, So với các ngôn ngữ lập trình khác, c điều khiển con trỏ thuần thục, dễ dàng hơn Con trỏ giúp c đẩy nhanh tốc độ tính toán, giảm chi phí bộ nhớ Con trỏ làm cho c vượt trội các ngôn ngữ khác về tính mềm mại, dễ sử dụng và tạo cho c sức mạnh

Chương trình viết bằng ngôn ngữ c, bất kể lớn hay nhỏ, dài hay ngắn, gồm có hàm

và biến Hàm chứa các dòng lệnh ghi rõ các phép tính phải thực hiện còn biến ghi nhớ

và lưu giữ giá trị hiện hành lúc chương trình làm việc Hàm ở đây tương đương với

chương trình con hoặc thủ tục trong Fortran và Pascal Ớ ví dụ trên đây, hàm có tên là

main (chương trình chính) Với một hàm bất kỳ, bạn tùy ý gán cho nó một tên riêng bạn

thích Trong trường hợp cụ thể này toàn bộ chương trình chỉ có một hàm và hàm đó đóng vai trò chương trình bởi vậy nó có tên chuẩn là main

Chương trình trên đây gồm các phần sau:

Phần 1: dòng 1 chứa đường dẫn cho compiler

Phần 2: ghi chú tạ i dòng 2

Phần 3: dòng 3 gọi là nguyên bản của hàm

Trang 28

Riêng quá trìn h dịch tiến hành theo thứ tự sau Chương trình gốc đi qua máy quét

(scanner) dưới dạng một dòng các ký tự Máy quét nhận dạng đợt đầu, chỉ chấp nhận các

ký tự đã được phép đi qua để đến bộ phận phân loại ra từ khóa, nhận dạng, hằng sô", ký hiệu Tạm gọi giai đoạn vừa qua là giai đoạn kiểm tra chính tả Bài viết đúng chính tả mới được đưa đến bộ phận kiểm tra ngữ pháp Trong ví dụ trên, sau printf phải có dấu

mở và sau đó đóng lại bằng dấu “)” Khi đã làm xong tấ t cả công việc mệt nhọc đó compiler mới cho phép chuyển bộ mã dịch sang object file

Từ khóa

Đây là một trong sáu nhóm được c phân loại Năm nhóm còn lại là dấu nhận

dạng, hằng sô", dấu đặc biệt cho các xâu ký tự, toán tử và ký hiệu nêu ở phần đầu ANSI

c dành 32 cụm từ sau đây làm từ khóa Trong chương trình c sẽ viết, đừng bao giờ sử dụng các từ khóa này làm tên riêng cho chương trình, nhận dạng, macro Những từ khóa

đó là:

Thư viện của c

Thư viện chuẩn cho c tùy thuộc vào khả năng cung cấp của các hãng sản xuất phần mềm liên quan đến c Theo qui định trong ANSI c các hàm, kiểu, vĩ mô của thư viện

chuẩn được khai báo trong các header chuẩn Khai báo khi mở đầu bạn phải dùng, ví dụ:

#include <stdlib.h>

là xuất phát từ các từ vừa nêu Std có nghĩa là chuẩn, lib - thư viện, còn “h ” viết tắ t từ

header.

<assert.h> <float.h> <math.h> <stdarg.h> <stdlib.h>

<ctype.h> <limits.h> <setjump.h> <stddefh> <string.h>

<erro.h> <local.h> <signal.h> <std.h> <time.h>

Trong những chương tiếp theo của tài liệu, các ví dụ minh họa phương pháp tính và các chương trình tính được thể hiện bằng ngôn ngữ c Những hàm toán tính được chọn

29

Trang 29

từ các chương trình mẫu viết bằng Algol sau đó được “dịch” sang c Những hàm khác được chuyển từ FORTRAN sang hoặc viết mới bằng c Bạn đọc quan tâm đến ngôn ngữ

c đề nghị tìm đọc thêm “Giáo trình ngôn ngữ lập trình c, giành cho học viên kỹ thuật viên tin học”, Vi tính Bách khoa, Tp Hồ Chí Minh, 1997

- Ngôn ngữ C++

Bản thân c++ là sự phát triển ở mức cao từ c, song nó lại không hoàn toàn là c

Ngôn ngữ c thuộc nhóm ngôn ngữ lập trình có cấu trúc chặt, còn c++ lại tạo cho người viết những thỏa m ãn ngoài mong đợi

Trong c chương trình được xây dựng với mục đích rất cụ thể, để giải quyết một việc

cụ thể nào đó c ghi nhận dữ liệu, dữ liệu đó có thể ở dạng đơn giản hoặc phức tạp, xử lý

dữ liệu và thông báo ra cũng là dữ liệu vì dữ liệu là đối tượng phục vụ của nó Còn c++,

hiểu theo nghĩa lập trìn h hưởng đôi tượng (OOP) thì lại nhắm vào đối tượng, mà đốì

tượng theo nghĩa chung nhất là một cái gì đó có giới hạn

Trong đối tượng người ta đưa dữ liệu vào và cả các phương pháp khai thác, sử dụng

dữ liệu nữa Lập trìn h hướng đối tượng không chỉ hạn chế làm một việc cụ thể mà giải quyết bất kỳ việc gì cần cho đối tượng

Trước khi mang tên c++ ngôn ngừ này có tên ban đầu là “C with Classes” tức là “C

với các lớp” Lớp đi liền với chủng ta khi còn dùng C++.

c ra đời trê n thực tế từ 1972 từ Bell Labs, do Dennis Ritchie và Ken Thompson viết Ban đầu c chưa nổi tiếng ngay, nó phát triển âm thầm cho đến năm 1978 khi

Brian Keringhan và Dennis Ritchie tung ra “The c Programming Language” Từ đó ngôn

ngữ c phát triển nhanh và được tiêu chuẩn hóa bằng hội đồng của ANSI (Mỹ), từ 1983 đến năm 1988

Không phải điều ngạc nhiên, cũng chính từ Bell Labs, nơi đã sản sinh ra c, năm

1986 “The c++ Programming Language” do Bjarne Stroustrup viết với tư cách là “một

cuốn sách” ra đời, mang lại cho người lập trình không khí mới

C++ tự nó đã là ngôn ngữ lập trình như tên gọi của cuốn sách, song nó thừa kế một cách hoàn mỹ những gì là tố t đẹp nhất của c và phát triển sự tốt đẹp ở mức cao hơn

Thực tế đã chứng minh c là ngôn ngữ uyển chuyến, có khả năng thâm nhập vào các lĩnh vực tính toán, quản lý song c++ còn linh hoạt và uyển chuyển hơn c là ngôn ngữ vô cùng mạnh song c++ được coi là mạnh hơn

Giống như các ngởn ngữ lập trình khác, c theo nghĩa cũ vẫn bị rào cản trong một vài hạn chế, còn c ++ đang phá bỏ rào cản đó Trong thực tế có thể coi c++ là công cụ làm việc thích hợp cho những người lập trình Trong quản lý dữ liệu, c và nhiều ngôn ngữ khác sử dụng struct (hay còn gọi là record nếu hiểu theo nghĩa chung nhất) để quản

lý các đối tượng Công việc quản lý đó không có gì chê trách được Song khác với struct,

khi C++ đưa vào lớp (class) cả đối tượng và công cụ quản lý đối tượng nó liền phát huy

th ế mạnh đến mức không ngờ được

Ngôn ngữ lập trìn h nếu kể đầy đủ phải bao gồm từ ngôn ngữ máy và ngôn ngữ gần với ngôn ngữ máy Có th ể xếp các ngôn ngữ máy tính vào trong năm nhóm, hay nói cách khác trong năm th ế hệ của ngôn ngữ lập trình

Thế hệ đầu tiê n giành chỉ các mã số 0 và số 1 mà mỗi bit của máy tính đều hiểu Ngôn ngữ này làm người thông ngôn duy nhất trong những năm bốn mươi đến đầu

Trang 30

những năm năm mươi Tại thời điếm này máy chỉ có thể “hiểu” ngôn ngữ độc nhất là mâ nhị thức (binary code), gồm 0 và 1 Ngôn ngừ đầu tiên này còn mang tên gọi “ngôn ngữ máy”.

Thế hệ thứ hai của ngôn ngữ máy tính đánh dấu bằng sự ra đời của ngôn ngữ Assembly, ngày nay có người dịch là hợp ngữ Assembly giúp cho máy tính nhận diện và dịch sang ngôn ngữ máy các mã mnemonic như ADD (cộng, thêm vào), SUB (trừ), MOV (dịch chuyển) Các chương trình sử dụng các mnemonic để viết được gọi là assembly, còn chương trình dịch assembly sang ngôn ngữ máy có tên gọi là Assembler Ngôn ngữ Assembly ra đời trong những năm năm mươi và đến tận hôm nay còn giữ được vị trí rấ t cao trong làng ngôn ngữ lập trình, mặc dầu bản thân nó là cầu nôi giữa “ngôn ngữ bậc thấp” với “ngôn ngữ bậc cao”

Thế hệ thứ ba đánh dấu bằng sự ra đời và thông trị của “ngôn ngữ bậc cao” (tiếng

Anh viết là HLL - High Level Languages), kể từ Algol, FORTRAN, Ngôn ngữ bậc cao

còn được gọi là ngôn ngữ thủ tục hóa Sở dĩ có tên gọi như vừa nêu vì rằng cách diễn đạt bằng ngôn từ khi dùng HLL không khác gì làm thủ tục tính toán Người ta viết các lệnh dưới dạng công thức tính như đang viết công thức toán vậy, không hề để ý đến nguyên lý làm việc của ngôn ngữ máy là thứ ngôn ngừ duy nhất máy có thể hiểu Ví dụ khi cần tính “số quả còn lại c, nếu biết rằng tổng số quả A, em đã ăn B quả”, người lập trình chỉ cần ra lệnh:

c = A - B

Để máy hiểu được ý trên n h ất thiết phải dịch dòng lệnh này ra ngôn ngữ máy

Những bộ dịch cho HLL mang một trong hai tên gọi “compiler” hoặc “in te r p r e te r Thứ tự

truyền đạt lệnh đến máy có thể hình dung như sau: người lập trình -> compiler hoặc

interpreter -> Assembler —> máy tính.

Bạn đọc cần phân biệt hai tên gọi vừa nêu “compiler” và “interpreter” cùng làm một việc, trong tiếng Anh người ta dùng khái niệm “translation” (nghĩa sát của nó là dịch) để diễn đạt việc ấy Compiler dịch toàn bộ chương trình, giông như cách dịch toàn

bộ bài nói của một ai đó từ tiếng nước này sang ngôn ngữ của nước chủ nhà Trong khi

đó interpreter dịch từng câu lệnh một, giông kiểu người phiên dịch (tiếng Anh gọi là interpreter) chuyển từng câu nói của một vị khách sang tiếng chủ nhà Trường hợp sau bắt buộc phải có m ặt cả hai thành phần cho cồng việc dịch là người phát biểu bằng tiếng nước ngoài và người phiên dịch Compiler thực hiện công việc nhanh hơn, gọn hơn Công việc kiểu sau chậm hơn vì phải chờ thông tin qua lại giữa người phát biểu và phiên dịch viên Tuy nhiên interpreter có Ưu điểm nổi trội là làm cho chương trình hoạt động thuận lợi và dễ dàng hơn Vì không cần thiết phải dịch xong toàn bộ chương trình mới chạy chương trình, interpreter chuyển từng phần chương trình vào hoạt động nếu phần việc việc ấy đã được viết đúng bằng ngôn ngữ lập trình Trường hợp có lỗi trong câu lệnh, interpreter phát hiện lỗi ngay tức thì và yêu cầu chỉnh lại ngay lúc đó Sau mỗi lần chỉnh, nếu đúng, câu lệnh sẽ được thực thi ngay Trong thực tế người ta đang kết hợp cả hai cách làm việc nhằm đẩy nhanh tốc độ thực hiện và tạo thuận lợi tối đa cho người dùng

Tại đây bạn đọc cần làm quen thêm với khái niệm mã nguồn và mã đối tượng Mã chương trình được gọi là mã nguồn Sản phẩm có xuất xứ từ mã nguồn, sau khi dịch gọi

là mã đốì tượng Tất cả phần mềm khi bán ra đều được ghi lại dưới dạng mã đối tượng

31

Trang 31

Với các bản dịch người dùng không còn một khả năng nào để đọc, để nhận biết và không

có cách nào để cải biên, thay đổi

Thế hệ thứ tư giành cho ngôn ngữ bậc rất cao (Very high level languages) Trong

trào lưu này, nhờ những Generator, người ta chỉ cần đưa những đặc trưng chính của công việc, generator chuyển thông tin vào hệ thống làm việc của máy như đã miêu tả cho th ế

hệ trước, máy tín h “tự động” tạo ra những chương trình ứng dụng Ý tưởng này nảy sinh

từ những năm bảy mươi Những ngôn ngữ ra đời trong thập niên này, phục vụ công việc

quản lý cơ sở dữ liệu (tiếng Anh: Database Management) mang dáng dấp của ngôn ngữ

th ế hệ thứ tư này Các ngôn ngữ SQL (viết tắt từ Structured Query Language), QBE

(Query-By-Example) và QUEL (Query Language) là đại biểu xuất sắc nhất trong nhóm

Từ 1986 bắt đầu quá trình tiêu chuẩn hóa SQL Năm 1992 ANSI chính thức thông qua

tiêu chuẩn cho SQL-92 SQL đang được dùng trong các phiên bản Sybase SQL Server,

Microsoft SQL Server, IBM O S/2 Extended Edition Database Manager, DEC RD b/VM S

và Oracle Server for OS/ 2 Trong tài liệu này sẽ không đề cập đến ngôn ngữ này,

người viết chỉ có thể hứa nhanh chóng hoàn tấ t bản thảo giới thiệu tài liệu về các ngôn ngữ này

Thế hệ thứ năm gắn liền với nhóm ngôn ngữ trí tuệ nhân tạo (AI - Artificial

Intelligence) Đây là ngôn ngữ không thủ tục (khác với khái niệm ngôn ngữ thủ tục vừa

nêu trên), gắn liền với trạng thái của đối tượng trong vấn đề đang giải quyết, với quan

hệ giữa các đổì tượng Một trong các ngôn ngữ đang dùng có kết quả PROLOG, đang được người N hật chấp nhận, phát triển và hoàn thiện Ngôn ngữ mang tên Nhật HIMIKO xuất p h át từ PROLOG, đang là cơ sở cho nhóm ngôn ngữ thế hệ thứ năm này Trong lĩnh vực quản lý dữ liệu, sự gắn bó giữa ngôn ngữ th ế hệ thứ tư và thứ năm đã

sinh ra DATALOG chuyên phục vụ công tác các hệ thống dữ liệu Ngôn ngữ LDL (Logic

Data Language) đang chiếm vị trí xứng đáng trong lĩnh vực truyền dữ liệu.

phát triển từ những năm sáu mươi tại Mỹ, ngày nay đóng vai trò hết sức quan trọng trong công cuộc tự động hóa thiết kế Tài liệu về LISP và AutoLISP đề nghị bạn đọc tìm hiểu thêm qua sách chuyên đề của cùng người viết.

Những cấu trúc chính trong ngôn ngữ c

Trong tà i liệu tự động hóa thiết kế này, các chương trình mẫu được mã hóa bằng ngôn ngữ c Với bạn đọc chưa viết chương trình bằng c cần xem phần này trước khi làm quen các ví dụ minh họa

Statement2

Trong đó else là phần chọn lựa, có nghĩa là nó có thể xuất hiện khi cần hoặc không có m ặt else cú pháp vẫn đúng Biểu thức expression phải được xử lý trước tiên Nếu điều kiện đ ặt ra trong biếu thức này là khác 0 (có nghĩa: đúng) thì statemantl được

Trang 32

thi hành Nếu điều kiện đưa ra kết quả bằng 0 (mang nghĩa: sai) thì theo sau else

statement2 sẽ được thực hiện.

Ở dạng đơn giản nhất If và theo nó là phép thử dưới dạng biểu thức đủ để làm công việc:

if (expression)

mà không cần viết đầy đủ if (expression! = 0)

Giả sử đang tồn tại 2 số nguyên a, b; yêu cầu đặt ra là: cần gán vào z giá trị a nếu

a lớn hơn b, ngược lại z 30 nhận giá trị của b Đoạn chương trình Gau làm việc này

Bạn lưu ý, if vòng ngoài không có else theo cùng Nếu đổi chỗ của else (dưa else ra

vòng if ngoài) ý nghĩa của đoạn chương trình §Ễ thay đổi Bạn hãy suy luận xem đoạn chương trình sau mang ý nghĩa gì ?

Trang 33

i f (expressison) Statem ent else

if (expressison) Statement else

Statement

Theo cách gọi của những người soạn ngôn ngữ c thì đây là cấu trúc else - if Cấu

trúc này là cách tốt n h ất để thực hiện quyết định do nhiều yếu tố gây ra Thứ tự thực hiện lần lượt từ trê n xuống, đúng hơn là từ ngoài vào trong, nếu điều kiện thử của expression là khác 0 hãy thực hiện statement, ngược lại thì bắt tay vào vòng if đứng sau else Công việc lặp lại động tác như vừa nêu Khi thực hiện xong statement, công việc

trong if sẽ kết thúc để thoát ra ngoài Ví dụ:

7 while (low < = high) {

8 mid = (low+ high) /2;

Trang 34

ca se c o n s t- e x p r : S t a t e m e n t s

[default]: Statements

Trước tiên expression của switch 0 phải được đánh giá Expression này chỉ thuộc một trong hai kiểu int hoặc char Khi giá trị biểu thức đã được xác định, switch (công tắc điều khiển) hướng chương trình đến một trong ba vị trí sau đây:

1- Nếu case const expr phù hợp với giả trị expression, các dòng lệnh trong phạm vi của case (trương hợp) này được thực thi.

2- Nếu không có một case conts expr trong lòng của switch 0 phù hợp với expression, chương trình sẽ cho thi hành công việc ghi sau default, nếu bạn có đưa

default (mặc định) vào thành phần của switch ()

3- Trường hợp không có default, các trường hợp case đều không phù hợp với biểu thức expression, chương trình bỏ qua cấu trúc switch để tiếp tục công việc của mình

Đường đi của Switch có thể miêu tả trên sơ đồ sau:

Trên sơ đồ bạn thấy rõ, “công tắc” chỉ cho phép chương trình nhảy đến đúng trường hợp 2 là trường hợp phù hợp với khóa đã đăng ký

Dưới đây bạn sẽ đọc tiếp một chương trình do các tác giả K&R của ngôn ngữ c viết Chương trình làm nhiệm vụ đếm số lần xuất hiện của con số, khoảng trống và các

8 for (i = 0; i<10; i ++) ndigit [i]= 0;

9 while ((c = getchar 0) ! = EOF) {

10 switch (c) {

11 case ‘O’: case ‘1’: case ‘2’; case ‘3’; case ‘4’: case ‘5’: case ‘6’:

12 case ‘7’: case ‘8’: case ‘9’:

Trang 35

Trong chương trình bạn hãy để ý đến dòng lệnh break, là lệnh yêu cầu lập tức

thoát ra khỏi switchO Break còn được dùng trong các cấu trúc for 0, while thực hiện các

vòng lập lo o p Mặc dù sau default không cần thiết phải đặt break, song sự có mặt của nó không làm hại cho ai cả

Biểu thức sau while:

w h ile (e x p re ssio n )

s ta te m e n ts

Biểu thức expression được dánh giá trước Nếu giá trị của nó không phải là 0, các statem ent được th i hành và sau đó quay lại đánh giá expression Vòng lặp cứ tiến hành mãi cho đến khi expression dược đánh giá là 0 Tại thời điểm này chương trình thoát khỏi while Ví dụ tính tổng các số từ 1 đến 10 như sau:

int number = 1, total = 0 ;

Trang 36

/* c á c lệ n h cấn th iế t t ạ i đây */

Cấu trúc Do - While 0

Cấu trúc while 0 vừa nêu yêu cầu kiểm tra phép thử truíớíC, thực hiện công việc sau

Có khả năng chỉ sau lần thử đầu kết quả đưa ra false fhoặ.c 0)) và vòng lặp while không

được thực hiện Trong thực tế sử dụng, có lúc người ta yêu cầu (chương trình cứ thử làm

việc một lần rồi mới kiểm tra phép thử Nếu phép thử đạt g:iá trị true (hoặc 1) các bước

lặp lại từ đầu, ngược lại sẽ cho phép thóat Cách làm này đượ*c gọi ỉà thực hiện trước, thử sau, người Mỹ gọi back - end condition checking

1 /* itoa: chuyển n thành ký tự chữ cái trong s */

2 void itoa (int n, char s [ ])

Cú pháp của vòng lặp for 0 như sau:

for (exprl; expr2; expr3)

statement

Bạn nhớ phân biệt trong dấu 0 chứa ba nhóm biểu thức cách nhau bằng dấu “f

Trong mỗi nhóm có thể chứa từ 0 biểu thức đến nhiều biểu thức, theo dạng:

for (exprl, exprla, ; expr 2a, expr2b ; expr 3, expr3a )

37

Trang 37

Trong đó exprl để gán giá trị đầu cho biến số (hoặc nhóm biến số), expr2 (hoặc expr2a, expr2b) là biểu thức thử tương tự expression dùng cho while 0 nêu trèn Biểu thức expr3 làm thay đổi giá trị của biến (hoặc nhóm biến)

Ví dụ đơn giản bạn hay gặp là tính tổng đại số của một mảng, ví dụ gồm mười

thành phần Áp dụng cấu trúc for 0 cho phép tính tổng, bạn có thể tính như sau:

int c [10];

int i, sum;

sum = 0;

for (i = 0; i <10; i + +) sum + = c[i];

Hoặc có thể viết gọn hơn như sau:

for (i = 0, sum = 0; i < 10; sum + = c [i], i + +);

Bạn cần biết thêm khi khai báo bạn có quyền bỏ qua exprl hoặc expr2, hoặc expr3, hoặc bỏ qua cả ba biểu thức trên Chỉ có một điều cần nhớ là không dược bỏ dấu bạn hãy để ý, nếu expr2 không xuất hiện, có nghĩa là không có diều kiện thử, vòng lặp của bạn trở thành vĩnh cữu Bạn phải dùng đến các biện pháp can thiệp bằng tay để thóat khỏi vòng lặp Ví dụ sau vẫn hợp lệ

for (;;) {

Con trỏ

Trong ngôn ngữ c, con trỏ được định nghĩa là biến chứa địa chỉ của biến Điều cần

nhớ duy nhất về con trỏ chính là định nghĩa đó và con trỏ luôn được đối xử như là một biến

Bạn đọc còn nhớ, trong máy tính, mỗi một byte trong bộ nhớ đều mang một địa chỉ, được đánh số lần lượt từ 0 đến sô' lớn nhất mà máy có được Mặt khác một kiểu biến

có thể chiếm một hoặc nhiều byte Tương tự vậy, con trỏ là một kiểu biến, chiếm một hoặc nhiều byte (thông thường trong phạm vi các biến đơn giản chiếm hai hoặc bốn byte)

để ghi lại địa chỉ của kiểu biến mà nó trỏ tới Ví dụ Ch là biến kiểu char chiếm một

byte, còn p (viết tắ t từ pointer) là con trỏ kiểu char, trỏ đến biến Ch, cũng chỉ chiếm một byte, sơ đồ làm việc giữa con trỏ p và biến Ch như nhau:

Trang 38

Trong trường hợp này p được giao công việc “chỉ điểm” Chỉ Toáh tử & chỉ được

dùng cho các đối tượng trong bộ nhớ, không được sử dụng cho biểu thức, hằng số hoặc biến thanh ghi

Toán tử đơn có tên gọi là toán tử gián tiếp, khi áp dụng với con trỏ, nó thâm

nhập vào ngay đôi tượng mà con trỏ trỏ đến

Từ ví dụ trên, có thể mở rộng phạm vi đăng ký cho các biến khác Các phép đăng

ký sau đây sẽ hợp lệ:

Mỗi con trỏ, bị hạn chế trong phạm vi, chỉ được trỏ đến một dạng thức dữ liệu mà

thôi, ví dụ đến int, double Chỉ có một trường hợp ngoại lệ, con trỏ dạng thức void

được phép chỉ đến tấ t cả các kiểu dữ liệu

Chúng ta hãy quay trở lại với ví dụ đầu Nếu ip trỏ đến số nguyên, các phép tính sau đây sẽ hợp lệ:

* ip = * ip + 2; /* tăng *ip thêm 2 */

* ip += 2 ; /* kết quả như trên */

Con trỏ không chỉ được dùng để trỏ đến biến dữ liệu mà còn được dùng khi cần trỏ đến con trỏ Trong c được phép đăng ký:

int i = 1; /* gán i = 1 */

int * ip = &i; /* ip chỉ đến i còn * ip mang giá trị một sô" nguyên */

int ** iq = & ip; /* *iq là con trỏ của con trỏ int, còn ** iq mang giá trị số nguyên */

Ví dụ sau minh họa cách làm việc của con trỏ pa với mảng một chiều a[]

int * pa;

Với phép gán:

pa = & a [0]; / * được viết theo cách khác pa = a */

làm cho con trỏ chỉ vào phần tử đầu tiên của mảng a[0], còn pa chứa địa chỉ của a[0] Nếu tiếp tục gán:

/* *df thuộc kiểu double */

/* *fd thuộc kiểu float */

/* biểu thức * cp - dạng char hoặc chuỗi */

39

Trang 39

Khi pa đã chỉ vào một phần tử đặc trưng- của mảng, trong thí dụ này là a[0], ttheo định nghĩa pa + 1 sẽ chỉ vào phần tử kế tiếp, còn pa + i chỉ vào phần tử thứ i+ 1 của mảng.

a:

Bằng cách hiểu tương tự, chúng ta hiểu quan hệ giữa con trỏ và thành phần của mảng như sau:

* pa là nội dung của phần tử a[0]

* (pa + 1) là nội dung của phần tử a[l]

* (pa + i) là nội dung của phần tử a[i]

Quan hệ giữa chỉ muc của mảng a và các phép đại sô" của con trỏ rất chặt chẽ

Từ hình trên chúng ta nhận thấy rõ ràng ý nghĩa phép gán:

pa = &a[0];

hoặc: pa = a;

Sử dụng cách biểu diễn trên, c cho phép thâm nhập vào phần tử thứ i + 1 của mảng a bằng con trỏ mang giá trị pa + i, còn giá trị (nội dung) của a[i] là * (pa + i) đíược tham chiếu thông qua *(a+ i) Điều này làm ngạc nhiên những người mới làm quen với con trỏ của c Song cốch thâm nhập như vậy thường được thực hiện với tốc độ khcông ngờ

Từ lý giải trên, khi lập trình chúng ta có quyền sử dụng quan hệ sau đây: a[i] 33 (*(a+i))

Để kiểm tra tín h chân th ậ t của quan hệ đó, bạn cho chạy thử đoạn chương trrìnhsau:

Trang 40

Con trỏ trỏ hàm

Hàm trong c không phải là biến, song chúng ta được quyền dùng con trỏ trỏ đến hàm Một trong những thôi thúc người lập trình dùng con trỏ trỏ hàm là tìm cách thâm nhập vào vùng TEXT của bộ nhớ để gọi các hàm đang lưu trú tại đó Trong cách làm này con trỏ chứa địa chỉ hàm trong vùng TEXT, lần theo địa chỉ này sẽ có cách gọi hàm ra Dạng thức đăng ký con trỏ tới hàm và cách sử dụng nó theo thứ tự như sau:

Kiểu (* con trỏ - hàm) (danh sách tham số)

hoặc

kiểu (* con trỏ [giới hạn] - hàm) (danh sách tham số);

giới hạn ở đây cần được hiểu là một sô" nguyên chỉ số lượng tối đa của các phần tử

Con trỏ chỉ hàm cũng giống như con trỏ trỏ đến các biến khác, cần phải được gán giá trị đầu trước khi sử dụng Thứ tự đăng ký, gán giá trị theo mẫu sau:

void func (void); /* nguyên mẫu của hàm */

void (* pf) (void); /* con trỏ chỉ hàm */

void (* tab[12]) (void); /* mảng các con trỏ chỉ làm */

funl = func; /* gán giá trị ban đầu từ con trỏ khác */

Ví dụ sau đây nêu rõ cách làm khi cần gọi hàm sqrt.c, tính bình phương một số

dạng double và gọi hàm pow.c làm nhiệm vụ nâng một số dạng double lên bậc bất kỳ

dạng double

double result;

double (* docalc) (double arg);

double (* mtab [10]) (double argl, double arg2);

docalc = sqrt; /* trỏ đến hàm sqrt trong thư viện toán */

mtab[0] = pow; /* trỏ đến hàm pow */

result = (* docalc) (3.0); /* tính 32 */

printf (“ 3 2 = %

result = (* mtab[0]) (3.0, 2.0); /* tính 32 */

printf = (“ pow (3, 2) = % f \ n ”, result);

Trong khi đang chạv, nhiều chương trình đòi được cấp phát vùng nhớ để lưu giữ dữ liệu hoặc xuất/nhập dữ liệu cho công việc đang được thi hành trên mảng

Trong bộ nhớ của mảng vùng HEAP làm nhiệm vụ cung cấp vùng nhớ để nhập/xuất

dữ liệu và giải phóng vùng đó khi không cần đến

Vùng heap không trùng lặp với vùng stack của bộ nhớ song, heap và stack lại cùng chia nhau một phân khu bộ nhớ Nếu chương trình sử dụng nhiều ký ức của stack thì ký

thông báo thường xuyên, ký ức còn đủ để cấp phát hay đang bị thiếu để kịp thời điều

w

41

Ngày đăng: 01/11/2016, 22:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w