BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPTMasterCode.vn
Hiểu về biến và biết cách sử dụng biến
Hiểu về cách lưu trữ dữ liệu trong bộ nhớ
Biết về các toán tử số học và thứ tự ưu tiên của chúng
Hiểu giải thuật và biết cách dùng mã giả để biều diễn
cho giải thuật
Đọc hiểu được sơ đồ UML
Biết cách sử dụng câu lệnh lựa chọn If…Then và
If…Then…Else để lựa chon giữa các hành động khác
nhau
Thiết lập các breakpoint và sử dụng cửa sổ Watch để gỡ
lỗi
Hiểu về biến và biết cách sử dụng biến
Hiểu về cách lưu trữ dữ liệu trong bộ nhớ
Biết về các toán tử số học và thứ tự ưu tiên của chúng
Hiểu giải thuật và biết cách dùng mã giả để biều diễn
cho giải thuật
Đọc hiểu được sơ đồ UML
Biết cách sử dụng câu lệnh lựa chọn If…Then và
If…Then…Else để lựa chon giữa các hành động khác
nhau
Thiết lập các breakpoint và sử dụng cửa sổ Watch để gỡ
lỗi
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTMasterCode.vn
Tìm hiểu khái niệm cấu trúc dữ liệu
Dữ liệu, Cấu trúc dữ liệu
Các kiểu cấu trúc dữ liệu
Tìm hiểu khái niệm giải thuật (thuật toán, thuật giải)
Khái niệm về giải thuật
Biểu diễn giải thuật
Độ phức tạp của giải thuật
Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
BÀI 3: Các khái niệm cơ bản trong lập trình - Giáo trình FPTMasterCode.vn
Hiểu về biến và biết cách sử dụng biến
Hiểu về cách lưu trữ dữ liệu trong bộ nhớ
Biết về các toán tử số học và thứ tự ưu tiên của chúng
Hiểu giải thuật và biết cách dùng mã giả để biều diễn
cho giải thuật
Đọc hiểu được sơ đồ UML
Biết cách sử dụng câu lệnh lựa chọn If…Then và
If…Then…Else để lựa chon giữa các hành động khác
nhau
Thiết lập các breakpoint và sử dụng cửa sổ Watch để gỡ
lỗi
Hiểu về biến và biết cách sử dụng biến
Hiểu về cách lưu trữ dữ liệu trong bộ nhớ
Biết về các toán tử số học và thứ tự ưu tiên của chúng
Hiểu giải thuật và biết cách dùng mã giả để biều diễn
cho giải thuật
Đọc hiểu được sơ đồ UML
Biết cách sử dụng câu lệnh lựa chọn If…Then và
If…Then…Else để lựa chon giữa các hành động khác
nhau
Thiết lập các breakpoint và sử dụng cửa sổ Watch để gỡ
lỗi
Bài 1: Tổng quan về cấu trúc và giải thuật - Giáo trình FPTMasterCode.vn
Tìm hiểu khái niệm cấu trúc dữ liệu
Dữ liệu, Cấu trúc dữ liệu
Các kiểu cấu trúc dữ liệu
Tìm hiểu khái niệm giải thuật (thuật toán, thuật giải)
Khái niệm về giải thuật
Biểu diễn giải thuật
Độ phức tạp của giải thuật
Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
U.S. District Court order in favor of Ironridge Global IV, Ltd.John Kirkland
Memorandum & Order of the United States District Court, Southern District of New York, denying application of NewLead Holdings Ltd. for preliminary injunction against Ironridge Global IV, Ltd. and dissolving temporary restraining order
3. Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và
Nhập vào nhiệt độ(trung bình) của mỗi ngày trong tuần, tính và
đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày
đưa ra màn hình nhiệt độ trung bình của tuần và số lượng ngày
trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
trong tuần có nhiệt độ cao hơn nhiệt độ trung bình của tuần.
Hãy xác định INPUT
và OUTPUT của bài
toán ?
Input: Nhiệt độ 7 ngày trong tuần.
Output: Nhiệt độ trung bình của tuần, số ngày có nhiệt độ
cao hơn nhiệt độ trung bình.
4. Code trang 53/54
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 7 ngay : ’);
readln(t1,t2,t3,t4,t5,t6,t7);
tb : = (t1+t2+t3+t4+t5+t6+t7)/
7;
dem : = 0 ;
if (t1>tb) then dem := dem + 1;
if (t2>tb) then dem := dem + 1;
if (t3>tb) then dem := dem + 1;
if (t4>tb) then dem := dem + 1;
if (t5>tb) then dem := dem + 1;
if (t6>tb) then dem := dem + 1;
if (t7>tb) then dem : = dem + 1;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
5. Có
real; bao nhiêu biến được khai báo
trong chường trình ?
7Các biến: t1, …,t7 thể hiện các
ngày
ực (real)nào? Kiểu của các biến đó
giá trị
thế nào?
tuần dem dùng làm gì?
Biến
7 câu lệnh IF trong chương trình
thực hiện việc gì?
gày,
hiệt
6. Xem kỹ lai nhá!
Program vd1;
Uses crt;
Var
t1,t2,t3,t4,t5,t6,t7,tb : real;
dem : integer;
BEGIN
Clrscr;
write(‘ Nhap vao nhiet do 7 ngay : ’);
readln(t1,t2,t3,t4,t5,t6,t7);
tb : = (t1+t2+t3+t4+t5+t6+t7)/
7;
dem : = 0 ;
if (t1>tb) then dem := dem + 1;
if (t2>tb) then dem := dem + 1;
if (t3>tb) then dem := dem + 1;
if (t4>tb) then dem := dem + 1;
if (t5>tb) then dem := dem + 1;
if (t6>tb) then dem := dem + 1;
if (t7>tb) then dem : = dem + 1;
W
riteln(‘ Nhiet do trung binh trong tuan = ‘,tb : 6 : 2);
W
riteln(‘ so ngay co nhiet do cao hon nhiet do tb ‘, dem);
R
eadln;
END.
7. Vậy khi nếu muốn tính
Vậy khi nếu muốn tính
bài toán trên với N ngày
bài toán trên với N ngày
lớn( N=366) thì sẽ gặp
lớn( N=366) thì sẽ gặp
khó khăn gì ?
khó khăn gì ?
8. Khái Niệm:
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu ,,
Mảng một chiều là dãy hữu hạn các phần tử cùng kiểu
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
mảng được đặt tên và mỗi phần tử được mang một chỉ số.
Ví Dụ : Nhập Nhiệt Độ 7 Ngày trong tuần
A
15
15
20
20
28
28
22
22
17
17
30
30
25
25
Trong đó:
Tên mảng : A
Số phần tử của mảng : 7
Kiểu dữ liệu của các phần tử : Kiểu Nguyên
Khi tham chiếu đến một phần tử thứ i ta viết :A[i]
Ví Dụ : A[4]=22
9. Khái Niệm:
Để mô tả mảng 1 chiều ta cần xác dịnh kiểu của
các phần tử và cách đánh số của các phần tử đó
Với mảng một chiều ta cần quan tâm:
• Tên kiểu mảng một chiều.
• Số lượng phần tử.
• Kiểu dữ liệu của phần tử.
• Cách khai báo biến mảng.
• Cách tham chiếu đến phần tử.
10. Khai Báo
Khai báo kiểu mảng một chiều:
type
<Tên kiểu mảng >= array[<kiểu chỉ số>] of <kiểu phần tử>;
Trong đó:
Array là từ khóa để khai báo báo mảng
type: là từ khoá được dùng khi định nghĩa kiểu dữ liệu
mới.
<Tên kiểu mảng>: là tên của kiểu mảng do chúng ta tự
đặt (lưu ý: theo qui tắc đặt tên biến trong Pascal)
<Kiểu chỉ số>: thường là một đoạn số nguyên liên tục có dạng n1..n2
với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và chỉ
số cuối (n1≤ n2)
<Kiểu phần tử>: kiểu dữ liệu của từng phần tử mảng (cũng là kiểu dữ
liệu của mảng)
11. Khai báo kiểu mảng một chiều:
Ví dụ: Các khai báo KIỂU mảng 1 chiều hợp lệ
type
ArrayInt = array [1..300] of integer;
ArrayInt = array [-n+1..n+1] of boolean;
(n là hằng
số)
ArrInt= array [-100..0] of integer;
Ví dụ: Các khai báo KIỂU mảng 1 chiều không hợp lệ
type
ArrayReal = array [1.5..300] of integer;
ArrayBoolean = array [-n+1…n +1] of boolean;
ArrInt = array [100..0] of integer;
12. Cú pháp khai báo 1 biến thuộc
kiểu dữ liệu chuẩn trong
Passcal
13. Chỉ ra phần khai báo mảng trong phần khi báo
của chương trình đươc đưa ra ở đầu bài với số
ngày N là 365 ngày?
Ý nghĩa của các khai báo trên?
Dòng 4: Khai báo kiểu mảng một chiều gồm Max
số thực.
Dòng 5 : Khai báo biến mảng Nhietdo qua kiểu
mảng
14. 3. Khai báo biến kiểu mảng một
chiều:
a. Khai báo trực tiếp ( khai báo tường minh)
var
<Tên biến mảng>: array [ <Kiểu chỉ số>] of <Kiểu phần tử >;
Trong đó:
<Tên biến>: do người lập trình đặt, đúng theo cú pháp đặt tên biến của
Pascal
<Kiểu Chỉ số>: thường là một đoạn số nguyên liên tục n1..n2,
không là kiểu số thực.
<Kiểu phần tử>: kiểu dữ liệu của các phần tử trong mảng
15. 3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 1: khai báo mảng 8 phần tử kiểu số
nguyên
Var
SoNguyen : array[1..8] of integer;
SoNguyen
12
23
34
25
16
70
8
1
1
2
3
4
5
6
7
8
16. 3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 2: khai báo mảng 10 phần tử kiểu kí tự.
Var
Kitu : array[1..10] of char;
Kitu ‘M’ ‘A’ ‘N’ ‘C’ ‘I’ ‘E’ ‘S’ ‘T’ ‘E’ ‘R’
1
2
3
4
5
6
7
8
9
10
17. 3. Khai báo biến kiểu mảng một
chiều:Khai báo trực tiếp ( khai báo tường minh)
a.
Ví dụ 3:
Var
A : array[‘a’..’i’] of integer;
A
11
21
31
41
51
61
71
81 91
‘a’
‘b’
‘c’
‘d’
‘e’
‘f’
‘g’
‘h’
‘i’
18. 3. Khai báo biến kiểu mảng một
chiều: a. Khai báo trực tiếp ( khai báo tường minh)
Ví dụ 4:
Var
B : array[-5..2] of boolean;
B
true
true
false
false
true
false
true
false
-5
-4
-3
-2
-1
0
1
2
19. Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)
type
<Tên kiểu mảng> = array[<Kiểu chỉ số>] of < kiểu phần tử>;
var
<Tên biến>: <Tên kiểu mảng>;
Trong đó:
<Tên kiểu mảng>: định nghĩa mảng một chiều, do người lập trình tự đặt.
<Chỉ số>: là danh sách chỉ số để truy cập đến phần tử của mảng.
<Kiểu phần tử>: là kiểu dữ liệu của phần tử mảng.
<Tên biến>: là biến thuộc kiểu mảng vừa khai báo.
Chỉ số đầu và chỉ số cuối thường là các hằng số hoặc biểu thức nguyên
Chỉ số đầu <= chỉ số cuối
Giữa 2 chỉ số là ..
20. Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)
Ví dụ :
type
ArrayInt= array [1..100] of integer;
A: ArrayInt;
-Trước tiên, chúng ta định nghĩa ra mảng một chiều
ArrayInt gồm có 100 phần tử thuộc kiểu số nguyên
- Sau đó, khai báo biến A thuộc kiểu mảng ArrayInt
21. Khai báo biến kiểu mảng một chiều
Khai báo gián tiếp ( khai báo không tường minh) (tt)
Ví dụ:
type
HocSinh = array [1..30] of String;
var
HS: HocSinh;
- Trước tiên, định nghĩa mảng Hocsinh là mảng một chiều có
30 phần tử thuộc kiểu chuỗi ký tự (String).
- Sau đó, khai báo biến HS thuộc kiểu mảng HocSinh.
22. Truy xuất đến phần tử của mảng 1 chiều
Mỗi phần tử của mảng được truy xuất theo tên của biến
và chỉ số của chúng nằm trong dấu ngoặc vuông ([ ])
•Cách truy xuất phần tử:
Tên mảng[vị trí];
•Ví dụ: Var B : array[ 1..8] of integer;
B
Vị trí
10
23
-5
-5
9
43
33
17
59
1
2
3
4
5
6
7
8
B[3]=
B[7]=
Chú ý: Thường sử dụng câu lệnh for-do để thực hiện thao tác nhập/xuất
với biến mảng.
23. Program vd1;
Uses crt;
Var
Khai báo mảng một chiều
A: Array[1..366] of integer;
i,n,dem: integer;
S,TB : real ;
BEGIN
Clrscr;
write(‘ Nhap vao so ngay : ’) ;
readln(n) ;
S := 0 ;
For i := 1 to n do
Nhập mảng một chiều
Begin
write(‘ Nhap nhiet do ngay thu ‘,i,’ : ‘) ;
Tính tổng
readln(A[i]) ;
S:=S+A[i] ;
End;
TB := S/ ; dem := 0 ;
n
Đếm số phần tử thỏa mãn
For i := 1 to n do
If A[i]>TB Then dem := dem+1;
điều kiện.
W
riteln(‘ Nhiet do trung binh ’ ,n,’ ngay = ‘,TB : 6 : 2) ;
W
riteln(‘ So ngay co nhiet do cao hon nhiet do TB la: ‘, dem) ;
Readln ;
END.
24. Thao tác xử lý mảng 1 chiều
Ví Dụ : Nhập Nhiệt Độ N Ngày trong tuần
A
17
17
20
20
18
18
21
21
19
19
17
17
19
19
N=7
Nhập mảng 1 chiều
Các Bước
Các Bước
Nhập số phần tử của
mảng
Nhập vào giá trị của các
phần tử trong mảng(A[i])
Thể hiện bằng pascal
Thể hiện bằng pascal
-Write(‘nhap vao so ngay:’);
Readln;
-For i:=1 to n do
begin
write(‘nhiet do ngay thu’,i,’:’);
Readln(A[i]);
end;
25. Thao tác xử lý mảng 1 chiều
In ra màn hình mảng 1 chiều
Thông báo
Writeln(‘Mang vua nhap:’);
In giá trị của phần tử
For i:=1 to n do Write(A[i]:5);
Kết quả in ra màn hình
Mảng vừa nhập : 17 20 18 21 19 17 19
26. Thao tác xử lý mảng 1 chiều
Thao tác xử lý khác
Đếm số ngày có nhiệt độ
cao hơn nhiệt độ TB của
tuần.
i
A[]
Dem = 0
1
3
2
20
20
0
+1
18
18
1
17
17
1
-Dem:=0;
For i:=1 to n do
if A[i]>TB then
dem:=dem+1;
4
21
21
5
19
19
2
+1
3
+1
6
17
17
7
19
19
3
4
+1
TB = 18.7
27. Hãy nhớ
Mảng 1 chiều là 1 dãy hữu hạn các phần
tử cùng kiểu
Khai báo : tên mảng , chỉ số đầu chỉ số
cuối , kiểu phần tử
Tham chiếu phần tử mảng :
Tenbienmang[chisophantu]
Nhiều thao tác xử lý mảng dùng cấu trúc
lặp FOR..TO..Do
29. Một số ví dụ
Ví dụ 1 : Tìm phần tử lớn nhất của một dãy số
nguyên .
Input : Số nguyên dương N và dãy số A1, A2, ….., AN
Output : Chỉ số và giá trị của số lớn nhất trong dãy
Ý tưởng :
+ Đặt số A1 là số lớn nhất (max)
+ Cho i lặp từ 2 đến N, nếu A[i]> thì đổi max = A[i] vả
lưu lại vị trí i .
31. Các em hãy cho biết các việc chính cần thực
hiện trong chương trình là gì?
- Cho biết số ptử của mảng A.
- Nhập giá trị cho các ptử của mảng A.
- Xuất ra giá trị Max là phần tử thứ mấy.
Cho biết các biến chính cần sử dụng là gì?
- Mảng A
- Các biến đơn: N, i, Max, csmax
Viết phần khai báo các biến đó?
Var a : array[1..250] of integer ;
n,i,max,csmax : Integer ;
32. Thuật toán
1. NhËp n vµ d·y a1,...,an;
Bằng Pascal
Write(‘ Nhap vao so luong phan tu:’);
Readln(n);
For i:=1 to n do
begin
write(‘ Phan tu thu ’ ,i, ’ = ’);
readln(a[i])
end;
2. Max ← a1 ; i ← 1;
Max:=a[1]; csmax:=1;
3. NÕu i>N ®a ra MAX vµ
chØ sè i => KÕt thóc;
For i :=2 to n do
4. NÕu a[i]>max th× max←a[i],
i ← i+1 => quay l¹i bíc 3.
IF a[i]>max then
begin
max:=a[i];
csmax:=i;
end;
33. Code chương trình :
Program vd1;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;
Max:=A[1] ; csmax :=1 ;
For 1:= 2 to N do
if A[i] > Max then
begin
Max:=A[i];
csmax :=1;
end;
Writeln(‘Gia tri cua pt max : ’, Max);
Writeln(‘Chi so cua pt max : ’, csmax);
Readln
End
kiểm tra lần lượt tất cả
các phần tử của mảng
từ A[1] đến A[n]
Var
N,I,Max,csmax : integer
A: ArrInt;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua dayso, n
= ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' ='); readln(A[i]);
end;
Tạo giá trị cho các phần tử
của mảng A
34. Chương trình chạy và cho kết quả sau :
Nhap vao so phan tu cua day so :
Phan tu thu 1 =
Phan tu thu 2 =
Phan tu thu 3 =
15
Phan tu thu 4 =
25
Phan tu thu 5 =
18
Phan tu thu 6 =
12
Phan tu thu 7 =
19
20
16
Gia tri cua phan tu Max : 25
Chi so cua phan tu Max : 4
7
36. Ví dụ 2:
Sắp xếp dãy số nguyên bằng thuật toán tráo đổi
Input: Số nguyên dương N (N<= 250) và dãy A
gồm N số nguyên dương A1, A2, …, AN, mỗi số
đều không vượt quá 500.
Output: Dãy số A đã được sắp xếp thành dãy
không giảm
(chương trình SGK).
Ở lớp 10 ta đã xây dựng thuật toán cho bài toán này
rồi. Các bạn hãy nhắc lại thuật toán ???
Là thuật toán tráo đổi kiểu nổi bọt từ trên xuống
37. Giả sử :
Mỗi phần tử được xem như một bọt nước
Trọng lượng của bọt nước thứ I là giá trị của A[i]
Lượt 1:
2:
3
2
9
7
6
I chạy từ đầu dãy đến vị trí
>Ichạy từ đầu dãy đến vị trí [cuối
dãy - 1]
[cuối dãy – 2] (bỏ qua phần
Khi a[i]>
từ cuối) a[i+1] tức là bọt nước
trên nặng hơn bọt nước dưới
> Sau lượt thứ 2 bọt nước có
=> bọt nước trên chìm xuống và
trọng lượng lớn thứ 2 nằm
bọt nước dưới nổi lên (tráo đổi
sát trên bọt nước lớn
vị trí)
>Quá trình duyệt , tráo đổi
được lập đi lập lại cho đến
Sau lượt thứ nhất , bọt
khi chỉ còn duyệt hai phần tử
nước được dãy không giảm
và thu có trọng lượng lớn
nhất sẽ chìm xuống đáy
38. 1 Sè phÇn tö ë c¸c lît duyÖt (j) sÏ gi¶m tõ n xuèng hai phÇn tö.
Các em hãy cho
biết trong pascal
nhận xét 1 được
thực hiện bằng
lệnh gì
2 T¹i mçi lît duyÖt:
- Cho i ch¹y tõ 1 ®Õn sè phÇn tö -1,
nÕu A[i]>A[i+1] th×
tr¸o ®æi vÞ trÝ A[i] vµ A[i+1]
th«ng qua biÕn trung gian (Tg).
For j := n downto 2 do
For i := 1 to j-1 do
IF A[i]>A[i+1] then
Begin
Tg := A[i];
A[i] := A[i+1];
A[i+1]:=Tg;
end;
39. Code chương trình :
Program vd2;
Uses crt;
Khai báo
const Nmax =250;
type
Arrint =array[1..Nmax] of integer;
Var
N,i,j,t: integer;
begin
Clrscr;
write(‘ Nhap so luong phan tu cua day
so, n = ');
readln(n);
for i:=i to n do (*nhap cac phan tu *)
begin
write ('phan tu thu ;,i,' =');
readln(A[i]);
end;
for j:=n downto 2 do
for i:=1 to j-1 do
if A[i]> A [i+1] them
Begin
t:=A[i];
A[i];=A[i+1];
A[i+1]:=t;
end ;
writeln(' day so duoc sap xep la: ');
for i:=1 to N do wirte A[i]:4);
readln
end ;
(Xử lý mảng thuật nổi bọt *trao
doi A[i] va A[i=1]*)
Tạo giá trị cho các
phần tử của mảng
40. Ví dụ 3: tìm kiếm nhị phân
Input: dãy A la dãy tăng gồm N (N<=250) số
nguyên dương A1,A2,.....,Anvaf số nguyên k.
Output: Chỉ số i mà Ai=k hoặc thông báo
"khong tim thay " nếu không co sô hạng của
dãy A có giá trị bằng K.
41. C¸ch 1: T×m kiÕm tuÇn tù
Lần lượt từ số hạng thứ nhất ,so sánh giá trị số hạng
đang xét với k cho đến khi gặp được số hạng bằng k ,
hoặc dạy đã được xét hết và không có số hạng nào có
giá trị bằng k
Các em hãy
Tim_thay := false;
nêu cách giải
For i := 1 to n do
bài toán trên
Từ ý tưởng trên hãy
IF A[i] = k then
viết đoạn chương
trình PASCAL đề
Begin
Tim_thay:=true;
tìm số hạng của dãy
cs:=i;
có giá trị bằng k?
break;
end;
IF tim_thay then writeln(‘Chi so tim duoc: ’,i)
else writeln(‘Khong tim thay’);
43. Vì dãy A là dãy tăng , ta thực hiện thu hẹp nhanh phạm vi tìm kiếm
bằng cách so sánh k với A[giua] và xét các trường hợp
- A[giua]=k Tìm thấy chỉ số giữa và kết thúc;
- A[giua]>k Thu hẹp về phía bên trái (Cuối = Giữa - 1);
- A[giua]<k Thu hẹp về phía bên phải (Đầu = Giữa + 1);
Quá trình trên được lặp lại chừng nào còn tìm thấy hoặc
Dau <= Cuoi
Dau:=1; Cuoi:=n; tim_thay:=false;
while ( Dau<= Cuoi) or AND (tim_thay) do
Begin
Giua:= (Dau+Cuoi) div 2;
IF A[giua] = k then Tim_thay :=true
else
IF (A[Giua]>k) then Cuoi := Giua – 1
else Dau := Giua +1;
end;
IF Tim_thay then W
riteln(‘ Chi so tim duoc la : ’,Giua)
Else W
riteln(‘Khong tim thay’);
44. Code chương trình :
begin
write (phan tu thu ',i'=');
readln (a[i]);
uses crt;
end ;
const;
write ('nhap gia tri k =');
Nmax =250;
readln(k0;
type arrint =array [1..Nmax] of integer;
dau:= 1; cuoi : =N; tim_thay: = false ;
var
while (dau<= cuoi) and not (tim_thay) do
n,i,k : integer;
begin giua:=(dau +cuoi) div 2;
dau, cuoi, giua: integer
if A [giua] =k then
A:arrint;
tim_thay:= true
tim_thay: boolean;
else
begin clrscr;
write('nhap so luong phan tu cua day so, n if A [giua]>k them cuoi :=giua -1
elsc dau:=giua +1;
=');
end ;
readln(n0;
if tim_thay them wrieln (chi so tim duoc
writeln('nhap cac pham tu cua day so
la:',giua)
tang:');
else writeln ('khong tim thay');
for i: =1 to n do
readln
end ;
program TK-nhiphan;
46. Kiểu mảng 2 chiều
a. Khái niệm :
Là mảng một chiều mà mỗi phần tử của nó là mảng
một chiều
1
Ví dụ :
A
Trong đó :
Tên mảng : A
2
3
4
1
1 4 7 6
2
9 2 8 3
3
5 3 9 7
Mảng gồm: 3 dòng 4 cột
Kiểu dữ liệu của các phần từ : kiểu nguyên
Khi tham chiếu đến phần tử ở dòng i cột j ta viết :
A[i,j]. Ví dụ :A[2,3]= 8.
47. b. Khai báo mảng 2 chiều :
* Cách 1: Khai báo gián tiếp
TYPE < tên kiểu mảng> = array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Var <ds biến mảng> : <tên kiểu mảng>;
Ví dụ : TYPE Bang = array[1..9,1..9] of integer;
Var A: Bang;
* Cách 2 : Khai báo trực tiếp
Var < Ds biến mảng> : array[kiểu chỉ số hàng , kiều chỉ số cột] of
<kiểu phần tử>;
Ví dụ : Var Bang: array[1..9,1..9] of integer;
Var
A,B: array[1..20,1..30] of real;
48. c. Thao tác xử lý mảng 2 chiều
1
2
3
4
Các bước
1. Nhập số dòng (n) và số cột (m)
1 4 7 6
9 2 8 3
3
A
1
2
Nhập mảng 2 chiều
5 3 9 7
Bằng Pascal
Write(‘ Nhap vao so dong, cot:’);
Readln(n,m);
2.Nhập giá trị của các phần tử
trong mảng (A[i,j]).
For i:= 1 to n do
For j:=1 to m do
Begin
write(‘A[’,i,j,’ ] = ’ );
readln(A[i,j]);
end;
49. d. In mảng 2 chiều
1.Thông báo
Writeln(‘ Mang vua nhap : ’);
2.In giá trị của các phần tử
For i:=1 to n do
Begin
Kết quả in ra màn hình
For j:=1 to m do Write(A[i,j],’ ’);
Writeln;
Mang vua nhap:
1 4 7 6
9 2 8 3
5 3 9 7
end;
Các thao tác xử lý mảng 2 chiều thường dùng
hai câu lệnh FOR … DO lồng nhau
50. E . Các thao tác xử lý khác :
Vì dụ : Tính và in ra màn hình bảng cửu chương
Tính
Quan sát bảng cửu chương ta thấy :
For i :=1 to 9 do
A[2,5]=2 x 5 = 10
For j:=1 to 9 do
A[i,j]=i* j
A[5,8]=5 x 8 = 40
A[i,j] := i*j;
In ra màn hình
For i :=1 to 9 do
Begin
For j:=1 to 9 do write(A[i,j]:5);
writeln; writeln;
End;
1
2
3
4
5
Viết chương trình
2
4
6
8 10
hoàn chỉnh cho ví
3
6
9 12 15
dụ này
6
7
8
9
12
14
16
18
18
21
24
27
4
8
12
16
20
24
28
32
36
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81