You are on page 1of 53

CƠ SỞ LẬP TRÌNH

SITDEBAYQUAMON – PROJECT
TABLE OF CONTENTS
01 02 03 04
Các thuật toán Khái niệm cơ bản Nhập xuất dữ Vòng lặp và điều
cơ bản trong C++ liệu trong C++ kiện C++

05 06 07 08
Mảng trong C++ Hàm trong C+ Struct trong C++ Cấu trúc đề thi cơ
+ sở lập trình
01
Các thuật toán cơ bản
1. Thuật toán tìm kiếm
● Tìm kiếm tuyến tính (linear search) hay tìm kiếm
tuần tự (sequential search) là thuật toán tìm kiếm
bằng cách duyệt qua tất cả các phần tử của danh
sách cho đến khi gặp phần tử cần tìm hoặc là đã
hết danh sách.

Tìm vị trí phần tử có giá trị 20 trong dãy đã cho


Ý Tưởng

Chúng ta có một mảng A có n phần tử bắt đầu từ vị trí 0. Để tìm kiếm phần tử
x trong mảng A này, ta làm như sau:

1. Gán i = 0.
2. So sánh giá trị của A[i] và x:
1. Nếu A[i] == x thì dừng và trả về giá trị của i (vị trí của x trong mảng
A).
2. Nếu A[i] != x thì sang bước 3.
3. Gán i = i + 1:
1. Nếu i == n (tức hết mảng) thì dừng lại và trả kết quả là -1 (không tìm
thấy x).
2. Nếu i < n thì quay lại bước 2.
2. Thuật toán tìm max, min
● Tạo 1 biến max chứa phần tử đầu tiên của dãy số
đang xét. Duyệt lần lượt các phần tử còn lại trong dãy
số, nếu phần tử nào lớn hơn max thì ta gán giá tri
phần tử đó cho max.

● Tạo 1 biến min chứa phần tử đầu tiên của dãy số đang
xét. Duyệt lần lượt các phần tử còn lại trong dãy số,
nếu phần tử nào nhỏ hơn min thì ta gán giá trị phần tử
đó cho min.

VD: Các bước tìm max trong dãy số: 2, 0, 3, 1, 4


Ý Tưởng

Cho mảng có n phần tử : a[0], a[1], a[2], … , a[n-1]

Để tìm số lớn nhất trong mảng ta thực hiện các bước như sau
- Khởi tạo giá trị max = a[0]
- Duyệt lần lượt các phần tử của mảng. Nếu phần tử nào có giá trị lớn hơn max thì ta tiến hành gán
giá trị đó cho max.
- Sau khi duyệt hết các phần tử của mảng thì ta tiến hành trả về giá trị của max.

Để tìm số nhỏ nhất trong mảng ta thực hiện các bước như sau
- Khởi tạo giá trị min = a[0]
- Duyệt lần lượt các phần tử của mảng. Nếu phần tử nào có giá trị nhỏ hơn min thì ta tiến hành gán
giá trị đó cho min.
- Sau khi duyệt hết các phần tử của mảng thì ta tiến hành trả về giá trị của min.
3. Thuật toán tính n giai thừa
● Do công thức của n! = n x (n-1) x … x 1, nên để tính giai
thừa của 1 số nguyên n, ta có thể hởi tạo biến Giaithua = 1,
cho vòng lặp chạy từ 1 đến n. Với mỗi giá trị của i thì ta
gán Giaithua = Giaithua * i. Sau khi chạy hết vòng lặp
chúng ta có Giaithua mang giá trị của n!.

● Tại sao chúng ta lại gán giá trị ban đầu cho biến Giaithua là
1 mà không phải là 0 hoặc số khác? Đơn giản vì nếu gán
Giaithua = 0 thì Giaithua luôn là 0 do 0 nhân với số nào
cũng là 0
Ý Tưởng

Cho số nguyên n. Để tìm giai thừa của n ta làm như sau:

• Khởi tạo biến Giaithua = 1.

• Cho vòng lặp chạy từ 1 đến n, với mỗi giá trị của i trong khoảng [1,n] ta gán
Giaithua = Giaithua * i;
4. Thuật toán sắp xếp tăng dần, giảm dần
Thuật toán sắp xếp nổi bọt thực hiện sắp xếp dãy số bằng cách lặp lại công việc
đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai thứ tự(số sau bé hơn số trước
với trường hợp sắp xếp tăng dần) cho đến khi dãy số được sắp xếp.

Giả sử dãy cần sắp xếp có n phần tử.


Nếu phần tử đứng trước lớn hơn phần tử đứng sau thì đổi chỗ chúng cho nhau.
Tiếp tục làm vậy với phần tử thứ hai, thứ ba và tiếp tục cho đến cuối dữ liệu.
Sau bước này, phần tử thứ n là phần tử lớn nhất của dãy.
Sau đó, quay lại so sánh (đổi chỗ nếu cần) hai phần tử đầu đến khi gặp phần tử
thứ n-2 ….

Lưu ý: Nếu trong 1 lần duyệt ko cần phải đổi chỗ phần tử nào thì dãy đã được
sắp xếp.
Ý Tưởng

1. Gán i = 0
2. Gán j = 0
3. Nếu A[j] > A[j + 1] thì đối chỗ A[j] và A[j + 1]
4. Nếu j < n – i – 1:
1. Đúng thì j = j + 1 và quay lại bước 3
2. Sai thì sang bước 5
5. Nếu i < n – 1:
1. Đúng thì i = i + 1 và quay lại bước 2
2. Sai thì dừng lại
02
Khái niệm cơ bản trong C++
Cấu trúc 1 chương trình trong C++

Một chương trình C++ cơ bản thường được bắt đầu bởi dòng include khai báo
thư viện, sau đó là hàm main. Tất cả mọi thứ của chương trình sẽ chạy dọc theo
hàm main từ trên xuống dưới, có nghĩa là nếu bạn viết một hàm nào khác ngoài
hàm main và trong hàm main không gọi đến hàm đó có nghĩa là hàm đấy sẽ
không chạy trong chương trình, một câu lệnh luôn phải kết thúc bằng dấu
(;) .Sau đây là một chương trình C++ cơ bản in ra chữ Hello World
Giải thích:
- #include <iostream> là câu lệnh gọi đến thư viện iostream (input – output stream), thư viện này cho phép bạn nhập
dữ liệu từ giao diện và xuất dữ liệu ngược lại từ giao diện qua các câu lệnh nhập, xuất cơ bản như cin, cout, …

- using namespace std; là các gói trong thư viện iostream có công dụng tiện lợi hơn khi sử dụng và tránh những lỗi
khai báo trùng.

- int main(){ } có tác dụng khai báo hàm main() sử dụng trong chương trình, trong đó: int có ý nghĩa là hàm main()
chỉ có thể trả về giá trị thuộc kiểu số nguyên. Các câu lệnh sẽ được thực hiện trong dấu { }.

- cout <<“ “; là câu lệnh dùng để xuất một giá trị hoặc một biểu thức ra ngoài màn hình, cú pháp: cout <<“ Một văn
bản nào đó “; hoặc nếu cần xuất ra 1 giá trị a nào đó: cout <<a;

Ngoài ra, chúng ta có thể dùng toán tử << đằng sau cout để ngăn cách giữa các giá trị xuất VD: cout <<a<<b;
Các kiểu dữ liệu cơ bản trong C++
Các kiểu dữ liệu nâng cao trong C++
Ví dụ về khai báo kiểu dữ liệu trong C++

Cú pháp: Kiểu dữ liệu + tên biến = giá trị (theo kiểu dữ liệu đã khai báo)
Toán tử trong C++
Toán tử số học
VD: A = 10, B = 20
Toán tử Quan hệ
VD: A = 10, B = 20
Toán tử Logic
VD: A = true (1), B = false (0)
Toán tử Gán
03
Nhập và xuất trong C++
Nhập dữ liệu trong C++

Hàm cin là hàm có sẵn trong thư viện iostream, vì vậy trc khi sử dụng cần khai
báo #include<iostream>. Hàm này được sử dụng để nhập dữ liệu trên màn
hình hiển thị, dữ liệu cần hiển thị trên màn hình được chèn vào luồng đầu vào
bằng toán tử “>>“ .

Cú pháp: cin >> varName; với varName là tên biến


Ngoài ra còn có thể sử dụng để nhập 1 lúc nhiều biến và
chuỗi : cin >> var1 >> var2;
Xuất dữ liệu trong C++

Hàm cout là hàm có sẵn trong thư viện iostream, vì vậy trc khi sử dụng cần
khai báo #include<iostream>. Hàm này được sử dụng để xuất dữ liệu trên màn
hình hiển thị, dữ liệu cần hiển thị trên màn hình được chèn vào luồng đầu ra
bằng toán tử “<<“ .

Cú pháp: cout << varName; với varName là tên biến hoặc


cout << “Chuỗi nào đó”;
Ngoài ra còn có thể sử dụng nhiều lần với cả biến và
chuỗi : cout << var1 <<“Chuỗi nào đó”<< var2 << endl;
04
Vòng lặp và điều kiện trong C++
Vòng lặp for

Vòng lặp for trong C++ là một cấu trúc điều khiển lặp
đi lặp lại mà cho phép bạn viết một vòng lặp một
cách hiệu quả, mà cần thực hiện trong một khoảng
thời gian cụ thể nào đó.

Cú pháp:

for ( bien; dieu_kien ; tang_giam ) {


cac_lenh;
}
Ví Dụ
Điều kiện if - else

Cú pháp:
Câu lệnh điều kiện trong C++ là câu lệnh cần thiết
trong quá trình lập trình, bởi đôi khi ta sẽ gặp phải
if (điều kiện) {
những điều kiện nhất định để thực hiện một đoạn mã
//đoạn mã 1
nào đó. Trong phần này, chúng ta sẽ tìm hiểu về câu
}
lệnh if … else để nhằm đưa ra quyết định trong
else {
chương trình.
//đoạn mã 2
}
Ví dụ if - else
05
Mảng trong C++
Mảng trong C++
Mảng là một loại cấu trúc dữ liệu trong ngôn ngữ lập trình C/C++, nó lưu trữ
một tập hợp tuần tự các phần tử cùng kiểu với độ dài cố định. Mảng thường
được sử dụng để lưu trữ tập hợp dữ liệu, nhưng nó cũng hữu dụng khi dùng để
lưu trữ một tập hợp biến có cùng kiểu.

Thay vì khai báo biến một cách rời rạc, như biến bien1, bien1,… và bien99, bạn
có thể khai báo một mảng các giá trị như bien[0], bien[1] và … bien[99] để biểu
diễn các giá trị riêng biệt. Một phần tử cụ thể của mảng có thể được truy cập qua
index (chỉ số).

Tất cả mảng đều bao gồm các vị trí nhớ liền kề nhau. Địa chỉ thấp nhất tương
ứng với phần tử đầu tiên và địa chỉ cao nhất tương ứng với thành phần cuối
cùng của mảng
Khai báo mảng

Cú pháp: Để khai báo một mảng trong ngôn ngữ C/C++, bạn xác định kiểu dữ liệu của phần tử
và số lượng phần tử được yêu cầu bởi biến đó như sau :

Kiểu dữ liệu + tên mảng + [ Số phần tử ] ;

VD: int a[100], float b[500], char c[400], …

Ngoài ra chúng ta có thể khởi tạo mảng các phần tử có sẵn như sau:

int a[5] = { 15 , 20 , 25 , 30 , 35 } ;
(Số lượng phần tử trong dấu ngoặc nhọn không được lớn hơn số trong ngoặc vuông)

Hoặc gán giá trị 1 phần tử trong mảng:

a[4] = 32 ;
Nhập mảng

Đầu tiên, ta cần khai báo n là số phần tử trong mảng, sau đó là mảng a gồm n phẩn tử.

Tiếp theo, sử dụng vòng lặp for với biến i chạy từ 0 đến n – 1 (hoặc 1 đến n) với mỗi lần lặp
thì cập nhật phần tử a[i] trong mảng.
Xuất mảng

Sau khi nhập mảng, ta sử dụng vòng lặp for với biến i chạy từ 0 đến n – 1 (hoặc 1 đến n) với
mỗi lần lặp thì in ra màn hình phần tử a[i] trong mảng.

Kết quả
Mảng 2 chiều trong C++
Trong C ++, chúng ta có thể định nghĩa các mảng đa chiều đơn giản
là mảng của một mảng. Dữ liệu trong các mảng đa chiều được lưu
trữ ở dạng bảng.
Khai báo mảng 2 chiều
Để khai báo mảng 2 chiều, bạn phải chỉ định các tham số sau:

• Kích thước số hàng của mảng 2 chiều

• Kích thước số cột của mảng 2 chiều

• Kiểu dữ liệu của mảng 2 chiều. Việc này chỉ định kiểu dữ liệu của các phần tử trong mảng; là
số nguyên, số thực, ký tự hay là kiểu dữ liệu nào đó

Cú pháp: Kiểu dữ liệu + [chỉ số hàng] + [chỉ số cột] ;


(Lưu ý: số hàng và số cột phải là số nguyên dương)

VD: int a[100][10], float c[3][4], char d[20][20], . . .

Ngoài ra, sau khi khai báo, ta có thể gán giá trị cho phần tử trong mảng.

VD: a[1][2] = 1, c[3][3] = 2.5, d[5][10] = ‘c’, . . .


Nhập mảng 2 chiều

Đầu tiên, ta cần khai báo n là số dòng của mảng, m là số cột của mảng,
sau đó là mảng a gồm n dòng và m cột.

Tiếp theo, sử dụng vòng lặp for với biến j chạy từ 0 đến m – 1 (hoặc 1
đến m) với mỗi lần lặp thì cập nhật phần tử theo hàng của mảng, sau đó
lồng vòng lặp này vào 1 vòng lặp khác với biến i chạy từ 0 đến n-1 (hoặc
1 đến n) để tiếp tục cập nhật các phần tử ở các hàng kế tiếp của ma trận.
Xuất mảng 2 chiều

Sau khi nhập mảng, ta sử dụng sử dụng vòng lặp for với biến
j chạy từ 0 đến m – 1 (hoặc 1 đến m) với mỗi lần lặp thì in ra
phần tử theo hàng của mảng, sau đó lồng vòng lặp này vào 1
vòng lặp khác với biến i chạy từ 0 đến n-1 (hoặc 1 đến n) để
tiếp tục in ra các hàng kế tiếp của ma trận.

Kết quả
Chuỗi trong C++

Chuỗi ký tự là tập hợp các ký tự được đặt trong dấu ngoặc kép. Dùng để biểu diễn những thông báo, văn
bản, … trong chương trình.

Trong C++, kiểu chuỗi ký tự không được xây dựng sẵn (không phải là “built-in string”) mà được cài đặt trong một
lớp của thư viện chuẩn STL (C++ Standard Template Library).
Nhập xuất chuỗi trong C++
Nhập xuất chuỗi có khoảng trắng trong C++

Để đọc đầy đủ chuỗi có khoảng trắng từ đối tượng nhập của lớp iostream (ví dụ cin), bạn nên sử dụng
hàm std::getline() (trong namespace std).
Chú ý

Khi bạn nhập một thông tin bất kỳ, mọi ký tự bạn gõ vào bàn phím (kể cả ký tự Enter \n) đều được đẩy vào bộ nhớ
đệm trước khi được gán vào biến. Ví dụ, bạn nhập số và ấn Enter, chúng chỉ nhận số chứ không nhận được ký tự
Enter (‘\n’), và ký tự Enter vẫn còn trong bộ nhớ đệm. Đến khi nhập chuỗi, hàm std::getline() nhận được ký tự
Enter từ bộ nhớ đệm thì kết thúc nhập và chương trình vẫn chạy tiếp. Điều này khiến kết quả bị sai.

Cách sửa vấn đề trên thì ta có thể sử dụng fflush(stdin); trước khi nhập string.
06
Hàm trong C++
Hàm trong C++

Một hàm là một nhóm các câu lệnh cùng nhau thực hiện một nhiệm vụ. Mỗi
chương trình C++ có ít nhất một hàm, là hàm main().

Một khai báo hàm cho trình biên dịch biết về tên, kiểu trả về và các tham số của
hàm. Định nghĩa hàm cung cấp phần thân thực của hàm.
Phân loại hàm trong C++
Ví dụ hàm trong C++
07
Kiểu dữ liệu cấu trúc trong C++
Struct trong C++

Trong ngôn ngữ lập trình C++, các lớp và cấu trúc (struct) là các bản thiết kế
được sử dụng để tạo ra thể hiện của một lớp.

Struct trong C++ được sử dụng cho các đối tượng nhẹ như Hinhtron, Color,
Point v.v. Không giống như lớp, struct trong C++ kiểu giá trị hơn là kiểu tham
chiếu. Nó rất hữu ích nếu bạn có dữ liệu không có ý định sửa đổi sau khi tạo
struct.

Struct trong C++ là một tập hợp các loại dữ liệu khác nhau. Nó tương tự như lớp
chứa các loại dữ liệu khác nhau.
Khai báo struct

struct <Tên kiểu cấu trúc> {


<Kiểu dl 1> <Trường 1>;
<Kiểu dl 2> <Trường 2>;
……..
<Kiểu dl n> <Trường n>;
}

Khai báo biến cấu trúc:

Khi một kiểu cấu trúc đã được định


nghĩa, ta có thể khai báo một hoặc nhiều
biến kiểu này

VD: struct Sach sach1;


Truy nhập đến các thành phần struct

Các phần tử của cấu trúc được truy cập thông qua
việc sử dụng toán tử chấm (.). Toán tử này còn
được gọi là toán tử thành viên – membership.
Mảng struct
08
Cấu trúc đề thi Cơ sở lập trình
- Thường có 5 – 6 câu và lặp lại trong các yêu cầu sau đây :

Câu 1: Khai báo và nhập dữ liệu (Sử dụng struct và hàm để xây dựng
cấu trúc)

Câu 2: Tính toán dữ liệu trong vòng lặp (Có thể tính tổng, tính lương,
tính trung bình, …)

Câu 3 + 4: Đếm theo yêu cầu đề bài và tìm MAX,MIN.

Câu 5: Sắp xếp và in ra dưới dạng bảng

You might also like