2. Hướng dẫn thực hiện đồ án
Nội dung nộp
Thực hiện các yêu cầu của phần handouts (ho01, ho02, …)
Các nội dung tự nghiên cứu – bài tập (nếu có)
Hình thức nộp
Sử dụng MS. Word để soạn thảo báo cáo – lưu trữ trên 1 file
(.doc)
Tên file: Nhom01-bt01.doc, Nhom02-bt01.docx, ….
Nộp online tại trang ACeLS – phần Assignments
Lưu ý: Thời hạn yêu cầu nộp bài
2
3. TRÌNH BÀY MỘT ĐỒ ÁN
TRANG BÌA ĐẠI HỌC SƯ PHẠM TP.HỒ CHÍ MINH
Khoa CÔNG NGHỆ THÔNG TIN
MỤC LỤC Học phần LẬP TRÌNH CƠ BẢN
Câu 1 -……………
1.1. ………………
1.2. ………………
Câu 2 - ……………
2.1. ……………………
2.1.1. …………………
2.2.2. ………………… ĐỒ ÁN 01
2.2. ……………………… (Nhom01-bt01.doc)
…………………………
TÀI LIỆU THAM KHẢO Nội dung trình bày:
PHỤ LỤC 1...
2…
Người hướng dẫn: Ths. Lê Đức Long
Xem thêm hướng dẫn trình bày Sinh viên thực hiện:
trong file Hinh thuc bao cao.doc 1. Nguyễn Tấn Đạt – 01.020.085
2. Đỗ Duy Thiện – 01.020.204
Lớp : Tin – K1
3
4. Trường Đại Học Sư Phạm Tp.HCM
Khoa Công Nghệ Thông Tin
Bộ môn Kỹ thuật dạy học
Lập trình cơ bản
Introduction to Programming (using C/Pascal)
Lê Đức Long
02/2012
Link for Materials: http://www.2learner.edu.vn/ldlongdhsp/Intro2Programming
5. Một số quy ước trên slide
Tắt màn hình máy tính
Được dùng máy tính
Làm việc theo nhóm
Ghi chép bằng văn bản
TỰ NGHIÊN CỨU- ĐỌC THÊM
5
10. Tính chất cơ bản thuật toán
Xác định: rõ ràng, không mập mờ và các bước
giải khả thi có thể thực thi được
Mập mờ: thiếu thông tin hoặc có nhiều chọn lựa
nhưng không đủ điều kiện để quyết định
Thực thi được: xét trong điều kiện hiện tại của bài toán
Hữu hạn: số bước là hữu hạn và có tính chất
dừng dễ bị vi phạm nhất
Sau một thời gian thi hành hữu hạn thì phải cho kết
quả mong muốn
Đúng: với mọi trường hợp của bài toán
Tính chất khó đạt nhất
10
11. Các đặc trưng khác của thuật toán
Đầu vào và đầu ra (Input/Output) : mọi thuật
toán đều nhận dữ liệu đầu vào, xử lý nó và
cho ra kết quả cuối cùng.
Tính hiệu quả (Effectiveness) : dựa trên khối
lượng tính toán, không gian và thời gian khi
thuật toán được thi hành. Là yếu tố quyết
định để đánh giá, chọn lựa cách giải quyết
vấn đề – bài toán trên thực tế.
Tính tổng quát (Generalliness): áp dụng
được cho mọi trường hợp của bài toán.
11
12. Biểu diễn thuật toán
Cách 1: Dùng ngôn ngữ tự nhiên
Cách 2: Dùng lưu đồ / Vẽ sơ đồ khối
Cách 3: Dùng mã giả
12
14. Từ mã nguồn …. đến mã thực thi ?
Những câu lệnh/chỉ thị do người lập trình .c/.cpp; .pas; .java
Mã nguồn viết được lưu thành tập tin dạng văn bản
(tuân thủ cú pháp của một NNLT cấp cao)
Loại bỏ những khoảng Quá trình chuyển từ tập tin
Tiền xử lý
trắng thừa, chú thích, … nguồn sang tập tin thực thi
Mã nguồn đã
được làm sạch Biên dịch Biên dịch ra mã thực thi (tức mã máy)
Liên kết với các thư
viện để tạo file thực thi
Mã thực thi
Mã thực thi Liên kết hoàn chỉnh
Tập tin dạng mã máy
(.com; .exe) 14
15. Các bước xây dựng chương trình
BÀI TOÁN CHƯƠNG TRÌNH
Xác định
bài toán Kiểm thử
Làm rõ các yêu Xây dựng bộ dữ
cầu của bài toán liệu thử nghiệm
Phân tích
bài toán
Cài đặt
Mô tả các thành phần
của chương trình (dữ Thiết kế Lập trình để tạo chương
liệu và xử lý) trình nguồn bằng một
chương trình
NNLT cụ thể
Tổ chức đơn vị dữ
liệu, đơn vị xử lý 15
18. Tập kí tự dùng trong NNLT bậc cao
Ngôn ngữ C được xây dựng trên bộ ký tự
sau:
26 chữ cái hoa A B C .. Z
26 chữ cái thường a b c .. z
10 chữ số 0 1 2 .. 9
Các ký hiệu toán học +-*/=()
Ký tự gạch nối _
Các ký tự khác . , : ; [ ] {} ! & % # $ ...
Dấu cách (space) dùng để tách các từ.
Ví dụ: tiếng VIET NAM có 8 ký tự, còn VIETNAM chỉ có 7 ký tự.
Tập kí tự dùng trong NNLT Pascal thì sao ???
18
19. BIẾN (VARIABLE)
Biến là nơi lưu trữ giá trị – số nguyên, số thực, kí tự, ….
Một biến chỉ có thể lưu được một loại giá trị nhất định kiểu dữ liệu của biến
Giá trị mà biến đang lưu trữ có thể bị thay đổi nhiều lần trong quá trình chương
trình thi hành
Một biến bất kì trong máy tính có 3 thuộc tính:
Tên biến (được đặt tên do người lập trình – gọi là định danh – indentifier)
Kiểu dữ liệu của biến
Giá trị hiện tại mà biến đang lưu trữ
Biến cần phải được khai báo (định nghĩa) trước khi sử dụng
Ví dụ: STT 50 Biến có tên STT, kiểu số nguyên, đang lưu trữ giá trị là 50
DiemTB 7.8 Biến có tên DiemTB, kiểu số thực, đang lưu trữ giá trị là 7.8
TenSV “Long” Biến có tên TenSV, kiểu chuỗi kí tự, đang lưu trữ một dòng chữ
o Ý nghĩa của biến chỉ được hiểu bởi con người, kô có nghĩa với PC;
o Tên biến cần gợi nhớ và thống nhất;
o Tên biến phải hợp lệ – tuân thủ theo quy ước của NNLT.
19
20. KIỂU DỮ LIỆU (DATA TYPE)
Trong NNLT, loại giá trị mà biến lưu trữ được
phân thành những kiểu dữ liệu khác nhau
Thông thường, trong một NNLT có các kiểu
dữ liệu cơ sở sau:
Kiểu dữ liệu số: gồm có 2 loại
• Kiểu dữ liệu số nguyên
• Kiểu dữ liệu số thực
Kiểu luận lý (logic)
Kiểu kí tự
Kiểu chuỗi kí tự
Mỗi kiểu dữ liệu có 1 miền giá trị khác nhau
20
21. Kiểu số nguyên
Có nhiều kiểu số nguyên Reading(*)
Tuỳ vào độ lớn của miền giá trị, có:
Số nguyên 8 bit ( 1 byte) -128 0 127
• Loại có dấu: -128 → 127 0 255
• Loại không dấu: 0 → 255
Số nguyên 16 bit (2 byte)
• Loại có dấu: - 32,768 → 32,767
• Loại không dấu: 0 → 65,535
Số nguyên 32 bit (4 byte)
• Loại có dấu: -2,147,483,648 → 2,147,483,647
• Loại không dấu: 0 → 4,294,967,295
Một số ngôn ngữ lập trình còn hỗ trợ kiểu số nguyên 64 bit, 128 bit
Kiểu số nguyên k bit sẽ chiếm bộ nhớ k bit dữ liệu
(*) Lê Đức Long (2005), GT Tin học đại cương ĐHSP – Phần Mã hoá và Biểu diễn dữ liệu trong máy tính
21
22. Kiểu số thực
Có 2 dạng số thực thường gặp
Reading(*)
Số thực 32 bit (4 byte)
• Miền giá trị: trong khoảng ± 3.4E-38 đến ± 3.4E+38
• Có 8 chữ số có nghĩa sau dấu phẩy
Số thực 64 bit (8 byte)
• Miền giá trị: trong khoảng ± 1.7E-308 đến ± 1.7E+308
• Có 16 chữ số có nghĩa sau dấu phẩy
Một số ngôn ngữ lập trình còn hỗ trợ số thực 80 bit (10 byte)
Loại Pascal Miền giá trị C Miền giá trị
32 bit real 2.9x10-39…3.4x1039 float 3.4x10-38…3.4x1038
64 bit double 5.0x10-324…1.7x10308 double 1.7x10-308…1.7x10308
(*) Lê Đức Long (2005), GT Tin học đại cương ĐHSP – Phần Mã hoá và Biểu diễn dữ liệu trong máy tính
22
23. Các kiểu dữ liệu khác …
Kiểu luận lý (logic): chỉ nhận 1 trong 2 giá trị -True (1) hoặc False (0)
Kiểu kí tự: dùng để lưu trữ dữ liệu ở dạng một kí tự - là một trong các ký
hiệu của bảng mã ASCII, chiếm 1 byte bộ nhớ (một số NNLT cho phép lưu trữ kí
tự mã Unicode chiếm 2 byte bộ nhớ)
Kiểu chuỗi kí tự: dùng để lưu trữ một chuỗi kí tự
Loại Pascal Miền giá trị C Miền giá trị
Logic boolean true / false int 1/0
Kí tự char 256 kí tự char 256 kí tự
Chuỗi string[n] n kí tự, mỗi kí tự 1 byte char[n] n kí tự, mỗi kí tự 1 byte
o Mọi kiểu dữ liệu dạng số đều hữu hạn và rời rạc;
o Hiều biết cách biểu diễn số nguyên, số thực trong máy tính;
o Chọn lựa kiểu dữ liệu của biến sao cho phù hợp.
23
24. The standard keywords
TỪ KHÓA DÀNH CHO NGÔN NGỮ C/C++
auto extern sizeof
break float static
case for struct
char goto switch
const if typedef
continue int union
default long unsigned
do register void
double return volatile
else short while
enum signed
CẦN PHÂN BIỆT GIỮA THUẬT NGỮ TỪ KHÓA (KEYWORD)
VỚI ĐỊNH DANH (IDENTIFIER)
24
25. HẰNG (CONSTANT)
Hằng trong chương trình là một giá trị không đổi trong suốt quá trình thi hành
Mục đích của hằng là giúp cho chương trình dễ hiểu hơn, hoặc điều chỉnh
chương trình dễ dàng hơn
Hằng phải được khai báo trước khi sử dụng
Hằng gồm 2 thành phần: tên hằng và giá trị gán cho hằng
Có các loại hằng sau:
o Hằng số: hằng nguyên, hằng thực – Vd: 2, -8, 30, 2.5, -2.0, 1E-3, …
o Hằng bool: có 2 giá trị là true và false
o Hằng kí tự: có 2 dạng biểu diễn sau
Đặt kí tự trong dấu nháy đơn
Dùng mã ASCII
o Pascal: #d (d là mã ASCII ở dạng thập phân)
o C: xFF (FF là mã ASCII ở dạng hexa)
o Hằng chuỗi kí tự
Pascal, đặt chuỗi kí tự trong dấu nháy đơn – Vd: ‘Duc Long’
C, đặt chuỗi kí tự trong dấu nháy kép – Vd: “Duc Long”
25
26. Tóm tắt
Programmer
End-User
Biểu diễn thông tin Vùng nhớ có cấu trúc
trong thế giới thực Biến được mô tả bởi một kiểu
dữ liệu
Số nguyên 4 Biến kiểu số nguyên có giá trị là 4
Phân số 4/3 Biến có kiểu PHANSO
Ngày 15/9/2006 Biến có kiểu Ngày
Biểu diễn loại thông Cấu trúc dữ liệu được
tin trong thế giới thực
Kiểu dữ liệu định nghĩa
Kiểu cơ sở – đã tạo sẵn dưới dạng từ khóa trong NNLT
Kiểu tự định nghĩa – kiểu do người lập trình tự tạo
26
30. LỆNH GÁN (ASSIGNMENT)
Lệnh gán dùng để thay đổi giá trị hiện thời của biến
Lệnh gán không phải là phép so sánh giữa hai biểu thức, mà là thao tác tính
kết quả biểu thức phía bên phải lệnh gán, sau đó đặt kết quả này vào biến ở
phía bên trái lệnh gán.
Lệnh gán làm thay đổi giá trị hiện thời của biến và không thể nào lấy lại được
giá trị này.
Biểu diễn bằng lưu đồ: A B
Ý nghĩa: đưa giá trị của biểu thức vế phải (B) gán vào cho biến ở vế trái (A)
Cú pháp lệnh gán <biến> := <biểu thức>; <biến> = <biểu thức>;
A ←5 A := 5; A = 5;
A←B A := B; A = B;
A←B+5 A := B + 5; A = B +5;
A←A+1 A := A + 1; A = A +1;
A ← (A + B) * C + D A := (A + B) * C + D; A = (A + B) * C + D;
Cú pháp trong C: <indentifier> = < expression> 30
31. Phép toán số học
Toán tử Pascal C
Toán tử hai ngôi
Cộng + +
Trừ - -
Nhân * *
Chia (số thực) / / 5 / 2 = 2.5
Chia (số nguyên) DIV / 5 div 2 = 2
Chia lấy phần dư MOD % 5 mod 2 = 1
Toán tử một ngôi
Toán tử đổi dấu - -
31
32. Phép toán so sánh và logic
Phép toán Pascal C
Nhỏ hơn < <
Lớn hơn > >
So sánh bằng = ==
Khác nhau <> !=
Nhỏ hơn hoặc bằng <= <=
Lớn hơn hoặc bằng >= >=
Phép not not !
Phép and and &&
Phép or or ||
Cho biết ý nghĩa: A := B; A = B; {trong ngon ngu Pascal} A = B; A == B; // trong ngon ngu C
B := (5<7) AND (7<9); {B kiểu Boolean} B = (5<7) && (7<9); // int B
x := 5; x = 5;
B := (x<1) OR (x>10); B = (x<1) || (x>10);
B := (x<1) + (x<2);
32
33. Một số hàm toán học dựng sẵn
Kiểu Kiểu
Pascal C Mô tả
tham số trả về
abs(x) abs(x) Tính trị tuyệt đối Số Cùng kiểu
exp(x) exp(x) Tính hàm ex Số Số thực
ln(x) log(x) Tính ln Số Số thực
round(x) √ Làm tròn phần nguyên Số thực Số nguyên
sqr(x) √ Bình phương Số Cùng kiểu
sqrt(x) sqrt(x) Căn bậc 2 Số Số thực
√ pow(x,y) Tính xy Số, Số Số thực
trunc(x) √ Lấy phần nguyên Số thực Số nguyên
Đọc thêm : Apendix B. B.4. B.W.Kernirghan & D.M.Ritchie (1988), The C programming language, 2nd Ed., Prentice Hall
33
34. Biểu thức toán học
Toán học Máy tính
b2 – 4ac b*b-4*a*c hoặc sqr(b)-4*a*c
− b + b − 4ac
2
((-b)+sqrt(sqr(b)-4*a*c))/(2*a)
2a
p( p − a)( p − b)( p − c) sqrt(p*(p-a)*(p-b)*(p-c))
[a 2 (b 2 + c 2 ) + 5](7c) (sqr(a)*(sqr(b)+sqr(c))+5)*(7*c)
34
35. ĐỘ ƯU TIÊN CỦA CÁC TOÁN TỬ
+ PASCAL C
Lời gọi hàm Lời gọi hàm
Biểu thức trong ( ) Biểu thức trong ( )
Toán tử NOT Toán tử NOT (!)
Toán tử đổi dấu - Toán tử đổi dấu -
*, / , DIV, MOD, AND *, / , %, +, -
+ , - , OR <, <=, >, >=
= , <> , < , > , >=, <= == , !=
&& , ||
Thứ tự tính toán biểu thức: Left Right
Nêu thứ tự thực hiện biểu thức sau: sqr(a)*(sqr(b)+sqr(c))+5)*7+c
(a+5)*b+(c/2+b)-10*a*a/2*c
Xét các biểu thức sau: B := x <1 and x>2; B = x <1 && x>2; // int B, x= 5;
Cho x:=5; B kiểu Boolean; B := (x<1) and (x>2); B = (x<1) + (x<2); // int B, x= 0;
Làm bài tập C.1, 2, 3. trong B. S. Gottfried (1996), Programming with C, 2nd Ed., SCHAUM’S Outline Series - McGRALL-HILL
35
36. Nguyên lý thứ hai !!!
Chuyển đổi quá
trình tính toán của Các cấu trúc của
bài toán chương trình
MỌI QUÁ TRÌNH TÍNH TOÁN ĐỀU CÓ THỂ MÔ TẢ VÀ THỰC HIỆN
DỰA TRÊN BA CẤU TRÚC CƠ BẢN:
CẤU TRÚC TUẦN TỰ
CẤU TRÚC RẼ NHÁNH
CẤU TRÚC LẶP
C. Bohm & G. Jacopini (1966), Flow Diagrams, Turing Machines and Languages With Only Two Formation
Rules. In Communications of ACM, Vol.9, Number 5, May 1966.
36
37. Cấu trúc tuần tự
Cấu trúc mặc định trong mọi ngôn ngữ lập trình
Các thao tác được thực hiện tuần tự từ thao tác đầu tiên đến thao
tác cuối cùng
Ví dụ: thuật toán có n bước, thì việc thi hành sẽ tiến hành tuần tự từ
bước thứ 1 đến bước thứ n
Bắt đầu
Lệnh 1
B.1 a, b,c,x
Lệnh 2 Lệnh 3
B.2 Px ß a*sqr(x)+b*x+c
Lệnh n B.3 Px
Sơ đồ khối của cấu trúc tuần tự Kết thúc
37
38. Câu lệnh nhập/xuất
Readln(arg1, arg2, …, argn) scanf(control string, arg1, arg2, …, argn)
Read(arg1, arg2, …, argn)
Lệnh Readln, sau khi gán xong cho tất cả các biến trong
danh sách, con trỏ sẽ được chuyển sang đầu hàng kế Mỗi biến phải đứng trước
tiếp. Còn lệnh read thì không chuyển. bởi 1 dấu &, nhưng với biến
Lệnh readln không tham số dùng để chờ người dùng chuỗi, mảng thì kô có.
nhấn phím Enter
Writeln(arg1, arg2, …., argn)
Write(arg1, arg2, …, argn)
Sau khi thực hiện lệnh Writeln, con trỏ sẽ được chuyển
sang đầu hàng kế tiếp - Lệnh Write thì không chuyển. printf(control string, arg1, arg2, …, argn)
Lệnh Writeln không tham số dùng để chuyển con trỏ
sang dòng kế tiếp.
Mã đặc tả Kiểu dữ liệu Tác dụng
%c char 1 KұS [ Xҩt 1 kí tự có mã ASCII tương ứng
S
%d Số nguyên 1 KұS [ Xҩt 1 số nguyên
S
%f Số thực 1 KұS [ Xҩt 1 số thực
S
%s Chuỗi kí tự 1 KұS [ Xҩt 1 chuỗi kí tự
S
Xem thêm C.4. trong B. S. Gottfried (1996), Programming with C, 2nd Ed., SCHAUM’S Outline Series - McGRALL-HILL
38
39. Quan sát và nhận xét …
Xem thêm C.4. trong B. S. Gottfried (1996), Programming with C, 2nd Ed., SCHAUM’S Outline Series - McGRALL-HILL 39
40. Tóm tắt
Programmer
End-User
Các bước thực hiện của 1 Những chỉ thị/chỉ dẫn
nghiệp vụ trong thực tế
Lệnh trong chương trình nguồn
Một nghiệp vụ trong Bao gồm các lệnh để thực hiện
thực tế Hàm xử lý trọn vẹn 1 nghiệp vụ
Hệ thống những hàm xử lý
Một tổ chức bao gồm Chương trình để chung 1 chỗ
nhiều nghiệp vụ
40
42. C.2. Các thành phần cơ bản
Một số khái niệm khác – đối với NNLT C
(không có trong Pascal)
42
43. Phép toán trên bit
Phép toán Kí hiệu Ví dụ:
int x = 5; // x = 101b
Phép AND &
int y = 4; // y = 100b
Phép OR |
Phép XOR ^ int r1 = x & y; // r1 = 100b
Bù bit ~ int r2 = x | y; // r2 = 101b
int r3 = ~x; // r3 = 010b
Dịch trái <<
int r4 = x << 3; // r4 = 101000b
Dịch phải >> int r5 = x >> 1; // r5 = 10b
43
44. Chuyển đổi kiểu dữ liệu (Type Casting)
Trường hợp 1:
Ví dụ: float f = 3.5;
int i = 2;
Biểu thức f + i thì i sẽ tự động chuyển sang kiểu float
Khi hai toán hạng trong một phép toán khác kiểu dữ liệu thì kiểu dữ
liệu thấp sẽ nâng thành kiểu dữ liệu cao
Ví dụ: float f = 3 / 2; // Kết quả sẽ là 1
float f = 3.0 / 2; // Kêt quả sẽ là 1.5
Trường hợp 2: Trong lập trình, đôi lúc cần phải chuyển từ kiểu này sang
kiểu khác (ép kiểu)
Cú pháp: (<data type>) expression
Ví dụ: float f = (float) 3 / 2; // Kết quả sẽ là 1.5
Cú pháp này sẽ chuyển số nguyên 3 thành số thực 3.0
float f = 5.5; Biểu thức ((int) f) % 2 sẽ chuyển giá trị của f thành 5 (mất phần lẻ)
int i = 7; float f = 8.5; Biểu thức (i + f) % 4 bị sai !!!!! TẠI SAO ???
Phải viết lại là ((int) (i + f) % 4
44
46. Các phép tăng/giảm 1 đơn vị
Phép tăng: ++<identifier> ; <identifier>++
Phép giảm: --<identifier> ; <identifier>--
Lưu ý:
Phép toán ++ (hay --) đứng trước tên biến sẽ thực hiện trước
Phép toán ++ (hay --) đứng sau tên biến sẽ thực hiện sau
Ví dụ:
int i = 3;
int t1 = i++; //gán t1 bằng i trước rồi mới tăng i
int t2 = ++i; //tăng i rồi mới gán cho t2
…..
i ++; // i = i + 1;
++i; // i = i + 1;
46
48. Biểu diễn số thực trong máy tính
Có 2 dạng: dạng dấu chấm tĩnh và dạng dấu chấm động
Dạng dấu chấm động được sử dụng phổ biến.
Biểu diễn dưới dạng dấu chấm động
Mọi số thực có thể được phân tích dưới dạng:
Để biểu diễn số thực, chỉ cần lưu số nguyên b, và thập phân của của số a
(cũng là số nguyên)
Với ví dụ trên, số thực 1 cần lưu 2 số nguyên là +123456789 và +3
và số thực 2 cần lưu 2 số nguyên là +28 và -2
Trong đó:
Phần định trị: phần thập phân của số a
Phần luỹ thừa: số b
48
49. Biểu diễn số thực trong máy tính
Trong máy tính, người ta chọn c = 2
Số thực k bit sẽ có m bit dùng để lưu phần định trị
và n = k-m bit dùng để lưu phần lũy thừa
Số thực k bit có giá trị tuyệt đối lớn bao nhiêu tùy
thuộc vào m bit nhiều hay ít
Số thực k bit chính xác bao nhiêu chữ số tùy thuộc
vào n bit nhiều hay ít
Số thực 32 bit dùng 8 bit cho phần lũy thừa và 24 bit cho phần
định trị
Số thực 64 bit dùng 12 bit cho phần lũy thừa và 52 bit cho phần
định trị
49