1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Tin học văn phòng >

IV. Dữ liệu kiểu mảng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.2 MB, 236 trang )


Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Ví dụ: Để lu trữ điểm của 50 học sinh trong một lớp học ta dùng mảng nh sau

TYPE

Hoc_sinh:array [1..60] of real;

Var

Diem:hoc_sinh;

Hoặc:



Var



Diem: array[1..60] of real;

3. Truy nhập một phần tử của mảng

Đợc thực hiện thông qua tên mảng và chỉ số của mảng

Giả sử để nhập điểm cho học sinh thứ i ta dùng lệnh Readln(diem[i]);

Muốn in điểm của học sinh thứ i ra màn hình ta dùng lệnh

writeln(diem[i]);



Write(diem[i]) hoặc



Chú ý: Nếu chỉ có một miền chỉ số của mảng thì mảng đó đợc gọi là mảng 1 chiều

Nếu có hai miền chỉ số của mảng thì mảng đó đợc gọi là mảng 2 chiều (ma trận là một

mảng hai chiều)

Nếu nhiều miền chỉ số của mảng thì mảng đó đợc gọi là mảng nhiều chiều

Giả sử ta có một ma trận biểu diễn bằng mảng:

Ma trận:



3 4 5 6

5



4 7 2



1 3 2 7

Khai báo:

TYPE

Mang:array[1..3,1..4] of integer;

Var

A:mang;

Hoặc

Var

A:array[1..3,1..4] of integer;

để truy nhập tới phần tử ở hàng 2 cột 3 thì ta viết nh sau: a[2,3]

Một số ví dụ về mảng

Ví dụ về mảng một chiều

Ví dụ 1: Nhập vào một mảng các số nguyên. In ra màn hình tất cả các số lớn nhất trong dãy.

Program VD1;

Uses CRT;

Var

a:array[1..100] of Integer;



80



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



i, max, n:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

max:=a[1];

For i:=2 to n do

If max
For i:=1 to n do

If max=a[i] then Writeln( so lon nhat,max,nam o vi tri,i);

Readln;

END.

Ví dụ 2: Nhập vào một mảng các số nguyên. Sắp xếp mảng theo thứ tự tăng dần.

Program VD2;

Uses CRT;

Var

a:array[1..100] of Integer;

i, j, n,tg:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

For i:=1 to n-1 do

For j:=i+1 to n do

if a[i]>a[j] then

Begin

tg:=a[i];



81



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



a[i]:=a[j];

a[j]:=tg;

end;

For i:=1 to n do

Write(a[i]:6);

Readln;

END.

Ví dụ 3: Nhập vào một mảng các số nguyên. In ra màn hình phần tử âm đầu tiên.

Program VD3;

Uses CRT;

Var

a:array[1..100] of Integer;

i, n:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

For i:=1 to n do

If a[i]<0 then

Begin

Writeln(Phan tu am dau tien la:,a[i]);

break;

End;

Readln;

End.

Ví dụ 4: Nhập vào một mảng các số nguyên. In ra màn hình phần tử dơng cuối cùng.

Program VD4;

Uses CRT;

Var

a:array[1..100] of Integer;



82



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



i, n:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

For i:=n downto 1 do

If a[i]>0 then

Begin

Writeln(phan tu duong cuoi cung la:,a[i]);

Break;

end;

Readln;

End.

Ví dụ 5: Nhập vào một mảng các số nguyên. Xoá phần tử thứ k của mảng.

Program VD5;

Uses CRT;

Var

a:array[1..100] of Integer;

i,k, n:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

Repeat

Write(Nhap vao vi tri can loai bo k=);

readln(k);

Until (k>=1) and (k<=n);

For i:=k to n-1 do



83



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



a[i]:=a[i+1];

For i:=1 to n-1 do

Begin

Writeln(Day sau khi laoi bo phan tu thu, k, la:);

Write(a[i]:6);

End;

readln;

END.

Ví dụ 6: Nhập vào một mảng các số nguyên. Nhập vào một số nguyên, hãy chèn số nguyên đó vào

vị trí thứ k của mảng.

Program VD5;

Uses CRT;

Var

a:array[1..100] of Integer;

i,k, n:Integer;

BEGIN

Write( Nap vao so phan tu cua mang n=);readln(n);

For i:=1 to n do

Begin

Write( Nhap vao phan tu thu a[,i,]=);

readln(a[i]);

end;

Repeat

Write(Nhap vao vi tri can loai bo k=);

readln(k);

Until (k>=1) and (k<=n);

Write( Nhap vao so b=); readln(b);

For i:=n+1 downto k+1 do

a[i]:=a[i-1];

a[k]:=b;

For i:=1 to n+1 do

Begin

Writeln(Day sau khi chen them so,b, vao vij tri thu, k, la:);

Write(a[i]:6);

End;

readln;

END.



84



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Bài tập về mảng

Bài 1: Viết chơng trình nhập một mảng các số nguyên. Tìm các giá trị nhỏ nhất, lớn nhất cùng vị trí

của chúng

Bài 2: Nhập vào một dãy số gồm n số thực. In ra màn hình những phần tử sai khác với trung bình

cộng của dãy không quá 1.

Bài 3: Viết chơng trình chèn thêm một số vào vị trí thứ n của một mảng các số nguyên.

Bài 4: Viết chơng trình xóa phần tử thứ n trong một mảng các số nguyên.

Bài 5: Viết chơng trình xếp thứ tự từ nhỏ tới lớn các phần tử của một mảng các số nguyên, sử dụng

thuật giải lựa chọn.

Bài 6: Viết chơng trình xếp thứ tự từ nhỏ tới lớn các phần tử của một mảng các số nguyên, sử dụng

thuật giải Chèn.

Bài 7: Viết chơng trình xếp thứ tự từ nhỏ tới lớn các phần tử của một mảng các số nguyên, sử dụng

thuật giải nổi bọt

Bài 8: Nhập danh sách gồm họ đệm và tên. Sắp xếp lại theo thứ tự abc của tên rồi in ra màn hình.

Bài 9: Nhập một mảng các số nguyên. Sau đó nhập vào một số và tìm xem số ấy có trong mảng hay

không sử dụng thuật giải tìm kiếm tuyến tính.

Bài 10: Nhập một mảng các số nguyên. Sau đó nhập vào một số và tìm xem số ấy có trong mảng

hay không sử dụng thuật giải tìm kiếm nhị phân.

Bài 11: Viết chơng trình nhập vào một dãy số nguyên, loạI bỏ những giá trị trùng nhau (Chỉ giữ lại

một) mà vẫn giữ nguyên thứ tự và in ra màn hình.

Bài 12: Nhập một dãy số nguyên và lu trong một mảng. Không dùng mảng trung gian, hãy in ra dãy

con tăng nghiêm ngặt có tổng các phần tử lớn nhất.

Ví dụ: 1 3 2 8 10 12 7 29 6 3

in ra: 7 29

Bài 13: Viết chơng trình cho phép cộng 2 số nguyên có độ dài 300 chữ số.

Bài 14: Viết chơng trình cho nhân 2 số nguyên có độ dài 300 chữ số

Bài 15: Một công ty buôn bán xe hơi hiện có ba ngời bán và 4 loại xe. Lập trình nhập số xe bán đợc

của từng ngời theo từng loại xe, sau đó tính tổng số xe bán đợc theo từng loại.

Bài 16: Viết chơng trình nhập vào một ma trận vuông nxn. In ra những dòng có tổng giá trị các phần

tử không kể các phần tử trên đờng chéo nhỏ hơn hay bằng giá trị của phần tử trên đờng chéo.

Bài 17: Viết chơng trình nhập vào một mảng các số nguyên 4x6, sau đó nhập vào một số và tìm

xem số đó xuất hiện mấy lần trong mảng, tại vị trí nào? In mảng theo dạng ma trận để kiểm

tra kết quả.

Bài 18: Viết chơng trình nhập vào hai mảng các số nguyên A,B có kích thớc 3x4 . In mảng C=A+B

ra màn hình theo dạng ma trận biết Cịj= Aịj+ Bịj

Bài 19: Ma trận ckuyển vị AT của A nxn là ma trận trong đó AịjT =Aji .Viết chơng trình nhập vào

một ma trận vuông rồi in ra ma trận chuyển vị của nó.

Bài 20: viết chơng trình nhập vào một dãy n số a[1],a[2],..,a[n] và in ra màn hình các thông tin sau:

Tổng các phần tử của dãy.

Số lợng số hạng dơng và tổng của các số hạng dơng.

Số lợng số hạng âm và tổng của các số hạng âm.

Trung bình cộng của dãy.

Chỉ số của số hạng dơng đầu tiên của dãy.

Chỉ số của số hạng âm đầu tiên của dãy.

Chỉ số của số hạng âm cuối cùng của dãy.

Chỉ số của số hạng dơng cuối cùng của dãy.

Số hạng lớn nhất của dãy và chỉ số của nó.

Số hạng nhỏ nhất của dãy và chỉ số của nó.

Số hạng âm lớn nhất của dãy và chỉ số của nó.

Số hạng dơng nhỏ nhất của dãy và chỉ số của nó.

Số lợng số hạng dơng liên tiếp nhiều nhất .

Số lợng số hạng dơng liên tiếp có tổng lớn nhất.

Số lợng số hạng âm liên tiếp nhiều nhất .

Số lợng số hạng âm liên tiếp có tổng lớn nhất .



85



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Số lợng các số hạng liên tiếp đan dấu nhiều nhất (dãy số hạng liên tiếp đợc gọi là đan dấu

nếu tích hai số liên tiếp âm).

Bài 21: Viết trong cùng một chơng trình thực hiện các yêu cầu sau :

a. Nhập vào từ bàn phím một dãy số nguyên A có 10 phần tử và một số nguyên n thỏa mãn

tính chất: Chữ số tận cùng của n bằng 6 và - 180 < n 1200

b. In ra màn hình số phần tử trong dãy A thỏa tính chất:có hai chữ số chia đúng cho n.

c. Tính tích của các phần tử A[i] thỏa tính chất :

- 10
Bài 22: Viết chơng trình đổi một số nguyên dơng từ hệ cơ số 10 sang hệ cơ số 2.

Bài 23: Viết chơng trình tính điểm trung bình, xếp loại cho các học sinh trong một lớp với hai môn

thi Văn, Toán và in các thông tin thống kê sau;

Số lợng các học sinh đợc xếp loại Giỏi, Khá, Trung bình, yếu. Tỷ lệ phần trăm tơng ứng.

Số lợng các học sinh dới điểm trung bình môn Văn, Toán. Tỷ lệ phần trăm tơng ứng.

Bài 24: Viết chơng trình nhập vào từ bàn phím một dãy số có 10 phần tử và một số X. Dò tìm xem

trong dãy có hai phần tử liên tiếp nào mà tổng của chúng bằng X kkông?

Bài 25: Viết chơng trình nhập vào từ bàn phím một dãy số nguyên. In ra màn hình tần xuất (số lần

xuất hiện) của các số trong dãy số đó.

Bài 26: Nhập một số nguyên dơng n <= 200 và dãy n số nguyên a[1],..,a[n]. Thông báo ra màn hình

các thông tin sau: có bao nhiêu số khác nhau từng đôi trong dãy, giá trị của mỗi số đó và mỗi

số đó bằng những số hạng nào của dãy

Ví dụ với dãy 1,2,3,5,3,2,1,5,2,2,5,5 ta phải thông báo ra màn hình các thông tin sau: có 4 số

hạng khác nhau, số 1 là a[1] a[7], số 2 là a[2] a[6] a[9] a[10], số 3 là a[3] a[5], số 5 là a[4]

a[8] a[11] a[12].

Bài 27: Nhập một số nguyên dơng n <= 200 và hai dãy n số nguyên a[1],.., a[n] và b[1],.., b[n].

Thông báo ra màn hình xem hai dãy đó có cùng các số hạng nh nhau và chỉ khác nhau về thứ

tự sắp xếp hay không?

Bài 28: Viết chơng trình tạo và in ra màn hình ma trận đơn vị cấp 10.

Bài 29: Viết chơng trình nhập vào từ bàn phím một ma trận vuông và in ra màn hình tổng các phần

tử trên đờng chéo chính, tổng các phần tử trên đờng chéo thứ hai.

Bài 30: Nhập mảng hai chiều A gồm m hàng n cột.

- Tìm giá trị lớn nhất và nhỏ nhất trên mỗi hàng, mỗi cột cùng với vị trí (dòng, cột) của các

giá trị này.

- Tìm phần tử có giá trị lớn nhất và nhỏ nhất của mảng A cùng với vị trí (dòng, cột) của hai

phần tử này.

- Trong mảng A có bao nhiêu phần tử bằng phần tử lớn nhất.

Bài 31: Cho n điểm khác nhau trên mặt phẳng vuông góc pi =(xi,yi) 1 <= i <= n. Nhập các tọa độ

pi từ bàn phím. Xét đờng gấp khúc lần lợt nối các điểm p1,p2,..,pn,p1.

Đờng gấp khúc này có tự cắt không, tức là có hay không các đỉnh pi và pj sao cho đoạn

[pi,pi+1] cắt đoạn [pj,pj+1] tại điểm không là đầu mút của đoạn .

- Nếu đờng gấp khúc không là tự cắt thì nó có phải là đa giác lồi n đỉnh hay không?

- Nếu không hãy tìm trong số n điểm trên các điểm lập thành đa giác lồi bọc tất cả n điểm .



86



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



chơng VI

chơng trình con

hàm và thủ tục

Trong quá trình viết chơng trình có những đoạn chơng trình thực hiện một công việc nào đó

đợc xuất hiện nhiều lần. Để tránh viết lại đoạn chơng trình này, ta chuyển đoạn chơng trình thành

một chơng trình con, mỗi lần cần thì gọi nó.

Chơng trình con thờng đợc viết nhằm thực hiện một công việc. Ngời sử dụng chơng trình con

chỉ cần biết tên chơng trình và truyền đầy đủ số liệu cho các tham số là chơng trình con có thể thực

hiện mà không cần biết thuật toán và các phép sử lý trong thân chơng trình con.

Khi lập trình, ngời lập trình thờng phân bổ bài toán ra nhiều công việc cụ thể, mỗi công việc

cụ thể đợc viết dới dạng một chơng trình con. Cách viết này giúp cho ngời lập trình nhìn chơng trình

một cách thoáng đạt, dễ quản lý và gỡ rối đồng thời tiết kiệm tối đa bộ nhớ.

Ví dụ: Để tính tổng hai số nguyên, ngời lập trình viết ra một chơng trình con với tên là TONG(a,b),

avà b là hai tham số đại diện cho hai số nguyên bất kỳ. Khi muôn stinh stổng hai số 6 và 7 ta chỉ

việc gọi chơng trình con nh sau: TONG(6,7) là ta sẽ có kết quả là 11.

Chơng trình con trong Pascal đợc chia làm hai loại:

+ Loại 1: Hàm

+ Loại 2: Thủ tục

1. Hàm

Cấu trúc của hàm có dạng:

FUNCTION Ten_ham(Tham số 1; Tham số 2,......): kiểu trả về;

Var



Khai báo các biến cục bộ sử dụng trong hàm;



Begin

các lệnh tính toán;

Ten_ham:=giá trị hàm nhận;

End;

Lời gọi hàm:

Ten_ham(danh sách các tham số thực sự)

Ví dụ: Lập trình tính tổng diện tích hai hình tam giác. Viết hàm tính diện tích hình tam giác.

Program tam_giac;

Var



a1,h1,a2,h2 ,tong: real;



Function dientich(a,h:real):real;

Begin

dientich:=a*h/2;

end;

BEGIN

Write( Nhap vao canh day cho tam giac 1 a1=);Readln(a1);



87



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Write( Nhap vao duong cao cho tam giac 1 h1=);Readln(h1);

Write( Nhap vao canh day cho tam giac 2 a2=);Readln(a2);

Write( Nhap vao duong cao cho tam giac 2 h2=);Readln(h2);

tong:=dientich(a1,h1)+dientich(a2,h2);

Writeln(tong dien tich hai hinh la:,Tong:8:2);

Readln;

END.

2. Thủ tục

Cấu trúc của thủ tục có dạng:

PROCEDURE Ten_thu_tuc(Tham so 1:kiểu;Tham số 2: Kiểu;.........;Var Tham số k: kiểu;

Var tham số (k+1);....);

Var

Khai báo các biến cục bộ;

Begin

Các lệnh tính toán;

End;

Lời gọi thủ tục:

Ten_thu_tuc(Danh sách các tham số thực sự);

Ví dụ:Viết thủ tục đổi chỗ hai số. Sau đó dùng để viết chơng trình sắp xếp ba số a, b, c theo thứ tự

tăng dần.

Program



sapxep;



Var

a,b,c:integer;

{**********************************************}

Procedure



doicho(Var a:integer;var b:integer);



Var

tg:integer;

Begin

tg:=a;

a:=b;

b:=tg;

end;

{Chuong trinh chinh}

BEGIN

Write( Nhap vao a=);Readln(a);



88



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Write( Nhap vao b=);Readln(b);

Write( Nhap vao c=);Readln(c);

if a>b then doicho(a,b);

if a>c then doicho(a,c);

if b>c then doicho(b,c);

Writeln(ket qua la:,a,b,c);

readln;

END.

3. Sự khác nhau giữa thủ tục và hàm

Sự khác nhau cơ bản giữa hàm và thủ tục: hàm cho một giá trị thông qua tên hàm và hàm có

thể tham gia vào các biểu thức tính toán, thủ tục không cho một giá trị nào cả. Trong thân hàm bao

giờ cũng có giá trị gán cho tên hàm.

Các tham số khác sau tên hàm và tên thủ tục gọi là các tham số hình thức (hay còn gọi là

đối). Trong thủ tục, các tham số hình thức có các loại: các tham số đợc khai báo sau chữ Var gọi là

tham số biến (tham biến), các tham số khai báo không có chữ Var gọi là tham số giá trị (tham trị).

Trong hàm chỉ có tham số giá trị(tham trị).

Tham số thực sự là các tham số dùng trong lời gọi hàm hay thủ tục. Danh sách các tham số

thực sự trong lời gọi phải tơng ứng với danh sách các tham số hình thức trong khai báo chơng trình

con và chúng phải tơng ứng về kiểu.

Trong thủ tục, các tham số giá trị thờng là các biến để chứa dữ liệu đa vào thủ tục; các tham

số biến là các biến mà kết quả tính toán của thủ tục sẽ chứa vào đó khi ra khỏi thủ tục, ta có thể

dùng chúng để tính toán tiếp.

4. Biến toàn cục biến cục bộ

Biến toàn cục là biến khai báo ở đầu chơng trình chính, tồn tại trong suốt thời gian làm việc

của chơng trình. Có thể sử dụng và làm thay đổi giá trị của biến toàn cục nhờ các câu lệnh trong chơng trình chính cũng nh trong tất cả các chơng trình con.

Biến cục bộ là biến đợc khai báo ở đầu một chơng trình con. Chúng đợc cấp phát bộ nhớ khi

chơng trình con đợc gọi tới và bị xoá khi máy ra khỏi chơng trình con. Biến cục bộ có giá trị trong

chơng trình con và tất cả các chơng trình con khác nằm trong chơng trình con này.

Nếu tên biến cục bộ của một chơng trình con trùng với một tên biến toàn cục thì máy cũng

không bị nhầm lẫn, máy sẽ dùng hai ô nhớ khác nhau để lu trữ hai biến, khi ra khỏi chơng trình con

biến cục bộ bị xoá.

Khi gặp một lời gọi tới chơng trình con, máy sẽ thực hiện các bớc sau:

Cấp phát bộ nhớ cho các đối, các biến cục bộ.

Truyền giá trị của các tham số thực sự cho các tham số giá trị tơng ứng, truyền địa

chỉ của các tham số thực sự ứng với tham số biến cho các tham số biến của thủ tục.

Thực hiện các lệnh trong chơng trình con, trong khi thực hiện chơng trình con, các

biến cục bộ và các tham số giá trị có thể bị biến đổi nhng không ảnh hởng tới các

biến bên ngoài. Trái lại mọi thay đổi của tham số biến trong chơng trình con sẽ kéo

theo sự thay đổi của tham số thực sự tơng ứng (vì có sự truyền theo địa chỉ). Do đó,

khi ra khỏi chơng trình con, các tham số thực sự ứng với tham số biến vẫn giữ đợc giá

trị mới nhất do chơng trình con tạo ra.



89



Giáo trình Tin học Đại cơng



KS.Đặng Quang Thanh



Thực hiện xong các lệnh của chơng trình con, máy giải phóng các đối và các biến cục

bộ, trở về nơi gọi chơng trình con.

Lấy kết quả thực hiện chơng trình con: nếu là hàm thì lấy kết quả ở tên hàm, nếu là thủ tục

thì lấy kết quả ở tham số thực sự ứng với tham số biến. Khi cần lấy duy nhất một giá trị từ chơng

trình con thì ta lập một Function, khi cần lấy từ hai giá trị trở lên từ chơng trình con hoặc không lấy

giá trị nào thì ta phải lập Procedure.

5. Một số ví dụ về hàm

Ví dụ 1: Viết hàm tính tổng các số chẵn từ a đến b (a, b nguyên)

Bớc 1: Phân tích thuật toán

- Nhập vào hai số a và b

- Khởi động biến t:=0

- Dùng một vòng lặp với biến điều khiển là i chạy từ a cho đến b, trong quá trình chạy kiểm

tra xem i chẵn (i mod 2=0) thì cộng i thêm vào tổng (t:=t+i).

- Kết thúc

Bớc 2: Sơ đồ thuật toán (bạn đọc tự viết)

Bớc 3: Văn bản chơng trình

Program tinhtong;

Var

a,b:integer;

{**************************************************}

Function tong(a,b:integer):integer;

Var

i,t:integer;

Begin

t:=0;

For i:=a to b do

If i mod 2=0 then

t:=t+i;

tong:=t;

BEGIN

Write(Nhap a=);Readln(a);

Write(Nhap b=);Readln(b);

Writeln(Tong cua cac so chan trong doan a va b la tong=,tong(a,b));

Readln;

END.

Ví dụ 2: Viết chơng trình dạng menu:



90



Xem Thêm
Tải bản đầy đủ (.doc) (236 trang)

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×