Giáo án Tin học Lớp 11 - Bài: Mảng một chiều trong Pascal - Đậu Ngọc Sáng

4. In giá trị mảng

Sau khi nhập giá trị cho mảng. Để in các giá trị của mảng ra màn hình chúng ta thực hiện như sau:

for i:=1 to 10 do

write(A[i]);

Lệnh trên sẽ thực hiện in ra màn hình 10 phần tử của mảng A.

Cũng giống như nhập mảng chúng ta xây dựng một thủ tục in mảng để dễ dàng thao tác, quản lí, kiểm tra lỗi và sử dụng lại. Lưu ý trong thủ tục InMang thì A là một tham trị

pdf15 trang | Chia sẻ: Liiee | Ngày: 21/11/2023 | Lượt xem: 99 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Giáo án Tin học Lớp 11 - Bài: Mảng một chiều trong Pascal - Đậu Ngọc Sáng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
GV: ThS Đậu Ngọc Sáng 
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 là một tập hợp hữu hạn các phần tử có thứ tự và có 
cùng kiểu dữ liệu. Thứ tự được sắp xếp bắt đầu từ phần tử đầu tiên 1 đến phần 
tử cuối cùng của mảng. Thứ tự chính là chỉ số của phần tử trong mảng. 
Ví dụ: Cho mảng A gồm có 7 phần tử là số nguyên thì mảng A có dạng 
như sau 
1 2 3 4 5 6 7 
8 4 70 43 57 5 1 
Vậy A là một mảng hay một dãy liên tiếp gồm có 7 phần tử (có chỉ số từ 1 
đến 7) mang giá trị là số nguyên. 
Trong đó A[1]=8 tức là phần tử thứ 1 của mảng A có giá trị là 8 
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ị của một phần tử ở vị trí i bất kì trong mảng A ta chỉ cần truy 
xuất trực tiếp đến chỉ số của phần tử đó A[i]. 
Khi khai báo một biến có kiểu dữ liệu là kiểu mảng thì biến đó được gọi là 
biến mảng. Giá trị của biến mảng là một mảng hay là một dãy có thứ tự. 
2. Khai báo biến mảng 
Để khai báo biến mảng trong pascal người ta dùng cú pháp sau: 
Cú pháp: 
TYPE = ARRAY [chỉ số đầu..chỉ số cuối] OF ; 
Chỉ số 
A 
GV: ThS Đậu Ngọc Sáng 
2 
VAR :; 
hoặc khai báo trực tiếp: 
VAR : ARRAY [chỉ số đầu..chỉ số cuối] OF ; 
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 2 cách khai báo trên ta có A là mảng số nguyên có 100 phần tử. 
3. Nhập giá trị cho mảng 
Vì mảng là một dãy liên tiếp các phần tử có cùng kiểu dữ liệu nên ta sử 
dụng câu lệnh lặp FORTODO để nhập. 
FOR :=1 TO DO 
Readln(biến mảng[biến chỉ số]); 
Ví dụ: 
for i:=1 to 10 do 
readln(A[i]); 
Trong đó A là biến mảng; i là chỉ số của các phần tử trong mảng A. 
Trong phần này chúng ta dùng chương trình con khai báo một thủ tục để 
nhập mảng. Việc này tạo nên sự thuận lợi khi thực hiện chương trình, dễ quản 
lí, dễ kiểm tra lỗi và có tính sử dụng lại rất cao. 
GV: ThS Đậu Ngọc Sáng 
3 
Lưu ý: ở thủ tục nhập mảng trên thì A là tham biến 
Khi thực hiện chương trình sẽ cho phép chúng ta nhập vào giá trị cho mảng 
giống như khi viết bình thường mà không dùng thủ tục. 
Trong phần trên đã cho chúng ta nhập các giá trị cho mảng. Tuy nhiên để 
dễ dàng quan sát chúng ta thực hiện thay đổi lại chương trình như sau: 
GV: ThS Đậu Ngọc Sáng 
4 
Bây giờ chúng ta thấy rõ ràng từng phần tử a[i] và giá trị nhập vào tương 
ứng của chúng trong mảng. 
4. In giá trị mảng 
Sau khi nhập giá trị cho mảng. Để in các giá trị của mảng ra màn hình 
chúng ta thực hiện như sau: 
for i:=1 to 10 do 
 write(A[i]); 
Lệnh trên sẽ thực hiện in ra màn hình 10 phần tử của mảng A. 
Cũng giống như nhập mảng chúng ta xây dựng một thủ tục in mảng để dễ 
dàng thao tác, quản lí, kiểm tra lỗi và sử dụng lại. Lưu ý trong thủ tục InMang 
thì A là một tham trị 
GV: ThS Đậu Ngọc Sáng 
5 
Kết quả thực hiện sẽ cho ta: 
Phần in mảng đã thể hiện cho chúng ta thấy đây là một dãy số gồm có 10 
phần tử. 
5. Nhập mảng với số phần tử bất kỳ. 
Ở phần trên chúng ta xây dựng mảng số nguyên với 10 phần tử 
for i:=1 to 10 do 
Vậy để xây dựng mảng với số phần tử bất kỳ được nhập tùy ý khi thực 
hiện chương trình. Đây là sự linh hoạt khi gán số phần tử cho mảng ta thực hiện 
theo cấu trúc sau: 
GV: ThS Đậu Ngọc Sáng 
6 
Như vậy với việc nhập vào số phần tử n tùy ý thì chúng ta thay đổi cấu trúc 
của thủ tục NhapMang với 2 tham số hình thức là mảng A và số phần tử n. 
Lưu ý: ở thủ tục nhập mảng trên thì A là tham biến và n là tham trị. 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ệnh readln thông dụng. 
Kết quả thực hiện là: 
GV: ThS Đậu Ngọc Sáng 
7 
6. Chương trình hoà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 do 
 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 do 
 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 các giá trị của mạng lưu vào file riêng ta thực hiện thứ tự các lệnh 
như sau tại chương trình chính: 
assign(t,'tên file'); với t là biến kiểu tệp 
rewrite(t); mở tệp ra ghi 
//ghi các phần tử của mảng A vào tệp 
for i:=1 to pt do 
write(t,A[i]); 
close(t); 
Ví dụ: 
GV: ThS Đậu Ngọc Sáng 
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 do 
write(t,a[i]); 
close(t); 
Sau khi thực hiện đoạn chương trình trên thì chúng ta nhập được mảng A 
gồm pt phần tử. Tiếp đến là chúng ta mở file b.inp ra và thực hiện ghi tất cả các 
phần tử trong mảng A vào file b.inp 
Sau đây là chương trình hoàn chỉnh cho việc ghi dữ 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 con nhap mang 
Procedure nhapmang(var a:mang; var n:integer); 
Begin 
 for i:=1 to n do 
 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 do 
 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); 
Writeln(t,pt); 
GV: ThS Đậu Ngọc Sáng 
9 
For i:=1 to pt do 
Write(t,a[i]); 
Close(t); 
Writeln('mang sau khi nhap'); 
Assign(t,'inmang.out'); 
Rewrite(t); 
Writeln(t,pt); 
For i:=1 to pt do 
Write(t,a[i]); 
Close(t); 
Readln; 
End. 
8. Đọc dữ liệu từ file đã có vào mảng 
Để đọc dữ liệu từ file đã có vào mảng để tiến hành tính toán, xử lí thì ta 
thực hiện như sau: 
Assign(f,’tên file’); 
Reset(f); 
For i:=1 to n do 
read(f, A[i]); 
close(f) 
Lưu ý: f là biến kiểu file 
 Tên file: là tên file đã có dữ liệu cần đọc vào mảng A 
Ví dụ: Cho file dulieu.inp như mẫu sau: 
Hàng thứ nhất là số phần tử trong mảng. Hàng thứ hai là giá trị các phần tử 
trong mảng. Mỗi giá trị cách nhau 1 khoảng trắng. Tuy nhiên chúng ta có thể 
cho bao nhiêu khoảng trắng cũng được. 
GV: ThS Đậu Ngọc Sáng 
10 
Hãy đọc dữ liệu từ file dulieu.inp trên và lưu vào file mới ketqua.out như sau: 
Sau đây là toàn bộ 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 do 
 read(f,A[i]); 
 readln(f); 
 close(f); 
 assign(f,'f:\vong2\ketqua.out'); 
 rewrite(f); 
 for i:=1 to n do 
 write(f,a[i],' '); 
 close(f); 
readln; 
End. 
GV: ThS Đậu Ngọc Sáng 
11 
BÀI TẬP 
Bài 1. Cho mảng số nguyên A gồ 10 phần tử. Hãy viết chương trình con thực 
hiện nhập mảng, in mảng sau khi đã nhập trên một hàng. Khoảng cách 
giữa các phần tử là 1 khoảng trắng. 
Ví dụ: 
Bài 2. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). Tính tổng các giá trị của mảng vừa nhập. 
Bài 3. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
 Tính tổng các giá trị lẻ của mảng vừa nhập. 
 Tính tổng các giá trị chẵn của mảng vừa nhập. 
 Tính tổng các giá trị có chỉ số lẻ của mảng vừa nhập. 
 Tính tổng các giá trị có chỉ số chẵn của mảng vừa nhập. 
Bài 4. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
Tính tổng các giá trị là số nguyên tố 
Tính tổng các giá trị là số chính phương 
Tính tổng các giá trị là số hoàn hảo 
Bài 5. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra tất cả các số có ước số là 2 hoặc 3 
In ra tất cả các số có ước số là 2 và 3 
GV: ThS Đậu Ngọc Sáng 
12 
Bài 6. Hãy thực hiện tất cả các bài tập từ 1 đến 5 ở trên dưới dạng file gồm có 
file dulieu.inp có 2 dòng: Dòng đầu chứa số phần tử mảng và dòng thứ 2 
chứa giá trị của mảng. Ví dụ 
File ketqua.out chứa kết quả thực hiện chương trình. 
Bài 7. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra phần tử có giá trị lớn nhất. 
Bài 8. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra phần tử có giá trị nhỏ nhất. 
Bài 9. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra phần tử có giá trị lớn thứ 2. 
Bài 10. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra phần tử có giá trị nhỏ thứ 2. 
Bài 11. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra các phần tử có giá trị nhỏ hơn trung bình cộng của mảng. 
Bài 12. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra các phần tử có giá trị lớn hơn số k bất 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ột mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). K là một số nguyên nhập tùy ý. 
Tìm k và in ra tất cả vị trí của k trong mảng. Nếu không tìm thấy thì trả 
về FALSE 
Bài 14. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra phần tử có số lần xuất hiện nhiều nhất 
GV: ThS Đậu Ngọc Sáng 
13 
Bài 15. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra số lần xuất hiện nhiều nhất của một giá trị phần tử 
Bài 16. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra các phần tử chỉ xuất hiện 1 lần 
Bài 17. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). K là một số nguyên nhập tùy ý. 
Tìm k và in ra vị trí đầu tiên của k trong mảng. Nếu không tìm thấy thì 
trả về FALSE 
Bài 18. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). K là một số nguyên nhập tùy ý. 
Tìm K và thay thế K bằng một giá trị X tùy ý tại vị trí đầu tiên của K 
trong mảng. 
Bài 19. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). K là một số nguyên nhập tùy ý. 
Tìm K và thay thế K bằng một giá trị X tùy ý tại tất cả vị trí của K trong 
mảng. 
Bài 20. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra các dãy con tăng liên tục 
Ví dụ 
Mảng A gồm 4 6 8 3 1 1 3 5 6 
Thì các dãy con tăng liên tục là 
4 6 8 
1 3 5 6 
Bài 21. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra dãy con tăng liên tục dài nhất. 
Bài 22. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra dãy con tăng liên tục có tổng lớn nhất. 
Bài 23. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
In ra dãy con không giảm dài nhất. 
Ví dụ 
Mảng A gồm 4 6 8 3 1 1 3 5 6 
GV: ThS Đậu Ngọc Sáng 
14 
Thì các dãy con không giảm liên tục là :1 1 3 5 6 
Bài 24. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). (Lưu ý dãy không liên tục) 
In ra các dãy con tăng. 
Ví dụ 
Mảng A gồm 4 6 8 3 1 1 3 5 6 
Thì các dãy con tăng là : 
4 6 8 
4 5 6 
3 5 6 
1 3 5 6 
Bài 25. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). (Lưu ý dãy không liên tục) 
In ra các dãy con tăng. 
Ví dụ 
Mảng A gồm 4 6 8 0 3 1 1 3 5 6 
Thì các dãy con tăng dài nhất là : 0 1 3 5 6 
Bài 26. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
Mảng A gọi là mảng tăng giảm tuần hoàn nếu mảng A có các giá trị 
A[1]A[3]A[5]<A[6]. 
Hãy kiểm tra mảng vừa nhập có thỏa mãn tính chất trên không. Có thì 
TRUE, ngược lại thì FALSE. 
Bài 27. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (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ột mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
Sắp xếp mảng theo chiều tăng dần các phần tử có chỉ số chẵn và giảm 
dần các phần tử có chỉ số lẻ. 
Bài 29. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100).Tìm kiếm các cặp 2 phần tử gần nhau có tổng chia hết 
cho 10. Thay thế cặp phần tử đó bằng tổng của chúng 
Dulieu.inp : 1 19 62 7 8 32 12 
Ketqua.out: 20 20 62 7 40 40 12 
GV: ThS Đậu Ngọc Sáng 
15 
Bài 30. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100).Mảng A là mảng đối xứng nếu A[i]=A[n-i+1]. 
Kiểm tra A có phải là mảng đối xứng không. TRUE là có, FALSE là 
không 
Bài 31. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
Kiểm tra mảng A là một chuỗi cấp số cộng có công sai k = 5? 
Ví dụ: 1 6 11 16 21 26 31 
TRUE là có, FALSE là không 
Bài 32. Hãy viết chương trình nhập vào một mảng số nguyên gồm n phần tử bất 
kì (n>0, n<=100). 
Sắp xếp mảng theo chiều tăng dần các giá trị. 
Chèn thêm một phần tử có giá trị X sao cho mảng vẫn đảm bảo tăng 
dần. 

File đính kèm:

  • pdfgiao_an_tin_hoc_lop_11_bai_mang_mot_chieu_trong_pascal_dau_n.pdf
Giáo án liên quan