Dữ liệu kiểu mảng

Một phần của tài liệu Đại cương về pascal (Trang 79 - 87)

chơng V Kiểu vô hớng liệt kê , kiểu đoạn con

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

1. Định nghĩa: Mảng là tập hợp hữu hạn các phần tử có cùng kiểu. Số phần tử của mảng đợc xác định ngay từ khi định nghĩa ra mảng. Mỗi phần tử của mảng đợc truy nhập trực tiếp thông qua tên mảng cùng với chỉ số của mảng đợc đặt trong hai ngoặc vuông[].

2. Định nghĩa kiểu mảng và khai báo TYPE

Kiểu_mảng=array[miền chỉ số1, miền chỉ số 2...] of kiểu_phần_tử;

Var

Tên_biến_mảng:Kiểu_mảng;

Hoặc có thể khai báo trực tiếp Var

Ten_biến_mảng:array[miền chỉ số1, miền chỉ số 2...] of kiểu_phần_tử;

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 Write(diem[i]) hoặc writeln(diem[i]);

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;

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<a[i] then max:=a[i];

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];

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;

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

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.

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 .

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<A[i]<20

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 .

chơng VI

Một phần của tài liệu Đại cương về pascal (Trang 79 - 87)

Tải bản đầy đủ (DOC)

(236 trang)
w