LẬP TRÌNH C++

71 25 0
LẬP TRÌNH C++

Đ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

- Là cách tìm những lỗi logic bằng cách ñể chương trình chạy từng dòng lệnh (chạy từng bước từ trên xuống), qua từng dòng lệnh ta sẽ xác ñịnh giá trị của từng biến thay ñổi như thế nào[r]

(1)

LẬP TRÌNH C++

ðây nội dung SV cần nắm vững:

Chương I: Giới thiệu

Tin học ñại cương (hay lập trình C++), nói chung tinh thần mơn học dựa phần lớn vào cách lập trình mà chúng ñã nghiên cứu tin học ñại cương A1 (lập trình Pascal) Vì đa số lệnh có pascal gặp lại ngơn ngữ C++, có số điểm sai khác (như cấu pháp), nhìn chung mục đích lệnh hồn tồn giống với ngơn ngữ Pascal mà ñã học ðối với tập lệnh không nghiên cứu chi tiết mặt lý thuyết, mà chủ yếu tập trung vào phần thực hành, vận dụng (có thể dùng phần mềm chuyển ngơn ngữ từ pascal sang C++ để hiểu rõ - download http://fit.hcmup.edu.vn/~thqthu )

Riêng với tập lệnh ñặc thù riêng C++ nghiên cứu kỹ phần lý thuyết

+ Ngôn ngữ lập trình: C++

(2)

1.1.Tạo biên dịch chương trình C++ mơi trường Visual C++ Phân tích ví dụ đơn giản: Chương trình “Hello World”

Kết xuất hình (Bấm phím CTRL + F5, F5)

Chú thích

Chạy chương trình

Khai báo thư viện lệnh

std::cout

Lệnh xuất chuỗi hình

Lệnh xuống hàng

Nơi thơng báo lỗi , có lỗi

bấm F4 để tìm lỗi

Hàm main: Chương trình ln bắt

đầu từ

Nơi báo cảnh báo: cảnh báo khơng làm ảnh hưởng đến việc

chạy ct, nhiêu ñối với số cảnh báo quan trọng ta nên

(3)

Một số yêu cầu trình bày soạn thảo chương trình (bắt buộc)

Tab

Nơi khai báo thư viện hàm main cách dòng

Các dịng lệnh có ý nghĩa khác nên cách dịng

Sử dụng phím Tab để lịng dòng lệnh với

(4)(5)

3 Tại thẻ Projects, chọn Win32 Console Application, ñánh tên làm vào project name (ở ñây “BaiLamQuenVC6”), chọn nơi lưu trữ Location (ở ñây chọn lưu D:\BaiLamQuenVC6) => ok

(6)

4 Chọn An empty project , nhấn finish , nhấn ok

(7)(8)

7 Gõ nội dung chương trình “Hello World”

(9)

Quan sát cuối hình, biên dịch thành cơng ta thấy dòng chữ “0 error(s), warning(s)” Nếu khơng thành cơng cần xem lại đoạn mã ñã gõ vào ñúng chưa, bấm F4 ñể tìm lỗi

Lưu ý: Một thói quen tốt nên ghi lại hiểu dịng báo lỗi để lần sau tự sửa lỗi

9 Chạy chương trình, bấm Ctrl + F5 (hoặc F5, bấm F5 Màn hình chạy chương trình hiển thị tắt nhanh, cần quan sát kỹ ) Lưu ý quan trọng:

Trong chương trình:

- Hàm main nơi chương trình bắt đầu

- Một chương trình có hàm main

2 Khi viết xong chương trình, để viết tiếp chương trình khác, ta phải đóng chương trình trước cách vào menu File - > Close Workspace ðể mở chương trình có sẵn, môi trường VC6++, vào File -> OpenWorkspace chọn file *.dsw

(10)

Chương 2: Biến Kiểu liệu

2.1 Kiểu liệu:

a Các loại liệu thông dụng:

Tên kiểu liệu Phạm vi Ý nghĩa Ví dụ

int -32768 -> 32767 Kiểu số nguyên -2

unsigned int -> 65535 Số nguyên không âm

long -2147483648->2147483647 Số nguyên dài 3445

float Số thực 4.5

double Số thực 7.8

char -128 -> 127 Ký tự ‘A’, ‘+’

unsigned char -> 255 Ký tự ‘B’,’-‘

bool true, false Kiểu logic

Chú ý:

- Kiểu ký tự dạng kiểu số nguyên - Kiểu bool Là kiểu thể giá trị sai

+ Có hai giá trị: true false + Các phép toán:

(11)

Ví dụ:

- ðịnh nghĩa lại tên kiểu liệu số nguyên typedef int so_nguyen;

Khi so_nguyen kiểu liệu kiểu int 2.2 Biến: ðịnh nghĩa - Các thành phần biến - Khai báo biến

- Mọi biến cần phải khai báo trước sử dụng - Việc khai báo biến ñược thực theo cú pháp sau:

Kiểu_dữ_liệu tên_biến;

Kiểu tên_biến = giá_trị_ban_đầu_của_biến; Kiểu tên_biến1, tên-biến2, ;

Ví dụ:

int i, j; //i j kiểu số nguyên char a; //a kiểu ký tự

float f; // f kiểu số thực

- Lưu ý:

+ Một tên hợp lệ dãy o Chữ (hoa thường)

o Số (Một tên khơng bắt đầu số)

o Dấu nối (Khơng nên bắt đầu dấu nối dưới) + Các tên có phân biệt chữ hoa chữ thường

Ví dụ: Bien1 khác với BIEN1

+Tên biến khơng trùng với tên lệnh, từ khố C++ (ví dụ khơng ñặt tên biến int, return, cout, )

2.3 Biểu thức toán tử: Biểu thức - Toán tử độ ưu tiên tốn tử

Tên tốn tử Ý nghĩa Ví dụ

+ cộng a+b

(12)

/ chia a/b

% chia lấy phần dư a%b

> a>b

< a<b

<= nhỏ a<=b

>= lớn a>=b

!= so sánh khác a!=b

== so sánh a==b

= Lệnh gán a = b

+= Viết tắt lệnh a=a+b

a+=b

-= Viết tắt lệnh a=a-b a-=b

*= Viết tắt lệnh a=a*b a*=b

/= Viết tắt lệnh a=a/b

a/=b

%= Viết tắt lệnh a=a%b

a%=b

++ Viết tắt lệnh

a=a+1

a++ ++a

Viết tắt lệnh

a=a-1

(13)

2.4 Câu lệnh gán: Cú pháp - Thi hành câu lệnh gán Cú pháp: tên_biến = biểu thức (hoặc biến); Ý nghĩa:

Giá trị biến bên trái dấu “=” giá trị biểu thức sau tính tốn xong (hoặc giá trị biến) bên phải dấu “=”

Ví du:

int i, j ; //khai báo biến i j kiểu số nguyên i = 3; // i có giá trị 3;

j = i +7; // j có giá trị 10 ( + 7)

Lưu ý:

So sánh phép toán a++ với ++a (tương tự cho a a) Ví du:

/* khai báo biến a b kiểu số nguyên có giá trị ban ñầu */

int a = 5; int b = 5;

int i,j; //khai báo biến i j

i = ++a; Ý nghĩa:

- Thực phép toán a=a+1 trước, tức giá trị a tăng lên ñơn vị, hay a có giá trị

- Sau i ñược gán giá trị a - Giá trị a sau lệnh có giá trị

j = b++; Ý nghĩa:

- Thực phép gán j=b trước, giá trị b 5, nên j có có trị

(14)

2.5 Chuyển ñổi kiểu (ép kiểu)

Ép kiểu thủ thuật hay dùng ñể biến ñổi kiểu biến, hay biểu thức sang kiểu liệu phù hợp với nhu cầu tính tốn chương trình

Cú pháp: (tên kiểu mới) tên_biến(hoặc biểu thức);

Lưu ý: giá trị phép ép kiểu chuyển giá trị sang kiểu liệu mới, kiểu liệu biến tham gia vào phép ép kiểu khơng bị thay đổi kiểu liệu

Ví dụ 1:

1.34 : số thực, thuộc kiểu số thực

(int) 1.34 : giá trị ñược ép kiểu sang kiểu số ngun, kết

Ví dụ 2:

float i = 2.34; /* i ñược khai báo kiểu số thực, với giá trị ban ñầu 2.34 */

(15)

Những lưu ý quan trọng:

Tất lệnh ñều kết thúc dấu chấm phẩy ; Cách thích:

o Chú thích dịng: dùng ký hiệu //

o Chú thích nhiều dịng: dùng ký hiệu mở /* ký kiệu đóng */ Ví dụ:

/* dịng thích dịng ðây dịng thích dịng */ Một số ký tự đặc biệt:

‘\n’ mã xuống dịng ‘\t’ mã dấu Tab

‘ \” ‘ mã dấu nháy kép “ ‘\\’ mã dấu \

Chuỗi: bắt ñầu kết thúc dấu “ ” o Ví dụ:

“ðây chuỗi”

(16)

2.6 Lệnh xuất/nhập chuẩn: Một số lệnh cần nắm

- std::cout (xuất liệu hình) Ví dụ:

std::cout<< a ; // xuất giá trị a hình

std::cout<<a<<b; // xuất giá trị a b hình - std::cin (nhập giá trị vào vào biến)

Ví dụ:

std::cin>>a; /*May tính yêu cầu người dùng nhập giá trị từ bàn phím, sau nhập từ phím giá trị bấm enter, a mang giá trị mà người vừa nhập*/

- ðể việc lập trình thuận tiện, thay phải đánh chữ std trước số lệnh, ta khai báo tên vùng std phía trước hàm main (bằng cú pháp using namespace std), ta khơng cần phải đánh lại std trước lệnh

Ví dụ:

//Chương trình nhập xuất giá trị biến

#include <iostream> //Khai báo thư viện hàm cout, cin #include <conio.h> //khai báo thư viện hàm getch()

(17)

getch(); //Dừng hình return 0;

(18)

Chương 3: Cấu trúc ñiều kiện

3.1 ðiều kiện if: a Cú pháp:

1 if (BT lôgic) {

//Khối lệnh }

2 if (BT lôgic) {

//Khối lệnh }

else {

//Khối lệnh

BT lôgic

Khối lệnh

true false

Khối lệnh BT lôgic

Khối lệnh

(19)

3 if (BT lôgic) {

//Khối lệnh }

else

if (BT lôgic) {

//Khối lệnh }

b Bài tập:

i Bài tập 1: Nhập vào số x, xác ñịnh tính chẵn lẽ x

ii Bài tập 1: Nhập vào số x, xác ñịnh số x số dương, hay số âm ?

iii Bài tập 2: Nhập vào số nguyên a,b Tìm số lớn

iv Bài tập 2: Nhập vào số nguyên a,b,c Tìm số lớn số nhỏ số

Chú ý:

+ C++ qui ước: true !=

false == + Kiểu Logic:

Là kiểu thể giá trị sai Có hai giá trị: true false Các phép toán:

(20)

v Giải phương trình Ax + B = Với A, B hai hệ số ñược nhập vào từ bàn phím

(21)

3.2 Cấu trúc lựa chọn switch … case … a Trường hợp sử dụng

Khi có nhiều lựa chọn dẫn ñến dùng cấu trúc if … else … if dài dịng khó hiểu

Khi so sánh so sánh bằng, so sánh thứ tự b Cú pháp:

switch (biểu thức nguyên) {

case trường hợp 1:

Các câu lệnh 1;

break;

case trường hợp 2:

Các câu lệnh 2;

break; …

default:

Các câu lệnh n;

break; }

Lưu ý:

- Biểu thức nguyên: Biến kiểu nguyên, biểu thức có giá trị nguyên, kiểu ký tự, kiểu logic

- Trường hợp : số nguyên, ký tự, biểu thức hằng, giá trị logic

- default: (trường hợp ngoại lệ), ñược thực thi trường hợp không xảy (thành phần không bắt buộc)

c Bài tập:

Bài tập 1: Nhập vào số x, xác ñịnh tính chẵn lẽ x Bài tập 2: Viết chương trình cho trị chơi thi trắc nghiệm

- Xuất hình câu hỏi ñáp án a, b, c, d

- Nếu người chơi chọn đáp án sai xuất câu thơng báo “sai rồi” - Cịn người chơi chọn đáp án ñúng báo “ñúng rồi”

Biểu thức = TH1

exit

true Các câu lệnh

true

false Các câu lệnh n

(default) Biểu thức

= TH2 Các câu lệnh

false

break

break

break Không break

(22)

Bài tập 3: Xuất kết phép toán A phép_toán B

Với A, B số thực nhập từ bàn phép

Và phép toán phép toán sau: +, -, *, /

Bạn viết chương trình xuất kết phép toán phù hợp với phép toán mà người dùng nhập vào

Ví dụ:

Người dùng nhập A = B = 3.5 Phép toán: *

(23)

Chương 4: Cấu trúc lặp

4.1 Các cấu trúc lặp:

1 while (BT lôgic) {

//Khối lệnh }

2 {

//Khối lệnh }while (BT lơgic) ;

Lưu ý:

- có dấu ; cuối lệnh while

- Khối lệnh ln thực lần

BT lôgic

//khối lệnh

true false

BT lôgic

//khối lệnh

true

(24)

3 for (khởi tạo ; ñiều kiện; lệnh thực sau)

{

//Khối lệnh }

Ví dụ:

for(int i=0; i< 5; i++)

cout<<”Hello world”<<endl; int j=10;

for (; j >=0; j)

cout<<”Hello world”<<endl;

+ Lưu ý: thành phần lệnh for khuyết

+ Câu hỏi gợi mở: kết thúc vịng for trên, biến i j có giá trị bao nhiêu?

ðiu ki n

//khối lệnh

true

Khởi tạo

Lệnh thực sau

false

Nhận xét:

(25)

- continue (thường thấy vịng lặp for): Trong vịng lặp gặp từ khố chương trình bắt đầu vịng vòng lặp

4.2 Mối liên quan for while: a Chuyển lệnh for thành while: Khởi_tạo_for;

while (ñiều_kiện_của_for) {

//Khối lệnh thân lệnh for Lệnh_thực_hiện_sau_của_for; }

b Chuyển lệnh while thành for: for ( ; ñiều_kiện_của_while; ) {

//Khối lệnh thân lệnh while }

2 Bài tập:

Thực cấu trúc while, while, for cho câu i, ii, iii i Tính tổng + + + + + n

ii Tính tổng + 1/2 + 1/3 + 1/4 + +1/ n iii Tính tổng 12 + 22 + 32 + 42 + + n2

iv Nhập vào số n, xác định xem có phải số nguyên tố không?

(26)

Chương 5: Cấu trúc

5.1 Nhắc lại cách khai báo kiểu liệu (typedef): a Cú pháp:

typedef Kiểu_dữ_liệu_cũ Kiểu_dữ_liệu_mới; b Ý nghĩa:

Khi khai báo kiểu liệu typedef, tức

Kiểu_dữ_liệu_mới kiểu liệu kiểu Kiểu_dữ_liệu_cũ Ta sử dụng kiểu liệu kiểu liệu bình thường khác (sử dụng giống kiểu liệu int, float, double, char, …)

c Ví dụ:

typedef int so_nguyen; so_nguyen i;

int j;

for (so_nguyen t = 0; t<5; t++) cout<<”Hello world”<<endl;

//ðịnh nghĩa so_nguyen la kiểu liệu //Sử dụng kiểu so_nguyen kiểu liệu bình //thường khác

5.2 Cách khai báo kiểu liệu cú trúc: a Mục đích:

(27)

b Cú pháp:

i Cách 1: dùng tyedef ñể ñịnh nghĩa kiểu typedef struct{

kiểu_dữ_liệu trường_1; kiểu_dữ_liệu trường_2;

}tên_cấu_trúc;

ii Cách 2: khơng dùng tyedef để định nghĩa kiểu struct tên_cấu_trúc{

kiểu_dữ_liệu trường_1; kiểu_dữ_liệu trường_2;

};

khai báo tên cấu trúc ñồng thời khai báo lúc biến kiểu cấu trúc

struct tên_cấu_trúc{

kiểu_dữ_liệu trường_1; kiểu_dữ_liệu trường_2;

}biến_1, biến_2, ;

Lưu ý:

- Có dấu chấm phẩy (;) cuối khai báo cấu trúc

(28)

c Ví dụ:

Xây dựng kiểu cấu trúc PHÂN SỐ, với trường TỬ MẪU kiểu số nguyên

Cách 1:

typedef struct {

int tu; int mau; } PHANSO; Cách 2:

struct PHANSO {

int tu; int mau; };

khi ta có thê sử dụng kiểu cấu trúc PHANSO kiểu bình thường

PHANSO ps;

c Cách truy cập vào trường cấu trúc:

Ta dùng cú pháp sau ñể truy cập vào trường cấu trúc Tên_biến_kiểu_cấu_trúc.trường

(29)

5.2 Bài tập cấu trúc

1) Viết chương trình nhập vào phân số ps1, ps2

o Tính tổng, hiệu, tích, nhân phân số đó, kết trả phân số

(Lưu ý: phải kiểm tra tính đắn liệu nhập vào, ví dụ mẫu phân số phải ln khác khơng)

2) Viết chương trình nhập vào ñiểm A, B, C hệ trục tọa ñộ Oxy, hãy:

o Kiểm tra xem ñiểm có thẳng hàng hay khơng

o Tính khoảng cách từ A ñến B, A ñến C, B ñến C

o Nếu A,B,C không thẳng hàng tính diện tích, chu vi tam giác ABC

3) Viết chương trình quản lý điểm sinh viên, với

o Số lượng sinh viên n, với n nhập từ bàn phím

o Thơng tin sinh viên gồm:

Họ tên

Ngày tháng năm sinh MSSV

ðiểm Toán, Lý, Hoá ðiểm trung bình

(30)

Chương 6: Mảng

6.1 ðịnh nghĩa:

Mảng tập hợp nhiều phần tử có kiểu giá trị có chung tên

6.2 Khai báo:

Kiểu_dữ_liệu Tên_mảng[spt][spt] ; Cụ thể:

a Mảng chiều:

Kiểu_dữ_liệu Tên_mảng[spt]; b Mảng hai chiều:

Kiểu_dữ_liệu Tên_mảng[spt dịng][spt cột];

Ví dụ:

- Mả

ng chi ều kiểu số nguyên có 10 phần tử: int a[10];

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] - Mảng chiều kiểu ký tự có phần tử:

Lưu ý quan trọng:

- Chỉ số mảng ln ln đánh từ số

- Các phần tử mảng ta sử dụng biến bình thường Ví dụ: Gán phần tử mảng cho 10

(31)

6.2 Bài tập:

i Thực phép toán mảng (1 chiều chiều): - Khởi tạo mảng

- Xuất giá trị mảng

- Thêm phần tử vào mảng (1 chiều) - Xoá phần tử mảng (1 chiều) ii Nhập vào thông tin sinh:

- Họ tên - Năm sinh

- ðiểm môn học (lưu vào mảng) Xuất điểm trung bình sinh viên

iii Nhập vào dãy số nguyên, tìm phần tử lớn nhất, nhỏ dãy (1 chiều, chiều)

iv Nhập vào dãy số nguyên, Xuất dãy số:

- Dãy số âm mảng - Dãy số dương mảng v Nhập vào dãy số nguyên,

Xuất dãy số:

(32)

Chuyên ñề: Mảng – ký tự - chuỗi

1 Ký tự

- Ví dụ: ‘c’ , ‘b’, ‘d’ - Tên kiểu liệu: char - Ví dụ:

char c; cin >>c; Mảng

- Là tập hợp biến có kiểu liệu

- Từ phần tử mảng ta xem biến, ví dụ a[i], a[1], a[2][3], ta thực lệnh, phép toán biến áp dụng vào từ phần tử mảng

- Lưu ý: Mảng luôn ñược ñánh số từ - Cách khai báo:

Mảng chiều:

Tên_dữ_liệu Tên_mảng[spt]; Mảng chiều:

Tên liệu Tên_mảng[số_dịng][số_cột] - Ví dụ:

int n;

int a[100]; //Khai báo mảng chiều kiểu số nguyên có 10 phần tử cout<<”nhập vào số phần tử mảng”<<endl;

cin>>n;

//Nhập vào phần tử mảng

cout<<”Mời bạn nhập vào phần tử mảng”<<endl; for (int i = ; i<n; ++i)

(33)

- Khai báo: char tên_chuỗi[chiều_dài_chuỗi];

- Với char s[10] = “Hello” s[0] = ‘H’, s[1] = ‘e’, s[2] = ‘l’, s[3]=’l’, s[4]=’o’, ñặc biệt s có thêm ký tự kết thúc chuỗi s[5] = ‘\0’ Khi chiều dài chuỗi (khơng tính ký tự kết thúc chuỗi)

- Ví dụ:

char s[10]; //khai báo chuỗi có tối ña 10 ký tự //hay mảng gồm 10 phần tử kiểu ký tự - Nhập liệu vào chuỗi

i Cách 1: Nhập từ phần tử giống mảng //Với L chiều dài chuỗi

for (int i = 0; i < L; ++i) cin>>s[i];

ii Cách 2: Nhập chuỗi khơng có khoảng trắng cin>>s;

iii Cách 3: Nhập chuỗi có khoảng trắng gets(s);

- Cách xuất chuỗi

i Cách 1: Xuất từ phần tử giống mảng //Với L chiều dài chuỗi

for (int i = 0; i < L; ++i) cout<<s[i];

ii Cách 2: cout<<s;

- Các lệnh có liên quan đến chuỗi dạng kiểu ký tự

Cú pháp lệnh Ý nghĩa Thư viện phải khai

báo

int toupper(int c) Chuyển ký tự c thành ký tự hoa #include <ctype.h>

int tolower(int c) Chuyển ký tự c thành ký tự thường #include <ctype.h>

char* strupr(char* s) Chuyển s sang chuỗi hoa #include <string.h>

char* strlwr(char* s) Chuyển s sang chuỗi thường #include <string.h>

int strlen(const char* s) Trả ñộ dài chuỗi #include <string.h>

char* strcat(char* dest, const char *src)

Cộng chuỗi, kết trả cho chuỗi dest

#include <string.h>

char* strcpy(char* dest, const char* src)

Copy nội dung chuỗi src cho chuỗi dest

#include <string.h>

int strcmp(const char* s1, const char* s2)

Giá trị trả giá trị:

- <0 : s1 “nhỏ hơn” s2 - : s1 s2 - >0 : s1 “lớn hơn” s2

(34)

int atoi(const char* s) ðổi chuỗi số sang số ngun (nếu khơng đổi kết trả giá trị 0)

Ví dụ:

char s[10] = “123”; int i = atoi(s);

cout<<i; //Khi i 123

#include <stdlib.h>

double atof(const char* s) ðổi chuỗi số sang số thực (nếu

khơng đổi kết trả giá trị 0.0)

Ví dụ:

char s[10] = “12.3”; float f = atof(s);

cout<<f; //Khi i 12.3

#include <stdlib.h>

char* itoa(int value, char *str,

int hệ_cơ_số );

ðổi số value thành chuỗi, tương ứng với số ñược khai báo Ví dụ:

int i = “123”; char s[100];

itoa(i, s, 10); //ñổi sang số 10 cout<<s; //Khi s “123”

#include <stdlib.h>

*ðịnh dạng chuỗi theo ngôn ngữ C sprintf(char* s,chuỗi_ñịnh_dạng_của_C, tập_giá_trị);

chuỗi ñịnh dạng tập ký tự cờ: “%c” – ký tự

“%i” – số nguyên “%f” – số thực

Ví dụ:

char s[100]; int i =10;

float f = 132.124; sprintf(s, “%i” , i); sprintf(s, “%f”,f);

sprintf(s, “%.2f”,f); //lấy chữ số //sau dấu

//của số thực

(35)

Lưu ý:

- Cách khai báo hằng: (hằng biến giá trị không bị thay đổi chương trình)

+ Cách 1: (dùng macro #define)

#define biến_hằng giá_trị //Khơng có dấu ; cuối lệnh - Ý nghĩa: dùng từ khoá marco #define, biên dịch, chương trình thay tất biến_hằng giá_trị

- Ví dụ:

#define bien_hang 123 + Cách 2:

const kiểu_dữ_liệu tên_hằng = giá_trị; //có dấu ; cuối lệnh Ví dụ:

const int bien_hang = 123;

- Khi lập trình mơi trường Visual C++, đánh lệnh ta dùng phím nóng Ctrl + Space bar ñể hiển thị lệnh C++

-

(36)

Do hàm getline Visual C++ bị lỗi, ta sửa lỗi cách sau: + Bước 1: Bấm chuột phải lên chổ khai báo thư viện <string>, bấm chuột phải chọn “Open Document <string>”

+ Bước 2: Bấm phím nóng Ctrl + F

+ Bước 3: gõ vào hộp thoại tìm kiếm dịng chữ:

(37)

+ Bước 4: Thay ñổi số lệnh

Ban ñầu Sau sửa

else if (_Tr::eq((_E)_C, _D)) {_Chg = true;

_I.rdbuf()->snextc(); break; }

else if (_Tr::eq((_E)_C, _D)) {_Chg = true;

//_I.rdbuf()->snextc();

//Phần thêm vào

_I.rdbuf()->sbumpc(); break; }

(38)

Bài tập bổ sung:

Nhập vào mảng chiều n x n (ma trận vng) Tính tổng số hạng đường chéo Tính tổng số hạng đường chéo phụ Duyệt phân nửa đường chéo

2 Sắp xếp tăng dần/giảm dần giá trị mảng chiều Bài tập phân số

Nhập vào phân số (phân số gồm có tử mẫu) Tính tổng, hiệu, tích, thương phân số Rút gọn phân số

4 Xuất hình hình (với chiều cao hình số ngun dương h nhập từ bàn phím)

* ** *** **** *****

* ** *** **** ***** *

*** ***** *******

******* ***** *** *

5 Nhập vào chuỗi s ký tự c, kiểm tra xem s có ký tự c khơng, có xuất vị trí c s, không xuất giá trị -1

6 Tương tự tập 4, thay ký tự c, ta thay chuỗi s2

(39)

Chuyên ñề:Hỗ trợ kỹ thuật lập trình A Phạm vi hoạt ñộng biến

1 Phân loại biến:

- Biến tồn cục: Là biến có phạm vi hoạt động xun suốt từ đầu đến cuối chương trình

- Biến cục bộ:

+ Là biến có phạm vi hoạt động thời điểm chương trình

+ Phạm vi hoạt động biến cục từ lúc khai báo biến cho ñến dấu đóng khối gần chứa

2 Nơi khai báo biến:

- Biến toàn cục: khai báo hàm main - Biến cục bộ: khai báo hàm main

B Debug

1 Phân loại loại lỗi (Error):

- Lỗi cú pháp: Là lỗi người lập trình khơng ghi cú pháp lệnh, lỗi chương trình biên dịch thông báo

Nơi thông báo lỗi cú pháp ,

nếu có lỗi bấm F4 để

tìm lỗi

Nơi báo cảnh báo: cảnh báo không làm ảnh hưởng ñến việc

chạy ct, nhiêu ñối với số cảnh báo quan trọng ta nên

(40)

- Lỗi logic: Là lỗi chương trình người lập trình viết khơng thực với nội dung u cầu đặt (ví dụ: u cầu toán, yêu cầu khách hàng, )

Debug gì?:

- Là cách tìm lỗi logic cách để chương trình chạy dòng lệnh (chạy bước từ xuống), qua dịng lệnh ta xác định giá trị biến thay đổi có với thuật tốn đưa hay khơng => từ ta xác định lỗi logic chương trình

3 Cách hoạt ñộng Debug:

Bước 1: ðặt điểm dừng breakpoint bấm phím nóng F9

(breakpoint đánh dấu dịng lệnh, chương trình dừng lại dịng lệnh chứa breakpoint)

ðối với lỗi logic phải sử dụng Debug để tìm lỗi

(41)

Bước 2: Bấm F5 để chương trình bắt ñầu chế ñộ Debug (chương trình dừng lại vị trí breakpoint)

Tuỳ theo mục đích người kiểm tra lỗi, ta có phím nóng để hỗ trợ

+ F10: chương trình chạy bước, bỏ qua chương trình + F11: chương trình chạy bước, gặp chương trình vào kiểm tra (khơng bỏ qua chương trình con)

+ F5: đến ñiểm dừng breakpoint gần ñó + F9: thêm ñiểm dừng breakpoint

+ Shift + F5: Dừng chế ñộ Debug Lưu ý:

1 Màn hình chế độ debug gồm cửa sổ

2 Ctrl + F5 : chạy chương trình khơng Debug F5: chạy chương trình chế độ Debug

Dịng lệnh kiểm tra

Cửa sổ kiểm tra giá trị biến (do chương trinh biên dịch quản lý)

(cửa sổ quickwatch) Cửa sổ kiểm tra giá trị biến (do người lập trình quản lý cách nhập tên biến vào)

(42)

Chương 7:

Hàm - Lập trình hướng cấu trúc

7.1 Giới thiệu:

Ví dụ ta có chương trình sau: Nhập mảng chiều n phần tử, xuất mảng hình sau tăng giá trị phần tử lên ñơn vị

1 10 11 12 13 14 14

#include <iostream> #include <conio> using namesapce std; int a[100];

int n; int main() {

cout<<”Nhập liệu mảng chiều: “<<endl; cout<<”nhập vào số lượng phần tử: “;

cin>>n;

for (int i = 0; i < n; i++) {

coutt<<”Nhập vào phần tử thứ “<<i<<”: “; cin>>a[i];

(43)

for (i = 0; i < n; i++) cout<<a[i]<<” “; cout<<endl; 35 26 27 28 29 30 31 32 33 ++a[i];

cout<<”Mảng sau xử lý: ”<<endl;

getch(); return 0; }

Phân tích:

Ta nhận thấy đoạn chương trình từ 18 -> 20 28->30 giống thể xuất nội dung mảng hình Làm để khơng lặp lại đoạn chương trình giống vậy?

7.2 ðịnh nghĩa hàm (hay cịn gọi đơn thể):

a Giải tốn ví dụ:

1

#include <iostream> #include <conio> using namesapce std; int a[100];

int n;

Mục đích việc xây dựng hàm:

- Giải vấn ñề phải lặp lại nhiều đoạn chương trình giống - Chia tốn lớn thành nhiều tốn nhỏ Khi ñể giải

(44)

8 10 11 12 13 14 14 16 17 18 19 20 21 22 23 24 35 26 27 28 29 30 31 32 33

//Khai báo hàm (prototype) void xuat_mang_1chieu(); int main()

{

cout<<”Nhập liệu mảng chiều: “<<endl; cout<<”nhập vào số lượng phần tử: “;

cin>>n;

for (int i = 0; i < n; i++) {

coutt<<”Nhập vào phần tử thứ “<<i<<”: “; cin>>a[i];

}

cout<<”Mảng vừa nhập”<<endl;

xuat_mang_1chieu(); //Gọi hàm xuất mảng chiều //Tăng phần tử mảng lên ñơn vị

for (i = 0; i < n; i++) ++a[i];

cout<<”Mảng sau xử lý: ”<<endl;

xuat_mang_1chieu(); //Gọi hàm xuất mảng chiều

(45)

b Hàm khơng có giá trị trả về: Cú pháp:

i Hàm khơng có truyền tham số

Cú pháp Ví dụ

void tên_hàm() {

//Khối lệnh; }

void Hàm_Chào() {

cout<<”hello world”; cout<<endl;

} ii Hàm có truyền tham số

Cú pháp Ví dụ

void tên_hàm(kiểu thamsô1 , kiểu & thamsố2 , ) {

//Khối lệnh; }

void Xuất_Tổng(int a, int b) {

int s = a + b;

cout<<”Tổng “<<a<<”và”<<b<<”là ”;

cout<<s; }

c Hàm có giá trị trả về: Cú pháp:

i Hàm khơng có truyền tham số

Cú pháp Ví dụ

kiểu_trả_về tên_hàm() {

//Khối lệnh;

return giá_trị_trả_về; }

int Tổng_1_ñến_10() {

int s = 0;

for (int i = 1; i<=10 ; i++) s + = i;

return s; // Giá trị trả }

ii Hàm có truyền tham số

Cú pháp Ví dụ

kiểu_trả_về tên_hàm(kiểu thamsơ1, kiểu & thamsố2 , ) {

//Khối lệnh;

return giá_trị_trả_về; }

int Tính_Tổng(int a, int b) {

int s = a + b;

(46)

7.3 Khai báo hàm – khai báo prototype: Cú pháp:

void Tên_Hàm(danh sách kiểu tham số);

kiểu_trả_về Tên_Hàm(danh sách kiểu tham số); Chú ý:

- Danh sách kiểu tham số: kiểu tham số (có thể có khơng có tên biến)

Ví dụ:

//Khai báo prototype

void Xuat_Tong(int , int ) ; void main()

{

//Khối lệnh hàm main }

//ðịnh nghĩa hàm

void Xuat_Tong(int a, int b) {

int s = a + b;

cout<<”Tổng “<<a<<” “<<b<<” “<<s; cout<<endl;

}

(47)

7.4 Lời gọi hàm:

a Ví dụ với hàm khơng có giá trị trả //Khai báo prototype

void Xuat_Tong(int , int ) ; void main()

{

Xuat_Tong( , ); //Gọi hàm Xuat_Tong }

//ðịnh nghĩa hàm

void Xuat_Tong(int a, int b) {

int s = a + b;

cout<<”Tổng “<<a<<” “<<b<<” “<<s; cout<<endl;

}

Khi có so khớp sau:

Hàm void Xuat_Tong(int a , int b)

Lời gọi hàm Xuat_Tong( , );

Hay thời ñiểm gọi hàm Xuat_Tong a có giá trị 2, b có giá trị Vậy hàm Xuat_Tong xuất hình:

Tổng b Ví dụ với hàm có giá trị trả

//Khai báo prototype int Tinh_Tong(int , int ) ; void main()

{

int i;

i = Xuat_Tong( , ); //Gọi hàm Tinh_Tong cout<<i;

}

//ðịnh nghĩa hàm

int Tinh_Tong(int a, int b) {

(48)

Tương tự ta có so khớp sau:

Hàm int Tinh_Tong(int a , int b)

Lời gọi hàm i = Tinh_Tong( , );

Hay thời ñiểm gọi hàm Xuat_Tong a có giá trị 2, b có giá trị Và giá trị ñược trả cho biến i, ñó i có giá trị

7.5 Tham trị tham chiếu (quan trọng):

Tham trị Tham chiếu

- khai báo khơng có dấu & kiểu tham số

Ví dụ:

void ham(int a) {

//Khối lệnh }

- khai báo có dấu & kiểu tham số

void ham(int & a) {

//Khối lệnh }

- Khơng làm thay đổi biến gọi - Làm thay ñổi biến ñược gọi void binh_phuong(int );

void main() {

int i = 5;

binh_phuong( i ); cout<<i; // i =

void binh_phuong(int &); void main()

{

int i = 5;

binh_phuong( i ); cout<<i; // i = 25

5

Chú ý:

(49)

7.6 Giá trị mặc ñịnh tham số: a Ý nghĩa:

Cho phép gọi hàm cách linh hoạt:

- Nếu có truyền tham số hàm lấy tham số truyền - Nếu khơng có truyền tham số hàm lấy giá trị mặc ñịnh b Các khai báo:

Ta cần khai báo giá trị mặc ñịnh tham số lúc khai báo prototype (khai báo hàm)

Ví dụ 1:

int Tinh_Tong(int , int b = 1); //Giá trị mặc ñịnh b int main()

{

int i;

i = Tinh_Tong ( , 3); cout<<i; //i =5 int j;

j = Tính_Tong( ); //Chỉ truyền có tham số

//Khi b lấy giá trị mặc ñịnh cout<<j; // j = + =

}

//ðịnh nghĩa hàm bình thường int Tinh_Tong(int a, int b)

{

int s = a + b; return s; }

Ví dụ 2:

Khai báo giá trị mặc ñịnh sau sai int Tinh_Tong(int a = 1, int b);

Do a khai báo có giá trị mặc định b khơng có giá trị mặc định (nhắc lại: Giá trị mặc ñịnh tham số phải ñược khai báo từ kiểu_trả_về tên_hàm(kiểu thamsố1 = giátrị1, kiểu thamsố2=giá_trị 2, );

Chú ý:

(50)

7.7 Quá tải hàm:

a Các thành phần hàm:

Hai hàm khác chúng có thành phần khác nhau, gồm:

o Tên hàm

o Kiểu tham số o Số lượng tham số

b Quá tải hàm:

Quá tải hàm hàm có tên hàm, rơi vào trường hợp sau:

o Số lượng tham số khác

o Cùng số lượng tham số, khác kiểu liệu tham số

Ví dụ 1:

void Xuat_Tong(int a, int b); void Xuat_Tong(int a, int b, int c); int main()

{

Xuat_Tong( , 2); Xuat_Tong( , 2, 3); }

void Xuat_Tong(int a, int b) {

cout<<a+b; }

void Xuat_Tong(int a, int b, int c) {

(51)

7.8 Quá tải toán tử:

a Các toán tử C++:

Các toán tử quen thuộc C++

Tốn tử Ví dụ

+ a = b + c;

- a = b – c;

* a = b * c;

/ a = b / c;

% a = b % c;

= a = b;

== if (a == b){}

[] a[1]; //với a mảng

<< cout<<i; >> cin>>i;

Các tốn C++ có chung cách đặt tên hàm theo mơ tả sau: operator <ký_hiệu_phép_toán>

b Quá tải toán tử:

Ứng dụng: ta sử dụng tốn tử C++ ñối với biến cấu trúc mà ta tự nghĩa kiểu bình thường C++

Ví dụ:

với kiểu cấu trúc PHÂNSỐ khai báo sau: struct PHANSO

{

int x; int mau; };

int main() {

PHANSO ps1, ps2;

cin>>ps1>>ps2; //Nhập kiểu liệu bình thường PHANSO ps;

ps = ps1 + ps2; //Thực phép cộng kiểu liệu //bình thường khác

(52)

Ví dụ:

1 Quá tải toán tử + phân số

PHANSO operator + (PHANSO a , PHANSO b) {

PHANSO ps;

ps.tu = a.tu * b.mau + a.mau * b.tu; ps.mau = a.mau * b.mau;

return ps; }

2 Quá tải toán tử << cho phân số

ostream& operator(ostream& os, PHANSO ps) {

os<<ps.tu<<” / ”<<ps.mau; return os;

}

3 Quá tải toán tử << cho phân số

istream & operator(istream & is, PHANSO ps) {

(53)

Bài tập hàm:

1 Sử dụng hàm tải hàm, q tải tốn tử để viết lại tập phân số a kiểm tra tính đắn phân số

b Nhập / Xuất phân số c Rút gọn phân số

d Cộng trừ nhân chia phân số

e Quá tải toán tử nhập, xuất, = , ==, +, - , *, /

2 Sử dụng hàm tải hàm, tải toán tử viết lại tập mảng chiều kiểu số nguyên

a Nhập / xuất mảng chiều

b Tìm số nguyên tố mảng c Tìm số phương mảng d Thêm phần tử vào ñầu dãy

e Thêm phần tử vào cuối dãy f Thêm phần tử vào vị trí k g Xố phần tử vị trí k h Tìm kiếm phần tử có giá trị x i Tìm

j Tìm max k Tính tổng

l Tính trung bình số hạng m ðảo ngược dãy

n Sắp xếp theo thứ tự tăng/giảm

3 Sử dụng hàm tải hàm, tải toán tử viết lại tập mảng chiều kiểu số nguyên

a Nhập / xuất mảng

b Thêm dịng vào đầu ma trận c Thêm phần tử vào cuối ma trận d Thêm phần tử vào dịng thứ k e Xố dịng thứ k

f Tìm g Tìm max h Tính tổng

(54)

Chương 8:Tổ chức thư viện

8.1 Ý nghĩa việc tổ chức thư viện:

Khi lập trình, lập trình viên ln có xu hướng sử dụng lại hàm mà ñã viết, tốn công viết lại ban ñầu Vì họ tổ chức hàm thường sử dụng lại thành thư viện, cần sử dụng lại cần gọi hàm ra, mà khơng cần phải ñịnh nghĩa lại hàm

8.2 Các bước tạo thư viện

Các bước tạo thư viện mang tên tenthuvien i Giai ñoạn 1: Tạo file tenthuvien.h

Bước 1: Vào menu Project -> Add to project -> New Bước 2: Tại ther File, chọn C/C++ header file

Bước 3: đánh vào: tenthuvien.h vào ô file name

(55)

Bước 5: Khi ta có file tenthuvien.h , flie ta soạn nội dung sau:

- ðầu file:

#ifndef TENTHUVIEN_H #define TENTHUVIEN_H - Giữa file:

- Khai báo hàm (prototype hàm) hàm mà ta muốn tổ chức thành thư viện

- Cuối file: #endif

ii Giai ñoạn 2: Tạo file tenthuvien.cpp

Bước 1: Vào menu Project -> Add to project -> New Bước 2: Tại ther File, chọn C/C++ Source File

Bước 3: đánh vào: tenthuvien.cpp vào ô file name Sau ựó chọn ok

Bước 4: Khi ta có file tenthuvien.cpp , flie ta soạn nội dung:

- ðầu file:

#include “tenthuvien.h”

- Các ñịnh nghĩa hàm ñã ñược khai báo tenthuvien.h iii Giai ñoạn 2: Sử dụng thư viện tenthuvien

Ở file có sử dụng hàm thư viện tenthuvien ta ñều phải khai báo thư viện ñầu file

#include “tenthuvien.h”

(56)

8.3 Phân tích ví dụ

Ví dụ ta có chương trình tính tổng số a b viết cách bình thường sau:

Viết lại chương trình với cách tổ chức thư viện – xây dựng thư viện Tính_tong

(57)

ii Nội dung file Tinh_tong.cpp

iii Nội dung file sử dụng thư viện Tinh_tong

8.4.Chỉ thị #include: so sánh cách khai báo thư viện

#include <thư_viện.h> #include “thư_viện.h”

Chương trình tìm thư_viện thư mục mặc định chứa thư viện C++

- Chương trình tìm thư viện thư mục gốc (nên ct ñang chạy)

- Nếu khơng tìm thấy thư viện, chương trình tìm thư mục mặc định chứa thư viện C++

(58)

Bài tập:

(59)

Chương 9: Quản lý nhớ ñộng

9.1 Khái niệm nhớ - địa lập trình:

Khi ta khai báo biến, điều có nghĩa chương trình tạo cho ta nhớ để lưu trữ biến

int main() {

int a; int b; int c; a = 10; b =20; c = 30; return }

8 30 c

4 20 b

0 10 a

ñịa

Giá trị thời ô

nhớ

biến

Một ô nhớ gồm có thành phần sau:

- ðịa nhớ (do hệ điều hành quản lý) - Giá trị thời ô nhớ ñó

Với biến a, ta muốn biết ñịa nhớ lưu trữ ta dùng tốn tử & để xác định địa

Ví dụ:

int a = 20;

cout<<&a; //xuất địa nhớ chứa biến a 9.2 Tổng quan biến trỏ (biến ñộng)

o Là biến lưu địa nhớ o Cú pháp khai báo

kiểu_dữ_liệu * tên_biến;

o Ý nghĩa: tạo biến lưu trữ ñịa các biến thuộc kiểu

Ví dụ:

(60)

9.3 Các thao tác trỏ:

i Con trỏ lưu địa nhớ, nên

cout<<p; //Xuất địa nhở mà p ñang lưu

ii Xuất giá trị thời ô nhớ trỏ lưu trữ - Tốn tử : *

- Ví dụ:

int a = 5; int * contro;

contro = & a; //contro lưu (trỏ) ñến ñiạ a

cout<< *contro; //xuất giá trị ñịa mà contro ñang lưu //trữ (tức 5)

iii Tạo ô nhớ kiểu liệu xác ñịnh - Toán tử : new

- Cú pháp:

new kiểu_dữ_liệu; - Ví dụ:

int * p = new int;

iv Huỷ biến trỏ (huỷ ô nhớ trỏ lưu trữ ñịa chỉ) - Toán tử : delete

- Cú pháp:

delete biến_kiểu_con_trỏ; - Ví dụ:

delete p;

v NULL:

- NULL – trỏ

- Một trỏ có giá trị NULL, tức chưa trỏ đến địa nhớ

Ví dụ:

(61)

Biến tĩnh Biến động

Kích thước cố định khơng cố định

Phạm vi sử dụng từ lúc khai báo ñến hết khối gần chứa nó.

từ lúc tạo kết thúc bị hủy.

Tên biến dùng ñể

Lưu giá trị Lưu ñịa

Cách truy xuất giá trị tên_biến *tên_biến Cách truy cập ñịa & tên_biến tên_biến

Tự động giải phóng hết phạm vi sử dụng

Khơng tự động giải phóng Lập trình viên phải lo việc này.

9.4 Mảng ñộng (mảng trỏ) - Khai báo

kiểu_dữ_liệu* tên_biến = new kiểu_dữ_liệu[spt]; - Huỷ mảng ñộng:

delete [] tên_biên;

- Ưu ñiểm: sử dụng ñược mảng với số phần tử lớn - Ví dụ:

#define MAX 100000

int * a = new int [MAX];

for (int i = ; i< MAX ; i++)

a[i] = i;

(62)

9.5 Chuổi trỏ - Khai báo

- char* tên_chuỗi = new char[chiều_dài_tối_ña_của_chuỗi]; - Huỷ chỗi:

- delete[] chuỗi;

- Khi ta sử dụng lệnh chuỗi áp dụng cho chuỗi trỏ cách bình thường

9.6 Con trỏ kiểu cấu trúc: Ví dụ:

struct PHANSO {

int tu; int mau; };

int main() {

PHANSO *ps; //con trỏ lưu ñịa biến kiểu cấu trúc ps = new PHANSO;

//truy cập ñến trường cấu trúc dấu chấm (.) *ps tu = 1;

*ps mau = 2;

cout<<”Xuất phân số: “;

cout<< *ps.tu << ” / ” << *ps.mau;

//truy cập ñến trường cấu trúc dấu mũi tên (->)

ps->tu = 1; ps->mau = 2;

cout<<”Xuất phân số: “;

(63)

9.7 Mối quan hệ mảng trỏ: Tên mảng ñịa

int a[10];

a tương ñương với &a[0] (ñịa phần tử a[0]) a + i tương ñương với &a[i] (ñịa phần tử a[i]) *(a+i) tương ñương với a[i]

Vì ta trỏ trỏ ñến biến mảng sau: int *p;

int a; p = a;

p tương ñương với &a[0] (ñịa phần tử a[0]) p + i tương ñương với &a[i] (ñịa phần tử a[i]) *(p+i) tương ñương với a[i]

hoặc:

int *p; int a; p = &a[k];

p tương ñương với &a[k] (ñịa phần tử a[k]) p + i tương ñương với &a[k + i] (ñịa phần tử a[k+i]) *(p+i) tương ñương với a[k+i]

9.8 Một số ví dụ đơn giản:

#include <iostream.h> #include <conio.h> using namespace std; int main()

{

int * p; int a = 1; p = & a;

cout<<*p<<endl; *p = 2;

cout<<*p<<endl; cout<<a<<endl; int j = 3;

p = &j; cout<<*p; cout<<a;

#include <iostream.h> #include <conio.h> using namespace std; int main()

{

int * p = new int; int * q;

q = new int; *q = 1; p = q;

cout<<*p<<endl; cout<<*q<<endl; *p = 2;

(64)

cout<<*t<<endl; cout<<*p<<endl; cout<<*q<<endl; *q = 10;

*p = *q;

cout<<t <<endl; cout<<p<<endl; cout<<*q<<endl; delete p,q;

(65)

Chương 10: Thư viện STL

(Standard Template Library)

10.1 iostream: #include <iostream> lệnh liên quan ñến việc xuất nhập

Lệnh Ý nghĩa Ví dụ

cout xuất chuẩn cout<<”Hello world”;

cerr Xuất lỗi chuẫn cerr<<”Error”;

cin nhập chuẩn cin>>n;

10.2 iomanip: #include <iomanip>

Lệnh Ý nghĩa Ví dụ

setw(n) - ðịnh độ dài tối thiểu xuất

- Khi ñộ dài liệu xuất khơng đủ tự động thêm vào

khoảng trắng phía

trước để đủ độ dài

cout<<”Hello”;

cout<<setw(10)<<”Hello”; cout<<setw(15)<<”Hello”; //Kết xuất là:

Hello Hello Hello 10.3 cmath: #include <cmath>

Lệnh Ý nghĩa Ví dụ

abs |x|, với x số nguyên int i = -12;

int a = abs(i);

ceil cận int j =ceil(i);

floor cận int j =floor(i);

fabs |x|, với x số thực float f = -12.34;

float b = fabs(i);

sqrt Hàm lấy bặc float f = sqrt(i);

pow Hàm luỹ thừa pow(a,8); // a8

sin cout<<sin(x);

cos cout<<cos(x);

tan cout<<tan(x);

(66)

10.4 ðối tượng string: #include <string> + khai báo ñối tượng string

string tên_ñối_tượng_string; + Nhập xuất

string s; //Khai báo ñối tượng string

cin>>s; //Nhập vào chuỗi khơng có khoảng trắng getline(cin, s); //Nhập vào chuỗi có khoảng trắng + Các phương thức ñối tượng string

Phương thức Ý nghĩa Ví dụ

size() - Lấy chiều dài chuỗi string s = “hello”;

cout<<s.size(); //

erase() Xoá chuỗi thành chuỗi rỗng s.erase();

erase(int chỉ_số_bñầu,

int slượng_phần_tử

Xố khoảng số ñầu

string s =”hello”; s.erase(1,3); *Làm quen với ñối tượng ñược xây dựng sẵn C++

Khi viết chương trình người lập trình thường mơ hình hố đối tượng thực tế thành đối tượng cụ thể lập trình Ví dụ, bạn viết game đá banh, đối tượng ngồi thực tế cầu thủ, trọng tài, trái banh, ñều mơ hình thành đối tượng

ðối với đối tượng có thuộc tính riêng, ví dụ đối tượng cầu thủ thuộc tính chiều cao, cân nặng, có số cách thức hoạt động dẫn bóng, sút bóng, ñội ñầu, gọi phương thức ñối tượng

Lập trình hướng đối tượng cho phép ta xây dựng đối tượng chứa đựng gói gọn thuộc tính, phương thức

Trong C++ ñã xây dựng cho số ñối tượng giúp người lập trình thao tác dễ dàng với liệu phức tạp

Ta ñi qua ñối tượng sau: string : ñối tượng chuỗi

fstream : ñối tượng quản lý tập tin

(67)

-1: s1 “nhỏ hơn” s2 find(char kýtự , int chisố_bdầu)

find(string chuỗi, int

chisố_bdầu)

Tìm ký tử (hoặc chuỗi) dãy bắt ñầu từ chỉ_số_bdầu chuỗi

- tìm thấy vị trí ký tự (chuỗi) chuỗi - kơ tìm thấy trả -1

string s = “hello”;

int i = s.find( ‘ e’ ); //i=1 int j = s.find( ‘ t’ ); //i=-1

Toán tử + cộng chuỗi string s1 =”Hello”

string s2 =” World”

string s = s1 + s1; //s=”Hello World”

Tốn tử [] Truy cập đến phần tử

chuỗi

cout<<s[0]; cout<<s[1]; 10.5 ðối tượng vector

a Mơ tả: Là đối tượng mơ tả tương tự mảng chiều, ñược xây dựng nhiều phương thức giúp ta thao tác dễ dàng tiện lợi đối với tốn liên quan ñến dãy

b Khai báo thư viện

#include <vector> c Cú pháp

vector<kiểu_dữ_liệu> tên_vector;

Khai báo vector lưu trữ thành phần thuộc kiểu_dữ_liệu, tương tự mảng chiều

Nhập liệu từ bàn phím Nhập liệu từ file

#include <iostream> #include <conio.h> using namespace std; int main()

{

int a[100]; //khai báo mảng chiều int n = 3;

a[0] = 2; a[1] = 1; a[2] = 3;

cout<<”Xuất mảng:”<<endl; for (int i =0 ; i<n; i++)

#include <iostream> #include <conio.h> #include <vector> using namespace std; int main()

{

vector<int> vec; //Khai báo vector

vec.push_back(2); vec.push_back(1); vec.push_back(3);

(68)

getch(); return 0; }

getch(); return 0; }

Các phương thức vector

Phương thức Ý nghĩa Ví dụ

push_back Thêm phần tử vào cuối

vector

size() - kích thước (số lượng phần

tử) vector

vector<int> vec; vec.push_back(2); vec.push_back(1); vec.push_back(3); //Khi

//vec[0]=2,vec[1]=2,vec[3]=3 cout<<vec.size(); // =

clear() Làm rỗng vector vec.clear();

empty() Kiểm tra vector có rỗng

không

if ( ! vec.empty()) {

//Khối lệnh }

Toán tử [] Truy cập ñến phần tử

vector

(69)

10.6 fstream: #include <fstream> a Mục đích:

+ Quản lý việc nhập liệu từ File (ñối tượng ifstream) + Quản lý việc xuất liệu vào File (ñối tượng oifstream) b Nhập liệu từ File:

Nhập liệu từ bàn phím Nhập liệu từ file

+ Khó quản lý liệu nhập + Dữ liệu nằm file, nên dễ quản

lý + Mỗi lần chạy chương trình phải nhập liệu lại

+ Mỗi lần chạy chương trình ta không cần nhập liệu lại

+ Không cần file lưu trữ liệu + Phải tạo file lưu trữ liệu trước chạy chương trình (thường *.txt) Ví dụ viết chương trình nhập vào ba số nguyên a, b, c

Nhập liệu từ bàn phím Nhập liệu từ file

#include <iostream> #include <conio.h> using namespace std;

int main() {

int a, b, c; cin>>a; cin>>b>>c; getch(); return 0; } #include <iostream> #include <conio.h> #include <fstream> using namespace std; int main()

{

int a, b, c;

ifstream ifile; //Tạo ñối tượng ifstream ifile.open(“data.txt”); //Mở file data.txt

(70)

Chú ý:

Người ta thường dùng phương thức eof() ifstream ñể kiểm tra ñã ñọc hết file chưa (thường dùng việc nhập liệu cho mảng từ file)

ifstream ifile; //Tạo ñối tượng ifstream ifile.open(“data.txt”); //Mở file data.txt int n = 0;

//Trong chưa ñọc hết file while (!ifile.eof())

{

ifile>>a[n++]; }

//đóng file ifile.close();

(71)

c Xuất liệu vào File:

Xuất liệu hình Xuất liệu file

+ Khó quản lý liệu xuất + Dữ liệu ñược xuất file, nên dễ quản lý

Ví dụ viết chương trình nhập vào ba số nguyên a, b, c

Nhập liệu từ bàn phím Nhập liệu từ file

#include <iostream> #include <conio.h> using namespace std;

int main() {

int a, b, c; a= 1; b= 2; c= 3;

cout<<a<<endl;

cout<<b<<” “<<c<<endl;

getch(); return 0; } #include <iostream> #include <conio.h> #include <fstream> using namespace std; int main()

{

int a, b, c; a= 1; b= 2; c= 3;

ofstream ofile; //Tạo ñối tượng ofstream ofile.open(“out.txt”); //Mở file output.txt

ofile<<a;

ofile<<b<<Ợ Ộ<<c; //đóng file

ofile.close(); getch();

return 0; }

Ngày đăng: 15/12/2020, 14:50

Tài liệu cùng người dùng

Tài liệu liên quan