Chào mừng quý vị đến với Website của Đặng Mạnh Toàn.

Quý vị chưa đăng nhập hoặc chưa đăng ký làm thành viên, vì vậy chưa thể tải được các tư liệu của Thư viện về máy tính của mình.
Nếu đã đăng ký rồi, quý vị có thể đăng nhập ở ngay ô bên phải.

Ví dụ về mảng

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Đặng Mạnh Toàn (trang riêng)
Ngày gửi: 23h:05' 16-04-2009
Dung lượng: 1.1 MB
Số lượt tải: 2
Số lượt thích: 0 người
Kiểm Tra bài cũ
1> Hãy cho biết đoạn chương trình sau dùng để đếm số lẽ trong phạm vi N có những lỗi gì?
Write(‘Nhap vao N = ‘);Readln(N);
dem :=0;
i := 1;
While i<=N do
Begin
dem := dem + i;
i := i + 2;
End;
Writeln(‘So le = ‘,dem);
2> Với đoạn chương trình trên khi nhập N = 8 thì dem sẽ được kết quả là bao nhiêu?
Program Tinh_So_Le;
Uses Crt;
Var I, dem, N : Integer;
Begin
Clrscr;
Write(‘Nhap vao N = ‘);Readln(N);
dem :=0;
i := 1;
While i<=N do
Begin
dem := dem + 1;
i := i + 2;
End;
Writeln(‘So le = ‘,dem);
Readln;
End.
Chương trình mẫu
Program Tinh_Nhiet_Do_Ngay;
Uses Crt;
Const max=100;
Type mang = ARRAY[1..max] Of Real;
Var nhietdo : mang;
dem, i, N : integer;
trung_binh, tong : real;
Begin
Clrscr;
Write(`Nhap so ngay : `); Readln(N);
tong:=0;
For i:=1 to N do
begin
write(`Nhap nhiet do ngay `,i,` : `);
Readln(nhietdo[i]);
tong:=tong+nhietdo[i];
end;
trung_binh:=tong/N;
dem:=0;
For i:=1 To N Do
If nhietdo[i]>trung_binh then dem:=dem+1;
Writeln(`Nhiet do trung binh `,N,` ngay : `,trung_binh:0:1);
Writeln(`So ngay co nhiet do cao hon nhiet do trung binh : `,dem);
Readln;
End.
Program Tinh_Nhiet_Do_Ngay;
Uses Crt;
Const max=100;
Type mang = ARRAY[1..max] Of Real;
Var nhietdo : mang;
dem, i, N : integer;
trung_binh, tong : real;
Begin
Clrscr;
Write(`Nhap so ngay : `); Readln(N);
tong:=0;
For i:=1 to N do
begin
write(`Nhap nhiet do ngay `,i,` : `);
Readln(nhietdo[i]);
tong:=tong+nhietdo[i];
end;
trung_binh:=tong/N;
dem:=0;
For i:=1 To N Do
If nhietdo[i]>trung_binh then dem:=dem+1;
Writeln(`Nhiet do trung binh `,N,` ngay : `,trung_binh:0:1);
Writeln(`So ngay co nhiet do cao hon nhiet do trung binh : `,dem);
Readln;
End.
BÀI TẬP
Hãy viết chương trình nhập vào dãy số A gồm N số nguyên, tính tổng của của dãy số đó và xuất ra màn hình?
Ví dụ 1:
Input: N = 3 và dãy {2, 5, 8}
Output: tong = 15
Cách khai báo
Const Max = 100;
Type Dayso = array[1..Max] Of integer;
Var a : Dayso;
ví dụ 2:
Bài toán tìm Min(giá trị nhỏ nhất) trong dãy số nguyên gồm N số nguyên.
* Xác định bài toán:
- Input: Số nguyên N và dãy A={a1,a2..aN}
- Input: Min của day A.
* Ý tưởng:
Khởi tạo Min = a1.
Sau đó cho i chạy từ 2 đến N và so sánh giá trị của ai với Min nếu ai < Min thì Min nhận giá trị mới là ai.
Minh họa ý tưởng
N = 5, có năm quả bóng có kích thước khác nhau chúng ta cùng tìm Min với chú mèo.
Min
Quả này nhỏ nhất
Quả này nhỏ hơn
Tìm ra quả nhỏ nhất rồi
Sơ đồ khối và liệt kê các bước
B1: Bắt đầu.
B2: Nhập N và dãy a1, a2, …, aN.
B3:Min ←a1, i ← 2.
B4: Nếu i > N thì đưa ra Min rồi KT.
B5:
B 5.1: Nếu ai < Min thì Min ←ai.
B 5.2: i ←i + 1 rồi quay lại B4.
Bắt Đầu
Nhập N
Dãy a1 -> aN
i > N
Đưa ra Min
Kết Thúc
ai < Min
Min ←a1; i ←2;
Min ←ai;
i←i + 1;
Chương trình minh họa
Program Tim_Min;
Uses Crt;
Const Max = 100;
Type mang = ARRAY[1..Max] Of Integer;
var a : mang;
i, N, min : integer;
Begin
Clrscr;
Write(`Nhap vao N = `); Readln(N);
For i:=1 To N Do
Begin
Write(`Nhap phan tu a[`,i,`] = `);
Readln(a[i]);
End;
i := 2;
min := a[1];
while i <= N do
begin
if (a[i] < min) then
begin
min:=a[i]; i:=i+1;
end
else i:=i+1;
end;
Writeln(‘So nho nhat trong day so A gom `,N,` so nguyen la :`,min);
readln;
End.
Program Tim_Min;
Uses Crt;
Const Max = 100;
Type mang = ARRAY[1..Max] Of Integer;
var a : mang;
i, N, min : integer;
Begin
Clrscr;
Write(`Nhap vao N = `); Readln(N);
For i:=1 To N Do
Begin
Write(`Nhap phan tu a[`,i,`] = `); Readln(a[i]);
End;
i := 2;
min := a[1];
while i <= N do
begin
if (a[i] < min) then
begin
min:=a[i]; i:=i+1;
end
else i:=i+1;
end;
Writeln(‘So nho nhat trong day so A gom `,N,` so nguyen la :`,min);
readln;
End.
Ví dụ 2
Thuật toán sắp xếp bằng tráo đỗi vị trí.
- Hãy cho biết Input và Output của bài toán?
Xác định bài toán:
INPUT: Dãy A gồm N số nguyên a1, a2,…, aN.
OUTPUT: Dãy A được sắp xếp thành dãy không giảm.
Với mỗi cặp số hạng đứng liền kề trong dãy, nếu số trước lớn hơn số sau ta đỗi vị trí chúng cho nhau. Việc đó được lặp lại cho đến khi không có sự đỗi chổ nào xãy ra nữa.
Cách 1: Liệt kê các bước
B1: Nhập N, các số hạng a1, a2,…, aN;
B2: M  N;
B3: Nếu M < 2 thì đưa ra dãy A đã sắp xếp rồi kết thúc;
B4: M  M – 1; i  0;
B5: i  i +1;
B6: Nếu i > M thì quay lại B3;
B7: Nếu ai > ai+1 thì tráo đỗi ai và ai+1 cho nhau;
B8: Quay lại B5.
Đ
Đ
Đ
S
S
S
Nhập N và
a1, a2,..., aN
M  N
M < 2 ?
M  M - 1; i 0
i  i + 1
i > M ?
ai > ai+1 ?
Tráo đỗi
ai và ai+1
Đưa ra A đã sắp xếp
rồi kết thúc
Vẽ đồ khối
Ví dụ 3: Thuật toán tìm kiếm nhị phân.
Xác định bài toán:
INPUT: Dãy A gồm N số nguyên a1, a2,…, aN được sắp tăng và số nguyên k.
OUTPUT: Chỉ số i mà ai = k hoặc thông báo
không có số hạng nào của A bằng k.
Ý tưởng:
Sử dụng tính chất dãy A đã sắp xếp tăng, ta tìm cách thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với số hạng ở giữa dãy (agiữa), khi đó chỉ xãy ra một trong ba trường hợp:
- Nếu agiữa= k => tìm được chỉ số, kết thúc;
- Nếu agiữa > k => do dãy A đã được sắp xếp tăng nên việc tìm kiếm thu hẹp chỉ xét từ a1  agiữa - 1;
- Nếu agiữa < k => do dãy A đã được sắp xếp tăng nên việc tìm kiếm thu hẹp chỉ xét từ agiữa + 1  aN.
Bắt Đầu
Nhập N và
a1, a2, …, aN;k
Đầu ← 1;
Cuối ← N
Giữa ← [(Đầu+Cuối)/2]
a[Giữa] =k
Đưa ra Giữa
Rồi kết thúc
a[Giữa] >k
Cuối ← Giữa -1
Đầu > Cuối
Đầu ←Giữa +1
Đưa ra Giữa
Rồi kết thúc
Đúng
Đúng
Sai
Sai
Sai
Đúng
Program Tim_Kiem_Nhi_Phan;
Uses Crt;
Const Max = 100;
Type DaySo=Array[1..Max] of integer;
Var a:Dayso;
i, N, k, dau, cuoi, giua:integer;
tim_thay:Boolean;
Begin
Clrscr;
Write(`Nhap vao so phan tu cua day so N = `); Readln(N);
Writeln(`Nhap cac phan tu cua day so sap tang:`);
for i:=1 to N do
Begin
Write(`Nhap phan tu thu `,i,`=`); readln(a[i]);
end;
Write(`Nhap so can tim k = `);Readln(k);
dau:=1; cuoi:=n; Tim_thay:=False;
While(dau<=cuoi)and not(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 Writeln(`Chi so tim duoc la :`,Giua,` Co phan tu a[`,giua,`]=`,k,`=k`)
Else Writeln(`Khong tim thay phan tu nao bang `,k);
Readln;
End.
Chương trình minh họa
2> Kiểu mảng hai chiều:
* Xét bài toán: Giải hệ phương trình bậc nhất bằng phương pháp Crame được tính như sau :
- Nếu D ≠ 0 thì hệ pt có nghiệm x=Dx/D, y=Dy/D
- Nếu D = 0:
+ Nếu Dx ≠ 0 hoặc Dy ≠ 0 thì hệ vô nghiệm.
+ Nếu Dx = Dy = 0 thì hệ pt có vô số nghiệm.
* Để giải quyết bài toán lưu trữ các hệ số trong D, Dx, Dy thì chúng ta có thể mô tả như sau : Định thức D là kiểu mảng một chiều gồm hai phần tử, mỗi phần tử lại là mảng một chiều có hai phần tử. Mỗi phần tử là một số thực. Ta cần mảng hai chiều 3 phần tử chiều ngang(dòng) và 2 phần tử chiều dọc(cột).
Mô phỏng bài toán
a[1][1] x + a[1][2] y = a[1][3]
a[2][1] x + a[2][2] y = a[2][3]
Hệ phương trình có dạng:
Mô phỏng
Mô phỏng
a[1][1] a[1][2]
a[2][1] a[2][2]
a[1][1]*a[2][2] - a[1][2]*a[2][1]
a[1][1] a[1][3]
a[2][1] a[2][3]
Mô phỏng
a[1][1]* a[2][3] - a[1][3]*a[2][1]
a[1][3] a[1][2]
a[2][3] a[2][2]
Mô phỏng
Cách khai báo mảng hai chiều
* Gián tiếp:
TYPE =ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF ;
Var : ;
* Trực tiếp:
Var : ARRAY [Kiểu chỉ số dòng, Kiểu chỉ số cột] OF ;
Const dong = 100;
Const cot = 100;
Type Mang = ARRAY [1..dong, 1..cot] OF Integer;
Var a : Mang;
* Ví dụ:
Chương trình minh họa
Program Giai_He_PT_B1;
Uses Crt;
Var a : ARRAY [1..2,1..3] Of real;
i, j : integer;
d, dx, dy, x, y : real;
Begin
Clrscr;
Writeln(`Nhap vao cac he so`);
For i := 1 To 2 Do
begin
For j := 1 To 3 Do
Begin
write(`a[`,i,`][`,j,`] = `); Readln(a[i][j]);
end;
end;
Writeln(`He phuong trinh co dang:`);
Writeln(a[1][1]:6:1,`x +`,a[1][2]:6:1,`y=`,a[1][3]:6:1);
Writeln(a[2][1]:6:1,`x +`,a[2][2]:6:1,`y=`,a[2][3]:6:1);
d:=a[1][1]*a[2][2]-a[2][1]*a[1][2]; {d=(ab`-a`b)}
dx:=a[1][3]*a[2][2]-a[2][3]*a[1][2]; {dx=cb`-c`b}
dy:=a[1][1]*a[2][3]-a[2][1]*a[1][3]; {dy=ac`-a`c}
if(d<>0) then
begin
x:=dx/d;
y:=dy/d;
writeln(`He co hai nghiem x =`,x:0:1,` y = `,y:0:1);
end
else if ((dx=0)and(dy=0)) then Writeln(`He pt co vo so nghiem`)
else Writeln(`He phuong trinh vo nghiem`);
Readln;
End.
Bài tập:
* Hãy dùng mảng hai chiều để viết chương trình xuất ra màn hình bảng cửu chương gồm 9 cột và 9 hàng.
Khai báo:
Type Mang = Array[1..9,1..9] Of Integer;
Var a : Mang;
For i:= 1 to 9 do
Begin
For j:= 1 to 9 do
Begin
a[i][j] := i*j;
End;
End;
Cách tính:
For i:= 1 to 9 do
Begin
For j:= 1 to 9 do
Begin
Write(a[i][j]:4);
End;
Writeln;
End;
Sau khi tính xong các phần tử,
ta xuất ra bản chương
Hãy nhớ !
? Mảng hai chiều là b?ng cỏc ph?n t? cựng ki?u mà mỗi ch? s? ki?u phần tử của nó lại là mảng một chiều.
? Khai báo: tên mảng, kiểu chỉ số dòng, kiểu chỉ số cột, kiểu phần tử.
? Tham chiếu phần tử mảng:
Tên biến mảng[cs dòng,cs cột]
? Thao tác xử lí thường dùng cấu trúc hai câu lệnh FOR . DO lồng nhau.
20 19
25 18
12 16
Var
A:ARRAY[1..10,1..10] OF integer;
A[1,3] = 19
 
Gửi ý kiến