NHẬP MÔN LẬP TRÌNH Bài 1 Giới thiệu môn học & Làm quen với Dev C++ Trương Xuân Nam Khoa CNTT 2 Nội dung chính 1 Giới thiệu môn học 2 Viết chương trình cho máy tính 3 Làm quen với Dev C++ 1 Các bước vi[.]
Trang 1NHẬP MÔN LẬP TRÌNH
Bài 1: Giới thiệu môn học & Làm quen
với Dev-C++
Trang 2Trương Xuân Nam - Khoa CNTT 2
Nội dung chính
1 Giới thiệu môn học
2 Viết chương trình cho máy tính
3 Làm quen với Dev-C++
1 Các bước viết chương trình
2 Ngôn ngữ lập trình C++
3 Công cụ Dev-C++
4 Bài tập
Trang 3Giới thiệu môn học
Phần 1
Trang 4Giáo trình & Giờ học
▪ Thời lượng: 3 tín chỉ (15 buổi x 3 tiết)
▪ Giáo trình chính
▪ “Introduction to Engineering Programming: Solving Problems
with Algorithms” (James Paul Holloway)
▪ Đã có bản dịch tiếng Việt
▪ Công cụ trên máy tính: Dev-C++ 5.11
▪ Hoặc những công cụ tương đương
▪ Phần lý thuyết: lý thuyết trên slide + chữa bài tập
▪ Phần thực hành: viết chương trình trên máy tính
Trang 5Nội dung giảng dạy
▪ Khái niệm cơ bản của lập trình C/C++
Trang 6Mục tiêu của môn học
▪ Hiểu biết cơ bản về ngôn ngữ lập trình C/C++
▪ Biết cách triển khai (lập trình) một số thuật toán trên
máy tính
▪ Biết cách viết, dịch, sửa lỗi và chạy một chương trình viết
bằng C++
▪ Biết cách giải một số bài toán đơn giản bằng lập trình C++
▪ Biết ứng dụng kiến thức lập trình vào những công việc
sau này
Trang 7Tại sao phải học môn này?
▪ Hiểu biết hơn về máy tính và lập trình máy tính
▪ Làm quen với máy tính theo cách của giới làm kỹ thuật
▪ Hiểu cách thức giải quyết một vấn đề bằng máy tính
▪ Nâng cao tư duy logic và tư duy thuật toán
▪ Lấy kiến thức nền cho các môn học tiếp sau của ngành
CNTT (*)
▪ Lấy bằng đại học
Trang 8Trương Xuân Nam - Khoa CNTT 8
Thi & Tính điểm
▪ Tính điểm:
▪ Điểm quá trình (50%):
• Điểm chuyên cần
• Điểm kiểm tra giữa kỳ (5 đầu điểm)
▪ Điểm kiểm tra cuối kì (50%, thi thực hành, máy chấm tự động)
▪ Như vậy tất cả các điểm số của môn này đều là điểm
thực hành trên máy, chú trọng vào viết chương trình,
không có lý thuyết học thuộc
▪ Giảng viên:
▪ Họ tên: Trương Xuân Nam, khoa CNTT
▪ Email: namtx@wru.vn
truongxuannam@gmail.com
Trang 9Một vài chú ý khác
▪ Cần xem trước giáo trình trước giờ học
▪ Cần xem lại bài cũ trước khi lên lớp
▪ Phải làm hết bài tập (được giao trên lớp và trong giờ thực
hành)
▪ Yêu cầu hỗ trợ của giáo viên khi cần thiết
▪ Mọi thông tin cần thiết về môn học được đưa lên
http://txnam.net mục BÀI GIẢNG
▪ Cách học hợp lý môn này: trao đổi với thầy giáo, không
ghi chép nhiều trong giờ lý thuyết
Trang 10Viết chương trình cho máy
tính
Phần 2
Trang 11Máy tính chỉ hiểu con số
▪ Mọi thông tin đều có thể chuyển về dạng số:
▪ Các số → giữ nguyên → số
▪ Âm thanh → số hóa (tần số) → số
▪ Hình ảnh → số hóa (ma trận điểm) → số
▪
➔ Máy tính xử lý các thông tin ở dạng số
➔ Mọi thông tin trong máy tính đều được lưu ở dạng số,
cụ thể là số ở dạng nhị phân
➔ Ra lệnh cho máy tính phải viết lệnh ở dạng số
Trang 12▪ Kích thước một chương trình máy tính
▪ Loại rất nhỏ vài nghìn lệnh máy
▪ Loại nhỏ vài chục nghìn lệnh máy
▪ Loại vừa vài trăm nghìn lệnh máy
▪ Loại lớn vài triệu lệnh máy
Trang 13Trương Xuân Nam - Khoa CNTT 13
Trang 14Máy tính thực hiện từng lệnh một
▪ Chương trình máy tính được ghi trên đĩa ở dạng file
chương trình (.COM, EXE, DLL, )
▪ Máy tính đọc lệnh máy trong bộ nhớ và thực hiện từng
Trang 15Viết chương trình = viết dãy số?
▪ Thời kì đầu: viết trực tiếp lệnh máy (dãy số)
▪ Bất lợi: khó hiểu, dễ nhầm lẫn, viết lâu,
Trang 16Viết chương trình = viết dãy số?
▪ Hợp ngữ: sử dụng các kí hiệu đơn giản bằng tiếng Anh,
gần gũi với lệnh máy
▪ Bất lợi: người lập trình phải biết rõ về từng lệnh máy, viết dài,
dễ nhầm lẫn
Trang 17Viết chương trình = viết dãy số?
▪ Ngôn ngữ lập trình bậc cao: các lệnh ở dạng gần gũi với
ngôn ngữ tự nhiên, trình biên dịch chuyển một lệnh này thành các lệnh máy
▪ Ngôn ngữ bậc cao đơn giản: BASIC, FORTRAN,
▪ Ngôn ngữ lập trình thủ tục: ALGOL, PASCAL, C,
▪ Ngôn ngữ lập trình hướng đối tượng: SmallTalk, C++, Object Pascal, Java, C#,
▪ Các ngôn ngữ lập trình đặc biệt (dùng cho những mục
đích riêng): Prolog, SQL,
Trang 18Làm quen với Dev-C++
Phần 3
Trang 193.1 Các bước viết chương trình
▪ Một chương trình máy tính được xây dựng để giải quyết
một bài toán cụ thể nào đó
▪ Việc xây dựng một chương trình máy tính luôn tuân theo
các bước sau:
▪ Bước 1 : xác định (mô tả) bài toán cần giải quyết
▪ Bước 2 : xây dựng lời giải (thuật toán)
▪ Bước 3 : chuyển lời giải bài toán thành chương trình viết bằng một ngôn ngữ lập trình nào đó
▪ Bước 4 : dịch chương trình thành dạng mã máy để máy tính có thể thực hiện được
Trang 203.1 Các bước viết chương trình
▪ Bước 1 - xác định (mô tả) bài toán cần giải quyết:
▪ Ví dụ: bài toán tính A 2
▪ Xác định bài toán: người dùng cho số A, máy tính cần tính A 2
dựa trên số A đã biết
▪ Bước 2 - xây dựng lời giải (thuật toán):
▪ Có nhiều cách mô tả thuật toán (bằng lời hoặc bằng sơ đồ khối)
▪ Ví dụ (mô tả bằng lời): nhập A từ bàn phím, sau đó tính giá trị A
x A và in kết quả ra màn hình
Trang 213.1 Các bước viết chương trình
▪ Bước 3 - chuyển lời giải bài toán thành chương trình viết
bằng một ngôn ngữ lập trình nào đó:
▪ Chọn ngôn ngữ lập trình thích hợp với bài toán
▪ Viết chương trình theo thuật toán đã định
▪ Bước 4 - dịch chương trình thành dạng mã máy để máy
Trang 223.2 Ngôn ngữ lập trình C/C++
Trang 233.2 Ngôn ngữ lập trình C/C++
▪ Tác giả: Bjarne Stroustrup (Mỹ)
▪ Ý tưởng bắt đầu từ năm 1979
▪ Được giới thiệu năm 1985
▪ Phiên bản C++ 2.0 năm 1989
▪ Phiên bản mới nhất: C++17
▪ Môn học này chỉ học khoảng 10% kiến
thức về C++ và các thư viện của nó
▪ Cần 3-5 năm để trở thành lập trình viên C++ ở mức độ
chuyên nghiệp
Trang 24Trương Xuân Nam - Khoa CNTT 24
Trang 253.3 Công cụ Dev-C++
Trang 26Bài tập
Phần 4
Trang 27Bài tập
1 (về nhà) Cài đặt bộ công cụ Dev-C++ lên máy tính của bạn
▪ Tải file cài đặt theo liên kết trong website bài giảng
3.Lưu chương trình thành file “xinchao.cpp”
4.Bấm F11 để dịch và chạy thử, sửa lỗi nếu có
Trang 28Thử nhập và chạy một số đoạn chương trình
#include <iostream>
using namespace std ;
int main () {
cout << "Dong thu nhat" << endl;
cout << "Dong thu hai" << endl;
}
Trang 29Thử nhập và chạy một số đoạn chương trình
Trang 30Thử nhập và chạy một số đoạn chương trình
Trang 31Thử nhập và chạy một số đoạn chương trình
#include <iostream>
using namespace std ;
int main () {
double a, b, c;
cout << "nhap a:" ; cin >> a;
cout << "nhap b:" ; cin >> b;
cout << "nhap c:" ; cin >> c;
Trang 32NHẬP MÔN LẬP TRÌNH
Bài 2: Chương trình C++ đơn giản
Trang 33Nội dung chính
1 Chương trình C++ đầu tiên
2 Biến & Định danh
3 Biểu thức, Phép toán & Phép gán
4 Các cấu trúc điều khiển
5 Thuật toán
6 Bài tập
Trang 34Chương trình C++ đầu tiên
Phần 1
Trang 35sử dụng tập thư viện chuẩn
in ra màn
hình
trả về 0 cho
hệ thống
Trang 36Chương trình: nhập N, tính và in ra 2 𝑁
#include <iostream> // sử dụng thư viện vào/ra chuẩn
#include <cmath> // sử dụng thư viện các hàm toán
using namespace std; // sử dụng không gian tên chuẩn
int main() { // bắt đầu hàm main()
double n, x; // khai báo 2 biến n và x
Trang 37Biến & Định danh
Phần 2
Trang 38Biến và định danh
Quy tắc khai báo chung:
<kiểu> <tên biến>;
<kiểu> <tên biến> = <giá trị>;
bool kiemtra; // biến logic kiemtra
bool ok = false ; // biến ok , giá trị = sai
int a, b, c; // 3 số nguyên a , b , c
Trang 39Biến và định danh
▪ Khái niệm: vùng trong bộ nhớ máy tính dùng để chứa
những kết quả tính toán
▪ Cần được đặt tên để dễ thao tác
▪ Gọi là “biến” (variable)
▪ Nguyên tắc:
▪ Phải khai báo trước khi dùng
▪ Phải chỉ ra kiểu (loại số)
▪ Viết liền, phân biệt chữ hoa và chữ thường
▪ Bắt đầu bởi chữ cái (tiếng Anh) theo sau là chữ cái hoặc chữ số hoặc dấu gạch dưới (_): n , soA , thamso1 , diepvien007 ,…
Trang 40▪ Tên cấu trúc (struct)
▪ Định danh (identifier) là quy cách chung cho việc đặt tên
của các thành phần trên
▪ Có thể sử dụng thêm dấu gạch dưới ( _ )
▪ Không được trùng với từ khóa của ngôn ngữ
▪ Không được trùng nhau
Trang 41Biểu thức, Phép toán & Phép
gán
Phần 3
Trang 42Biểu thức (expression)
▪ Khái niệm: sự kết hợp giữa các giá trị, biến, phép toán và
các cặp ngoặc để có thể thực hiện tính toán được kết quả
Trang 43▪ Thư viện <cmath>: cung cấp các hàm toán học thường
dùng, chẳng hạn như hàm căn 2 (sqrt), hàm mũ (pow),…
(sẽ giới thiệu đầy đủ hơn ở phần bàn về kiểu dữ liệu)
Trang 44▪ Bài tập: a, b, c là ba cạnh của tam giác ABC, cần tính nửa
chu vi của ABC và lưu vào biến p, phép gán được viết nhưthế nào?
Trang 45Các cấu trúc điều khiển
Phần 4
Trang 46Các cấu trúc điều khiển
▪ Có 3 cấu trúc điều khiển cơ bản
▪ Tuần tự : Thực hiện tuyến tính từng việc một
▪ Lặp : Thực hiện lặp lại một hoặc nhiều việc cho đến khi điều
kiện nhất định được thỏa mãn
▪ Lựa chọn (rẽ nhánh) : Chọn thực hiện một hoặc nhiều việc dựa trên một điều kiện nhất định
▪ Các cấu trúc này tương tự như nhiều hành vi trong cuộc
sống
▪ Đọc trước các chương 2, 3 và 4 của giáo trình để tìm hiểu
về các điều khiển này
Trang 47Các cấu trúc điều khiển trong cuộc sống
▪ Tuần tự thực hiện từng bước từ đầu đến cuối danh sách
▪ Chấm bài
▪ Đếm số người trong phòng
▪ Kiểm tra an ninh
▪ Lặp lại một công việc đến khi đạt được mục đích đề ra
▪ Học thuộc lòng
▪ Tập thể thao
▪ Rẽ nhánh lựa chọn thực hiện một trong số nhiều việc
▪ Chọn đi học hay đi chơi
▪ Chọn mua món đồ nào
▪ Đa phần công việc trong cuộc số là sự kết hợp phức tạp
của 3 loại cấu trúc điều khiển trên, phần mềm cũng vậy
Trang 48Thuật toán
Phần 5
Trang 49Trương Xuân Nam - Khoa CNTT 18
Định nghĩa và đặc trưng
▪ Định nghĩa: các bước cần tiến hành để giải quyết một
công việc cụ thể nào đó
▪ Thuật toán phổ biến trong cuộc sống, có trước máy tính
Trang 50Trương Xuân Nam - Khoa CNTT 19
Ví dụ đơn giản
Ví dụ: Tính bình phương của số m
Bước 1: Nhập giá trị cho m
Bước 2: Tính giá trị m × m và đưa vào s
Bước 3: Trả về giá trị s cho chương trình gọi
Ta thấy:
▪ Thuật toán có 3 bước
▪ Viết rõ ràng, không thể hiểu sai
▪ Làm theo thuật toán ta có thể tính được kết quả mà không cần hiểu khái niệm “bình phương” là gì
Trang 51▪ Bước 4: Nếu d < 0 thì thông báo vô nghiệm và dừng
▪ Bước 5: Nếu d > 0 thì thực hiện Bước 7
▪ Bước 6: Thông báo có nghiệm x = -b/2/a và dừng
▪ Bước 7: Thông báo có hai nghiệm
• 𝑥1 = −𝑏+ 𝑑 ൗ2𝑎
• 𝑥2 = −𝑏− 𝑑 ൗ2𝑎
Trang 52Trương Xuân Nam - Khoa CNTT 21
Câu hỏi: hãy nêu một vài thuật toán tương tự trong cuộc
sống (thuật toán nhưng không dính dáng gì tới máy tính)
Trang 53Bài tập
Phần 6
Trang 54Bài tập
1 Hãy xây dựng thuật toán (hoặc viết chương trình) giải
phương trình bậc nhất P(x): a x + b = c
2.Hãy xây dựng thuật toán để biến đổi số N ở dạng thập
phân thành số M tương đương ở dạng nhị phân
5.Nhập điểm toán, lý và hóa của một học sinh In ra điểm
trung bình 3 môn học của học sinh đó
Trang 55Ví dụ: nhập 2 số a và b, tính tổng 2 số
Trang 56Ví dụ: tính diện tích tam giác có 3 cạnh a, b, c
Trang 57Ví dụ: tính khoảng cách giữa (x1,y1) và (x2,y2)
Trang 58NHẬP MÔN LẬP TRÌNH
Bài 3: Hàm và nhập/xuất dữ liệu
Trang 60Phân rã bài toán
Phần 1
Trang 61Phân rã bài toán
▪ Ví dụ: tính diện tích một đa giác lồi
▪ Chia đa giác thành các tam giác con
▪ Tính diện tích từng tam giác con
▪ Lấy tổng diện tích các tam giác con
Trang 62Phân rã bài toán (vấn đề)
▪ Giải phương trình bậc 2:
▪ Chia delta thành 3 trường hợp (âm, 0, dương)
▪ Giải riêng rẽ từng trường hợp một
▪ Hầu hết các bài toán phức tạp đều được chia thành các
chức năng con
▪ Hệ thống menu của các phần mềm là một ví dụ điển hình của việc chia phần mềm thành các chức năng con
▪ Phân rã bài toán là một trong những nguyên tắc rất quan
trọng của lập trình, đối với ngôn ngữ C++, chúng ta chia chương trình thành các chương trình con (hàm)
▪ Những bài toán không phân rã được thường là những bài
rất khó
Trang 63Hàm (function)
Phần 2
Trang 64Chương trình C/C++ gồm nhiều hàm
Trang 65Hàm (function)
▪ Hàm:
▪ Vay mượn khái niệm hàm của toán học (thường trả về kết quả)
▪ Là chương trình con thực thi một thuật toán nào đó
▪ Thực chất là một đoạn chương trình được đặt tên
▪ Cú pháp:
<kiểu kết quả> <tên hàm> ( <các tham số> ) {
// nội dung thực hiện thuật toán }
▪ Ví dụ:
int dientich( int dai, int rong) {
return dai * rong;
}
Trang 66Trương Xuân Nam - Khoa CNTT 9
Hàm (function)
▪ Gọi hàm: gọi thông qua tên và tham số
int n = dientich (30,40);
▪ Viết thành hàm thì có lợi gì?
▪ Hiện thực hóa ý tưởng phân rã bài toán thành các bài toán con
▪ Viết một lần, gọi mọi nơi
▪ Nếu có sai hoặc chưa tối ưu thì chỉ cần chỉ sửa ở một chỗ
▪ Có thể lại dùng trong các bài khác
▪ Bản thân các hàm toán học được sử dụng trong các bài trước là hàm do các lập trình viên khác viết ra, chúng ta chỉ sử dụng lại
Kinh nghiệm: hàm không nên dài quá 20 dòng (cả hàm nên nằm hoàn toàn trong một trang màn hình)
Trang 67Một số kiểu dữ liệu thường
dùng
Phần 3
Trang 68Một số kiểu dữ liệu thường dùng
▪ Đã sử dụng trong bài trước: nguyên (int), thực (double,
float), logic (bool)
▪ Dùng khi khai báo biến, hàm số,…
double abc; // biến abc kiểu số thực
bool xyz; // biến xyz kiểu logic
▪ Hỏi: tại sao cần định nghĩa “kiểu dữ liệu”?
▪ Đáp: nếu không biết kiểu của biến thì các phép toán thực
hiện có thể không chính xác
▪ Phép chia lấy dư chỉ thực hiện được với số nguyên
▪ Kiểu logic không thể cộng với nhau
Trang 69Kiểu nguyên (int)
▪ Dùng để lưu trữ số nguyên không quá lớn (trong khoảng
từ ~ âm 2 tỉ đến dương 2 tỉ)
▪ Một biến kiểu int chiếm 4 byte (32 bit) trong bộ nhớ
▪ Nếu muốn thao tác các số lớn hơn, dùng kiểu “long long”
▪ Biến kiểu “long long” dài 8 byte (64 bit)
▪ Có thể chứa số lớn đến khoảng 9 tỉ tỉ
▪ Các phép tính cơ bản với số nguyên:
▪ Các phép toán số học: cộng (+), trừ (-), nhân (*), chia lấy
thương (/), lấy số dư (%)
▪ Các phép toán đặc biệt: tăng 1 đơn vị (++), giảm 1 đơn vị ( )
▪ Các phép so sánh giá trị: bằng (==), khác (!=), lớn hơn (>), nhỏ hơn (<), lớn hơn hoặc bằng (>=), nhỏ hơn hoặc bằng (<=)
Trang 70Kiểu nguyên (int)
cout << ++a; // tăng a lên 1, in ra 12
cout << b++; // in ra 3, b tăng lên 4
cout << b; // giảm b đi 1, in ra 3
cout << a ; // in ra 12, giảm a đi 1
Trang 71Kiểu thực (float, double)
▪ Dùng để lưu trữ các số thực
▪ Kiểu double có độ chính xác cao hơn kiểu float nhưng tốn
nhiều bộ nhớ hơn
▪ Biến kiểu float dài 4 byte (32 bit)
▪ Biến kiểu double dài 8 byte (64 bit)
▪ Làm việc trên double (thường) nhanh hơn làm việc trên float
Trang 72Kiểu logic (bool)
▪ Lưu trữ các giá trị đúng/sai (true/false)
▪ Sử dụng trong các tình huống luân lý:
▪ Là kết quả của các phép so sánh: >, >=, <, <=, ==, !=
▪ Các phép toán logic: và (&&), hoặc (||), đảo (!), xor (^)
▪ Sử dụng khi ra quyết định (sẽ học ở chương 4)
Trang 73Nhập và xuất dữ liệu
Phần 4
Trang 74▪ Có thể thực hiện liên tục nhiều lệnh xuất dữ liệu liên tiếp
▪ Việc trình bày ra màn hình đôi khi khá quan trọng
▪ Ví dụ:
cout << "hello!!!"; // in chuỗi “hello!!!”
cout << abc; // in ra giá trị của abc
cout << 5+6; // tính giá trị 5+6 và in ra
cout << "A = " << a; // in “A = ”, sau đó in giá trị a
cout << endl; // chuyển con trỏ xuống dòng mới
cout << endl << endl; // chuyển con trỏ xuống 2 dòng
Trang 75số liệu có thể gây lỗi
▪ Rất cẩn thận khi nhập nhiều dữ liệu cùng một lúc
▪ Ví dụ:
cin >> a; // nhập dữ liệu vào biến a
cin >> a >> b; // nhập dữ liệu vào a và tiếp vào b
Trang 76Bài tập
Phần 5
Trang 77Bài tập (1/3)
1 Viết hàm gioithieu in ra màn hình dòng chữ “Toi la sinh
vien DHTL” trên một dòng (in xong và xuống dòng) Ở
chương trình chính, hãy thực hiện lời gọi hàm này 3 lần
2.Viết hàm trungbinhcong, có 3 tham số a, b, c là các số
nguyên Hàm trả về trung bình cộng của 3 số
Viết chương trình chính nhập vào a, b, c sau đó in ra trung bình cộng bằng cách sử dụng hàm vừa viết
3.Viết hàm hinhthang, nhận 3 tham số chieucao, daylon,
daybe ứng với chiều cao, đáy lớn và đáy bé của một hình
thang Hàm trả về diện tích hình đó
Trong chương trình chính, nhập chiều cao, đáy lớn và đáy
bé rồi in ra diện tích (dùng hàm hinhthang vừa viết)