Bài giảng Cơ bản về lập trình: Máy tính, phần mềm và thiết kế chương trình được biên soạn nhằm cung cấp cho các bạn những kiến thức về tổ chức máy tính; CPU; đơn vị điều khiển; bộ nhớ; thiết bị nhập xuất; màn hình; phần mềm; phần mềm ứng dụng; hệ điều hành và một số kiến thức khác.
Trang 1Cơ bản về lập trình
Máy tính, phần mềm và thiết kế chương trình
JPC and JWD © 2002 McGraw-Hill, Inc.
Trang 2Tổ chức máy tính
CPU - central processing unit
Là nơi thi hành các tính toán, xử lý
Bộ nhớ (Memory)
Lưu trữ dữ liệu đang được xử lý bởi CPU
Thiết bị nhập (Input devices)
Cho phép người sử dụng cung cấp thông tin cho máy tínhThiết bị xuất (Output devices)
Cho phép người dùng nhận thông tin từ máy tính
Trang 3Tổ chức máy tính
Memory
CPU
InputDevices
OutputDevices
Trang 4Bộ não của máy tính
Thi hành các thao tác số học bởi Arithmetic/Logical Unit hoặc ALU
Đơn vị điều khiển định vị và thi hành các chỉ thị lệnhCác thao tác số học được thi hành sử dụng hệ số nhị phân
Trang 5Đơn vị điều khiển
Chu kỳ fetch/execute thi hành một chỉ thị
Thực hiện hành động được chỉ ra bởi chỉ thị được gọi là
thi hành chỉ thị
The program counter (PC) (bộ đếm chương trình) lưu trữ địa chỉ của chỉ thị kế tiếp
Fetch the instruction towhich the PC points
Increment the PC
Execute the fetched
instruction
Trang 6Bộ nhớ
Còn gọi là bộ nhớ chính (main memory)Nơi chứa dữ liệu để chạy chương trình
Dữ liệu chứa trong bộ nhớ chính có thể chia làm 2 phần:
Dữ liệu thật sự: do người dùng nhập vào, do việc tính toán
Đoạn mã của chương trình
Bộ nhớ = tập hợp các ô nhớ, mỗi ô nhớ 1 byte Mỗi ô nhớ có một vị trí để định vị hay còn gọi là địa chỉ
Trang 7Là các thiết bị bổ trợ cho phép máy tính thực hiện một số tác vụ
cụ thể nào đó:
Nhận thông tin để xử lý
Trả về kết quả của việc xử lý
Lưu thông tinCác thiết bị nhập xuất thông dụng
Một vài thiết bị vừa đóng vai trò nhập vừa đóng vai trò xuất
Thiết bị nhập xuất
Trang 8Màn hình
Thiết bị hiển thị hoạt động như ti vi
CRT (cathode ray tube)Điều khiển bởi một thiết bị xuất gọi là card đồ họa (graphics card)
Vùng hiển thị được
Độ phân giải
Màu sắc
1280 pixels across screen
1024 pixels down screen
Trang 9 Hệ điều hành (Operating systems)
Hệ thống chuyển (Translation systems)
Phần mềm
Trang 10Phần mềm ứng dụng giúp máy tính trở nên không thể thiếu và phổ biến
Trang 11Ví dụ
Windows®, UNIX®, Mac OS X®
Điều khiển và quản lý các tài nguyên
Những dịch vụ quan trọng mà hệ điều hành cung cấp
Hệ thống file
Directories, folders, files
Các lệnh thao tác trên hệ thống file
Sort, delete, copy
Khả năng thi hành thao tác nhập xuất trên nhiều loại thiết bị khác nhau
Quản lý việc chạy các chương trình
Hệ điều hành
Trang 12Hệ thống chuyển
Một tập các chương trình để phát triển các chương trình khácHạt nhân là một thành phần gọi là trình chuyển đổi (translator)Một số loại trình chuyển đổi
Visual C++ 6.0, DevC++, Borland C++
Thi hành việc biên dịch, liên kết, và một số thao tác khác
Trang 13Các họat động lập trình
Viết mã chương trìnhBiên dịch
Liên kết với các file đã được biên dịch khác
Object files
Library modulesTải vào bộ nhớ và thi hànhQuan sát sự họat động của chương trình
Trang 14Các họat động lập trình
CompileLink
Trang 16Kỹ nghệ phần mềm
Kỹ nghệ phần mềm
Lĩnh vực của khoa học máy tính liên quan đến xây dựng các
hệ thống phần mềm lớnThách thức
Phần cứng phát triển rất nhanh trong khi phần mềm phát triển không tương xứng
Trang 18Sự tin cậy (Reliability)Tính dễ hiểu
Sự chỉnh sửa phát triển thêm trong tương lai sẽ rất khó khăn nếu phần mềm khó hiểu
Hiệu quả về mặt chi phíTính thích nghi
Hệ thống có tính thích nghi là hệ thống dễ dàng sửa chữa và mở rộng
Tính tái sử dụng
Cải thiện độ tin cậy, tính dễ bảo trì và tăng lợi nhuận
Mục đích của kỹ nghệ phần mềm
Trang 19Sự trừu tượng (Abstraction)
Lấy ra những thuộc tính cần thiết và bỏ qua những thuộc tính không cần thiết
Sự đóng gói (Encapsulation)
Che giấu và bảo vệ những thông tin nhạy cảm thông quan một giao diện
Tính module hóa (modularity)
Chia một đối tuợng thành các module nhỏ hơn để có dễ hiểu
và thao tác hơnTính hệ thống cấp bậc (hierarchy)
Sắp xếp các đối tượng dựa trên quan hệ giữa chúng
Các nguyên lý kỹ nghệ phần mềm
Trang 20Thiết kế và lập trình hướng đối tượng
Phương pháp thiết kế và lập trình hướng đối tượng hỗ trợ một
kỹ nghệ phần mềm tốt
Xúc tiến suy nghĩ theo cách mà chúng ta vẫn thường nghĩ
và tương tác với thế giới thực
Ví dụ: xem ti vi
Remote là một đối tượng vật lý với thuộc tính
Trọng lượng, kích cỡ
Có thể gởi thông điệp đến cho ti vi
Ti vi cũng là một đối tượng với nhiều thuộc tính
Trang 21Đối tượng
Một đối tượng hầu như là mọi thứ với các đặc trưng
Có tên
Có các thuộc tính
Có khả năng phản ứng lại các thông điệp nhận được
Một số thông điệp cơ bản
Thi hành một hành động
Yêu cầu thay đổi một thuộc tính
Trang 22Lập trình C++ căn bản
JPC and JWD © 2002 McGraw-Hill, Inc.
Trang 23// Program: Display greetings // Author(s): Ima Programmer // Date: 1/24/2001
#include <iostream>
int main() { std::cout << "Hello world!" <<
Trang 24// Program: Display greetings // Author(s): Ima Programmer // Date: 1/24/2001
#include <iostream.h>
int main() { cout << "Hello world!" << endl;
Trang 25// Program: Display greetings // Author(s): Ima Programmer // Date: 1/24/2001
#include <iostream>
#include <string>
using namespace std;
int main() { cout << "Hello world!" << endl;
Trang 26Greeting Output
Trang 27Khai báoĐọc dữ liệu
Khai báo có khởI tạo
Area.cpp
#include <iostream>
using namespace std;
int main() {
// Extract length and width
cout << "Rectangle dimensions: ";
float Length;
float Width;
cin >> Length >> Width;
// Compute and insert the area
float Area = Length * Width;
cout << "Area = " << Area << " = Length "
<< Length << " * Width " << Width << endl;
return 0;
}
Trang 28Visual C++ IDE with Area.cpp
Trang 29Area.cpp Output
Trang 30Chú thích
Cho phép đưa các ghi chú vào trong chương trình
Tầm quan trọng
Viết ít lần nhưng đọc nhiều lần
Chương trình phảI dễ hiểu để có thể dễ dàng bảo trì và nâng cấp
C++ có hai dạng chú thích
// chú thích 1 dòng (nên dùng)
/* chú thích nhiều dòng */ (dùng khi debug)
Các chú thích thường có
Mô tả chương trình và tác giả
Ghi nhận các thay đổI của chương trình
Trang 31Các đối tượng cơ bản của C++
C++ cung cấp nhiều kiểu đối tượng đựơc nạp sẵn (built-in) Các kiểu đối tượng cơ bản được chia làm 4 loại chính:
Đối tượng số nguyên
Trang 32Kiểu đối tượng số nguyên
Kiểu số nguyên cơ bản là int
Kích thước của số nguyên phụ thuộc vào phần cứng và trình biên dịch
Thường là 16 bits = 2 bytes (hoặc 32 bits = 4 bytes)Các kiểu số nguyên khác:
short: kích thước ít hơn số nguyên (1 byte)
long: kích thước nhiều hơn số nguyên (4 bytes)
Nhiều kiểu số nguyên cho phép lập trình viên sử dụng bộ nhớ hiệu quả
Các phép toán: +, -, *, /, %, >, <, ==, >=, <=
Trang 33Kiểu đối tượng kí tự
Kiểu kí tự liên quan mật thiết với kiểu số nguyênCác kí tự được mã hóa bằng một mô hình tương ứng mỗi kí tự với một số nguyên duy nhất
Bảng mã ASCII
Ví dụ:
' ' tương ứng 32 '+' tương ứng 43
'A' tương ứng 65 'Z' tương ứng 90
'a' tương ứng 97 'z' tương ứng 122
Trang 35 \t là mã dấu Tab \n là mã dấu xuống dòng
\\ là mã dấu \ \' là mã dấu nháy đơn
\" là mã dấu nháy kép
Ví dụ: '\t' là kí tự Tab, '\n‘ là kí tự xuống dòng
Trang 36Hằng chuỗi kí tự
Một chuỗI kí tự hợp lệ là một dãy các kí tự được bao bọc bởI dấu nháy kép Chuỗi không có kí tự được gọI là chuỗi rỗng
“Day la chuoi ki tu"
“Chuoi nay se xuong dong\n"
""
Là chuỗi kí tự dạng cũ do C cung cấp, C++ cung cấp kiểu đối
tượng chuỗi là string
Trang 37Kiểu đối tượng số thực
C++ cung cấp ba kiểu số thực
float
double
long double
Trang 38Các hằng số thực
Phần nguyên và phần thực ngăn cách bởi dấu chấm (.)
134.1230.15
Mặc định của các hằng số thực là kiểu double
Trang 39Kiểu lôgic
Là kiểu thể hiện giá trị đúng sai
Có hai giá trị: true hoặc falseCác phép toán:
&& phép AND (và)
|| phép OR (hoặc)
! phép NOT (phủ định)
Trang 40Kiểu tên-biến;
Kiểu tên-biến1, tên-biến2, ;
Trang 41Các tên
Một tên hợp lệ là một dãy của các
Chữ (hoa và thường)
Số
Một tên không được bắt đầu bởi số
Dấu nối dưới
Không nên bắt đầu bằng dấu nối dướiCác tên có phân biệt chữ hoa và chữ thường
Bien1 khác với BIEN1
Có hai loại tên
Từ khóa (keyword)
Các định danh (biến, tên hàm,…) (identifier)
Trang 42Từ khóa
Dành riêng cho ngôn ngữ
int, return, float, double
Không được dùng cho mục đích đặt tên
Trang 44Phạm vi của biến
Phạm vi của biến là vùng mà biến có thể được sử dụng
Bắt đầu tại câu lệnh khai báo biến
Kết thúc tại dấu đóng khối của khối gần nhất chứa nóBiến cục bộ: Khai báo trong hàm (main)
Biến toàn cục: khai báo ngoài hàm (main)
Trang 45Các thành phần của một đối tượng (biến)
Thành phần:
Miền giá trị của biến: kiểu
Tên biến: theo qui tắc đặt tên
Giá trị của biến Miền giá trị và tên biến không thay đổi, còn giá trị có thể thay đổi (thế nào là biến???)
Thao tác trên biến là thao tác trên giá trị của biến, chứ không phải trên tên của biến hoặc kiểu của biến
Trang 46ĐốI tượng được định nghĩa
có thể mang giá trị rác (giá trị không xác định được)
Trang 50Toán tử và độ ưu tiên
Trang 51Toán tử và độ ưu tiên
Ví dụ
20 - 4 / 5 * 2 + 3 * 5 % 4
(4 / 5) ((4 / 5) * 2) ((4 / 5) * 2) (3 * 5) ((4 / 5) * 2) ((3 * 5) % 4) (20 -((4 / 5) * 2)) ((3 * 5) % 4) (20 -((4 / 5) * 2)) + ((3 * 5) % 4)
Trang 52Định nghĩa và khởi tạo
Nếu chỉ định nghĩa thì giá trị của đối tượng không xác định được
Nên xác lập giá trị ngay lúc định nghĩa nếu được
Những đối tượng sẽ nhập thì không cần
Trang 53Ví dụ
char Loại = 'A';
float DiemTrungBinh = 5.0;
Trang 54Thay đổi giá trị của đối tượng Toán tử và biểu thức
JPC and JWD © 2002 McGraw-Hill, Inc.
Trang 55 Tính toán biểu thức trước (lượng giá biểu thức)
Giá trị biểu thức được đưa vào đối tượng
Giá trị sẽ được gán vào đối tượng
Trang 56NewStudents OldStudents
27 TotalStudents
Trang 5727 TotalStudents
Trang 58NewStudents OldStudents
27 TotalStudents
Trang 59Ví dụ
Trang 60Ví dụ
int Value1 = 10;
int Value2 = 20;
10 20 Value1
Value2
Trang 61Value1 Value2
10 Hold
Trang 62Value1 Value2
10 Hold
Trang 63Value1 Value2
10 Hold
Trang 6410 Hold
Trang 65Value1 Value2
10 Hold
Trang 66Ví dụ tăng
Trang 67Ví dụ tăng
int i = 1;
i = i + 1;
Gán giá trị của biểu thức i + 1 vào i
Lượng giá được kết quả 2
2 i
Trang 68Định nghĩa const
Từ khóa const để chỉ ra đốI tượng không thể thay đổi giá trị
sau khi định nghĩa và khởi tạo
Đối tượng chỉ đọc
Dùng cho các đối tượng không có nhu cầu thay đổi giá trị hoặc không được thay đổi giá trị
const float Pi = 3.1415;
const int SampleSize = 100;
Const int DiemTrungBinh = 5.0;
Dễ quản lý, thay đổi các hằng số
Trang 70Toán tử tăng giảm
Là hai toán tử một ngôi dùng để tăng , giảm một đơn vị trên đối tượng số nguyên
Ví dụ
int k = 4;
++k; // k = 5 k++; // k = 6
Trang 71cout << a << b;
return 0;
}
Trang 72Câu lệnh điều kiện If
Cơ chế cho phép một nhóm lệnh có được thi hành hay không.
JPC and JWD © 2002 McGraw-Hill, Inc.
Trang 73Kiểu lôgic
Kiểu bool Kiểu bool có hai giá trị
Trang 77Độ ưu tiên toán tử
Độ ưu tiên toán tử từ cao xuống thấp
Trang 78Cấu trúc điều kiện
Cấu trúc if đầy đủ if … else …
Cấu trúc if lồng nhau if … else … if …
Câu lệnh switch … case
Trang 80Ví dụ
Viết chương trình nhập vào một số nguyên và in ra trị tuyệt đối của số đó (không được sử dụng hàm abs của thư viện cmath).Phân tích:
Hành động 1: nhập vào một số nguyên
Điều kiện: không có
Hành động 2: Chuyển thành số không âm
Điều kiện: số nhập vào là số âm
Hành động 3: Xuất trị tuyệt đối
Điều kiện: không có
Trang 81Is our number negative?
If Value is not less than zero then our number is fine as is
If Value is less than
zero then we need to
update its value to
that of its additive
inverse
Our number is now definitely nonnegative
Trang 82Ví dụ
Viết chương trình nhập vào 2 số nguyên và sắp xếp hai số đó theo thứ
tự tăng dần
Phân tích
Gọi số thứ nhất là value1 Gọi số thứ hai là value2.
Hành động 1: Nhập vào value1 và value2 (2 số nguyên)
Điều kiện: không có
Hành động 2: Đổi chỗ 2 số cho nhau t = value1; value1 = value2; value2= t;
Điều kiện 2: Nếu số thứ nhất lớn hơn số thứ hai value1 > value2
Hành động 3: Xuất hai số ra cout << value1 << value2;
Điều kiện: không có
Trang 84Giải thích
value2 < value1
int rememberValue1 = value1
value1 = value2 value2 = rememberValue1
The numbers are in
order
Trang 85Cho biết kết quả đoạn lệnh sau?
Trang 86ngược lại thi hành hành động 2.
Trang 88larger than Value1 In
this case, Max is set
to Value2
No, its not So Value1
is at least as large asValue2 In this case,Max is set to Value1
Either case, Max is set
correctly
Trang 89Cấu trúc if lồng nhau
Nếu trong hành động của phần if hoặc else lại chứa câu lệnh
if else thì ta có cấu trúc if lồng nhau
Ví dụ: Giải phương trình bậc nhất dạng Ax + B = 0
Trang 90Chọn lựa: cấu trúc if lồng nhau
Cú pháp:
If (Điều kiện 1) Hành động 1 else if (Điều kiện 2) Hành động 2 else If …
… else Hành động n Trường hợp sử dụng:
Có nhiều hơn 2 hành động
Một trong các hành động đó xảy ra Nếu có n hành động thì có n-1 câu lệnh if
Trang 92Cấu trúc lựa chọn switch
Trang 93Cấu trúc lựa chọn switch (tt)
Trang 94Không break
Trang 95Ví dụ về switch
switch (ch) {
case 'a': case 'A':
case 'e': case 'E':
case 'i': case 'I':
case 'o': case 'O':
case 'u': case 'U':
cout << ch << " là nguyên âm" << endl;
Trang 96cout << “Nhập vào biểu thức: ";
int Left;
int Right;
char Operator;
cin >> Left >> Operator >> Right;
cout << Left << " " << Operator << " " << Right << " = ";
switch (Operator) {
case '+' : cout << Left + Right << endl; break; case '-' : cout << Left - Right << endl; break; case '*' : cout << Left * Right << endl; break; case '/' : cout << Left / Right << endl; break; default: cout << “Không hợp lệ" << endl;
}
Trang 98Viết chương trình nhập vào điểm thi môn Toán của 5 học sinh rồi tính điểm trung bình thi môn Toán của 5 học sinh đó.
Phân tích:
Điểm trung bình = tổng điểm / số học sinh Không cần phải lưu điểm của từng học sinh, chỉ cần lưu tổng điểm.
Ví dụ cấu trúc lặp
Trang 99Tính tổng điểm cho 5 học sinh
double TongDiem = 0, diem;
Trang 100Ví dụ cấu trúc lặp
Tính tổng điểm cho 50 sinh viên
Đoạn mã lặp lại 50 lần (!!!)Tính tổng điểm cho số sinh viên không biết trước ???
Không thể vì kích thước đoạn mã chương trình phải cố định
Trang 102Hành động được thi hành lặp đi lặp lại cho đến khi biểu thức lôgic mang giá trị false
Nếu hành động lặp có nhiều hơn 1 câu lệnh thì phải đặt trong khối {}
Trang 103Sơ đồ khối lệnh while
Expression
Action
true false
Expression isevaluated at thestart of eachiteration of the
Trang 104Ví dụ tính điểm trung bình
Gọi SoHocSinh là số học sinh cần tính điểm trung bình.
Gọi Tong là tổng điểm hiện tại Ban đầu tổng điểm = 0.
Gọi diem là điểm môn Toán của học sinh (không cần lưu) Gọi Dem là số học sinh đã nhập điểm Ban đầu số hs đã nhập = 0 Hành động:
Nhập điểm môn Toán của học sinh
Cộng điểm mới vào tổng điểm hiện tại
Tăng số học sinh đã nhập điểm Điều kiện lặp
Số học sinh đã nhập điểm nhỏ số học sinh cần tính điểm trung bình.
Hai hành động tính điểm trung bình và xuất điểm trung bình tầm thường không xét
Trang 105Tính điểm trung bình của lớp
double DiemTrungBinh = Tong / Dem ;
cout << “Điểm trung bình: " << DiemTrungBinh << endl;
Trang 106double DiemTrungBinh = Tong / Dem ;
cout << “Điểm trung bình: " << DiemTrungBinh << endl;
Giả sử nhập vào: 1 5 3 1 6
SoHocSinh 4
Trang 107double DiemTrungBinh = Tong / Dem ;
cout << “Điểm trung bình: " << DiemTrungBinh << endl;
Trang 108double DiemTrungBinh = Tong / Dem ;
cout << “Điểm trung bình: " << DiemTrungBinh << endl;
Dem Tong
Giả sử nhập vào: 1 5 3 1 6
4
SoHocSinh
00