Tìm kiếm theo tiêu đề

Tin tức cộng đồng

[MỜI HỢP TÁC] Các kỳ thi Olympic Quốc tế 2026 (IMO - IEO - ISO)

Kính gửi Quý Lãnh đạo, Ban Giám hiệu và Quý Thầy/Cô, FermatTech (Đối tác Google tại VN) phối hợp cùng SCO Ấn Độ trân trọng kính mời tham gia 3 kỳ thi uy tín dành cho HS từ lớp 1 - 12: - IMO: Olympic Toán Quốc tế. - IEO: Olympic Tiếng Anh Quốc tế. - ISO: Olympic Khoa học...
Xem tiếp

Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 0919 124 899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

Bài 6. Axit nuclêic

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Tham khảo cùng nội dung: Bài giảng, Giáo án, E-learning, Bài mẫu, Sách giáo khoa, ...
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn: nhóm 4
Người gửi: lê phương thảo
Ngày gửi: 12h:10' 14-10-2020
Dung lượng: 1.0 MB
Số lượt tải: 31
Số lượt thích: 0 người
HỌC KỲ II – LẬP TRÌNH TRÊN NGÔN NGỮ C++
Giới thiệu về ngôn ngữ C++,
Tại sao chọn C++?
Các thành phần của ngôn ngữ lập trình nói chung,
Các hệ thống lập trình phục vụ C++,
Các khái niệm cơ bản trong C++,
Cấu trúc chung của chương trình,
Các loại câu lệnh và cấu trúc chương trình,
Tổ chức vào ra.
Co s? l?p trình (C++)
1
LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂN
Dennis Ritchie (Bell Labs) xây dựng từ 1969 – 1973,
Bjame Stroustrup phát triển từ 1979,
Phiên bản C++ thương mại đầu tiên: 14/10/1985,
C++: C PreProcessor,
Co s? l?p trình (C++)
2
Mục đích:
Tạo một ngôn ngữ thủ tục (imperative (procedural) systems implementation language) lai giữa cấp thấp và cấp cao để xây dựng và phát triển hệ điều hành Unix,
Cách viết thuận tiện cho người lập trình,
Cung cấp công cụ để có thể xây dựng chương trình trên ngôn ngữ máy một cách tối ưu.
Định hướng: cho người lập trình chuyên nghiệp.
Đặc điểm: khai thác tối đa khả năng làm việc với địa chỉ.
So sánh: PASCAL khai thác tối đa khả năng làm việc với giá trị và phục vụ trình bày giải thuật.
Lưu ý: C không phải là tập con của C++!
Co s? l?p trình (C++)
3
LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂN
Mở rộng ngôn ngữ: thư viện chuẩn (Standard Template Libraries – STL).
Nhược điểm:
Cú pháp, kế thừa từ C, có nhiều điểm không thuận tiện,
Có quá nhiều khả năng trong một số câu lệnh dễ dẫn đến sai sót khó phát hiện,
Thiếu một số khả năng cần thiết,
Một số chức năng: kém hiệu quả.
Co s? l?p trình (C++)
4
LỊCH SỬ RA ĐỜI VÀ PHÁT TRIỂN
CÁC THÀNH PHẦN CỦA NGÔN NGỮ
Hai thành phần cơ sở:
Bảng chữ cái,
Cú pháp (Syntax) xây dựng các thành phần dẫn xuất, quy tắc viết câu lệnh,
Các kiểu dữ liệu (chuẩn, được ngôn ngữ trực tiếp cung cấp).
Lưu ý:
Chỉ cần nhớ các ký tự hay dùng và các quy tắc thường sử dụng.
Co s? l?p trình (C++)
5
Bảng chữ cái
26 chữ cái La tinh in hoa và thường,
10 chữ số Arập,
Các ký tự:
Dấu cách, nháy đơn(‘), nháy kép (“), gạch dưới (_),
+ - * / ( ) [ ] { } = < > . , ; : \ | # % ^ & ! ~ ?
Tổng cộng: 91 ký tự.
Co s? l?p trình (C++)
6
TÊN
Tên là khái niệm quan trọng nhất trong mọi ngôn ngữ lập trình,
Trong C++:
Tên là dãy ký tự độ dài bất kỳ,
Bao gồm chữ số, chữ cái hoặc dấu gạch dưới,
Bắt đầu bằng chữ cái hoặc dấu gạch dưới,
Phân biệt chữ hoa và chữ thường.
Ví dụ; tên đúng:
a, bc12, a_a, A_a
Tên sai: 12bc (bắt đầu bằng chữ số),

a.b, a b (chứa dấu chấm hoặc dấu cách).
Co s? l?p trình (C++)
7
Hai loại tên: Từ khóa (keywords) và tên do người sử dụng đặt (user’s identifiers).
Từ khóa: tên được sử dụng với ý nghĩa quy định sẵn, không được dùng vào mục đích khác.
Co s? l?p trình (C++)
8
TÊN
Để tham khảo.
Không cần thuộc!
Lưu ý:
Không nhất thiết phải biết và thuộc hết từ khóa!
Tên do người sử dụng đặt: mọi biến dùng trong chương trình:
Đều phải được đặt tên,
Phải được khai báo (để xác định kiểu dữ liệu) trước khi sử dụng.
Khai báo: được thực hiện bằng lệnh khai báo.
Mỗi khai báo: tồn tại phạm vi tác động.
Co s? l?p trình (C++)
9
TÊN
CẤU TRÚC CHƯƠNG TRÌNH C++
Ví d? CT C++:
Ví d? 1:
Co s? l?p trình (C++)
10
/*VIDU.CPP*/
#include
using namespace std;
int main()
{
cout<<”Nhap mon lap trinh”< cout<<“Vi du don gian”<
return 0;
}
Nhap mon lap trinh
Vi du don gian
Thư viện
Ghi chú
Báo CT kết thúc cho HĐH
Chuỗi ký tự phải ghi giữa cặp nháy kép “
In xuống dòng dùng endl
Chương trình nên thông báo kết quả thực hiện với hệ thống: Tốt – 0, có lỗi – 1, 2, 3 …
Chương trình có một hàm main
Co s? l?p trình (C++)
11
Một số lưu ý từ ví dụ
/*VIDU.CPP*/
#include
using namespace std;
int main()
{
cout<<”Nhap mon lap trinh< cout<<“Vi du don gian”<
return 0;
}
Phần ghi chú được trình biên dịch bỏ qua
Phân biệt chữ in hoa và chữ in thường
Câu lệnh luôn được kết thúc bằng dấu ;
CẤU TRÚC CHƯƠNG TRÌNH
Chương trình C++ nói riêng và trên ngôn ngữ lập trình bất kỳ nói chung bao giờ cũng bao gồm 2 phần:
Khai báo: chứa các câu lệnh khai báo,
Phần thực hiện: chứa các lệnh thực hiện.
Lưu ý:
CT có thể bao gồm nhiều mô đun độc lập,
Mỗi mô đun cũng bao gồm 2 phần : Khai báo và Thực hiện,
Việc tổ chức các mô đun độc lập: xét muộn hơn.
Co s? l?p trình (C++)
12
Bộ nhớ được cấp phát trong giai đoạn dịch
Cung cấp thông tin cho chương trình dịch:
Các thư viện hỗ trợ,
Các biến, hằng sẽ sử dụng,
Dạng lưu trữ (kiểu dữ liệu) 
Xác định bộ nhớ (số bytes) cần chuẩn bị,
Các phép tính có thể áp dụng với dữ liệu này.
Mọi biến: phải khai báo trước khi sử dụng,
Có 2 loại khai báo:
Khai báo tĩnh,
Khai báo động.
Co s? l?p trình (C++)
13
CẤU TRÚC CHƯƠNG TRÌNH
KHAI BÁO
Bộ nhớ được cấp phát trong giai đoạn thực hiện CT
Khai báo biến: kiểu_dữ_liệu danh_sách_biến;
;
Co s? l?p trình (C++)
14
CẤU TRÚC CHƯƠNG TRÌNH
KHAI BÁO
Nguyên
Một số
Kiểu dữ liệu
Thường dùng
Thực
Ký tự
Xâu
Lôgic
File
Công thức siêu ngữ
Co s? l?p trình (C++)
15
CẤU TRÚC CHƯƠNG TRÌNH
KHAI BÁO
Máy 32 bít
Ví d?:
int m,n,i,j,k;
float a,b;
char c;
string s1,s2;
double x;
Co s? l?p trình (C++)
16
CẤU TRÚC CHƯƠNG TRÌNH
KHAI BÁO
Ví dụ CT C++:
#include
using namespace std;
int m,n;
int main()
{
cout<<“m, n = “;
cin>>m>>n;
cout< cout< }
Co s? l?p trình (C++)
17
CẤU TRÚC CHƯƠNG TRÌNH
Khai báo thư viện
Khai báo biến
Khai báo không gian tên ngầm định (không gian std)
Mô đun CT chính
Nhập dữ liệu từ bàn phím
Đưa kết quả ra màn hình
Lưu ý cách viết câu lệnh vào/ra
Co s? l?p trình (C++)
18
CẤU TRÚC CHƯƠNG TRÌNH
KHAI BÁO
Máy 32 bít
BIỂU THỨC SỐ HỌC
Các phép tính số học:
Co s? l?p trình (C++)
19
Cách viết biểu thức (số học và các loại biểu thức khác):
Có thể viết trên nhiều dòng , xuống dòng sau phép tính, tên hoặc hằng,
Trên mỗi dòng: tuyến tính từ trái sang phải, mỗi vị trí: một ký tự,
Chỉ dùng dấu ngoặc tròn để thay đổi trình tự thực hiện các phép tính.
Trình tự thực hiện các phép tính:
Trong ngoặc trước, ngoài ngoặc sau,
Nhân chia trước, cộng trừ sau,
Cùng mức ưu tiên: từ trái qua phải.
Co s? l?p trình (C++)
20
BIỂU THỨC SỐ HỌC
Quy tắc xác định kiểu dữ liệu kết quả,
Chỉ định kiểu dữ liệu thực hiện (ép kiểu),
Lưu ý phép chia:
Với các biến nguyên,
Với các trường hợp còn lại.
Ví dụ:
int b=3;
b/3 cho kết quả 1;
double(b)/2 cho kết quả 1.5;
Co s? l?p trình (C++)
21
BIỂU THỨC SỐ HỌC
Chỉ thị gán:
=;
Ví dụ:
i=j+5;
x1=(-b-sqrt(b*b-4*a*c))/2/a;
Lưu ý:
Trong biểu thức được dùng các hàm toán học sqrt (lấy căn bậc 2), abs ( giá trị tuyệt đối),exp(x)  ex, . . .
Khai báo thư viện #include
Không được bỏ qua dấu phép nhân: 4*a*c
Co s? l?p trình (C++)
22
CHỈ THỊ GÁN
Hàm lấy căn bậc 2
x1=(-b-sqrt(b*b-4*a*c))/2/a;
Trình tự thực hiện:
Co s? l?p trình (C++)
23
CHỈ THỊ GÁN
Bước 1: Tính địa chỉ của biến nhận giá trị
Bước 2: Tính giá trị biểu thức ở vế phải
Bước 3: Gán giá trị cho biến
Thực hiện phép chia (/) với các số nguyên,
Phép tính một ngôi với biến nguyên: ++, --:
i++; // Lấy giá trị của i để tính toán sau đó tăng i lên 1
++i; // Tăng i lên 1 sau đó lấy giá trị của i để tính toán
i--; // Lấy giá trị của i để tính toán sau đó giảm i đi 1
--i; // Giảm i đi 1 sau đó lấy giá trị của i để tính toán
Co s? l?p trình (C++)
24
CHỈ THỊ GÁN
int i = 5, j = 4;

i ++;
-- j;
++ i;
j  3
i  6
i  7
Khai báo biến có gán giá trị đầu
Thứ tự thực hiện các toán tử ++ và -- phụ thuộc vào vị trí của chúng (trước hay sau) so với biến:
Co s? l?p trình (C++)
25
CHỈ THỊ GÁN
#include
using namespace std;
int main()
{
int i, j = 5;
i = ++j;
cout< j = 5;
i = j++;
cout< return 0;
}
Tương đương:
1. j++;
2. i = j;
Tương đương:
1. i = j;
2. j++;
i=6, j=6
i=5, j=6
Dạng rút gọn của lệnh gán (hiệu quả hơn trong cách viết và thực hiện):
s = s + a;  s += a;
Co s? l?p trình (C++)
26
CHỈ THỊ GÁN
Các phép gán kết hợp toán tử khác:
+= -= *= /= %=
&= |= ^=
<<= >>=
Tổng quát:
biến op= biểu thức
tương đương:
biến = biến op (biểu thức)
Co s? l?p trình (C++)
27
CHỈ THỊ GÁN
a += 27;
a = a + 27;
f /= 9.2;
f = f / 9.2;
i *= j + 2;
i = i * (j + 2);
BIỂU THỨC QUAN HỆ VÀ LÔGIC
Các phép tính quan hệ:
< bé hơn
<= bé hơn hay bằng
> lớn hơn
>= lớn hơn hay bằng
== bằng
!= không bằng (khác)
Tất cả đều cho kết quả 1 khi so sánh đúng và 0 trong trường hợp ngược lại.
Co s? l?p trình (C++)
28
Co s? l?p trình (C++)
29
BIỂU THỨC QUAN HỆ VÀ LÔGIC
NNLT C hỗ trợ các phép tính lô gic:
&& và (and)
|| hoặc (or)
! phủ định (not)
Tất cả đều cho kết quả 1 hoặc 0 tương ứng các trường hợp ĐÚNG hoặc SAI
int i, j = 10, k = 28;

i = ((j > 5) && (k < 100)) || (k > 24);
Điều kiện
CHƯƠNG TRÌNH RẼ NHÁNH
Chỉ thị gán có điều kiện:
(điều kiện) ? BT1 : BT2
Biểu thức nhận giá trị BT1 nếu điều kiện khác 0 (ĐÚNG), các trường hợp khác nhận giá trị BT2
Co s? l?p trình (C++)
30
int i, j = 100, k = -1;
i = (j > k) ? j : k;
Nếu (j > k)
i = j;
Ngược lại
i = k;
int i, j = 100, k = -1;
i = (j < k) ? j : k;
Nếu (j < k)
i = j;
Ngược lại
i = k;
Có thể định nghĩa sẵn một macro để tìm số lớn:
#define max(x, y) ((x>y) ? x : y)
Ch? th? if:
Cĩ 2 d?ng:
Khơng d?y d?,
D?y d?.
Co s? l?p trình (C++)
31
CHƯƠNG TRÌNH RẼ NHÁNH
Điều kiện
if (điều kiện) s1;
Dạng không đầy đủ
Ví dụ:
if (b>max) max=b;
Điều kiện: để trong ngoặc.
Một câu lệnh
Ví d?:
# include
using namespace std;
int a,b,maxab;
int main()
{
cin>>a>>b;
maxab=a;
if (b>maxab) maxab=b;
cout<< "Max: "<}
Co s? l?p trình (C++)
32
CHƯƠNG TRÌNH RẼ NHÁNH
Câu lệnh nhóm: dãy câu lệnh bất kỳ đặt giữa các ngoặc { và }.
Ví dụ:
Co s? l?p trình (C++)
33
CHƯƠNG TRÌNH RẼ NHÁNH
t=a;
a=b;
b=t;
Dãy câu lệnh
{
t=a;
a=b;
b=t;
}
Câu lệnh nhóm
Một câu lệnh!
Ví d?:
# include
using namespace std;
int a,b,t;
int main()
{
cin>>a>>b;
if (a cout<}
Co s? l?p trình (C++)
34
CHƯƠNG TRÌNH RẼ NHÁNH
Một câu lệnh!
Dữ liệu nhập: 5 8
Kết quả: 8 5
Chỉ thị rẽ nhánh đầy đủ:

Co s? l?p trình (C++)
35
CHƯƠNG TRÌNH RẼ NHÁNH
if (điều kiện) s1; else s2;
Một câu lệnh!
Một câu lệnh!
Ví dụ:
if (a>b) t=a; else t=b;
Các lệnh if có thể lồng nhau,
Nếu không có ngoặc: else kết nối với lệnh if gần nhất


Co s? l?p trình (C++)
36
CHƯƠNG TRÌNH RẼ NHÁNH
int i = 100;
if(i > 0)
if(i > 1000)
cout<<“i is too big.”< else
cout<<“i is accepted.”<i is accepted.
int i = -20;
if(i > 0) {
if(i > 1000)
cout<<“i is too big.”<}
else
cout<<“i is negative.”<i is negative.
Ví d?:
L?p trình gi?i h? phuong trình b?c I 2 ?n s?


D? li?u: vo t? file EQU1.INP:
Dịng d?u tin ch?a 3 s? th?c a, b v c,
Dịng th? 2 ch?a 3 s? th?c d, e v f.
K?t qu?: ph? thu?c vo d? li?u nh?p, dua ra file EQU1.OUT thơng bo "Vo nghiem.", "Vo so nghiem." ho?c dua ra trn m?t dịng nghi?m x, y du?i d?ng s? th?c v?i d? chính xc 6 ch? s? sau d?u ch?m th?p phn.
Co s? l?p trình (C++)
37
CHƯƠNG TRÌNH RẼ NHÁNH
ax+by=c
dx+ey=f
Co s? l?p trình (C++)
38
CHƯƠNG TRÌNH RẼ NHÁNH
#include
#include
using namespace std;
ifstream fi("EQU1.INP");
ofstream fo("EQU1.OUT");
float a,b,c,d,e,f,dt,dx,dy,x,y;
int main()
{ fi>>a>>b>>c>>d>>e>>f;
dt=a*e-d*b; dx=c*e-f*b; dy=a*f-d*c;
if(dt!=0)
{x=dx/dt;y=dy/dt;
fo< }
else if(dx==0 & dy==0) fo<<"Vo so nghiem.";
else fo<<"Vo nghiem.";
fi.close(); fo.close();
}
Co s? l?p trình (C++)
39
CHƯƠNG TRÌNH RẼ NHÁNH
Thư viện hỗ trợ tổ chức vào/ra
Các lệnh if lồng nhau
Cấu trúc nhiều chọn lựa – switch
Cú pháp:
switch (biểu thức)
{
case gt1: S1; [break;]
case gt2: S2; [break;]
...
case gtn: Sn; [break;]
default: Se;
}
Biểu thức: cho kết quả SỐ NGUYÊN (hoặc ký tự - kiểu dữ liệu được xử lý như số nguyên), phải được đặt giữa cặp ngoặc đơn (),
Si : dãy các lệnh.
Co s? l?p trình (C++)
40
Lệnh switch
Co s? l?p trình (C++)
41
switch(c)
{
case `a`: case `A`:
cout<<“Dien tich = ", r * r * pi< break;
case `c`: case `C`:
cout<< “Chu vi = ", 2 * r * pi< break;
case `q`:
cout<< “Thoat\n";
break;
default:
cout<<“Chon khong hop le\n";
}
Co s? l?p trình (C++)
42
Lệnh switch Một số lưu ý
Nếu không có giá trị nào khớp, các lệnh trong phần default sẽ được thực thi; và nếu không có default cũng không xảy ra lỗi.
Lệnh break rất quan trọng.
float f;

switch(f) {
case 2:
....
switch(i) {
case 2 * j:
....
i = 3;

switch(i) {
case 3: cout<<"i = 3\n";
case 2: cout<<"i = 2\n";
case 1: cout<<"i = 1\n";
}
i = 3
i = 2
i = 1
BIẾN CÓ CHỈ SỐ VÀ MẢNG
Để lưu trữ và xử lý dãy số a = (a0, a1, . . ., a24), trong đó ai nhận giá trị nguyên (i = 0  24) cần khai báo:
int a[25];
Truy cập tới phần tử ai: a[i]
Lưu ý: chỉ số trong C/C++: luôn luôn đánh số từ 0 trở đi.


Mảng nhiều chiều:
int x[10][15]; float z[6][10][8];
Truy cập: x[i][j] z[i][j][k]
Co s? l?p trình (C++)
43
Chỉ số có thể là một biểu thức nguyên
Co s? l?p trình (C++)
44
BIẾN CÓ CHỈ SỐ VÀ MẢNG
Các thành phần của mảng được truy xuất thông qua chỉ số của chúng 0..size-1
Thao tác truy xuất không kiểm tra giới hạn của chỉ số
int main()
{
int a[6];
int i = 7;
a[0] = 59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
a[-1] = 5;
return 0;
}
0
a
1
2
3
4
5
59
-10
2
Gán giá trị đầu khi khai báo:
Co s? l?p trình (C++)
45
BIẾN CÓ CHỈ SỐ VÀ MẢNG
int a[5] = { 10, 20, 30, 40, 50};
double d[100] = { 1.5, 2.7};
short primes[] = { 1, 2, 3, 5, 7, 11, 13};
long b[50] = { 0 };
khởi trị cho 5 thành phần
2 thành phần đầu tiên được khởi trị, phần còn lại: 0
compiler xác định kích thước gồm 7 thành phần
cách nhanh nhất để khởi trị tất cả các thành phần bằng 0
Co s? l?p trình (C++)
46
BIẾN CÓ CHỈ SỐ VÀ MẢNG
Khai báo kiểu dữ liệu mảng:
typedef kiểucơsở Tênkiểu[Sốthànhphần];
kiểu của mỗi thành phần
hằng số, số thành phần tối đa của mảng
do lập trình viên đặt tên
typedef int AINT[100];
//AINT là kiểu mảng biểu diễn dãy gồm 100 thành phần int
AINT a; //a: biến kiểu AINT
FILES STREAM
Làm việc với Files stream – tương tự như với màn hình và bàn phím,
Thông tin trong files stream:
Lưu trữ dưới dạng văn bản (mã ASCII),
Một hoặc nhiều dòng, mỗi dòng: độ dài tùy ý,
Các đơn vị dữ liệu: cách nhau bởi dấu cách hoặc dấu xuống dòng.
Làm việc với files:
Khai báo và mở file,
Đọc/Ghi thông tin,
Đóng files.
Các thư viện hỗ trợ:
fstream: hỗ trợ các thao tác khai báo và vào/ra,
iomanip: quy cách (format) vào/ra
Co s? l?p trình (C++)
47
#include
#include
using namespace std;
ifstream fi (“VD1.INP”);
ofstream fo (“VD1.OUT”);
int main()
{ int a,b,t1;
fi>>a>>b;
t1=a+b;
fo< fi.close();
fo.close();
}
Co s? l?p trình (C++)
48
FILES STREAM
Tên file trên đĩa
Đọc dữ liệu
Ghi dữ liệu
Đóng file
Bài toán: Cho ABC với tọa độ các đỉnh là (x1,y1), (x2, y2) và (x2, y3). Hãy tính và đưa ra diện tích  với độ chính xác 4 chữ số sau dấu chấm thập phân.
Dữ liệu: vào từ file triangle.inp, gồm một dòng chứa 6 số thực x1, y1, x2, y2, x3, y3, các số cách nhau một dấu cách và có giá trị tuyệt đối không vượt quá 106.
Kết quả: đưa ra file triangle.out dòng thông báo: “Dien tich tam giac: “ và sau đó là giá trị tính được.
Co s? l?p trình (C++)
49
FILES STREAM
#include
#include
#include
using namespace std;
ifstream fi ("triangle.inp");
ofstream fo ("triangle.out");
int main()
{ float x1,x2,x3,y1,y2,y3; float a,b,c,p,s;
fi>>x1>>y1>>x2>>y2>>x3>>y3;
a=sqrt(((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
b=sqrt(((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)));
c=sqrt(((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)));
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c))/2;
fo<<"Dien tich tam giac: "< fi.close(); fo.close();
}
Co s? l?p trình (C++)
50
FILES STREAM
Dạng dấu chấm tĩnh
Xác lập độ chính xác 4 chữ số sau dấu chấm thập phân
CHU TRÌNH
Chu trình: đoạn chương trình được thực hiện lặp đi lặp lại nhiều lần liên tiếp nhau.
C/C++ cung cấp các công cụ để tổ chức 3 loại chu trình:
Chu trình for,
Chu trình while,
Chu trình do while.
Co s? l?p trình (C++)
51
Chu trình có số lần lặp biết trước
Chu trình có số lần lặp không biết trước và kiểm tra lặp trước
Chu trình có số lần lặp không biết trước và kiểm tra lặp sau
Loại câu lệnh tổ chức chu trình thường dùng nhất,
Số lần lặp được quản lý bằng một biến nguyên gọi là tham số điều khiển chu trình,
Tham số điều khiển chu trình thường được khai báo cục bộ ngay trong câu lệnh tổ chức chu trình.
Dạng câu lệnh:


for(s0; điều kiện lặp;sc) s1;
Co s? l?p trình (C++)
52
CHU TRÌNH FOR
Chỉ thị gán giá trị đầu cho biến điều khiển chu trình
Chỉ thị thay đổi giá trị biến đkh chu trình sau mỗi lần lặp
Câu lệnh lặp
(một câu lệnh, có thể là lệnh chu trình!)
t=0;
for(int i=1;i<=n;i++) t+=i;
Chu trình lồng
Ví d? 1: L?p trình d?c s? nguyn n v dy s? nguyn a1, a2, . . ., an.
Hy tính:
Trung bình c?ng tb =
Tích c?a cc ai l?n hon trung bình c?ng,
Ph?n t? l?n nh?t chia h?t chia h?t cho s? nguyn k,
Tính trung bình c?ng c?a cc s? ai chia h?t n?m trong kho?ng[b,c].
D? li?u: Vo t? file NUMBERS.INP:
Dịng d?u tin ch?a s? nguyn n (1? n ? 1000),
Dịng th? 2 ch?a n s? nguyn a1, a2, . . ., an, cc s? ghi cch nhau m?t d?u cch, |ai| ? 106, i = 1 ? n,
Dịng th? 3 ch?a 3 s? nguyn k, b, c (b ? c).
K?t qu?: dua ra file NUMBERS.OUT:
Dịng th? nh?t ch?a thơng bo "Trung binh: " v gi tr? tb v?i 3 ch? s? sau d?u ch?m th?p phn,
Dịng th? 2 ch?a thơng bo "Tich cac so tren trung binh: " v gi tr? tính du?c,
Dịng th? 3 ch?a thơng bo "Max chia het k : " v max tìm du?c. N?u khơng cĩ s? no chia h?t cho k thì dua ra thơng bo "Khong ton tai so chia het cho k.",
Dịng th? 4 ch?a thơng bo "Trung binh cac so trong kho?ng [b, c]: " v gi tr? tìm du?c.
Co s? l?p trình (C++)
53
CHU TRÌNH FOR
Co s? l?p trình (C++)
54
CHU TRÌNH FOR
#include
#include
using namespace std;
int n,k,b,c,t,maxk,sl;
long long p;
float tb;
ifstream fi ("NUMBERS.INP");
ofstream fo ("NUMBERS.OUT");
int main()
{ fi>>n;
int a[n+1];
for(int i = 1;i<=n;++i) fi>>a[i];
fi>>k>>b>>c;
t=0;
for (int i=1;i<=n;++i) t+=a[i];
tb=(float)t/n;
p=1;
for(int i=1;i<=n;++i)if(n*a[i]>t) p*=a[i];
Cách tính tổng
Cách tính tích
Tìm MAX , chưa biết phần tử đầu
fo<<"Trung binh: "< fo<<"Tich cac so tren trung binh: "< maxk=-10000000;
for(int i=1;i<=n;++i) if(a[i]%k==0 & a[i]>maxk) maxk=a[i];
if(maxk==-10000000) fo<<"Khong ton tai so chia het cho "< else fo<<"Max chia het "< sl=0; t=0;
for(int i=1;i<=n;i++) if(b<=a[i] & a[i]<=c){t+=a[i];sl++;}
if (sl!=0) tb=(float)t/sl;
if(sl==0)fo<<"Khong ton tai so trong khoang["< else fo<<"Trung binh cac so tim duoc: "< fi.close(); fo.close();
}
Co s? l?p trình (C++)
55
CHU TRÌNH FOR
Lệnh break: thoát ra khỏi chu trình (chu trình for, while, do while), thoát khỏi switch (bỏ qua phần còn lại),
Lệnh continue: bỏ qua phần còn lại trong thân chu trình, thực hiện lần lặp tiếp theo của chu trình.
Co s? l?p trình (C++)
56
Lệnh BREAK và CONTINUE
#include
int n,ineg;
int a[]={5,0,2,-1,6,4};
int main()
{ineg=-1;
for(int i=0;i<6;++i)
{if(a[i]>=0) continue;
ineg=i;
cout<<“So am dau tien: “< break;
}
if(ineg==-1) cout<<“Khong co so am.”<}
#include
using namespace std;
int n,k,j;
ifstream fi ("ins_num.inp");
ofstream fo ("ins_num.out");
int main()
{fi>>n;
int a[n+1];
for(int i=0;i>a[i];
fi>>k;
j=0;
for(int i=n-1;i>=0;--i)
if(a[i]>k)a[i+1]=a[i]; else{j=i+1;break;}
a[j]=k;
for(int i=0;i<=n;++i) fo<}
Co s? l?p trình (C++)
57
BREAK và CONTINUE
6
2 4 5 8 10 14
9
2 4 5 8 9 10 14
Kiểm tra điều kiện lặp lại trước vì vậy số lần lặp có thể bằng 0!
Dạng câu lệnh:
while(điều kiện)s1;
Co s? l?p trình (C++)
58
CHU TRÌNH WHILE
Ví d?:
b=1;
while (m>0) {b++; m>>=1;}
Câu lệnh khối
Ví dụ:
Cho dãy số nguyên a = (a1, a2,. . ., an).
Xét tổng s(p,q) = ap+ap+1+ . . .+aq (0 < p  q  n  106).
Với các cặp chỉ số p và q cho trước hãy tìm max {s(p,q)}.

Dữ liệu: vào từ file INT_NUM.INP:
Dòng đầu tiên chứa số nguyên n,
Dòng thứ 2 chứa n số nguyên a1, a2,. . ., an (|ai|  109 i =1  n),
Các dòng sau: mỗi dòng chứa một cặp số nguyên p và q.

Kết quả: đưa ra file INT_NUM một số nguyên – max tìm được.
Co s? l?p trình (C++)
59
CHU TRÌNH WHILE
Gi?i thu?t tính s(p,q):
Xy d?ng m?ng tích luy B: b0 = 0,




D? ph?c t?p c?a gi?i thu?t: O(n).
Ví d?: n = 8, a = (4, 2, -5, 3, -2, 6, -4, 9)

Co s? l?p trình (C++)
60
CHU TRÌNH WHILE
Khi đó có: s(p,q) = bq - bp-1
b =(0, 4, 6, 1, 4, 2, 8, 4, 13)
s(3,8) = b8 – b2
= 13 – 6
= 7
Co s? l?p trình (C++)
#include
using namespace std;
int n,p,q,tg; long long t,tmax;
ifstream fi("int_sum.inp");
ofstream fo ("int_sum.out");
int main()
{fi>>n;
long long b[n+1];
b[0]=0;
for(int i=1;i<=n;++i){fi>>tg;b[i]=b[i-1]+tg;}
tmax=(long long)-1000000*1000000000;
while( !fi.eof() )
{ fi>>p>>q;
t=b[q]-b[p-1];
if(t>tmax) tmax=t;
}
fo< fi.close(); fo.close();
}
61
CHU TRÌNH WHILE
Ép kiểu
8
4 2 -5 3 -2 6 -4 9
1 3
2 7
3 8
1 5
7
Nhận xét:
Không cần lưu mảng dữ liệu input!
Co s? l?p trình (C++)
62
CHU TRÌNH DO WHILE
Kiểm tra điều kiện lặp lại sau vì vậy số lần lặp ≥ 1
Dạng câu lệnh:
do s1; while (điều kiện);
Lưu ý: một câu lệnh, (có thể là lệnh chu trình!)
Ví dụ: //a ≥ b > 0, int
do
{t=a%b; a=b; b=t;}
while (b>0);

Tìm ƯSCLN của a và b
Ví d?:
Cho dy s? nguyn a = (a1, a2, . . ., an). Hy l?p trình dua cc s? m ln d?u dy, cc s? khơng m xu?ng cu?i, trong m?i ph?n - cc ph?n t? gi? nguyn trình t? tru?c sau nhu trong dy ban d?u.
Ví d?, n = 8, a = (5, -1, 0, 3, -3, 0, 4, -2).
K?t qu? sau khi x? l:
a = (-1, -3, -2, 5, 0, 3, 0, 4).
D? li?u: vo t? file TWOSEQ.INP:
Dịng d?u tin ch? s? nguyn n (2 ? n ? 105),
Dịng th? 2 ch?a n s? nguyn a1, a2, . . ., an (|ai| ? 109,?i).
K?t qu?: dua ra file TWOSEQ.OUT trn m?t dịng dy d bi?n d?i.
Co s? l?p trình (C++)
63
CHU TRÌNH DO WHILE
#include
using namespace std;
int n,kt,tg;
ifstream fi ("twoseq.inp");
ofstream fo ("twoseq.out");
int main()
{fi>>n;
int a[n];
for(int i =0;i>a[i];
do
{kt=0;
for(int i=1;i if(a[i-1]>=0 & a[i]<0)
{tg=a[i-1]; a[i-1]=a[i]; a[i]=tg; kt=1;}
}
while(kt==1);
for(int i=0;i}
Co s? l?p trình (C++)
64
CHU TRÌNH DO WHILE
8
5 -1 0 3 -3 0 4 -2
-1 -3 -2 5 0 3 0 4
Tồn tại giải thuật khác tốt hơn (độ phức tạp O(n))!
Sủi bọt (Bubble)
HÀM (FUNCTION)
Bất cứ ngôn ngữ lập trình nào cũng có công cụ mở rộng cho phép:
Tạo ra phép tính mới,
Tạo ra chỉ thị mới.
C/C++ cung cấp khả năng tạo hàm, gồm 2 loại:
Không gán giá trị cho tên hàm,
Có gán (Trả về) giá trị cho tên hàm.
Ứng dụng:
Rút gọn CT: Lập trình một lần cho các đoạn chương trình tương tự nhau,
Phân chia CT thành các các đoạn CT độc lập ứng với các công việc độc lập (Lập trình có cấu trúc).
Co s? l?p trình (C++)
65
Tồn tại thư viện cung cấp các dịch vụ phong phú, đa dạng để xử lý dữ liệu (STL – Standard Template Libraries),
Khai báo #include < . . .> để sử dụng,
Người lập trình có thể tự mình thành lập hàm để mở rộng ngôn ngữ trong phạm vi CT của mình.
Hàm có thể có tham số hoặc không có tham số,
Nếu có tham số: các tham số nêu trong khai báo hàm được gọi là danh sách tham số hình thức.
Co s? l?p trình (C++)
66
HÀM (FUNCTION)
Liên quan tới việc dịch và tổ chức thực hiện.
Khai báo hàm:



kiểu trả về tên hàm(danh sách tham số hình thức)
{

//khai báo các biến của hàm
//các lệnh thực thi
return giá trị trả về; //hàm void không có giá trị trả về
}
Co s? l?p trình (C++)
67
HÀM (FUNCTION)
int, float, double, . . .
void
Không gán giá trị cho tên hàm
Có thể không có
Có thể bỏ qua câu lệnh này với hàm kiểu void
Có thể không có.
Nếu có: về cơ bản giống cách khai báo biến trong CT
header của hàm
C hỗ trợ 2 cách truyền tham số:
Truyền giá trị (call by value)
Truyền địa chỉ (call by address)

Mở rộng với C++
Truyền tham chiếu (call by reference)
Co s? l?p trình (C++)
68
HÀM (FUNCTION)
TRUYỀN THAM SỐ
Hàm sẽ xử lý trên bản sao của tham số
Hàm không thể thay đổi giá trị của tham số được.
Được dùng trong các trường hợp cần chuyển dữ liệu vào bên trong hàm để xử lý, tính toán
Các ví dụ trên đều dùng kiểu truyền tham số bởi giá trị
Ví dụ hàm có sẵn của C truyền giá trị:
float sqrt(float);
double pow(double, double);
Co s? l?p trình (C++)
69
HÀM (FUNCTION)
TRUYỀN THAM SỐ:truyền giá trị
Ví dụ: truyền theo giá trị.
#include
using namespace std;
ofstream fo (“VD2.INP”);
void change(int v)
{ v *= 100;
fo<<“Change: v = “<}
int main()
{ int var = 5;
change(var);
fo<<“Main: var = “< fo.close();
}
Co s? l?p trình (C++)
70
HÀM (FUNCTION) TRUYỀN THAM SỐ
Change: v = 500
Main: var = 5
Không thay đổi giá trị của var
Hàm sẽ xử lý trên chính tham số nhờ vào địa chỉ của chúng
Hàm có thể thay đổi giá trị của tham số.
Được dùng trong các trường hợp cần chuyển dữ liệu là kết quả xử lý được bên trong hàm ra “ngoài” cho các hàm khác sử dụng.
Co s? l?p trình (C++)
71
HÀM (FUNCTION)
TRUYỀN THAM SỐ:truyền địa chỉ
Ví dụ hàm có sẵn của C truyền địa chỉ:
int scanf(const char *format, adr1, adr2, …);
Hàm
Về mặt kỹ thuật: Đây vẫn là cách truyền tham số theo giá trị, nhưng giá trị truyền ở đây là địa chỉ của biến.
Ví dụ: truyền theo địa chỉ.
#include
using namespace std;
ofstream fo (“VD3.INP”);
void change(int *v)
{ (*v) *= 100;
fo<<"change: *v = “<<(*v)<}
int main()
{ int var = 5;
change(&var);
fo<<“main: var = “< }

Co s? l?p trình (C++)
72
HÀM (FUNCTION)
TRUYỀN THAM SỐ:truyền địa chỉ
v: tham số địa chỉ của số int, khai báo với dấu *
Truyền địa chỉ của “var” vào hàm change
(dấu & trước tên)
change: *v = 500
main: var = 500
Cách tham chiếu tới biến tham số: để trong cặp ngoặc ( )
Kỹ thuật truyền tham số này tương đương với kỹ thuật truyền theo địa chỉ trong lý thuyết ngôn ngữ lập trình và tương đương với cách thể hiện ở các ngôn ngữ lập trình khác.
Chỉ áp dụng được với các trình biên dịch C++
Hàm sẽ xử lý tham số theo địa chỉ của nó  hàm có thể thay đổi giá trị của tham số,
Trong thân của hàm: tham chiếu tới tham số bằng tên của nó!
Được dùng trong các trường hợp cần chuyển dữ liệu là kết quả xử lý được bên trong hàm ra “ngoài” cho các hàm khác sử dụng.
Co s? l?p trình (C++)
73
HÀM (FUNCTION)
TRUYỀN THAM SỐ:truyền tham chiếu
Ví dụ: truyền tham chiếu :
#include
using namespace std;
ofstream fo (“VD4.INP”);
void change(int &v)
{ v *= 100;
fo<<"change: v = “<}
int main()
{ int var = 5;
change(var);
fo<<"main: var = “<}
Co s? l?p trình (C++)
74
HÀM (FUNCTION)
TRUYỀN THAM SỐ:truyền tham chiếu
v: tham số địa chỉ của số int, khai báo với dấu &
Tham chiếu tới biến tham số: tên biến
Truyền tham số: tên biến
change: v = 500
main: var = 500
HÀM (FUNCTION)
TRUYỀN THAM SỐ
Ví dụ: truyền kết hợp theo giá trị, địa chỉ và tham chiếu :
#include
using namespace std;
ofstream fo (“VD5.INP”);
void fct(int a, int *b, int &c)
{ a *= 2;
(*b) += a;
c = a + (*b);
fo<}
int main()
{ int x = 5, y = 4, z = 3;
fct(x, &y, z);
fo<}

Co s? l?p trình (C++)
75
Theo giá trị
Theo địa chỉ
Theo tham chiếu
6 10 16
5 10 16
x – không thay đổi,
y, z – thay đổi
Lời gọi
#include
using namespace std;
ifstream fi ("pass_arr.inp");
ofstream fo ("pass_arr.out");
int n,a[1000],b[1000],c[1000];
void arr_c(int u[],int v[],int r[],int k)
{for(int i=0;iv[i])? u[i]:v[i];
}
int main()
{fi>>n;
for(int i=0;i>a[i];
for(int i=0;i>b[i];
arr_c(a,b,c,n);
for(int i=0;i}
Co s? l?p trình (C++)
76
HÀM (FUNCTION)
TRUYỀN THAM SỐ MẢNG
Tham số mảng
8
2 5 1 8 3 5 9 -5
4 7 3 -2 5 3 8 1
4 7 3 8 5 5 9 1
Chỉ thị gán có điều kiện
Sử dụng hàm trước khi khai báo: cần khai báo mẫu gọi (prototype) – dòng header của hàm trong phần khai báo của chương trình,
Ví dụ: void fct(int a, int *b, int &c) là prototype của hàm ở ví dụ trước,
Khai báo prototype thông báo cho trình biên dịch biết kiểu của giá trị trả về và mô tả chi tiết về các tham số của hàm.
Các hàm thư viện chuẩn được khai báo prototype trong các tập tin header (iostream, cmath, …).
Các hàm do lập trình viên tự xây dựng phải tự khai báo prototype.

Co s? l?p trình (C++)
77
HÀM (FUNCTION)
Co s? l?p trình (C++)
78
HÀM (FUNCTION)
Prototype
Lời gọi
Khai báo hàm
#include
using namespace std;
void change(int v);
ofstream fo (“VD2.INP”);
int main()
{ int var = 5;
change(var);
fo<<“Main: var = “< fo.close();
}
void change(int v)
{ v *= 100;
fo<<“Change: v = “<}
Đệ quy: trong thân của hàm chứa lời gọi tới chính nó (trực tiếp A  A hoặc gián tiếp A  B C D  A)
Thường áp dụng trong các giải thuật tìm kiếm theo chiều sâu (DFS – Depth-First Seach).
Giải thuật loang:
Cho lưới ô vuông A kích thước mn, mỗi ô của lưới chứa một số nguyên bằng 0 hoặc 1. Từ một ô có giá trị bằng 1 ta có thể đi sang ô giá trị 1 kề cạnh. Tập các ô chứa giá trị 1 mà từ một ô bất kỳ ta có thể tới ô khác trong tập được gọi là một miền liên thông.
Hãy xác định số miền liên thông và đưa ra bản đồ miền liên thông, trong đó các ô của một miền liên thông được xác định bằng một số nguyên. Các miền liên thông khác nhau được đánh số khác nhau.
Co s? l?p trình (C++)
79
HÀM (FUNCTION). Đệ quy
Kết quả: đưa ra file DFS_P.OUT:
Dòng đầu tiên chứa 2 số nguyên k – số lượng miền liên thông,
Mỗi dòng trong m dòng sau chứa n số nguyên xác định một dòng của bản đồ liên thông (từ trên xuống dưới).
Co s? l?p trình (C++)
80
HÀM (FUNCTION). Đệ quy
Dữ liệu: vào từ file DFS_P.INP:
Dòng đầu tiên chứa 2 số nguyên m và n (1  m, n  100),
Mỗi dòng trong m dòng sau chứa n số nguyên  {0, 1} xác định một dòng của lưới (từ trên xuống dưới).


#include
#include
using namespace std;
int m,n,k;
int a[102][102]={0};
ifstream fi ("dfs_p.inp");
ofstream fo ("dfs_p.out");

void nhap_dl()
{fi>>m>>n;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)fi>>a[i][j];
}
Co s? l?p trình (C++)
81
HÀM (FUNCTION). Đệ quy
Kỹ thuật hàng rào:
Mảng a
void loang(int x, int y)
{a[x][y]=k;
if(a[x-1][y]==1) loang(x-1,y);
if(a[x+1][y]==1) loang(x+1,y);
if(a[x][y-1]==1) loang(x,y-1);
if(a[x][y+1]==1) loang(x,y+1);
}
void xuat_kq()
{fo< for(int i=1;i<=m;++i)
{fo< for(int j=1;j<=n;++j)fo< }
}
Co s? l?p trình (C++)
82
HÀM (FUNCTION). Đệ quy
Ghi nhận nơi đến
Độ rộng của trường
int main()
{ //memset(a,0,sizeof(a));
nhap_dl();
k=1;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(a[i][j]==1){k++; loang(i,j);}
xuat_kq();
}
Co s? l?p trình (C++)
83
HÀM (FUNCTION). Đệ quy
Một cách xóa 0 khác
Tìm điểm xuất phát để loang
Thay đổi giá trị đánh dấu
Thư viện hỗ trợ: #include
Hằng ký tự: ‘b’, ‘6’, ‘C’
Hằng xâu: “Europa”, “Aurora”. “pi = 3.14159”
Khai báo biến kiểu ký tự: char c,c1,z[12],;
Khai báo biến kiểu xâu: string s, st, sb, p[50];
Các phép tính với xâu:
Phép gán: s=“Andromeda”; st=s;
Cộng xâu: s=“123”; st=“ab”; sb=sa+sb;
Các phép tính quan hệ (!=, ==,<,<=,>=,>)
Co s? l?p trình (C++)
84
XÂU (STRING)
sb: 123ab
So sánh theo thứ tự từ điển
s=“abc”; s1=“abcd”;
s2=“ac”;
ss1>=s2  Sai
Nhập/Xuất xâu: fi>>s>>s1; fo<Số ký tự trong xâu: độ dài của xâu,
Truy nhập tới ký tự trong xâu:
Các ký tự được đánh số từ 0 trở đi,
Truy nhập ký tự thứ i trong xâu s độ dài k: s[i] (0  i  k-1).
Ví dụ: s=“abcd”; s[1]=‘E’; // s: aEcd
An toàn hơn: s.at(i)  s[i]
Co s? l?p trình (C++)
85
XỬ LÝ XÂU
Có kiểm tra
Không kiểm tra
Một số hàm xử lý xâu thường dùng trong thư viện:
s.size() , s.length() – độ dài xâu,
s.find(s1) – Vị trí đầu tiên xuất hiện s1 như xâu con của s, nếu s1 không là xâu con của s  kết quả là -1,
s.rfind(s1) – Vị trí cuối cùng xuất hiện s1 như xâu con của s, nếu s1 không là xâu con của s  kết quả là -1,
s.find_first_of(c) – Vị trí đầu tiên xuất hiện ký tự c trong s, nếu c không có trong s  kết quả là -1,
s.substr(i,j) – cho xâu con độ dài j của s, bắt đầu từ vị trí i.
Co s? l?p trình (C++)
86
XỬ LÝ XÂU
Tên biến kiểu xâu
Một số hàm khác: xem trong các ví dụ.
#include
#include
using namespace std;
int main()
{ string s=("ABCD12345abcdABCDE2");
string ns=("0123456789");
int l,k,m,p,q,i,j;
ofstream fo ("xl_xau.out");
l=s.size();
k=s.find("BC");
m=s.rfind("BC");
p=s.find_first_of(`C`);
q=s.find_last_of(`C`);
i=s.find_first_of(ns);
j=s.find_last_not_of(ns);
fo<<"L = "< fo<<"K = "< fo<<"M = "<Co s? l?p trình (C++)
87
XỬ LÝ XÂU
fo<<"P = "< fo<<"Q = "< fo<<"I = "< fo<<"J = "< fo.close();
}
Khai báo và gán giá trị đầu
 
Gửi ý kiến