1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng chương trình mô phỏng thuật toán HEURISTIC giải bài toán xếp BALO

35 1,2K 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 35
Dung lượng 1,8 MB

Nội dung

Nội dung xây dựng thuật toán được chia thành 2 chương: Chương 1: Tìm hiểu ngôn ngữ và thuật toán Chương 2: Xây dựng chương trình mô phỏng Qua phần nội dung giúp em hiểu sâu hơn về khái n

Trang 1

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CNTT VÀ TRUYỀN THÔNG

BÁO CÁO THỰC TẬP CƠ SỞ

Trang 2

Mục lục

1.1 Tìm hiểu ngôn ngữ C Sharp 4

1.1.1 Tổng quan về C-Sharp 4

1.1.2 Những cơ sở của ngôn ngữ C# 6

1.2.Thuật toán heuristic và bài toán xếp balo 23

1.2.1 Thuật toán Heuristic 23

Trang 3

Mở đầu

Thuật toán là một kiến thức, là bước mở đầu quan trọng để giải bất kỳ một bài toán nào Thuật toán hay nói một cách khác đó là phương pháp, là các bước giải một bài toán

Thuật toán là sương sống của mọi ngôn ngữa lập trình Mỗi ngôn ngữ lập trìnhvới cách thể hiện câu lệnh khác nhau nhưng chúng đểu có chung một thuật toán để giải quyết bài toán đó

Qua đó muốn thể hiện được thuật toán đó thành một sản phẩm hoàn chỉnh ta phải dùng ngôn ngữ, vì vậy ta có thể rèn luyện và sử dụng thành thạo ngôn ngữ lập trình Qua đó ta thấy được vai trò quan trọng của thuật toán và ngôn ngữ

Trong bài thực tập này em đã lựa chọn thuật toán heuristic để giải bài toán xếpbalo và kết hợp sử dụng ngôn ngữ C-Sharp để mô phỏng thuật toán ấy vào bài toán

cụ thể Nội dung xây dựng thuật toán được chia thành 2 chương:

Chương 1: Tìm hiểu ngôn ngữ và thuật toán

Chương 2: Xây dựng chương trình mô phỏng

Qua phần nội dung giúp em hiểu sâu hơn về khái niệm thuật toán, cách thức hình thành ý tưởng để giải quyết các bài toán từ dễ đến khó để lập trình trên máy tính Thông qua nội dung bài thực tập giúp em hiểu thêm giải một bài toán hoàn chỉnh trên máy tính điện tử như thế nào Ý thức được tầm quan trọng của người lập trình trong cuộc sống

Trang 4

Trọng tâm của ngôn ngữ hướng đối tượng là lớp Lớp định nghĩakiểu dữ liệu mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết C# cónhững từ khóa dành cho việc khai báo lớp, phương thức, thuộc tính mới C# hỗ trợđầy đủ khái niệm trụ cột trong lập trình hướng đối tượng: đóng gói, kế thừa, đahình.

Định nghĩa lớp trong C# không đòi hỏi tách rời tập tin tiêu đề với tậptin cài đặt như C++

Hơn thế, C# hỗ trợ kiểu sưu liệu mới, cho phép sưu liệu trực tiếp trongtập tin mã nguồn Đến khi biên dịch sẽ tạo tập tin sưu liệu theo định dạng XML C# hỗ trợ khái niệm giao diện, interfaces(tương tự Java) Một lớp chỉ

có thể kế thừa duy nhất một lớp cha nhưng có thể cài đặt nhiều giao diện

C# có kiểu cấu trúc, struct (không giống C++) Cấu trúc là kiểu hạngnhẹ và bị giới hạn Cấu trúc không hể kế thừa lớp hay được kế thừa nhưng có thểcài đặt giao diện

C# cung cấp những đặc trưng lập trình hướng thành phần nhưproperty, sự kiện và hướng dẫn hướng khai báo ( được gọi là attribute) Lập trìnhhướng component được hỗ trợ bởi CLR thông qua siêu dữ liệu (metadata) Siêu dữliệu mô tả lớp bao gồm các phương thức và thuộc tính, các thông tin bảo mật… C# cũng cho truy nhập trực tiếp bộ nhớ dùng con trỏ kiểu C++, nhưngvùng mã đó được xem như là không an toàn CLR sẽ không thực hiện thu dọn rác tựđộng các đối tượng được tham chiếu bởi con trỏ cho đến khi lập trình viên tự giải

Trang 5

Tại sao hiện nay c- sharp lại trở thành ngôn ngữ thông dụng vì chúng

có những ưu điểm sau:

C-sharp là ngôn ngữ đơn giản:

C# loại bỏ một vài sự phức tạp rối ren của những ngôn ngữ như java vàC++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sởảo(virtual base class) Chúng là những nguyên nhân gây ra sự nhầm lẫn hay dẫnđến những vẫn đề cho những người phát triển C++

C-Sharp là ngôn ngữ hiện đại:

Những đặc tính như là xử lý ngoại lệ và thu gom Bộ nhớ tự động,những dữ liệu mở rộng, và bảo mật mã nguồn là những đặc tính được mong đợitrong một ngôn ngữ hiện đại C# chứa tất cả những đặc tính trên

C-Sharp là ngôn ngữ hướng đối tượng

Những đặc điểm chính của ngôn ngữ hướng đối tượng(object-orentedlanguage) là sự đóng gói(encapsulation), kế thừa(inheritance) và đahình(polymorphism) C# hỗ trợ tất cả những đặc tính trên

C-Sharp là ngôn ngữ mạnh mẽ và cũng mềm dẻo

Ngôn ngữ này không đặt rằng buộc lên những việc có thể làm C# được

sử dụng cho nhiều các dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứngdựng đồ họa, bản tính, hay thậm chí những trình biên dịch cho các ngôn ngữ khác

C-Sharp là ngôn ngữ ít từ khóa

C# là ngôn ngữ sử dụng bị giới hạn những từ khóa Phần lớn các từ khóađược sử dụng để mô tả thông tin

Bảng liệt kê các từ khóa của ngôn ngữ C#

Trang 6

Byte Enum Int Private Switch Void

Một điều quan trọng khác với C++là mã nguồn không đòi hỏi phải có tập tinheader

Tất cả mã ngồn được viết trong khai báo một lớp

Các bước chuẩn bị cho chương trình

Khi tạo một chương trình trong C# hay bất cứ ngôn ngữ nào, chúng ta nêntheo nhưng bước tuần tự sau:

Bước 1: Xác định mục tiêu của chương trình

Bước 2:Xác định nhưng phương pháp giải quyết vấn đề

Bước 3:Tạo một chương trình để giải quyết vấn đề

Bước 4: Thực thi chương trình để xem kết quả

1.1.2 Những cơ sở của ngôn ngữ C#

1.1.2.1 Các kiểu

C# buộc phải khai báo kiểu của đối tượng được tạo Khi kiểu được khai báo rõràng, trình biên dịch sẽ giúp ngăn ngừa lỗi bằng cách kiểm tra dữ liệu được gán chođối tượng có hợp lệ không, đồng thời cấp phát đúng kích thước bộ nhớ cho đốitượng

C# phân thành hai loại : loại dữ liệu dựng sẵn và loại do người dùng địnhnghĩa

C# cũng được chia dữ liệu thành hai kiểu : giá trị và tham chiếu.Biến kiểu giá trị được lưu trữ trong vùng nhớ stack, còn biến kiểu tham chiếu được lưu trữ trongvùng nhớ heap

C# cũng được hỗ trợ kiểu con trỏ của C++, nhưng ít khi được sử dụng.thôngthường con trỏ chỉ được sử dụng khi làm việc trực tiếp với Win API hay các đốitượng COM

Trang 7

a Kiểu dữ liệu định sẵn

C# có nhiều kiểu dữ liệu dựng sẵn, mỗi kiểu ánh xạ đến một kiểu hỗ trợbởi CLS (Commom Language Specification),ánh xạ để đảm bảo rằng đối tượngđược tạo tỏng C# không khác gì đối tượng được tạo trong các ngôn ngữ NET khac.Mỗi kiểu có một kích thước cố định được liệt lê trong bảng sau:

Bảng 1-1 Các kiểu dựng sẵn

Kiểu Kích thước (byte) Kiểu Net Mô tả giá trị

(0… 0xfffffffffff)

b Biến và Hằng

Biến dùng để lưu trữ dữ liệu Mỗi biến thuộc về một kiểu dữ liệu nào

đó Biến có thể được gán giá trị và cũng có thể thay đổi giá trị khi thực hiện cáclệnh trong chương trình

Để tạo một biến chúng ta phải khai báo kiểu của biến và gán cho biếnmột tên duy nhất

Biến có thể được khởi tạo giá trị ngay khi được khai báo, hay nó cũng cóthể được gán một giá trị mới vào bất cứ lúc nào trong chương trình

Hằng là một biến nhưng giá trị của nó không thay đổi theo thời gian.Khi cần thao tác trên một giá trị xác định ta dùng hằng Khai báo hằng tương tựkhai báo biến và có thêm từ khóa Const ở trước hằng một khi khởi động xong

Trang 8

không thể thay đổi được nữa

cú pháp :

<const> <type> <tên hằng> = <giá trị>; Ví dụ const int hang =100;

c Kiểu liệt kê

Kiểu liệt kê đơn giản là tập hợp các tên hằng có giá trị không thay đổi(thường được gọi là danh sách liệt kê)

Mỗi kiểu liệt kê có một kiểu dữ liệu cơ sở, kiểu dữ liệu có thể là bất cứkiểu dữ liệu nguyên nào như int, short, long tuy nhiên kiểu dữ lịêu của liệt kêkhông chấp nhận kiểu ký tự Để khai báo một kiểu liệt kê ta thực hiện theo cú phápsau:

[thuộc tính] [bổ sung] enum <tên liệt kê> [:kiểu cơ sở] {danh sách các thànhphần liệt kê};

Một định danh phải bắt đầu với một ký tự chữ cái hay dấu gạch dưới, các

ký tự còn lại phải là ký tự chữ cái, chữ số, dấu gạch dưới

Các định danh không được trùng với các từ khoá mà C# và phân biệt hoa,thường

f Biểu thức

Những câu lệnh mà thực hiện việc đánh giá một giá trị gọi là biểu thức.Một phép gán một giá trị cho một biến cũng là một biểu thức

Trang 9

1.1.2.2 các câu lệnh

a Rẽ nhánh không có điều kiện

Có 2 loại câu rẽ nhánh không điều kiện

Một là phương thức: khi trình biên dịch thấy có lời gọi phương thức nó

sẽ tạm dừng phương thức hiện hành và nhảy đến phương thức được gọi cho đến hếtphương thức này sẽ trở về phương thức cũ

Hai là tạo câu lệnh rẽ nhánh không điều kiện là dung từ khóa goto,break, continue, throw

“khối lệnh 2” được thực thi

Biểu thức trong câu lệnh if phải là biểu thức logic, không thể là biểu

Trang 10

Lệnh nhảy;]

}

C# cung cấp các lệnh lặp gống như C++ như for, while, do-while và lệnh

lặp mới foreach Nó cũng hỗ trợ các câu lệnh nhảy như: goto, break, continue và return.

c Lệnh nhảy goto

Lệnh GOTO: có thể dung để tạo lệnh nhảy nhưng nhiều nhà lập trình chuyên

nghiệp khuyên không nên dung câu lệnh này vì nó phá vỡ cấu trúc của chươngtrình

Cách dùng câu lệnh này như sau:

Khối lệnh sẽ được thực hiện đến khi nào biểu thưc còn đúng Nếu ngay

từ đầ biểu thức sai, khối lệnh sẽ không được thức thi

Trang 11

Khi đang thực hiện các lệnh trong vòng lặp, có yêu cầu như sau: không thựchiện các lệnh còn lại nữa mà thoát khỏi vòng lặp, hay không thực hiện các côngviệc còn lại của vòng lặp hiện tại mà nhảy qua vòng lặp tiếp theo Để đáp ứng yêucầu trên C# cung cấp hai lệnh nhảy là break và continue để thoát khỏi vòng lặp.

+ Break khi được sử dụng sẽ đưa chương trình thoát khỏi vòng lặp và tiếp tục

thực hiện các lệnh tiếp ngay sau vòng lặp

+ Continue ngừng thực hiện các công việc còn lại của vòng lặp hiện thời và

quay về đầu vòng lặp để thực hiện bước lặp tiếp theo

+ Return trả về giá trị gán và kết thúc vòng lặp.

1.1.2.3 Toán tử

Toán tử được kí hiệu bằng một biểu tượng dùng để thực hiện một hành động.Các kiểu dữ liệu cơ bản của C# như kiểu nguyên hỗ trợ rất nhiều các toán tử nhưtoán tử gán, toán tử toán học, logic

Toán tử tăng và giảm

Khi sử dụng các biến số ta thường có thao tác là cộng một giá trị vàobiến, trừ đi một giá trị từ biến đó, hay thực hiện các tính toán thay đổi giá trị của

Trang 12

biến sau đó gán giá trị mới vừa tính toán cho chính biến đó.

1) += Cộng thêm giá trị toán hạng bên phải vào giá trị toán hạng bên trái 2) -= Toán hạng bên trái được trừ bớt đi một lượng bằng giá trị của toánhạng bên phải

3) *= Toán hạng bên trái được nhân với một lượng bằng giá trị của toánhạng bên phải

4) /= Toán hạng bên trái được chia với một lượng bằng giá trị của toánhạng bên phải

5) %= Toán hạng bên trái được chia lấy dư với một lượng bằng giá trị củatoán hạng bên phải

Toán tử quan hệ

Những toán tử quan hệ được dùng để so sánh giữa hai giá trị, và sau đó trả

về kết quả là một giá trị logic kiểu bool (true hay false)

Toán tử logic

Các toán tử là and(&&), or(||), not(!) Các toán tử này được dùng trongcác biểu thức điều kiện để kết hợp các toán tử quan hệ theo một ý nghĩa nhất định

Toán tử ba ngôi

Cú pháp: <biểu thức điều kiện>? < biểu thức 1>: < biểu thức 2>;

Ý nghĩa: nếu biểu thức điều kiện đúng thì thực hiện biểu thức 1 Nếu sai thựchiện biểu thức 2

1.1.2.4 Lớp và phương thức

Các đặc điểm của lập trình hướng đối tượng

C# là ngôn ngữ lập trình hướng đối tượng Ra đời sau ngôn ngữ lậptrình hướng đối tượng C++ và Java nên nó kết tinh những ưu điểm của hai ngônngữ trên

Một ngôn ngữ lập trình hướng đối tượng có 4 đặc điểm chính:

Trang 13

* Trừu tượng hóa dữ liệu (Data Abstraction): trong lập trình hướng đối

tượng, một chương trình được quan niệm là các đối tượng, mỗi đối tượng có cáctrạng thái(state) và các hành vi (method, action, behavior) Các đối tượng này có thểthực hiện các hành vi trên dữ liệu của đối tượng (state) Quá trình chọn lọc chỉ giữlại các đặc điểm, các thuộc tính thông dụng của đối tượng liên quan đến bài toáncần giải quyết gọi là trừu tượng hóa dữ liệu Ví dụ nếu cần xây dựng một chươngtrình quản lý khách hàng cho một đại lý bán ôtô, trong chương trình sẽ có một đốitượng khách hàng Đối tượng khách hàng có rất nhiều đặc điểm như: Tên, địa chỉ,

số điện thoại, vân tay, màu tóc…trong bài toán này ta chỉ giữ lại các đặc điểm tên,địa chỉ, số điện thoại của khách hàng Nhưng nếu giải quyết bài toán quản lý cáccông dân của một quốc gia, đối tượng công dân lúc này ngoài các thuộc tính ngàytên, ngày sinh thì chúng ta phải lưu giữ cả vân tay, màu tóc

* Bao gói dữ liệu (Data Encapsulation): Một chương trình là một tập các đối

tượng, mỗi đối tượng có dữ liệu và hành vi Ngôn ngữ lập trình có khả năng che dấu

đi dữ liệu bên trong của đối tượng Trong ngôn ngữ lập trình chúng ta sẽ bắt gặp nóthể hiện ở dưới những từ khóa chỉ bổ từ truy xuất như: public, private, protected

* Kế thừa (Inheritance): Kế thừa là một đặc điểm quan trọng trong lập trình

hướng đối tượng Đó là khả năng sử dụng lại các đối tượng đã có để mở bổ sung mởrộng

* Đa hình (Polymorphism): Đó là khả năng ghi đè phương thức của lớp cơ

sở và cung cấp một phát triển khác ở trong lớp dẫn xuất Sức mạnh của đa hình thểhiện ở chỗ, kiểu của đối tượng chưa xác định ở thời điểm biên dịch chương trình.Điều này cho phép thông tin kiểu đối tượng lúc thực thi được sử dụng để xác địnhphương thức thực sự được gọi

a Khái niệm lớp và cách khai báo lớp

Lớp (Class) giống như khái niệm thực thể trong cơ sở dữ liệu, nó vẽ ra môhình,chỉ ra các thành phần mà một đối tượng thuộc lớp đó sẽ có.Ví dụ lớp Studentgồm có các trường ID(mã sv), Name(tên sv), Address(địa chỉ), các phươngthức Studing(học), TakeExam(thi), Relax(thư giãn) Lớp Car gồm các trườngMake(hãng), Model, và các phương thức Driving(lái), Accelerating(tăng tốc),phanh(Braking)

Trang 14

b Khái niệm đối tượng

Nếu như lớp chỉ là mô hình chỉ ra một đối tượng thuộc lớp đó gồm nhưng cái

gì thì đối tượng là một thể hiện của lớp.Ví dụ trên chúng ta có lớp Car, nó chỉ rarằng một đối tượng thuộc lớp phải có nhãn hiệu (Make), Model Ví dụ nhãn hiệu(Make) là Toyota, Model là Innova Chúng ta có thể tạo ra nhiều đối tượng thuộcmột lớp, làm thế nào để tạo ra một đối tượng của lớp?

Cú pháp tạo đối tượng của lớp:

<Tên lớp> <Tên đối tương> = new <Tên phương thức khởi tạo>([danh sáchđối số]);

Câu lệnh trên thực hiện 2 việc:

• Cấp phát vùng nhớ cho đối tượng

• Khởi tạo giá trị cho các trường của đối tượng(khởi tạo đối tượng)

- Hàm khởi tạo (Constructor) làm một phương thức đặc biệt dùng để tạo ra đốitượng của một lớp

- Đặc điểm của hàm khởi tạo:

• Trùng với tên của lớp

• Không trả về kiểu dữ liệu

• Có đối số hoặc không có đối số

• Nếu không viết phương thức khởi tạo, trình biên dịch cung cấp mộtphương thức khởi tạo mặc định để khởi tạo đối tượng

Trang 15

c khái niệm Phương thức

Là các hàm bên trong một lớp, mỗi phương thức cài đặt một hành động của đối tượng.

Các phương thức được gọi thông qua các đối tượng hoặc thông qua tên lớpnếu là phương thức tĩnh

Cú pháp để khai báo một phương thức

<access modifief> <return type> <MethodName>([danh sách đối số])

{ }

Gọi phương thức:

* <Tênđốitượng><tênphươngthức([ danh sách các đối số])>

* <Tênlớp> <Tênphươngthức([danh sách các đối số])> (áp dụng cho phươngthức tĩnh)

Một phương thức mà có từ khóa static đặt trước gọi là phương thức tĩnh,phương thức tĩnh là phương thức của lớp, do đó nó được gọi trực tiếp thông qua tênlớp Còn phương thức không có từ khóa static đặt trước nó, phương thức thuộc vềđối tượng do đó chỉ có thể gọi phương thức thông qua đối tượng

Phương thức có thể trả về giá trị hoặc không trả về giá trị (kiểu void) Nếuphương thức trả về giá trị trong thân phương thức phải có câu lệnh return Cú pháp:return(biểu thức);

1.1.4 WinForms

1.1.4.1 Giới thiệu về WinForms

a Khái niệm WinForms

Windows Forms hay viết tắt là WinForms là thuật ngữ chỉ việc phát triển cácứng dụng giao diện người dùng bằng cách sử dụng các thành phần xây dựng sẵn(buil in component) còn được gọi là các điều khiển Hay nói cách khác WindowsForms là một API (Application Programming Interface) cho phép tạo GUI(Graphical User Interface) cho các ứng dụng chạy trên desktop

Trang 16

Các điều khiển này dùng để hiển thị thông tin cho người dùng cũng như chongười dùng nhập thông tin vào Windows Forms ra đời đáp ứng nhu cầu tạo ứngdụng nhanh (Rapid Application Development).

b Lớp form

Form là thành phần cơ sở để tạo nên một ứng dụng WinForm Một formdùng để chứa và quản lý các điều khiển Mỗi ứng dụng WinForm chứa ít nhất mộtform

Trong ứng dụng, muốn tạo một form có 2 lựa chọn

Cách 1: Tạo đối tượng của lớp Form class, lớp này nằm trong namespace

Ngày đăng: 11/02/2015, 06:44

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w