CHƯƠNG 1 : THUẬT GIẢI VÀ LƯU ĐỒ
1.2. Các cách diễn tả thuật toán
1.2.1. Diễn đạt bằng ngôn ngữ tự nhiên
Ví dụ 1.1: Mơ tả thuật giải tìm ước chung lớn nhất (UCLN) của hai số a và b là: Bước 1: Nhập vào hai số a và b.
Bước 2: So sánh 2 số a,b chọn số nhỏ nhất gán cho UCLN.
Bước 3: Nếu hai số a và b chia hết cho UCLN thì Thực hiện bước 5. Bước 4: Giảm UCLN một đơn vị và quay lại bước 3
42 Bước 5: In UCLN - kết thúc.
Cách diễn đạt này tuy khá đơn giản và gần gũi với tư duy của con người nhưng phụ thuộc rất nhiều vào cách diễn đạt của người sử dụng.
Ví dụ 1.2: Mơ tả thuật giải cho bài tốn giải phương trình bậc hai. Bước 1: Yêu cầu cho biết giá trị của 3 hệ số a, b, c.
Bước 2: Nếu a = 0, thông báo dữ liệu đầu vào không đảm bảo. Kết thúc giải thuật. Bước 3: Nếu a ≠ 0:
3.1: Tính Delta = b2- 4ac.
3.2: Nếu Delta > 0 thì xuất thơng báo phương trình có 2 nghiệm phân biệt là x1, x2. Trong đó: 1 2 b x a , 2 2 b x a . Kết thúc giải thuật.
3.3: Nếu Delta = 0 thì xuất thơng báo phương trình có nghiệm kép là 0
2 b x a . Kết thúc giải thuật.
3.4: Nếu Delta < 0 thì xuất thơng báo phương trình vơ nghiệm. Kết thúc giải thuật. Ví dụ 1.3: Mơ tả thuật giải cho bài tốn tính tổng S a 1 a2 a3 ..... a n (với n nguyên, dương).
Bước 1: Nhập số các số hạng n.
Bước 2: Cho S=0 (lưu trữ số 0 trong S) Bước 3: Cho i=1 (lưu trữ số 1 trong i)
Bước 4: Kiểm tra nếu i<=n thì thực hiện bước 5, ngược lại thực hiện bước 8. Bước 5: Nhập ai
Bước 6: Cho S=S+ ai (lưu trữ giá trị S + ai trong S) Bước 7: Tăng i lên 1 đơn vị và quay lại bước 4. Bước 8: In S và kết thúc chương trình.
Vi dụ 1.4: Mơ tả thuật giải cho bài toán nhập vào 1 số n, sau đó lần lượt nhập vào n giá trị a1, a2,…,an. Hãy tìm và in ra giá trị lớn nhất trong n số a1, a2,…,an.
Bước 1: Nhập số n.
Bước 2: Nhập số thứ nhất a1. Bước 3: Gán max=a1.
Bước 4: Gán i=2.
Bước 5: Nếu i<=n thì thực hiện bước 6, ngược lại thực hiện bước 9. Bước 6: Nhập ai.
43 Bước 8: Tăng i lên một đơn vị và quay lại bước 5.
Bước 9: In max - kết thúc.
Vi dụ 1.5: Mô tả thuật giải cho bài tốn tính bình phương của một số Bước 1: Nhập giá trị cho x
Bước 2: Tính giá trị x*x và gán cho s Bước 3: Trả về giá trị s.
Vi dụ 1.6: Mơ tả thuật giải cho bài tốn tăng lương hiện tại lên 5%. Bước 1: Nhập giá trị cho lương _cũ.
Bước 2: Tính giá trị lương_cũ*1.05 và gán cho lương_mới. Bước 3: Trả về giá trị lương_mới.
1.2.2. Diễn đạt bằng ngơn ngữ lập trình
Ngơn ngữ lập trình (language program) là ngơn ngữ do các chuyên gia tin học tạo ra chun dùng để viết chương trình cho máy tính. Nó được xây dựng khá đơn giản về chính tả và ngữ pháp khá gần gũi với ngôn ngữ khoa học kỹ thuật, quản lý.
a. Diễn đạt bằng lưu đồ
Một số ký hiệu hay dùng:
Ký hiệu Mô tả
Điểm bắt đầu và chấm dứt thuật toán Thao tác nhập hay xuất dữ liệu Khối xử lý công việc
Khối quyết định lựa chọn Điểm nối
Chuẩn bị
Khối chương trình con
44 Ví dụ 1.7: Thuật tốn giải phương trình bậc nhất ax + b = 0, gồm các bước: - Bước 1: Nhập vào 2 hệ số a và b.
- Bước 2: Xét điều kiện a = 0 ?
Nếu đúng là a = 0, thì đi đến bước 3.
Nếu khơng, nghĩa là a ≠ 0, thì đi đến bước 4. - Bước 3: Xét điều kiện b = 0 ?
Nếu b = 0, thì báo phương trình có vơ số nghiệm. Chuyển đến bước 5.
Nếu b 0, thơng báo phương trình vơ nghiệm. Chuyển đến bước 5.
- Bước 4: Thơng báo phương trình có một nghiệm duy nhất là x = - b/a. - Bước 5: Kết thúc thuật tốn.
Trong ví dụ trên ta có thể trình bày với lưu đồ sau:
Hình 6: Lưu đồ thuật tốn giải phương trình bậc nhất ax + b = 0. Ví dụ 1.8: Vẽ lưu đồ cho thuật tốn đổi chỗ Ví dụ 1.8: Vẽ lưu đồ cho thuật toán đổi chỗ
Viết thuật toán để nhập vào 2 số A, B từ bàn phím sau đó đổi giá trị của biến A cho biến B và ngược lại.
Để viết thuật toán cho bài toán này, chúng ta sẽ đưa thêm vào chương trình một biến trung gian (TG) sau đó tiến hành chuyển giá trị của biến A cho biến TG, chuyển giá trị của biến B cho biến A và cuối cùng chuyển giá trị của biến TG cho biến B.
Bắt đầu Nhập a, b
a= 0 ?
x = -b/a
b= 0 ? Phương trình vơ nghiệm Phương trình vơ số nghiệm
Kết thúc đúng sai
45 Thuật tốn được trình bày như sau:
Hình 7: Lưu đồ thuật tốn đổi chỗ. Ví dụ 1.9: Vẽ lưu đồ cho thuật tốn tính tổng 2 số n1 và n2 Ví dụ 1.9: Vẽ lưu đồ cho thuật tốn tính tổng 2 số n1 và n2
Hình 8: Lưu đồ thuật tốn thuật tốn tính tổng 2 số n1 và n2. t = n1+n2 Nhập n1, n2 Hiển thị t Bắt đầu Kết thúc TG:=A B:=TG A:=B Đọc 2 số A,B In ra A,B Bắt đầu Kết thúc
46 Ví dụ 1.10: Vẽ lưu đồ cho thuật tốn tính A = x2+ y2
Hình 9: Lưu đồ thuật tốn tính A = x2+ y2.
1.2.2.2. Dùng mã giả
Phương pháp này sử dụng các cú pháp của một ngôn ngữ lập trình cụ thể để thể
hiện giải thuật. Dùng mã giả vừa vận dụng được các khái niệm trong ngơn ngữ lập trình, vừa giúp người cài đặt dễ dàng nắm bắt được nội dung giải thuật. Tuy nhiên, trong mã giả vẫn dùng một phần ngôn ngữ tự nhiên.
Ví dụ 1.11: Một đoạn mã giả của giải thuật giải phương trình bậc hai, minh họa bằng ngôn ngữ Pascal.
Begin
Nhập 3 hệ số a, b, c;
If a=0 then Xuất kết quả: Hệ số a không hợp lệ Else Begin
Delta := b*b-4*a*c; If Delta > 0 then Begin x1 := (-b-sqrt(delta))/(2*a); x2 := (-b+sqrt(delta))/(2*a);
Xuất kết quả: Phương trình có 2 nghiệm là x1 và x2; End
Else If Delta = 0 then
Xuất kết quả: Phương trình có nghiệm kép là -b/(2*a) Else {Trường hợp Delta < 0}
Xuất kết quả: Phương trình vơ nghiệm; End; End. Đọc 2 số x,y A= x2 + y2 Bắt đầu Kết thúc Xuất A
47 Ví dụ 1.12: Một đoạn mã giả của giải thuật giải phương trình ax2 + bx + c = 0 (a ≠ 0), minh họa bằng ngôn ngữ C++.
int main() {
float a, b, c; // khai bao cac he so float delta;
float x1, x2; // khai bao 2 nghiem
cout << “Nhap a, b, c:\n” ; cin >> a >> b >> c ; // qui uoc nhap a ≠ 0 delta = b*b - 4*a*c ;
if (delta < 0) cout << “Phuong trinh vo nghiem\n” ;
else if (delta==0) cout<<“Phuong trinh co nghiem kep:" << -b/(2*a) << '\n'; else
{
x1 = (-b+sqrt(delta))/(2*a); x2 = (-b-sqrt(delta))/(2*a);
cout << “nghiem 1 = " << x1 << " và nghiem 2 = " << x2 ; }
Câu hỏithảo luận
1. Trình bày các đặc trưng cần có của một thuật toán? Các cách biểu diễn một thuật tốn?
2. Trình tự thực hiện các bước của thuật tốn.
3. Cho 3 ví dụ về mơ tả và diễn đạt các thuật giải bằng ngôn ngữ tự nhiên.
4. Cho tam giác ABC có góc vng A và cho biết cạnh a và góc B. Hãy viết thuật tốn để tính góc C, cạnh b và cạnh c.
5. Trình bày tính chất xác định của thuật tốn và nêu rõ nghĩa của tính chất này. 6. Xác định input và output cho các thuật toán sau đây:
- Rút gọn một phân số.
- Kiểm tra xem ba số cho trước a, b và c có thể là độ dài ba cạnh của một tam
giác hay khơng?
- Tính trung bình cộng của hai số.
- Tìm chu vi và diện tích của hình trịn có bán kính cho trước.
Bài tậpvận dụng
1. Viết thuật giải nhập 1 số từ bàn phím và in ra bình phương của số đó nếu số đó là số dương.
2. Viết thuật giải nhập từ bàn phím một số tự nhiên N và in ra các số nguyên trong phạm vi từ 1 đến N.
48 3. Viết thuật giải nhập từ bàn phím 2 số tự nhiên m, n (m<n) và in ra màn hình các số chia hết cho m trong khoảng từ 1 đến n.
Hướng dẫn: Để kiểm tra xem một số x có chia hết cho m khơng ta dùng biểu thức
kiểm tra X MOD M=0. Nếu biểu thức này là đúng thì x chia hết cho m.
4. Viết thuật giải nhập 3 số từ bàn phím và in ra số lớn nhất trong ba số đó. 5. Viết thuật giải nhập 2 số từ bàn phím và in ra BCNN của hai số đó. 6. Biểu diễn thuật toán giải các bài toán sau bằng sơ đồ khối và giả mã: - Giải hệ phương trình bậc nhất.
- Tính số ngày của một tháng một năm nào đó. - Thuật tốn tìm ước số chung lớn nhất.
7. Hãy xây dựng thuật toán để tính tổng các chữ số của một số nguyên N bất kỳ. Ví dụ: N = 2015 thì thuật tốn trả về 8 (2+0+1+5).
49
CHƯƠNG 2: TỔNG QUAN VỀ NGÔN NGỮ C++ Mục tiêu của chương
Nắm vững:
- Các cấu trúc cơ bản của ngôn ngữ C++, thư viện chuẩn trong C++. - Các bước để viết một chương trình.
- Các thao tác soạn thảo và chạy code trên các chương trình phần mềm.
Nội dungcủa chương
Nghiên cứu các tính chất đặc trưng của ngơn ngữ C++, một số khái niệm cơ bản về cấu trúc cơ bản một chương trình C++.
2.1. Lịch sử hình thành và phát triển
Ngơn ngữ lập trình C++ được phát triển năm 1980 bởi Bjarne Stroustrup tại Bell Labs của AT&T (American Telephone & Telegraph), đặt tại Hoa Kỳ. Bjarne Stroustrup được biết đến như là người sáng lập ra ngơn ngữ C++.
Ngơn ngữ lập trình C++ được thiết kế với ưu tiên cho lập trình hệ thống và các hệ thống nhúng, tài nguyên hạn chế và lớn, với hiệu suất, hiệu quả và tính linh hoạt cao.
C ++ với những điểm mạnh là cơ sở hạ tầng phần mềm phong phú và các ứng dụng hạn chế tài nguyên. bao gồm các ứng dụng dành cho máy tính để bàn, máy chủ và các ứng dụng quan trọng về hiệu suất.
C ++ là một ngơn ngữ được biên dịch, có thể sử dụng trên nhiều nền tảng. Nhiều nhà cung cấp cung cấp các trình biên dịch C ++, bao gồm tổ chức phần mềm tự do, Microsoft, Intel và IBM.
Năm 1985, tác phẩm The C++ Programming Language được xuất bản lần đầu tiên, cung cấp một tài liệu tham khảo quan trọng cho ngơn ngữ nhưng đó chưa là một tiêu chuẩn chính thức.
Năm 1989 phiên bản C++ 2.0 phát hành. Các tính năng mới bao gồm đa kế thừa, lớp trừu tượng, hàm tĩnh, hàm thành viên hằng, và thành viên bảo tồn.
Năm 1990, cuốn The Annotated C++ Reference Manual được xuất bản cung cấp nền tảng cho tiêu chuẩn tương lai.
Phiên bản xuất bản sau đó có thêm các chức năng tiêu bản, ngoại lệ, khơng gian tên, chuyển kiểu cho tốn tử new, và kiểu boolean.
2.2. Các tính chất đặc trưng của ngôn ngữ
C++ là một ngôn ngữ lập trinh bậc trung. Người sử dụng có thể sử dụng C++ để phát triển những ứng dụng bậc cao, và cả những chương trình bậc thấp hoạt động tốt trên phần cứng.
C++ là một ngơn ngữ lập trình hướng đối tượng. C++ được thiết kế với một cách tiếp cận hoàn toàn mới được gọi là lập trình hướng đối tượng, nơi mà người sử dụng
50 những đối tượng, các lớp và sử dụng các khái niệm như: thừa kế, đa hình, tính đóng gói, tính trừu tượng …
C++ là một ngơn ngữ lập trình hướng cấu trúc giống ngơn ngữ C, nó có nghĩa là người sử dụng có thể tổ chức chương trình trên khái niệm functions.
C++ có thể chạy trên nhiều nền tảng khác nhau như Windows, Mac OS, một số biến thể của UNIX…
2.3. Cấu trúc cơ bản của ngôn ngữ C++
Một chương trình C++ cơ bản sẽ gồm 3 thành phần sau:
Các câu lệnh và biểu thức (Statements and expressions).
Hàm chính (Functions).
Thư viện chuẩn C++ (Standard library)
2.3.1. Câu lệnh và biểu thức a. Câu lệnh a. Câu lệnh
- Câu lệnh trong C++ được thiết lập từ các từ khoá và các biểu thức … - Câu lệnh luôn luôn được kết thúc bằng dấu chấm phẩy ;
- Các câu lệnh được phép viết trên cùng một hoặc nhiều dòng.
- Câu lệnh gồm nhiều lệnh được bao bởi cặp dấu ngoặc{} và được gọi là khối lệnh.
b. Biểu thức
- Biểu thức là dãy kí hiệu kết hợp giữa các toán hạng, toán tử và cặp dấu () theo một qui tắc nhất định.
- Các toán hạng là hằng, biến, hàm.
- Biểu thức cung cấp cách thức tính giá trị mới dựa trên các toán hạng và toán tử trong biểu thức.
Ví dụ 2.1a: int x; x = 1 + 2;
cout << "Xin chao cac ban!"; Phân tích ví dụ:
Dịng 1: Câu lệnh khai báo biến có tên là x. Dòng 2: Là câu lệnh gán giá trị cho biến x.
Ở đây biến x được gán giá trị bằng kết quả của biểu thức 1 + 2; Dịng 3: Câu lệnh có nhiệm vụ đưa dữ liệu lên màn hình.
51 Ví dụ 2.1b: (x + y) * 2 - 1 ; 13 - x + sqrt(y) ; (-b + sqrt(delta)) / (2*a) ; 2.3.2. Hàm (Functions)
a. Định nghĩa: Hàm là một nhóm các câu lệnh được tập hợp lại để thực hiện một
nhiệm vụ nào đó.
b. Cú pháp:
<kiểu kết quả> <tên hàm> (<tham số>) { // nội dung thực hiện thuật tốn
}
Ví dụ 2.2:
int dientich(int dai, int rong) { return dai * rong;
}
Với bất cứ một chương trình C++ nào cũng đều phải có ít nhất là một hàm main().
2.3.3. Thư viện chuẩn C++ (C++ Standard Library)
Thư viện là một tập hợp các mã được biên dịch sẵn, được đóng gói lại để lập trình viên sử dụng, mà khơng cần phải viết lại. Ví dụ người sử dụng viết một chương trình tính tốn, có thể include thư viện tốn học…
Ví dụ 2.2:
#include <iostream> #include <math > #include <fstream>
Dòng 1: Khai báo thư viện có tên iostream. Thư viện này cung cấp cho người sử dụng chức năng nhập xuất dữ liệu cơ bản với chương trình.
Dịng 2: Khai báo thư viện tốn học. Khi chúng ta cần dùng đến các phép tốn ví dụ tính căn bậc 2 hay bình phương…..
Dịng 3: Khai báo thư viện fstream. Giúp người sử dụng có thể làm việc với các
file nằm ngồi chương trình.
Thư viện là một phần khơng thể thiếu với người sử dụng. Có thư viện cơng việc của người sử dụng sẽ trở nên dễ dàng hơn.
52 Ví dụ 2.3: Một đoạn code đơn giản in ra “Ngon ngu lap trinh C++”.
// Chuong trinh don gian trong C++ #include <iostream>
using namespace std; int main()
{
cout << " Ngon ngu lap trinh C++"; // In dong chu Ngon ngu lap trinh C++ return 0;
}
Chương trình trên có các phần sau:
- // Chuong trinh don gian trong C++
Đây là dịng chú thích. Tất cả các dịng bắt đầu bằng dấu //, dịng chú thích khơng có bất kì một ảnh hưởng nào đến hoạt động của chương trình. Người sử dụng dùng để giải thích bên trong mã nguồn của chương trình.
- Dòng #include <iostream>: đây là một thư viện vào ra chuẩn trong C++.
- Dòng using namespace std; khai báo sử dụng không gian tên std, định danh cout được định nghĩa trong không gian tên này.
- int main(): điểm bắt đầu quá trình thực hiện của các chương trình C++, tất cả các chương trình C++ đều có một hàm main.
- Theo sau main là một cặp ngoặc đơn bởi vì nó là một hàm. Trong C++, tất cả các hàm mà sau đó là một cặp ngoặc đơn () thì có nghĩa là nó có thể có hoặc khơng có tham số (không bắt buộc). Nội dung của hàm main tiếp ngay sau phần khai báo chính thức được bao trong các ngoặc nhọn { }.
- Dòng tiếp theo cout << " Ngon ngu lap trinh C++"; đây là một câu lệnh C++, làm