Tìm hiểu sự phát triển các ngôn ngữ lập trình Mượn sách thư viện. Tìm hiểu codepower.vn Tìm hiểu CodeBlocks[r]
(1)Giới Thiệu Lập Trình Giới Thiệu TS Lê Nguyên Khôi Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
Khái niệm chương trình lập trình Cấu trúc chương trình
Biên soạn, biên dịch chương trình Chạy chương trình
Sửa gỡlỗi chương trình Mơi trường lập trình
Giới Thiệu Lập Trình
Chương Trình
2
Một dãy lệnh (instruction) cho máy tính Máy tính tự vận hành
Cần mệnh lệnhđể hoạt động
Máy tính chạy lệnh chương trình xử lý trung tâm (CPU)
Chương trình chạy sai Khơng phải lỗi máy tính
Do lệnh hướng dẫn máy tính sai
Lập trình viên tìm sửa lỗi
Giới Thiệu Lập Trình
Lập Trình
3
Quá trình tạo chương trình giải vấn đề cụ thể máy tính, bao gồm:
Phân tích vấnđề Xây dựng giải pháp
Đánh giá giải pháp
Càiđặt giải pháp
Kiểm thử Gỡlỗi
Tốiưu
Giới Thiệu Lập Trình
Tại Sao Cần Lập Trình
4
Điều khiển máy tính
Giải nhiều vấnđềhiệnđại Trải nghiệm sáng tạo thú vị Khai phá tiềm trí tuệ
Giới Thiệu Lập Trình
Đánh Giá Chương Trình
5 Tínhđúngđắn (correctness)
Kết quảtươngứng với thơng tin đầu vào
Tính chịu lỗi (robustness) Xửlý: lỗi chạy, thông tin đầu vào sai
Tính dễdùng (usability) Người dùng dễdàng sửdụng
Tính khảchuyển (portatbility) Thích nghi mơi trường khác
Tính bảo trì (maintainability) Dễdàng sửađổi, nâng cấp
Tính hiệu quả(efficiency)
Độtin cậy, tốcđộxửlý, tài nguyên sửdụng, rủi ro
(2)Cài Đặt Giải Pháp
6
Sau xây dựng giải pháp, đánh giá giải pháp, lập trình viên tiến hành giảiđặt giải pháp (viết chương trình)
Sửdụng ngôn ngữ:
Ngôn ngữmáy: trực tiếpđiều khiển bộvi xửlý
Ngôn ngữtựnhiên: máy không hiểu
Ngôn ngữbậc cao: C, C++, Java, C#, Python
Có thểchuyển thành ngơn ngữmáy Sửdụng cơng cụ, chương trình dịch
Gần với ngôn ngữtựnhiên Dễ đọc, dễhiểu, dễtraođổi
Giới Thiệu Lập Trình
Trình Tự Xây Dựng Chương Trình
7
Soạn thảo Biên dịch
Chạy chương trình Kiểm thử
Gỡlỗi
Giới Thiệu Lập Trình
Chương Trình Trong Ngơn NgữC++
8
Tải càiđặtMinGW32
Biên soạn chương trình sửdụngNotepad
Lưu chương trình vào với phần mởrộng.cpp Mởchương trìnhCommand Prompt, truy cập
đến thưmụcđã lưu tệp
Biên dịch chương trình sửdụngg++được tệp có phần mởrộng.exe(chương trình)
Chạy chương trình với bộdữliệu khác nhauđểphát lỗi
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
9
Yêu cầu máy tính in dòng “Hello, World !!!”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
Yêu cầu máy tính in dịng “Hello, World !!!”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
điểm bắtđầu chương trình bắtđầu
kết thúc
Chương Trình Đầu Tiên
u cầu máy tính in dòng “Hello, World !!!”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
tải thưviện
(3)Chương Trình Đầu Tiên
12
u cầu máy tính in dịng “Hello, World !!!”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
mệnh lệnh in
ra hình xuống dịng
In tất cảgiữa dấu nháy kép “”
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
13
u cầu máy tính in dòng “Hello, World !!!”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
Thông báo với hệ điều hành khơng có lỗi xảy Giá trịkhác0, xảy lỗi trình chạy
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
14
u cầu máy tính in dịng “Hello, World !!!” sauđó dịng “I am a computer”
#include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; return 0;
}
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
15
In nhiều dòng liên tục #include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; cout << "I am a computer" << endl; return 0;
}
Giới Thiệu Lập Trình
Chương Trình Đầu Tiên
16
In nhiều dòng liên tục #include <iostream> using namespace std; int main()
{
cout << "Hello, World !!!" << endl; cout << "I am a computer" << endl; return 0;
}
khơng có dấu chấm phẩy
Giới Thiệu Lập Trình
Chương Trình Tổng & Hiệu SốNguyên
17
Tính tổng & hiệu số nguyên avàb
Xây dựng giải pháp: Nhập số nguyên avà b
2 Tính tổng & hiệu củaavà b
3 Lưu giá trị tổng & hiệu sau tính In tổng & hiệu
Kiểm tra giải pháp với cặp sốkhác
(4)Tổng & Hiệu SốNguyên Trong C++
18 /* chương trình C++ tính tổng & hiệu số ngun */
#include <iostream> using namespace std; int main()
{
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng
hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả
cout << "hieu: " << hieu << endl; // in kết quả
return 0; }
Giới Thiệu Lập Trình
Tổng & Hiệu SốNguyên Trong C++
chú thích cho lập trình viên
19 /* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std; int main()
{
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng hieu = soThu1 – soThu2; // tính hiệu cout << "tong: " << tong << endl; // in kết quả cout << "hieu: " << hieu << endl; // in kết quả return 0;
}
Giới Thiệu Lập Trình
Tổng & Hiệu SốNguyên Trong C++
một phần ngôn ngữC++ (từkhóa)
20 /* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std;
int main() {
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả cout << "hieu: " << hieu << endl; // in kết quả return 0;
}
Giới Thiệu Lập Trình
Tổng & Hiệu SốNguyên Trong C++
toán tử
21 /* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std; int main()
{
int soThu1, soThu2; // khai báo cin >> soThu1; // nhập dữ liệu cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 +soThu2; // tính tổng hieu = soThu1 –soThu2; // tính hiệu cout << "tong: " <<tong <<endl; // in kết quả
cout << "hieu: " <<hieu <<endl; // in kết quả
return 0; }
Giới Thiệu Lập Trình
Tổng & Hiệu SốNguyên Trong C++
thực mệnh lệnh, kết thúc dấu ;
/* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std;
int main() {
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng
hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả cout << "hieu: " << hieu << endl; // in kết quả return 0;
}
Tổng & Hiệu SốNguyên Trong C++
khối câu lệnh, phân tách ngoặc cong {}
/* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std; int main()
{
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng
hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả cout << "hieu: " << hieu << endl; // in kết quả return 0;
(5)Tổng & Hiệu SốNguyên Trong C++
nhóm câu lệnh đặt tên đểthực nhiệm vụ
24 /* chương trình C++ tính tổng & hiệu số nguyên */ #include <iostream>
using namespace std;
int main() {
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng
hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả cout << "hieu: " << hieu << endl; // in kết quả return 0;
}
Giới Thiệu Lập Trình
Tổng & Hiệu SốNguyên Trong C++
phong cách viết chương trình, người khác đọc hiểu
25 /* chương trình C++ tính tổng & hiệu số nguyên */
#include <iostream> using namespace std; int main()
{
int soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
int tong, hieu; // khai báo
tong = soThu1 + soThu2; // tính tổng
hieu = soThu1 – soThu2; // tính hiệu
cout << "tong: " << tong << endl; // in kết quả
cout << "hieu: " << hieu << endl; // in kết quả
return 0; }
Giới Thiệu Lập Trình
Dịch & Chạy Chương Trình
26
Viết chương trình (sửdụngNotepad) lưu vào tệpTongHieu.cpp
MởCommand Prompt(cmd), chuyểnđến thư mục lưu tệpucln.cpp
Dịch chương trình, gõ: g++ TongHieu.cpp, chuyển mã nguồn ngôn ngữbậc cao sang ngôn ngữ máy lưu vàoa.exe
Gõg++ TongHieu.cpp –o TongHieu.exeđểlưu vào tệp với tên mong muốn (TongHieu.exe)
Chạy chương trình, gõTongHieu.exe
Giới Thiệu Lập Trình
Phát Hiện Lỗi Tự Động
27
Gõ sai chương trình
Dịch mã nguồn ngôn ngữbậc cao (C++) báo lỗi
TongHieu.cpp:7:5: error: “in” was not declared in this scope in soThu1, soThu2;
^
/* chương trình C++ tính tổng & hiệu số nguyên */
#include <iostream> using namespace std; int main()
{
in soThu1, soThu2; // khai báo
cin >> soThu1; // nhập dữ liệu
cin >> soThu2; // nhập dữ liệu
………
Giới Thiệu Lập Trình
Kiểm Tra Chương Trình
28
Kiểm tra kết quảchương trình Dữliệu: 10
Kết quả: Tong: 13 Hieu: -7
Luôn kiểm tra chương trình với bộdữ liệuđược lựa chọn cẩn thậnđểphát lỗi không mong muốn (lỗi chạy) Kiểm tra thường bịqn
Giới Thiệu Lập Trình
Cơng CụHỗTrợLập Trình
29
CodeBlocks
Soạn thảo tệp văn chương trình Ghi vào file cóđi.cpp
Biên dịch: Build > Compile current file
Chạy: Build > Run
(6)Bài Tập
30
Biên soạn chạy 02 chương trình theo bước nhưtrong slide 26
Tìm hiểu sựphát triển ngơn ngữlập trình Mượn sách thưviện
Tìm hiểucodepower.vn Tìm hiểuCodeBlocks
Slide giảng tải từwebsite mơn học website tậpcodepower.vn
(7)Giới Thiệu Lập Trình Kiểu DữLiệu CơBản TS Lê Ngun Khơi Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
Kiểu dữliệu cơbản
Phép toán Biến số
Hằng số
Hàm sốtoán học
Giới Thiệu Lập Trình
Nhắc Lại: UCLN Trong C++
2 Giới Thiệu Lập Trình
Kiểm tra sửdụng bộdữliệu (5, 15); (33, 110) 1 #include <iostream>
2
3 int main() 4 {
5 int a, b;
6 std::cin >> a; std::cin >> b; 7 while (a != b)
8 {
9 if (a > b) a = a – b; 10 else b = b – a; 11 }
12 std::cout << "UCLN: " << a << std::endl; 13 return 0;
14 }
Sửdụng cặp sốnguyên âm, không in kết
Mệnh lệnhcout <<(dịng 12) khơng thực
Chương trình (dịng 7-11) có sai hay khơng? Nhắc Lại: UCLN Trong C++
3
7 while (a != b) 8 {
9 if (a > b) a = a – b; 10 else b = b – a; 11 }
12 std::cout << "UCLN: " << a << std::endl; 13 return 0;
14 }
Giới Thiệu Lập Trình
Nhắc Lại: UCLN Trong C++
4
Chương trình không sai
Điều kiện trước (precondition) chạy ch.tr sốnguyên dương (>0)
Điều kiện sau (postcondition) chạy ch.tr ch.tr kết thúc in ucln củaavàb
Có thểsửa ch.tr đểtínhđược ucln số nguyên âm
Cũng đặtđiều kiện trước tính, điều kiện trước sai, khơng tính in thơng báo
Giới Thiệu Lập Trình
Kiểu SốNguyên Trong C++
5
Khi sửdụng kiểu dữliệu, ví dụint, cần biết miền giá trịbiểu diễnđược
Kiểu dữliệuintbiểu diễn sốnguyên từ -2.147.483.648 đến +2.147.483.647
Cóảnh hưởng khơng?
(8)Tên Lửa Đẩy Ariane 5
6
Cơquan Vũtrụchâu Âu phóng tên lửađẩy ngày 04/06/1996, trịgiá tỷ la Mỹ
Ariane dùng lại mã hệthốngđiều khiển đẩy Ariane
TốcđộA5 lớn A4, thiết kế không kiểm tra miền dữliệu biểu diễn
Khi A5 đạt tới tốcđộnhấtđịnh, xảy lỗi tràn bộnhớ, bộxửlý tắt
A5 bịmấtđiều khiển, sauđó gây nổ
Giới Thiệu Lập Trình
HệThống Số
7 Sốnguyên dương
Sốnguyên âm: sửdụng bit trái ngồi cùngđểbiểu diễn
Giới Thiệu Lập Trình Cơsố10 (3 chữsố)
= ∗ + ∗ + ( ∗ )
Cơsố2 (3 chữsố)
= ∗ + ∗ + ( ∗ )
= ∗ − + ∗ + ( ∗ ) = −
= ∗ − + ∗ + ( ∗ ) = −
Kiểu SốNguyênchar
8
Trong C++ kiểu dữliệucharlà kiểu nhỏnhất
Sửdụng byte bộnhớ
byte máy tính gồm bit
Nhưvậy, khoảng biểu diễn từ-128đến +127
10000000= −128và 01111111= 127
Khoảng biểu diễn từ−2đến+2− 1
Giới Thiệu Lập Trình
−2 2 2 2 2 2 2 2
−128 64 32 16
Kiểu CơBản Trong C++ - SốNguyên
9 Kiểu ĐộLớn Miền Giá Trị
char byte -128đến
+127
(−2, +2− 1) short byte -32.768đến
+32.767
(−2, +2− 1)
int byte -2.147.483.648đến
+2.147.483.647
(−2, +2− 1)
Giới Thiệu Lập Trình
Kiểu CơBản Trong C++ - SốThực Kiểu ĐộLớn Miền Giá Trị
float byte (−10 , +10 )
double byte (−10 , +10 )
long double
10 byte (−10!, +10!)
Phép Toán SốHọc Trong C++
kiểu toán hạng, xác định phép tốn tươngứng Phép Tốn Tốn TửVí Dụ Áp Dụng
Cộng + a + b1 + 2 1.1 + 2.2
sốnguyên & sốthực
Trừ - a - b1 – 2
1.1 – 2.2
sốnguyên & sốthực
Nhân * a * b1 * 2
1.1 * 2.2
sốnguyên & sốthực
Chia / a / b1 / 2
1.1 / 2.2
(9)Phép Chia SốHọc Trong C++
12
Chia nguyên: cảhai toán hạng sốnguyên
Chia thực: hai toán hạng sốthực
1 int main() 2 {
3 int i = 1, j = 2, k; 4 double f = 1.0, g = 2.0, h; 5 k = i / j; // chia nguyên k = 0 6 k = j / i; // chia nguyên k = 2 7 h = f / g; // chia thực h = 0.5 8 h = i / g; // chia thực h = 0.5 9 h = f / j; // chia thực h = 0.5 10 return 0;
11 }
Giới Thiệu Lập Trình
Biến Số- Đặc Tính
13
Đểsửdụng hiệu quảkết quảcủa phép toán, cần lưu kết quảsau tính tốn vào biến số
Biến sốdùngđểlưu giá trịthuộc kiểu liệu nhấtđịnh, ví dụ: int, double
Mỗi biến sốcó 03 thuộc tính: tên, kiểu, giá trị
Đểsửdụng biến số, phảiđặt tên hợp lệbằng cách khai báo biến số
Phải khai báo biến sốtrước sửdụng
Nếu khơng trình biên dịch sẽbáo lỗi chưa khai báo
error: … was not declared in this scope Giới Thiệu Lập Trình
Biến Số- Khai Báo
14
Cú pháp: kiểuDL tênBiến;
Ý nghĩa: tạo biến sốcó tên làtênBiếnđể lưu dữliệu kiểukiểuDL
Ví dụ: int x;
Ý nghĩa : khai báo biến sốnguyênxkiểuint
Chú ý: sau khai báo, biến số có giá trị!
sửdụng mệnh lệnhcout <<in giá trịbiến Lưu ý: sửdụng biến sốmới khai báo
Giới Thiệu Lập Trình
Biến Số- Phép Gán
15
Cú pháp: tênBiến = giáTrị;
tênBiến = biểuThức;
Ý nghĩa: lưugiáTrịhoặc kết quảcủabiểuThức vào biến sốcó tên làtênBiến
Ví dụ: x = 24;
x = (x * 24) / y;
Chú ý: bên trái phép gán (dấu=) giá trị trái (gt-T), bên phải giá trịphải (gt-P)
xcó thểvừa gt-T gt-P phép gán
Giới Thiệu Lập Trình
Biến Số- Khởi Tạo (Khai Báo & Gán)
16
Cú pháp: kiểuDL tênBiến = giáTrị;
kiểuDL tênBiến = biểuThức; Ý nghĩa: tạo biến sốcó tên làtênBiếnđể
lưu dữliệu kiểukiểuDL, sauđó lưugiáTrịhoặc kết quảcủabiểuThứcvào biến số
Ví dụ: int x = 24;
int x = (x * 24) / y;
Chú ý: phong cách lập trình tốt, chỉkhai báo, biến có giá trịnàođó
int x; int x;
x = x + 1; cout << x; Giới Thiệu Lập Trình
Biến Số- Quy Tắc Đặt Tên
17
Tên biến sốdùngđể định danh
Bắtđầu chữcái dấu gạch chân “_”
Tiếpđến chữcái, chữsố, dấu gạch chân
Khơng có dấu cách “ “ tên biến số
C++ phân biệt chữhoa chữthường
Tên biến sốkhơngđược trùng với từkhóa C++
Ví dụ: i, k62, X, x, soPT, soThu1, soThu2, tong, hieu
Chú ý: tên biến sốnên gợi nghĩa ngắn gọn
(10)Hằng Số
18
Biến số: giá trịcó thểthayđổi q trình chạy chương trình
Hằng số: giá trịkhơngđược phép thayđổi biến số, thayđổi, dịch báo lỗi
Ví dụ: sốngày tuần, sốnăm tháng, tốcđộánh sáng, sốpi, sốe
Hằng sốphải có giá trịngay khai báo sử dụng từkhóaconst
const double PI = 3.14159; const double SOL = 1.079e+9;
Giới Thiệu Lập Trình
Phép Gán Trong C++
19
Cú pháp: tênBiến = giáTrị;
tênBiến = biểuThức;
Ví dụ: x = 24;
x = (x * 24) / y;
Thực xácđịnh gt-P phép gán (tính tốn giá trịcủabiểuThức) sauđó gán giá trị cho gt-T phép gán
Chú ý:
gt-T phép gán phải biến số
Kiểu dữliệu gt-P phải giống kiểu dữliệu gt-T
Giới Thiệu Lập Trình
Chuyển Đổi Kiểu Dữ Liệu Trong C++
20
Giá trịthuộc kiểu dữliệu chuyển sang giá trịthuộc kiểu dữliệu khác
Ví dụ: → 1.0hoặc 1.0 →
cách:
Tự động C++
int x = 1.0; double y = 1.0; double y = 1; int x = y; Chủ động lập trình viên
int x = (int)1.0; double y = 1.0; double y = (double)1; int x = (int)y;
Lưu ý: chuyểnđổi kiểu làm thayđổiđộchính xác giá trị Sửdụng cẩn thận
Giới Thiệu Lập Trình
Kiểu CơBản Trong C++ - Lơ-gic
21
Các phép tốn so sánh phép tốn lơ-gic trảvềgiá trịkiểu lơ-gic
Giới Thiệu Lập Trình Kiểu ĐộLớn Miền Giá Trị bool byte đúnghoặcsai
(true, false)
Phép Toán So Sánh Trong C++ Phép Tốn Tốn Tử Ví Dụ Kết quả
Nhỏhơn < a < b1 < 2 true
Nhỏhơn
hoặc <=
a <= b
1 <= 2 true
Lớn > a > b1 > 2 false
Lớn
hoặc >=
a >= b
1 >= 2 false
Bằng == a == b1 == 2 false
Không
(khác) !=
a != b
1 != 2 true
Phép Tốn Lơ-gic Trong C++
Phép Tốn Tốn Tử Ví Dụ Kết quả
Và && a && btrue && true true
Hoặc || a || bfalse || false false
(11)Bảng Lơ-gic (Tốn Tử Lười)
24
int a = 0; bool b;
b = (false) && (1/a); cout << b; b = (true) || (1/a); cout << b;
Giới Thiệu Lập Trình a b a && b
false false false false true false true false false
true true true
a b a || b
false false false false true true
true false true
true true true
Độ Ưu Tiên Các Phép Tốn
25
Xácđịnh thứtự đểtính giá trịbiểu thức
Sửdụng cặp dấu ngoặc()đểdễ đọc Giới Thiệu Lập Trình
Độ Ưu Tiên Tốn Tử
Cao ++, , ! *, /, %
+, -<, <=, >, >=
==, != && ||
Thấp =, +=, -=, *=, /=, %=
Hàm SốToán Học Trong C++
26
Nhiều hàm sốtốn họcđượcđịnh nghĩa sẵn
Ví dụ: khai (sqrt), sốmũ(pow), trịtuyệt đối (abs)
Đểsửdụng hàm toán học cần tải thư viện tươngứng
#include <cmath> #include <cstdlib>
double x = sqrt(9); // x = 3.0
double y = pow(3, 2); // y = 9.0
int z = rand();
Giới Thiệu Lập Trình
Hàm SốTốn Học Tự Định Nghĩa
27
Trong tốn học có thểtự định nghĩa hàm số
, -, = -+ 2- +3-.+ 4.
Từ định nghĩa hàm giá trịcủa biến số, có thểtínhđược giá trịcủa hàm
, - = 2, = = -+ 2- + 3-.+ 4.= 26
Chuyển sang ngơn ngữlập trình, cần có Tên hàm, danh sách biến số
Kiểu dữliệu hàm biến số
Định nghĩa hàm dựa danh sách biến số Sửdụng câu lệnhreturnđểtrảvềgiá trịcủa hàm
sau tính
Giới Thiệu Lập Trình
Hàm TựĐịnh Nghĩa Trong C++
28 , -, = -+ 2- +3-.+ 4.
Tên hàm: f
Danh sách biến số: a, b
Kiểu dữliệu: int
Định nghĩa hàm:
Sửdụng câu lệnhreturnđểtrảvềgiá trịcủa hàm sau tính
Giới Thiệu Lập Trình int f(int a, int b)
{
return a^3 + 2*a^2*b + 3*a*b^2 + 4*b^3; }
Hàm TựĐịnh Nghĩa Trong C++
29
Lập trình viên có thểtự định nghĩa hàm hữu ích, phục vụmụcđích cụthểdựa yêu cầu toán
Các hàm tự định nghĩa nằmở: Ngoài trướcint main()
Giới Thiệu Lập Trình 1 #include <iostream> 2
3 int hieu(int a, int b) 4 {
5 return a – b; 6 }
(12)Hàm TựĐịnh Nghĩa
30 Giới Thiệu Lập Trình
1 #include <iostream> 2
3 int hieu(int a, int b) { return a – b; } 4
5 int main() 6 {
7 int a, b;
8 std::cin >> a; std::cin >> b; 9 while (a != b)
10 {
11 if (a > b) a = hieu(a, b); 12 else b = hieu(b, a); 13 }
14 std::cout << "UCLN: " << a << std::endl; 15 return 0;
16 }
TựĐọc
31
Sửdụngcout <<, cin >>, cerr <<
In dữliệuở cácđịnh dạng khác Sửdụng kiểu sốnguyêncharđểquản lý
ký tự(xem bảng mã ASCII)
Sốnguyên hệcơsốkhác (8, 16)
Các toán tửgán phức hợp+=, -=, *=, /=, %=
Các toán tửtăng/giảm mộtđơn vị++,
Các hàm toán học trongcmath, cstdlib
Tự định nghĩa sốhàmđơn giản Giới Thiệu Lập Trình
Tham Khảo
32
Làm quen với CodeBlock chức hỗ biên soạn CodeBlock
Làm tập trêncodehub.now-ip.org
Đọc sách:
Chương 2, Lập Trình CơBản C++
(13)Giới Thiệu Lập Trình Cấu Trúc Lựa Chọn TS Lê Nguyên Khôi Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
Biểu thức lô-gic
Luồngđiều khiển
Cấu trúc lựa chọn: if
if … else switch
Giới Thiệu Lập Trình
Biểu Thức Lơ-gic
2
Các phép toán logic
PHỦĐỊNH (!), VÀ (&&), HOẶC (||) Mức độưu tiên: &&cao ||
Kiểu liệu cơbản lô-gicbool (true), sai (false)
Chuyểnđổi kiểu dữliệu: Không (0, 0.0) sai (false) Khác không làđúng (true) Sai (false) là0
Đúng (true) là1
Giới Thiệu Lập Trình
Phép Tốn So Sánh
3 Phép Tốn Tốn Tử Ví Dụ Kết quả
Nhỏhơn < a < b1 < 2 true Nhỏhơn
hoặc <=
a <= b
1 <= 2 true Lớn > a > b1 > 2 false Lớn
hoặc >=
a >= b
1 >= 2 false Bằng == a == b1 == 2 false Không
(khác) !=
a != b
1 != 2 true Giới Thiệu Lập Trình
Phép Tốn Lơ-gic
4 Phép Tốn Tốn Tử Ví Dụ Kết quả
Và && a && btrue && true true Hoặc || a || bfalse || false false
Phủ định ! !a!true false
Giới Thiệu Lập Trình
Bảng Lơ-gic (Tốn Tử Lười)
5
int a = 0; bool b;
b = (false) && (1/a); cout << b; b = (true) || (1/a); cout << b;
Giới Thiệu Lập Trình a b a && b
false false false false true false true false false true true true
a b a || b
false false false false true true
(14)Độ Ưu Tiên Các Phép Toán
6
Xácđịnh thứtự đểtính giá trịbiểu thức
x + > || x + < -3tươngđương: (( x + ) > 2) || (( x + ) < -3)
Giới Thiệu Lập Trình
Độ Ưu Tiên Tốn Tử
Cao ++, , ! *, /, %
+, -<, <=, >, >=
==, != && || Thấp =, +=, -=, *=, /=, %=
Luồng Điều Khiển
7
Thứtựcác mệnh lệnh ch.tr thực
Thứtự đơn giản:
Thực theo thứtựviết mã nguồn
Thứtựmệnh lệnh phụthuộc dữliệuđầu vào Ví dụ: nhập sốngun dương tính ucln,
khơng, khơng tính, in thơng báo, dừng ch.tr Cần lựa chọn mệnh lệnh thực
Điều khiển mã nguồn chạy nhưthếnào
Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọn Trong C++
8
if
if … else switch
Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọn if
9
Cú pháp:
if (BiểuThứcLôgic) {
// thân if
MệnhLệnh; MệnhLệnh;
… … … }
Ý nghĩa: nếuBiểuThứcLôgicđúng (true),
thânifđược thực hiện, không, điều khiển
chuyển sang mệnh lệnh sau cấu
trúcif
Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọnif
Ví dụ:
double luong = MUC_LUONG_CO_BAN * soGioLam; if (soGioLam > SO_GIO_LAM_QUY_DINH) {
int luongTangThem = MUC_LUONG_CO_BAN * 0.5 * (soGioLam - SO_GIO_LAM_QUY_DINH); luong = luong + luongTangThem;
}
Cấu Trúc Lựa Chọn if … else
Cú pháp:
if (BiểuThứcLôgic) {
// thân if
MệnhLệnh;
… … … } else {
// thân else
MệnhLệnh;
(15)Cấu Trúc Lựa Chọnif … else
12
Cú pháp:
if (BiểuThứcLôgic) {
// thân if }
else {
// thân else }
Ý nghĩa: nếuBiểuThứcLôgicđúng (true),
thânifđược thực hiện, nếuBiểuThứcLôgic
sai (false), thânelseđược thực Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọn if … else
13
Ví dụ:
Giới Thiệu Lập Trình bool hocCaiThien;
if (diemSo < 60) {
hocCaiThien = true; }
else {
hocCaiThien = false; }
Cấu Trúc Lựa Chọnif … else
14
Ví dụ:
Giới Thiệu Lập Trình bool hocCaiThien = false; if (diemSo < 60)
{
hocCaiThien = true; }
else {
hocCaiThien = false; }
Cấu Trúc Lựa Chọn if … elseLồng
15
Giới Thiệu Lập Trình char xepHang = 'F';
if (diemSo >= 80) xepHang = 'A'; else if (diemSo >= 70)
xepHang = 'B'; else if (diemSo >= 60)
xepHang = 'C'; else if (diemSo >= 50)
xepHang = 'D'; else if (diemSo >= 40)
xepHang = 'E';
Cấu Trúc Lựa Chọnif … elseLồng
16
Giới Thiệu Lập Trình char xepHang = 'F';
if (diemSo >= 80) xepHang = 'A'; else
if (diemSo >= 70) xepHang = 'B'; else
if (diemSo >= 60) xepHang = 'C'; else
if (diemSo >= 50) xepHang = 'D'; else
if (diemSo >= 40) xepHang = 'E';
Cấu Trúc Lựa Chọn if … elseLồng
17
Giới Thiệu Lập Trình char xepHang = 'F';
if (diemSo >= 80) {
xepHang = 'A'; }
else {
if (diemSo >= 70) {
xepHang = 'B'; }
else {
… … … } }
Sửdụng {
… … … }
(16)Cấu Trúc Lựa Chọnif … elseLồng
18
Lỗi thường xảy ra: error: ‘else’ without a previous if
Giới Thiệu Lập Trình char xepHang = 'F';
if (diemSo >= 80) xepHang = 'A'; soDiemA = soDiemA + 1; else
… … …
Cấu Trúc Lựa Chọn if … elseLồng
19
elsecủaifnào?
Khi x=5, mệnh lệnh thực hiện, in ra? elsecủaifgần
Giới Thiệu Lập Trình if (x > 5)
if (y > 5)
std::cout << "x va y > 5"; else
std::cout << "x <= 5";
Cấu Trúc Lựa Chọnif … else loại bỏtrường hợp không cần thiết
20
if (!a && !b) output = false; else if (!a && b) output = true; else if (a && !b) output = true; else if (a && b) output = true; Phân tích loại trường hợp không cần thiết
if (!a && !b) output = false; else output = true;
Giới Thiệu Lập Trình
a b output
false false false false true true
true false true true true true
Cấu Trúc Lựa Chọn if … else
21
Bài tập (xem mã nguồn) Kiểm tra sốnhập vào chẵn hay lẻ Tìm sốlớn sốnhập vào Đoán số
Giới Thiệu Lập Trình
Một SốLưu Ý
Nhầm lẫn gán (=) so sánh (==) Không lỗi dịch
Kết quảchạy khác if (a = 1) // luônđúng if (a = 0) // sai if (a = b) // tươngđương
if ( (a = b) != )
Thực phép gán xong kiểm trađiều kiện Không (0, 0.0) sai (false)
Khác không làđúng (true)
Một SốLưu Ý
Biểu thức lơ-gic tốn học (0 ≤ tuoi ≤ 150)
Chuyển sang ngơn ngữlập trình (0 <= tuoi <= 150)
dịch không lỗi chạy sai!!!
Biểu thức logic ngơn ngữlập trình
Phải sửdụng phép tốn lơ-gic
(0 <= tuoi && tuoi <= 150)
Lỗi thường gặp: biểu thức lô-gic sai/đúng
(17)Cấu Trúc Lựa Chọnswitch
24
Cú pháp:
switch (BiểuThức) {
case HằngSố1: CụmMệnhLệnh1;break; case HằngSố2: CụmMệnhLệnh2;break; case HằngSố3: CụmMệnhLệnh2;break; … … …
default: CụmMệnhLệnhMặcĐịnh;
}
Lưu ý: kiểu củaBiểuThứclà kiểu sốnguyên
(bool, char, int, short, long) Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọn switch
25
Cú pháp:
switch (BiểuThức) {
… … … } Ý nghĩa:
Mệnh lệnhcaseđược xét từtrên xuống Giá trịHằngSốcủacasenàoứng với giá trịcủa
BiểuThức, CụmMệnhLệnhcủacaseđó thực Khi gặpbreak, khỏi cấu trúcswitch Thực hiệnCụmMệnhLệnhMặcĐịnhnếu khơng có
casenào tươngứng
Giới Thiệu Lập Trình
Cấu Trúc Lựa Chọnswitch
26
Ví dụ:
Giới Thiệu Lập Trình int ngay; std::cin >> ngay; switch (ngay)
{
case 2: std::cout << "hoc chieu"; break; case 3: std::cout << "hoc sang"; break; case 4: std::cout << "di lam"; break;
case 5: std::cout << "hoc sang va chieu"; break; case 6: std::cout << "hoc chieu va toi"; break; case 7: std::cout << "choi the thao"; break; case 0: std::cout << "di sang nha ban"; break; default: std::cout << "o nha ngu";
}
Cấu Trúc Lựa Chọn switch
27 Nếu khơng cóbreaksẽthực cáccasetiếp theo
đến gặpbreakthì khỏiswitch
Giới Thiệu Lập Trình int ngay; std::cin >> ngay; switch (ngay)
{
case 2: case 3: case 5:
case 6: std::cout << "di hoc"; break; case 4: std::cout << "di lam"; break; case 7:
case 0: std::cout << "di choi"; break; default: std::cout << "o nha ngu"; }
Cấu Trúc Lựa Chọnswitch
28
Giới Thiệu Lập Trình int nam, thang, soNgay;
std::cin >> thang; std::cin >> nam; switch (thang) {
case 2:
soNgay = (nam % == &&
(nam % 100 != || nam % 400 == 0)) ? 29 : 28; break;
case 4: case 6: case 9: case 11: soNgay = 30; break;
default:
soNgay = 31; break; }
Cấu Trúc Lựa Chọn switch sửdụng thiết kếmenu điều khiển
29
Giới Thiệu Lập Trình switch (comboKFC)
{
(18)Tham Khảo
30
Đọc sách:
Chương 3, Lập Trình CơBản C++
(19)Giới Thiệu Lập Trình Cấu Trúc Lặp
TS Lê Nguyên Khôi Trường Đại học Công nghệ, ĐHQGHN
Nội Dung
1
Cấu trúc lặp: for while do … while
Giới Thiệu Lập Trình
Cấu Trúc Điều Khiển – Lặp
2
Mơ hình hànhđộng lặp sốlần cố định In “teacher is so cool” 10 lần
Chạy hàm tínhđiểm sinh viên 1000 lần Chạy vịng quanh sân vậnđộng Sốlần lặp có thểkhơng biết
Quấy súp chođến khiđặc Nhập vào sốnguyên dương
Chọn sốngẫu nhiên tới trúng thưởng Tươngứng với lặp giới hạn (trên) lặp không
giới hạn (dưới)
Giới Thiệu Lập Trình
Cấu Trúc Lặp Giới Hạn
3
Xét toán in dấu std::cout << "*"; std::cout << "*"; std::cout << "*"; Xét toán in dấu
std::cout << "*"; std::cout << "*"; std::cout << "*"; std::cout << "*"; Xét toán in raNdấu
std::cout << "*"; …? Giới Thiệu Lập Trình
Cấu Trúc Lặp Giới Hạn
4
Mơ hình hànhđộng lặp:
Dựa sốlần lặpN
Có thểcần biếtđếm bắtđầu từ0 Tăng biếtđếm thêm sau lần lặp Khiđó lặp lại hànhđộng, ví dụ
std::cout << "*";
Cho đến biếtđếm tới giá trịcủaN Và dừng lại
Giới Thiệu Lập Trình
Cấu Trúc Lặp Giới Hạnfor
5
Cú pháp:
for (MệnhLệnh1; BiểuThứcLôgic; MệnhLệnh2) {
// thân vòng lặp }
MệnhLệnh1khởi tạo biếnđếm (biếnđiều khiển) Chỉthực lần bắtđầu lặp MệnhLệnh2thayđổi biếnđếm (biếnđiều khiển) BiểuThứcLơgicđiều khiển q trình lặp (vớiđiều
(20)Cấu Trúc Lặp Giới Hạnfor
6
Cú pháp:
for (MệnhLệnh1; BiểuThứcLơgic; MệnhLệnh2) {
// thân vịng lặp }
Ý nghĩa:
1 MệnhLệnh1khởi tạo biếnđiều khiển NếuBiểuThứcLơgicđúng
3 Mệnh lệnh thân vịng lặp thực Thayđổi giá trịbiếnđiều khiển (MệnhLệnh2) Quay lại bước
6 Nếu không (BiểuThứcLôgicsai), kết thúc lặp
Giới Thiệu Lập Trình
Cấu Trúc Lặp Giới Hạnfor
7
Ví dụ:
VớiN=
Giá trịcủa n i=0 i=1 i=2 i=3 i=4
Điều khiển lặp true true true true false
Kết * * * * Giới Thiệu Lập Trình // i biến đếm (biến điều khiển) for (int i = 0; i < N; i = i + 1) {
std::cout << "*"; }
Cấu Trúc Lặp Giới Hạnfor– Ví Dụ
8 Giới Thiệu Lập Trình
for (int i = 0; i < 25; i = i + 1) {
std::cout << "teacher is so cool\n"; }
for (int i = 1000; i > 0; i = i - 1) {
tinhDiem(); }
for (int i = 0; i < 5; i = i + 1) {
chạy vòng quanh sân vận động; }
Cấu Trúc Lặp Giới Hạnfor– Ví Dụ
9
In tổng N sốnguyên dươngđầu tiên
Cần biến (ngoại trừN, nhập)
2 biến: biếnđiều kiển, biến lưu tổng Khởi tạoởđâu
Biến lưu tổng khởi tạo cấu trúc lặp Biếnđiều khiển khởi tạo cấu trúc lặp Khi in tổng
Kết thúc vịng lặp, in tổng (nhưyêu cầu) Thân vòng lặp
Cộng sốnguyên dương vào tổng Khi kết thúc lặp
Cộng xong N sốnguyên dương (biếnđiều khiển) Giới Thiệu Lập Trình
Cấu Trúc Lặp Giới Hạnfor
In tổng N sốnguyên dươngđầu tiên
int tong = 0;
for (int i = 1; i <= N; i = i + 1) {
tong = tong + i; }
std::cout << tong;
Cấu Trúc Lặp Giới Hạnfor
In tích N sốnguyên dươngđầu tiên
int tich = 1;
for (int i = 1; i <= N; i = i + 1) {
tich = tich * i; }