Khi thực hiện gọi thủ tục NhapMang(A,n) trong chương trình chính thì ta có thể gán n bằng một giá trị số nguyên cụ thể như NhapMang(A,5) hoặc có thể nhập một số phần tử bất kỳ bằng lệ[r]
(1)1
MẢNG MỘT CHIỀU TRONG PASCAL
1. Khái niệm mảng- dãy số
Dữ liệu kiểu mảng tập hợp hữu hạn phần tử có thứ tự có kiểu liệu Thứ tự xếp phần tử đến phần tử cuối mảng Thứ tự số phần tử mảng
Ví dụ: Cho mảng A gồm có phần tử số ngun mảng A có dạng sau
1
8 4 70 43 57 5 1
Vậy A mảng hay dãy liên tiếp gồm có phần tử (có số từ đến 7) mang giá trị số nguyên
Trong A[1]=8 tức phần tử thứ mảng A có giá trị Tương tự ta có A[2]=4
A[3]=70 A[4]=43 A[5]=57 A[6]=5 A[7]=1
Để lấy giá trị phần tử vị trí i mảng A ta cần truy xuất trực tiếp đến số phần tử A[i]
Khi khai báo biến có kiểu liệu kiểu mảng biến gọi biến mảng Giá trị biến mảng mảng dãy có thứ tự
2. Khai báo biến mảng
Để khai báo biến mảng pascal người ta dùng cú pháp sau: Cú pháp:
TYPE <Kiểu mảng> = ARRAY [chỉ số đầu số cuối] OF <Kiểu liệu>; Chỉ số
(2)2 VAR <Biến mảng>:<Kiểu mảng>; khai báo trực tiếp:
VAR <Biến mảng> : ARRAY [chỉ số đầu số cuối] OF <Kiểu liệu>; Ví dụ:
TYPE Mangnguyen = Array[1 100] of Integer; MangKytu = Array[Byte] of Char;
VAR A: Mangnguyen; C: MangKytu; hoặc:
VAR A: Array[1 100] of Integer; C: Array[Byte] of Char;
Với cách khai báo ta có A mảng số nguyên có 100 phần tử
3. Nhập giá trị cho mảng
Vì mảng dãy liên tiếp phần tử có kiểu liệu nên ta sử dụng câu lệnh lặp FOR…TO…DO để nhập
FOR <biến số>:=1 TO <Số phần tử> DO Readln(biến mảng[biến số]);
Ví dụ:
for i:=1 to 10 readln(A[i]);
Trong A biến mảng; i số phần tử mảng A
(3)3
Lưu ý: thủ tục nhập mảng A tham biến
Khi thực chương trình cho phép nhập vào giá trị cho mảng giống viết bình thường mà không dùng thủ tục
(4)4
Bây thấy rõ ràng phần tử a[i] giá trị nhập vào tương ứng chúng mảng
4. In giá trị mảng
Sau nhập giá trị cho mảng Để in giá trị mảng hình thực sau:
for i:=1 to 10 write(A[i]);
Lệnh thực in hình 10 phần tử mảng A
(5)5 Kết thực cho ta:
Phần in mảng thể cho thấy dãy số gồm có 10 phần tử
5. Nhập mảng với số phần tử
Ở phần xây dựng mảng số nguyên với 10 phần tử for i:=1 to 10
(6)6
Như với việc nhập vào số phần tử n tùy ý thay đổi cấu trúc thủ tục NhapMang với tham số hình thức mảng A số phần tử n
Lưu ý: thủ tục nhập mảng A tham biến n tham trị Khi thực gọi thủ tục NhapMang(A,n) chương trình ta gán n giá trị số nguyên cụ thể NhapMang(A,5) nhập số phần tử lệnh readln thông dụng
(7)7 6. Chương trình hồn chỉnh
program dayso; uses crt;
type Mang=array[1 100] of integer; var A:Mang; i,pt:integer;
//CHUONG TRINH CON NHAP MANG
procedure NhapMang(var A:Mang; n:integer); begin
for i:=1 to n Begin
write('a[',i,']='); readln(A[i]); end;
end;
//CHUONG TRINH CON IN MANG procedure InMang(A:Mang; n:integer); Begin
for i:=1 to n write(a[i]:4); End;
//CHUONG TRINH CHINH Begin
clrscr;
write('Nhap so phan tu mang:'); readln(pt); NhapMang(A,pt);
writeln('MANG SAU KHI NHAP'); InMang(a,pt);
readln; End
7. Đọc mảng vào file
Để đọc giá trị mạng lưu vào file riêng ta thực thứ tự lệnh sau chương trình chính:
assign(t,'tên file'); với t biến kiểu tệp rewrite(t); mở tệp ghi
//ghi phần tử mảng A vào tệp for i:=1 to pt
write(t,A[i]); close(t);
(8)8
write('Nhap so phan tu mang:'); readln(pt); NhapMang(A,pt);
assign(t,'b.inp'); rewrite(t); writeln(t,pt); for i:=1 to pt
write(t,a[i]); close(t);
Sau thực đoạn chương trình nhập mảng A gồm pt phần tử Tiếp đến mở file b.inp thực ghi tất phần tử mảng A vào file b.inp
Sau chương trình hồn chỉnh cho việc ghi liệu mảng vào file Program dayso;
Uses crt;
Type mang=array[1 100] of integer; Var a:mang; m,i,pt:integer;t:text; //chuong trinh nhap mang
Procedure nhapmang(var a:mang; var n:integer); Begin
for i:=1 to n begin
write('a[',i,']='); readln(a[i]); end;
End;
//chuong trinh in mang
Procedure inmang(a:mang; n:integer); Begin
for i:=1 to n write(a[i]:4); End;
//chuong trinh chinh Begin
Clrscr;
Write('nhap so phan tu mang:'); readln(pt); Nhapmang(a,pt);
Assign(t,'dulieu.inp'); Rewrite(t);
(9)9 For i:=1 to pt
Write(t,a[i]); Close(t);
Writeln('mang sau nhap'); Assign(t,'inmang.out');
Rewrite(t); Writeln(t,pt); For i:=1 to pt
Write(t,a[i]); Close(t);
Readln; End
8. Đọc liệu từ file có vào mảng
Để đọc liệu từ file có vào mảng để tiến hành tính tốn, xử lí ta thực sau:
Assign(f,’tên file’); Reset(f);
For i:=1 to n read(f, A[i]); close(f)
Lưu ý: f biến kiểu file
Tên file: tên file có liệu cần đọc vào mảng A Ví dụ: Cho file dulieu.inp mẫu sau:
(10)10
Hãy đọc liệu từ file dulieu.inp lưu vào file ketqua.out sau:
Sau tồn chương trình program dayso;
uses crt;
type Mang=array[1 100] of integer; var A:Mang; i,n,d,t:integer;
f:text; Begin
clrscr;
assign(f,'f:\vong2\dulieu.inp'); reset(f);
readln(f,n); for i:=1 to n read(f,A[i]); readln(f);
close(f);
assign(f,'f:\vong2\ketqua.out'); rewrite(f);
for i:=1 to n write(f,a[i],' '); close(f);
(11)11 BÀI TẬP
Bài Cho mảng số nguyên A gồ 10 phần tử Hãy viết chương trình thực nhập mảng, in mảng sau nhập hàng Khoảng cách phần tử khoảng trắng
Ví dụ:
Bài Hãy viết chương trình nhập vào mảng số ngun gồm n phần tử (n>0, n<=100) Tính tổng giá trị mảng vừa nhập
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Tính tổng giá trị lẻ mảng vừa nhập Tính tổng giá trị chẵn mảng vừa nhập
Tính tổng giá trị có số lẻ mảng vừa nhập Tính tổng giá trị có số chẵn mảng vừa nhập
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Tính tổng giá trị số nguyên tố Tính tổng giá trị số phương Tính tổng giá trị số hồn hảo
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
(12)12
Bài Hãy thực tất tập từ đến dạng file gồm có file dulieu.inp có dịng: Dịng đầu chứa số phần tử mảng dòng thứ chứa giá trị mảng Ví dụ
File ketqua.out chứa kết thực chương trình
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị lớn
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị nhỏ
Bài Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị lớn thứ
Bài 10 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị nhỏ thứ
Bài 11 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị nhỏ trung bình cộng mảng
Bài 12 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử có giá trị lớn số k với k nhập vào từ bàn phím
Bài 13 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) K số nguyên nhập tùy ý
Tìm k in tất vị trí k mảng Nếu khơng tìm thấy trả FALSE
Bài 14 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
(13)13
Bài 15 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In số lần xuất nhiều giá trị phần tử
Bài 16 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In phần tử xuất lần
Bài 17 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) K số nguyên nhập tùy ý
Tìm k in vị trí k mảng Nếu khơng tìm thấy trả FALSE
Bài 18 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) K số nguyên nhập tùy ý
Tìm K thay K giá trị X tùy ý vị trí K mảng
Bài 19 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) K số nguyên nhập tùy ý
Tìm K thay K giá trị X tùy ý tất vị trí K mảng
Bài 20 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In dãy tăng liên tục Ví dụ
Mảng A gồm 1 Thì dãy tăng liên tục
4
Bài 21 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In dãy tăng liên tục dài
Bài 22 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In dãy tăng liên tục có tổng lớn
Bài 23 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
In dãy khơng giảm dài Ví dụ
(14)14
Thì dãy khơng giảm liên tục :1
Bài 24 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) (Lưu ý dãy không liên tục)
In dãy tăng Ví dụ
Mảng A gồm 1 Thì dãy tăng :
4 6
Bài 25 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100) (Lưu ý dãy không liên tục)
In dãy tăng Ví dụ
Mảng A gồm 1
Thì dãy tăng dài :
Bài 26 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Mảng A gọi mảng tăng giảm tuần hồn mảng A có giá trị A[1]<A[2]>A[3]<A[4]>A[5]<A[6]…
Hãy kiểm tra mảng vừa nhập có thỏa mãn tính chất khơng Có TRUE, ngược lại FALSE
Bài 27 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Sắp xếp mảng theo chiều tăng dần giá trị Sắp xếp mảng theo chiều giảm dần giá trị
Bài 28 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Sắp xếp mảng theo chiều tăng dần phần tử có số chẵn giảm dần phần tử có số lẻ
Bài 29 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100).Tìm kiếm cặp phần tử gần có tổng chia hết cho 10 Thay cặp phần tử tổng chúng
(15)15
Bài 30 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100).Mảng A mảng đối xứng A[i]=A[n-i+1]
Kiểm tra A có phải mảng đối xứng khơng TRUE có, FALSE khơng
Bài 31 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Kiểm tra mảng A chuỗi cấp số cộng có cơng sai k = 5? Ví dụ: 11 16 21 26 31
TRUE có, FALSE khơng
Bài 32 Hãy viết chương trình nhập vào mảng số nguyên gồm n phần tử (n>0, n<=100)
Sắp xếp mảng theo chiều tăng dần giá trị