1
LẬP TRÌNH CĂN BẢN
GIỚI THIỆU VỀ CẤU TRÚC DỮ
LIỆU VÀGIẢI THUẬT
2
Nộidung
1. Từ bài toán đến chương trình
2. Giải thuật
l Kiểudữliệu
l Khái niệm về ngôn ngữ lập trình
l Chương trình dịch
3
1.Từ BàiToán ĐếnChươngTrình
l Cácbướcgiảibàitoánbằngmáytính
l Môtảcácbướcgiảibàitoán
l Vẽ sơđồ xử lý
l Viếtchươngtrìnhxửlýbằngngônngữ giả
l Chọnngônngữ lậptrìnhvàchuyểnchương
trìnhtừngônngữ giả sang ngônngữ lập
trình
l Thựchiệnchươngtrình: nhậpvàocáctham
số, nhậnkếtquả
4
2. GiảiThuật
l Kháiniệmgiảithuật
l Các đặctrưngcủagiảithuật
l Ngônngữ biểudiễngiảithuật
l Mộtsốgiảithuậtcơbản
lCáccấutrúcsuyluậncơbảncủagiải
thuật
l Từ giảithuật đếnchươngtrình
5
KháiNiệmGiảiThuật
l Vídụ:Hoán đổichấtlỏngtrong2 bìnhA (nước
mắm) vàB (rượu):
l Yêucầuphảicóthêmmộtbìnhthứ bagọilàbìnhC.
l Bước1: Đổ rượutừbìnhBsang bìnhC.
l Bước2: Đổ nướcmắmtừbìnhAsang bìnhB.
l Bước3: Đổ rượutừbìnhC sang bìnhA.
l “Giải thuật làmột dãy các thao tác trên những dữ
liệu vào sao cho sau một hữu hạn bước ta thu
được kết quả của bài toán”.
6
Các ĐặcTrưngCủaGiảiThuật
l Tínhkếtthúc
l Số bướclàhữuhạn
lTínhxác định
l Máyphảithựchiện được
l Chocùngkếtquả trêncácmáykhácnhau
l Tínhphổ dụng
l Tínhhiệuquả
l Thờigian
l Tàinguyênmáy
7
NgônNgữ BiểuDiễnGiảiThuật
l Ngônngữ tự nhiên
l Ngônngữ sơđồ
l Ngônngữ giả
8
NgônNgữ Tự Nhiên
l Làngônngữ củachúngta
l Vídụ:Giảithuậtgiảiphươngtrìnhbậcnhất
ax+b=0.
Bước1: Nhậngiátrị của các tham số a, b.
Bước2: Xétgiátrị của a xem cóbằng0haykhông?
Nếua=0thìlàm bước3,nếuakhác không thì
làm bước4.
Bước3: (abằng0)Nếubbằng0 =>pt vô số nghiệm.
Nếu bkhác0=> pt vô nghiệm.
Bước4:( akhác0) Takết luận phương trình có
nghiệm x=-b/a.
9
NgônNgữ Sơ Đồ (1)
l Môtảgiảithuậtbằngcácsơđồ hìnhkhối đã
đượcquy ướctrước
10
NgônNgữ Sơ Đồ (2)
l Vídụ:Dùnglưuđồđể biểudiễngiảithuậttìm
USCLNnhư sau:
11
NgônNgữ Giả
l Làmộtsựkếthợpgiữa ngônngữ tự nhiên với
cáccấutrúc câulệnhcủamộtngônngữ lập
trình.
l Vídụ: Giảithuậtgiảiphươngtrìnhbậcnhất
ax+b=0.
l Nhậpvàoa, b
l If a==0 then
If b==0 then
Kếtluậnphươngtrìnhvôsốnghiệm
else
Kếtluậnphươngtrìnhvônghiệm
else
Kếtluậnphươngtrìnhcónghiệmx=-b/a
12
MộtSốGiảiThuật Cơ Bản(1)
l Vídụ1: Yêucầu:
l Nhậpvào1 dãyn
số hạnga
1
, a
2
, , a
n
l TínhtổngS:
S= a
1
+ a
2
+ a
3
+
+ a
n
l In S ramànhình
13
MộtSốGiảiThuật Cơ Bản(2)
l Vídụ2: Yêu
cầu:
l Nhậpvào2
số a vàb là
2 hệ số của
pt: ax+b=0
l Chobiết
nghiệmcủa
phương
trình.
14
C
á
c
C
ấ
u
Tr
ú
c
Suy
Lu
ậ
n
Cơ
B
ả
n
CủaGiảiThuật(1)
l Giảithuật đượcthiếtkếtheo 3 cấutrúcsuyluận
cơ bản:
l Tuầntự(Sequential):
l Cáccôngviệc đượcthựchiệntuầntự, côngviệcnàynốitiếp
côngviệckia.
l Cấutrúclựachọn(Selection)
l Lựachọnmộtcôngviệc để thựchiệncăncứvàomộtđiềukiện
nào đó
l Cấutrúc1:Nếu< điềukiện> (đúng) thìthựchiện<côngviệc>
l Cấutrúc2:Nếu< điềukiện> (đúng) thìthựchiện<côngviệc
1>, ngượclại(điềukiệnsai) thìthựchiện<côngviệc2>
l Cấutrúc3: Trườnghợp< i> thựchiện<côngviệci>
15
C
á
c
C
ấ
u
Tr
ú
c
Suy
Lu
ậ
n
Cơ
B
ả
n
CủaGiảiThuật(2)
l Cấutrúclặp(Repeating)
l Lặplạithực hiện mộtcôngviệc không hoặc
nhiềulầncăncứvàomộtđiềukiệnnào đó.
l Có2 dạng như sau:
l Lặpvới số lần xác định
l Lặpvới số lần khôngxác định
16
Từ GiảiThuật ĐếnChươngTrình
l Cả 2 đềulà tậpcácchỉ thị (instruction) –làm
thế nào để giảiquyết1 côngviệc(task).
l Giảithuật
l Nóichuyệnvớicon người, dễ hiểu.
l Dùngngônngữđơngiản(English) –khôngviết
bằngmã.
l Chươngtrình
l Nóichuyệnvớimáytính.
l Cóthểđượcxemnhư 1 diễntảhìnhthức(formal
expression) của1 giảithuật.
17
3. KiểuDữLiệu
l Vídụ:
int x,y;
float r=3.25;
l “Kiểudữliệulàmộttậphợpcácgiátrị cócùng
mộttínhchất và tậphợpcácphéptoán thao
táctrêncácgiátrịđó”.
l Có2 loại
l Kiểudữliệu sơ cấp
l Kiểudữliệu cócấutrúc
18
KiểuDữLiệu Sơ Cấp
l “Kiểudữliệusơcấplàkiểudữliệumà
giátrị củanólà đơnnhất”.
l Vídụ:Kiểu int trong C
l làkiểu sơ cấp
l gồmcác số nguyêntừ-32768 32767
l vàcácphéptoán: +, -, *, /, %…
19
KiểuDữLiệuCóCấuTrúc
l “Kiểudữliệucócấutrúclàkiểudữliệu
màcácgiátrị củanólàsựkếthợpcủa
cácgiátrị khác”.
l Vídụ:KiểuchuỗikýtựtrongC.
l làkiểucócấutrúc.
l Vídụ: char *chuoi= “Chao cacban!”;
20
4. NgônNgữ LậpTrình
l Kháiniệmvềngônngữ lậptrình
l Chươngtrìnhdịch
21
KháiNiệmVềNgônNgữ LậpTrình
l Ngônngữ lậptrìnhlàmộtngônngữ
dùng để viếtchươngtrìnhchomáytính
l Ta cóthể chiangônngữ lậptrìnhthành
cácloạisau:
l Ngônngữ máy
l Hợpngữ
l Ngônngữ cấpcao
22
NgônNgữ Máy(machine language)
l Làcác chỉ thị dướidạng
nhị phân, can thiệptrực
tiếpvàotrongcác mạch
điệntử.
l Cóthểđược thựchiện
ngay khôngcầnqua
bướctrunggiannào.
l Tuynhiênchươngtrình
viếtbằngngônngữ máy
dễ saisót, cồngkềnhvà
khó đọc, khóhiểu vì
toànnhữngcon số 0 và
1.
3
Machine Language
10100110 01110110
00100110 00000000
11111010 11111010
01001110 10100110
11100110 10010110
11001110 00101110
10100110 01001110
11111010 01100110
01001110 10000110
etc
23
HợpNgữ
(Assembly language)
l Baogồmtênvàquytắcviết
cáccâulệnh.
l Têncáccâulệnhbaogồm
haiphần:
l Mãlệnh (English) chỉ
phéptoáncầnthựchiện
l Địachỉ chứatoánhạng
củaphéptoán đó.
l Để máythựchiện đượcmột
chươngtrìnhviếtbằng hợp
ngữ thìchươngtrình đóphải
đượcdịchsang ngônngữ
máy (Assembler).
AssemblyLanguage
INPUT a ; Nhập giátrị cho a
LOAD a ; Đọc giátrị a vào thanh ghi A
PRINT a; Hiển thị giátrị của a ra màn
hình.
INPUT b
ADD b ; Cộng giátrị của thanh ghi tổng
A
;với giátrị b
24
NgônCấpCao
(High level language )
l Rất gầnvớingônngữ con
người.
l Mộtchươngtrìnhviếtbằng
ngônngữ cấpcao đượcgọi
là chươngtrìnhnguồn
(source programs).
l Để máytính"hiểu" vàthực
hiện đượccáclệnhtrong
chươngtrìnhnguồnthìphải
cómộtchươngtrìnhdịch để
dịchchươngtrìnhnguồn
thànhdạngchươngtrình có
khả năngthựcthi.
25
5. ChươngTrìnhDịch
l Đượcdùng để chuyểnmộtchương
trìnhnguồn sang chươngtrình đích.
l Có2 dạng:
l Thôngdịch(interpreter):
l Dịchtừnglệnhmột, dịchtớiđâuthựchiệntớiđó.
l Vídụ:ngônngữ LISP.
l Biêndịch(compiler):
l Dịchtoànbộchươngtrìnhnguồnthànhchương
trình đíchrồisau đómớithựchiện.
l Vídụ:Pascal, C