1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng môn học Kỹ thuật lập trình

236 3 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

Tiêu đề Kỹ thuật lập trình
Người hướng dẫn Nguyễn Xuân Minh
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật lập trình
Thể loại Bài giảng môn học
Thành phố Hà Nội
Định dạng
Số trang 236
Dung lượng 3,55 MB
File đính kèm slide ky thuat lap trinh-thay Minh.rar (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

C1. Giới thiệu máy tính và lập trình. C2. Kiểu dữ liệu, toán tử và phát biểu C3. Các thành tố cơ bản của C++ C4. Cấu trúc lựa chọn C5. Cấu trúc lặp vòng C6. Hàm và con trỏ C7. Lớp C8. Thao tác trên đối tượng C9. Kế thừa Đa xạ Tổng quát hóa

Trang 1

Môn học : Kỹ thuật lập trình

Giảng viên : Nguyễn Xuân Minh

Kiến thức ₫ầu vào : Biết nghe, biết ghi chép, biết đọc sách

Chương trình : C1 Giới thiệu máy tính và lập trình.

C2 Kiểu dữ liệu, toán tử và phát biểu C3 Các thành tố cơ bản của C++

C4 Cấu trúc lựa chọn C5 Cấu trúc lặp vòng C6 Hàm và con trỏ C7 Lớp

C8 Thao tác trên đối tượng C9 Kế thừa - Đa xạ - Tổng quát hóa

Tài liệu tham khảo :

[1] G.J.Bronson, Program Development and Design Using C++, 2 nd

Edition, Brooks/COLE Thomson Learning, 2000.

Trang 2

Chương 1

Giới thiệu

máy tính và lập trình

Trang 4

Thiết bị nhập

Trang 5

Màn hình CRT Màn hình LCD

Thiết bị xuất

Máy in laser

Trang 6

Bộ nhớ

„ ROM (Read only memory)

• Chứa thông tin cố định, ít hay không đổi như chương trình khởi động máy tính, các bảng thông số dùng để tra cứu

• Còn được gọi là bộ nhớ non-volatile.

„ RAM (Random access memory)

• Là bộ nhớ bay hơi.

Chứa tạm chương trình hay dữ liệu khi máy tính đang

Trang 7

„ Có 2 thanh ghi chứa toán hạng

„ Thường là một bộ phận của CPU và có nhiệm

vụ xử lý thông tin cho CPU.

Trang 8

„ Điều khiển mọi hoạt động trong máy tính.

„ Quản lý mọi tài nguyên trong máy tính.

„ Kiểm soát các khối còn lại để thực hiện các công việc được giao.

„ Hoạt động dưới hình thức thi hành lệnh (instruction), chương trình (program).

Trang 9

Lưu trữ

Trang 10

Phần mềm (software)

„ Chương trình là tập hợp các lệnh bắt máy tính thực hiện một công việc và cho ra kết quả xác định.

„ Víết chương trình được gọi là lập trình.

„ Ngôn ngữ dùng để lập trình gọi là ngôn ngữ lập trình.

Trang 11

„ Lệnh ngôn ngữ máy thường có 2 phần : mã tác

vụ (opcode) và địa chỉ toán hạng.

„ Mã tác vụ cho CPU biết phải làm gì.

„ Địa chỉ toán hạng giúp xác định vị trí dữ liệu.

Trang 12

Hợp ngữ

„ Hợp ngữ là dạng ngôn ngữ máy đã cải tiến bằng cách dùng mã gợi nhớ (mnemonic) thay cho số nhị phân để biểu diễn mã tác vụ và toán hạng.

„ CPU không thể thực thi lệnh hợp ngữ một cách trực tiếp nên cần phải có bước chuyển đổi từ lệnh hợp ngữ ra lệnh ngôn ngữ máy.

Trang 13

„ Hợp ngữ và ngôn ngữ máy là ngôn ngữ cấp

Trang 14

Ngôn ngữ lập trình cấp cao

„ Ngôn ngữ lập trình cấp cao giúp con người viết chương trình dễ dàng, nhanh chóng hơn hợp ngữ vì sử dụng lệnh dễ hiểu, gần gủi với ngôn ngữ con người hoặc công thức toán.

„ Chương trình viết bằng ngôn ngữ cấp cao cũng cần phải dịch trước ra ngôn ngữ máy rồi mới chạy được.

„ Lệnh của ngôn ngữ cấp cao thường được gọi là phát biểu (statement).

Trang 15

„ Phần mềm hệ thống giúp con người khai thác máy tính tốt hơn.

Phần mềm hệ thống quan trọng nhất là phần

Trang 17

Cú pháp (syntax)

„ Cú pháp của ngôn ngữ lập trình là một tập các qui tắc ràng buộc để viết cho đúng các phát biểu.

„ Ngôn ngữ C ra đời năm 1970 là ngôn ngữ lập trình cấu trúc (structure programming).

„ Ngôn ngữ C++ là bản mở rộng của ngôn ngữ C

có bổ sung khả năng lập trình hướng đến đối tượng (Object-Oriented Programming).

Trang 18

Ngôn ngữ C

„ Ngôn ngữ C được dùng đầu tiên trong hệ điều hành UNIX Sau đó, mới phát triển trên các hệ điều hành khác.

„ Điểm mạnh của ngôn ngữ C so với các ngôn ngữ lập trình khác là giống với hợp ngữ.

„ Chương trình viết bằng ngôn ngữ C chạy nhanh

và hiệu quả hơn khi viết trên các ngôn ngữ khác.

Trang 19

Ngôn ngữ C++

„ Ngôn ngữ C++ được dùng nhiều để viết các chương trình đồ họa dưới hệ điều hành Windows hay Macintosh.

„ Cung cấp khả năng lập trình hướng đến đối tượng.

Trang 20

„ MFC là thư viện các lớp đối tượng phát sinh phần tử giao diện sẳn có cho các ứng dụng dưới Windows.

Trang 22

Giải quyết vấn ₫ề và

khai thác phần mềm (tt.)

„ Giai đoạn làm tài liệu có 5 loại

1. Mô tả chương trình.

2. Hướng phát triển giải thuật và những thay đổi.

3. Bảng sao kê chương trình có chú thích đầy đủ.

4. Mẫu thử chương trình.

5. Sổ tay người sử dụng.

„ Giai đoạn bảo trì sản phẩm liên quan đến các vấn đề sửa chữa lỡi khi đang vận hành, rà soát

Trang 23

Giải thuật (Algorithms)

„ Có thể biểu diễn giải thuật bằng lưu đồ

Trang 24

Ví dụ xác ₫ịnh số nguyên tố

Bắt đầu Nhập n đếm = 2

Trang 25

„ Ví dụ :

Nhập biến n cho đến khi n không nhỏ hơn 0

Gọi hàm n giai thừa

Trang 26

Giải thuật (tt.)

Num ← 4

SqNum ← Num 2

Print Num, SqNum

dãy số.

Trang 29

o Dòng đầu tiên của hàm dùng để mô tả gồm 3 thông tin :

~ Kiểu dữ liệu trả về (nếu có).

~ Tên hàm.

~ Danh sách thông số (nếu có).

Trang 31

Đối tượng cout

o cout là đối tượng xuất, dùng để gởi thông tin ra màn hình

o Xuất thông tin ra đối tượng cout như sau :

cout << "text";

Trong đó, dấu << là toán tử kết xuất có thể dùng liên tiếp, text

là chuỗi ký tự cần hiện ra màn hình Dấu nháy kép " là dấu

Trang 32

o Chỉ thị include có nhiệm vụ chèn nội dung tập tin theo đi sau

nó vào module hiện tại trước khi dịch

Trang 33

Điều khiển xuất nhập

o Điều khiển xuất nhập (i/o manipulator) là hàm đặc biệt được dùng trong phát biểu xuất nhập để tạo ra các định dạng dữ liệu mong muốn

o Điều khiển xuất nhập endl của lớp iostream cung cấp ký tự xuống dòng-về đầu dòng (cr-lf)

o Ví dụ :

cout << "Khu nien kim nhat thu mon trung" << endl;

cout << "Nhan dien dao hoa tuong anh hong" << endl;

o Phát biểu dài có thể viết xuống nhiều dòng

cout << "Nhan dien bat tri ha xu khu, "

<< "Dao hoa y cuu tieu dong phong."

<< endl;

Trang 34

Tổng quát về code của 1 ứng dụng VC++

lệnh định nghĩa các phần tử cấu thành chương trình : kiểu dữ liệu mới, hằng, biến, hàm

bậc các thành phần cấu thành 1 ứng dụng

Trang 35

Tổng quát về code của 1 ứng dụng VC++ (tt.)

o Trong 1 project VC++ có 2 loại phần tử có chứa code (do đó ta cần biết cú pháp VC++ để xây dựng các loại phần từ này) :

~ File *.h (hay *.hxx) định nghĩa interface sử dụng của 1 (hay nhiều) module (hay class) có mối quan hệ mật thiết với nhau.

~ File *.cpp (hay *.cxx) định nghĩa sự hiện thực của 1 (hay nhiều) module (hay class) có mối quan hệ mật thiết với nhau.

~ Vì file *.h và *.cpp có thể định nghĩa hoặc các class hoặc các module

(đơn vị phần mềm nhỏ có 1 chức năng rõ ràng nào đó cấu thành phần mềm cổ điển) ⇒ VC++ hỗ trợ cả 2 phương pháp lập trình : có cấu trúc

và OOP.

o Ngoài một vài ngoại lệ nhỏ, tổ chức code cho 2 loại file trên hoàn toàn giống nhau : đó là danh sách nhiều lệnh VC++ phục vụ định nghĩa kiểu, hằng, biến và function trong module đó.

o Trong định nghĩa function, ta sẽ dùng các lệnh thực thi để miêu tả

Trang 36

Cú pháp của C++

o VC++ cho phép dùng hầu hết các ký tự mà bạn có thể nhập từ bàn phím, trong đó các ký tự chữ và số được dùng chủ yếu.

o Qui tắc đật tên (danh hiệu):

~ VC++ có phân biệt chữ HOA và chữ thường.

+ Base1_ball + Base.1 : vì có dấu chấm

+ ThisIsLongButOk + Base&1 : vì có dấu &

Trang 37

Cú pháp của C++ (tt.)

cứu từng loại câu lệnh và qui tắc cấu thành nó, nhưng may mắn số lượng loại câu lệnh VC++ là không nhiều (dưới 20 loại)

~ Các lệnh định nghĩa và khai báo : xác định 1 hành động nào

đó tại thời điểm dịch.

~ Các lệnh thực thi : xác định 1 hành động nào đó tại thời điểm thực thi.

Trang 38

Cú pháp dùng giá trị trong C++

o Giá trị luận lý : TRUE | FALSE

o Giá trị thập phân nguyên : [+|-] [decdigit]+ (Vd: 125, -548)

Lưu ý ta dùng | để miêu tả sự chọn lựa, [ ] để miêu tả có từ 0 tới 1, [ ]* để miêu tả có từ 0 tới n, [ ]+ để miêu tả có từ 1 tới n (n>1).

o Giá trị thập lục phân nguyên : [+|-] 0x[hexdigit]+ (Vd: 0xFF)

o Giá trị bát phân nguyên : [+|-] 0[ocdigit]+ (Vd: 0577)

o Giá trị thập phân thực :

[+|-] [decdigit]+ [.[decdigit]*] [E [+|-] [decdigit]+]

(Vd: 3.14159, 0.31459e1, -83.1e-9, )

o Giá trị chuỗi : "Nguyen Van A"

"\t\"Nguyen Van A\"\n"

o Lưu ý dùng ký tự '\' để thực hiện cơ chế 'escape' dữ liệu hầu giải quyết nhầm lẫn.

Trang 39

Chú thích

o Chú thích trong chương trình dùng để làm rõ nghĩa một phát biểu, một đoạn lệnh hay một hàm

o Có 2 loại chú thích :

~ Cuối dòng phát biểu Mở đầu bằng dấu //.

~ Khối chú thích Bắt đầu bằng dấu /* và kết thúc bằng dấu */.

o Ví dụ :

Void main()

{ /* Dong chu thich 1 cua khoi chu thich

Dong chu thich 2 */

cout << "chu thich trong chuong trinh";

// Ket thuc chuong trinh

}

Trang 40

Chú thích (tt.)

o Dùng chú thích viết va trang trí tiêu đề cho hàm

/*

-Hàm xử lý biến cố khi ấn nút CE (Clear Entry)

của form giao diện chương trình MiniCalculator

Trang 41

Kiểu dữ liệu

o Kiểu dũ liệu là phân loại thông tin chứa trong biến

o Kiểu dũ liệu cung cấp bởi C++ chia ra thành kiểu có sẳn (tên kiểu do C++ qui định) và kiểu của người sử dụng (tên kiểu do người sử dụng đặt thông qua đặc tả kiểu)

Trang 42

Kiểu dữ liệu có sẳn của C++

o void : 0 byte (không có giá trị nào), được dùng để miêu tả kiểu trả về của

hàm mà không muốn trả về giá trị.

o char : 1 byte từ -128 đến 127

o BYTE = unsigned char : 1 byte, 0 to 255

o BOOL = unsigned char : 1 bytes, True <> 0 or False = 0

o short : 2 bytes, -32,768 to 32,767

o WORD = unsigned short : 2 bytes, 0 to 65535

o int = long (long integer) : 4 bytes

-2,147,483,648 to 2,147,483,647

o DWORD = unsigned int = unsigned long : 4 bytes

0 to 4,294,967,295

o float (single-precision floating-point) :4 bytes

-3.402823E38 to -1.401298E-45 ;1.401298E-45 to 3.402823E38

o double (double-precision floating-point) : 8 bytes

-1.79769313486231E308 to -4.94065645841247E-324;

Trang 43

Kiểu dữ liệu của người sử dụng

o Nếu trong 1 module nào đó cần dữ liệu có cấu trúc đặc thù mà VC++ chưa cung cấp, người lập trình sẽ dùng phát biểu enum , struct , typedef , class để định nghĩa kiểu này Phát biểu typedef kết hợp tên kiểu (tự đặt) với 1 kiểu có trước (vừa định nghĩa hay đã định nghĩa trước đó) Có 5 loại chính : kiểu liệt kê, kiểu array, kiểu union, kiểu struct (record) và class.

o Một kiểu rất quan trọng trong C++ là kiểu pointer Giá trị thuộc kiểu pointer là địa chỉ luận lý của 1 ô nhớ chương trình (thường để xác định 1 vùng nhớ dữ liệu nào đó) Nhờ kiểu pointer, ta có thể truy xuất dữ liệu 1 cách gián tiếp, nhờ đó ta truy xuất được thông tin trong các vùng nhớ được cấp phát động (nhờ hàm mallloc và free).

o Kiểu pointer luôn kèm theo kiểu của dữ liệu ở vùng nhớ mà pointer

Trang 44

chữ HOA và chữ thường)

biến đó Ví dụ :

~ Biến pointer có giá trị ngầm định là pointer NULL.

(tốt nhất nên định nghĩa: const int NULL = 0; trước khi dùng)

~ Biến số có giá trị ngầm định là 0.

biến trước khi dùng chúng

cho biến, giá trị cũ của biến sẽ bị mất đi

Trang 45

Tầm vực truy xuất biến

o Tầm vực của một biến là tập các lệnh được phép truy xuất biến đó.

o VC++ cho phép 3 cấp độ tầm vực sau :

~ Cục bộ trong function : bất kỳ lệnh nào trong function đều có thể truy xuất được biến cục bộ trong function đó.

void Command1_Click() { char strGreeting[256] // Khai báo cục bộ .

Trang 46

Thời gian sống của biến

o Biến là 1 thực thể nên cũng có thời gian sống hữu hạn, thời gian sống của biến thường phụ thuộc vào tầm vực của biến đó :

~ Biến cục bộ trong function : được tạo ra lúc function được gọi

và mất đi khi thủ tục kết thúc việc xử lý và điều khiển được trả về lệnh gọi.

~ Biến cục bộ trong module : được tạo ra lúc module được tạo

ra và mất đi khi module bị xóa

‘ Các modules có thời gian sống từ lúc chương trình chạy cho đến khi chương trình kết thúc.

‘ Các đối tượng của class được tạo ra khi có yêu cầu cụ thể Tạo đối tượng nghĩa là tạo các thuộc tính của nó, các thuộc tính của đối tượng sẽ mất đi khi đối tượng bị xóa.

~ Biến toàn cục : được tạo ra lúc chương trình bắt đầu chạy và chỉ mất đi khi chương trình kết thúc.

Trang 47

Thời gian sống của biến (tt.)

cách sau :

~ Nâng cấp tầm vực : từ cục bộ trong function lên cục bộ trong module hay lên toàn cục Cách này ít được dùng tường minh vì

nó sẽ thay đổi tầm vực của biến.

~ Ghi giá trị biến ra môi trường chứa tin bền vững (file trên

đĩa) trước khi biến bị xóa Khi cần lại giá trị của biến này, ta đọc giá trị của nó từ file vào Đây là phương pháp thông dụng để trao đổi dữ liệu giữa 2 ứng dụng khác nhau hay giữa 2 lần chạy khác

Trang 48

Các lệnh ₫ịnh nghĩa

o File *.h thường chỉ chứa các lệnh định nghĩa và khai báo, còn file

*.cpp sẽ chứa thêm các lệnh thực thi Các lệnh định nghĩa cho phép

ta định nghĩa tính chất của các thuộc tính dữ liệu, các lệnh thực thi dùng để hiện thực giải thuật thi hành của các method (function).

o Lệnh định nghĩa dữ liệu gồm có định nghĩa biến, định nghĩa hằng và định nghĩa kiểu

o Cú pháp định nghĩa hằng gợi nhớ cơ bản :

const <type> <name> = <value> ;

hay #define <ConstName> <value>

Lưu ý : ta dùng dấu <> để miêu tả phần tử do người sử dụng đặt

Trang 49

Phát biểu ₫ịnh nghĩa biến

o Cú pháp cơ bản của định nghĩa biến toàn cục :

<type> <variable> [=<ConstExpr>];

o Cú pháp cơ bản của khai báo lại biến toàn cục để sử dụng lại trong module :

extern <type> <variable> ;

o Cú pháp cơ bản của định nghĩa biến cục bộ trong module :

static <type> <variable> [=<ConstExpr>];

o Cú pháp cơ bản của định nghĩa biến (thuộc tính) cục bộ trong class đối tượng :

[ private | protected | public]: <type> <variable> ;

o Lưu ý trong 1 ngữ cảnh xác định, ta chỉ được phép định nghĩa 1 biến 1 lần, nhưng ta có thể khai báo biến nhiều lần miễn sao các lệnh khai báo này không mâu thuẩn nhau (về kiểu).

Trang 50

Kiểu dữ liệu của người sử dụng

o Ngoài các kiểu dữ liệu định sẵn, VC++ còn cung cấp cho người lập trình 1 phương tiện để họ có thể định nghĩa bất kỳ kiểu dữ liệu chưa cung cấp sẵn nhưng lại cần thiết cho ứng dụng của họ, ta gọi các kiểu này là kiểu do người sử dụng định nghĩa Có 5 loại chính :

kiểu liệt kê , kiểu array , kiểu union , kiểu struct (record) và class

Ví dụ định nghĩa kiểu Days chứa các trị ngày trong tuần

enum Days // Declare enum type Days

{ saturday, // saturday = 0 by default

Trang 51

Xử lý dữ liệu liệt kê (enum)

void lich(Days today); // Variable today has type Days

Trang 52

Kiểu dãy (array)

Dãy là kiểu dữ liệu gồm nhiều phần tử có cùng kiểu dữ liệu cơ sở, dùng chung một tên và phân biệt với nhau bởi chỉ số ( index ).

Trang 54

Xử lý dãy

#define N 100

// đoạn chương trình tính tổng 2 ma trận

double a[N][N],b[N][N],c[N][N]; int i,j;

for(i=0;i<N;i++) // duyệt theo hàng

for(j=0;j<N;j++) // duyệt theo cột

for(i=0;i<M;i++) // duyệt theo hàng

for(j=0;j<N;j++) // duyệt theo cột

Trang 55

Kiểu chuỗi (string)

Ví dụ : char hoten[50];

mà chỉ có thể làm thông qua các hàm có sẳn trong thư viện string.lib

Ví dụ : strcpy(hoten,"Kim Dung");

như hoten[8]='\r'; hoten[9]='\n'; hoten[10]='\0';

Trang 56

Kiểu hợp nhất (union)

o union là kiểu dữ liệu hợp lại bởi nhiều biến thành viên thuộc các kiểu dữ liệu khác nhau nhưng có cùng địa chỉ nghĩa là dữ liệu của chúng sẽ chồng chập lên nhau

mà thôi

các biến thành viên còn lại

Trang 57

ng đ

ịa chỉ

Trang 58

Kiểu cấu trúc (struct)

các kiểu dữ liệu khác nhau theo một cấu trúc nào đó

Trang 59

Xử lý dữ liệu cấu trúc

struct Person { // Khai báo kiểu cấu trúc Person

int age; // Khai báo vùng

float weight;

char name[25];

} family_member; // family_member là biến

struct Person sister; // khai báo theo phong cách C

Person brother; // khai báo theo phong cách C++

typedef struct Person T_Person;

T_Person T_brother;

Trang 61

Kiểu con trỏ (pointer)

o Kiểu con trỏ cho phép truy xuất dữ liệu một cách gián tiếp thông qua địa chỉ của nó

o Toán tử '&' cho phép lấy địa chỉ của một biến như sau :

Trang 63

param = (double**) malloc(m*sizeof(double*));

// cấp phát m dãy kiểu double (mỗi dãy có n phần tử)

for (i = 0; i < m; i++)

Trang 64

Ví dụ về con trỏ

o int* pi; // pointer to int

o char** ppc ; // pointer to pointer to char

o int* ap [15]; // array of 15 pointers to ints

o int (* fp )(char*); // pointer to function taking a char*

// argument; returns an int

o int* f (char*); // function taking a char* argument; returns

// a pointer to int

Ngày đăng: 25/08/2023, 14:10

TỪ KHÓA LIÊN QUAN

w