mảng 2 chiều pascal

Type

Kmang1 = array[1.2] of array[1.3] of Real;

Bạn đang xem: mảng 2 chiều pascal

Kmang2 = array[‘a’.’c’] of array[1.3] of String[15];

Var

X : Kmang1;

Y : Kmang2;

Hiểu Theo phong cách này thì X là một trong mảng bao gồm nhị thành phần X[1] và X[2] tuy nhiên

mỗi thành phần đó lại là một trong mảng bao gồm 3 thành phần :

Xem thêm: đọc truyện hoa hồng giấy

X[1] là mảng với 3 thành phần loại thực X[1][1], X[1][2], X[1][3]

X[2] là mảng với 3 thành phần loại thực X[2][1], X[2][2], X[2][3]

Ðiều tương tự động cũng vận dụng mang đến vươn lên là mảng Y.

Hai cơ hội ghi chép X[i][j] và X[i,j] nằm trong duy nhất thành phần.

pdf22 trang | Chia sẻ: maiphuongdc | Lượt xem: 24376 | Lượt tải: 10download

Xem thêm: có lẽ tôi là một nhân ngư giả

Bạn đang được coi trước 20 trang tư liệu Pascal - Mảng hai phía (ma trận), nhằm coi tư liệu hoàn hảo các bạn click nhập nút DOWNLOAD ở trên

MẢNG HAI CHIỀU (MA TRẬN) 10.2.1. Khai báo mảng nhị chiều: Mảng hai phía, thường hay gọi là quái trận, là sự việc không ngừng mở rộng thẳng của mảng một chiều. Ta cũng có thể có nhị cơ hội khai báo. Cách 1: Khai báo thẳng : VAR Tênmảng : Array[n1..n2 , m1..m2] of Tênkiểudữliệu; trong cơ n1, n2 là những hằng với nằm trong loại tài liệu và n1 � n2, bọn chúng xác lập phạm vi của chỉ số loại nhất, gọi là chỉ số dòng sản phẩm. Tương tự động m1, mét vuông là những hằng với nằm trong loại tài liệu và m1 � mét vuông, bọn chúng xác lập phạm vi của chỉ số thứ nhị, gọi là chỉ số cột. Giống như mảng một chiều, loại tài liệu của những chỉ số chỉ hoàn toàn có thể là loại điểm được: nguyên vẹn, ký tự động, lô gic, liệt kê hoặc đoạn con, ko được là loại thực hoặc chuỗi. Ví dụ, mang đến khai báo : Var X : array[1..2, 1..3] of Real; Y : array[‘a’..’c’ , 1..3] of String[15]; Kết ngược tớ sẽ có được nhị mảng nhị chiều: Mảng X bao gồm 6 thành phần nằm trong loại tài liệu thực: X[1,1], X[1,2], X[1,3] X[2,1], X[2,2], X[2,3] Mảng Y bao gồm 9 thành phần nằm trong loại chuỗi String[15] : Y[‘a’,1], Y[‘a’,2], Y[‘a’, 3] Y[‘b’,1], Y[‘b’,2], Y[‘b’, 3] Y[‘c’,1], Y[‘c’,2], Y[‘c’, 3] cũng có thể ví X là một trong căn nhà nhị tầng, từng tầng với phụ thân chống như thể nhau. Các tầng được viết số từ là 1 cho tới 2, trong những tầng, những chống được viết số từ là 1 đến 3. Tương tự động, Y là một trong căn nhà phụ thân tầng, những tầng được viết số theo lần lượt là ‘a’, ‘b’, ‘c’, từng tầng với phụ thân chống được viết số theo lần lượt là 1 trong, 2, 3. Cách 2: Biến mảng được khai báo trải qua một loại mảng đã và đang được định nghĩa trước cơ bằ?g kể từ khóa TYPE, tức là: TYPE Tênkiểumảng= Array[n1..n2 , m1..m2] of Tênkiểudliệu; VAR Tênmảng : Tênkiểumảng ; Ví dụ: Hai mảng X và Y trình bày bên trên hoàn toàn có thể được khai báo theo dõi nhị bước sau: Type Kmang1 = array[1..2, 1..3] of Real; Kmang2 = array[‘a’..’c’ , 1..3] of String[15]; Var X : Kmang1; Y : Kmang2; Chú ý: - cũng có thể coi mảng nhị chiề? là mảng một chiều tuy nhiên từng thành phần của này lại là một trong mảng một chiều. Hai mảng X, Y trình bày bên trên hoàn toàn có thể khai báo như sau: Type Kmang1 = array[1..2] of array[1..3] of Real; Kmang2 = array[‘a’..’c’] of array[1..3] of String[15]; Var X : Kmang1; Y : Kmang2; Hiểu Theo phong cách này thì X là một trong mảng bao gồm nhị thành phần X[1] và X[2] tuy nhiên mỗi thành phần đó lại là một trong mảng bao gồm 3 thành phần : X[1] là mảng với 3 thành phần loại thực X[1][1], X[1][2], X[1][3] X[2] là mảng với 3 thành phần loại thực X[2][1], X[2][2], X[2][3] Ðiều tương tự động cũng vận dụng mang đến vươn lên là mảng Y. Hai cơ hội ghi chép X[i][j] và X[i,j] nằm trong duy nhất thành phần. Khai báo và gán độ quý hiếm ban đầu: cũng có thể khai báo và gán độ quý hiếm ngay lập tức cho 1 mảng hai phía, chẳng hạn: Type Kmang1 = array[1..2, 1..3] of Real; Const X : Kmang1 = ( (1.5, 2.5, 3.5), (5.0, 6.5, 7.0) ); Khi cơ X là một trong mảng hai phía với 6 thành phần nằm trong loại thực và có mức giá trị là: X[1,1]=1.5, X[1,2]=2.5, X[1,3]=3.5 X[2,1]=5.0, X[2,2]=6.5, X[2,3]=7.0 Cần nhấn mạnh vấn đề rằng tuy nhiên kể từ khóa ở đấy là Const tuy vậy X và những phần tử của X hoàn toàn có thể người sử dụng giống như các vươn lên là, tức là những thành phần của X hoàn toàn có thể thay cho thay đổi giá trị được. 10.2.2. Các thao tác bên trên quái trận : Ðể xác lập một thành phần nhập mảng nhị chiề?, tớ viết: Tênbiếnmảng[chỉ số 1, chỉ số 2] Ví dụ: X[1,1]:=12.5; X[2,1]:=X[1,1]+15; Y[‘a’,1]:=‘Tran Thi Mai’; Ðể nhập tài liệu cho 1 mảng hai phía, tớ nên người sử dụng nhị vòng lặp duyệt theo nhị chỉ số, ví dụ điển hình ham muốn nhập tài liệu mang đến mảng X, tớ viết: For i:=1 to tát 2 tự For j:=1 to tát 3 tự begin Write(‘nhập thành phần sản phẩm ‘, i, ‘ cột ‘, j , ‘: ‘); Readln(X[i, j]); end; Tương tự động, mệnh lệnh nhập tài liệu mang đến mảng Y được ghi chép là: For ch:=‘a’ to tát ‘c’ tự For j:=1 to tát 3 tự begin Write(‘nhập thành phần sản phẩm ‘, ch , ‘ cột ‘, j , ‘: ‘); Readln(X[ch, j]); end; trong cơ ch là vươn lên là loại ký tự động, còn i và j là những vươn lên là nguyên vẹn. Ðể in mảng X lên màn hình hiển thị, trình diễn tương tự như cơ hội ghi chép quái trận, từng hàng in bên trên một dòng sản phẩm, tớ người sử dụng mệnh lệnh : For i:=1 to tát 2 tự begin For j:=1 to tát 3 tự write(X[i, j]:3:1); { in sản phẩm loại i} Writeln; { xuống dòng sản phẩm, sẵn sàng in sản phẩm tiếp sau } end; 10.2.3. Các ví dụ về quái trận : Vì quái trận là mảng một chiều của những mảng một chiều nên nhiều Việc về mảng được không ngừng mở rộng đương nhiên mang đến quái trận. Ví dụ 10.6: Tính tổng của nhị quái trận Nhập nhập nhị quái trận A, B cấp cho NxM. Tính quái trận C là tổng của nhị quái trận A và B, in quái trận C lên màn hình hiển thị. Công thức tính những thành phần của quái trận C= A+B : C[i,j ] = A[i, j] + B[i, j] với i=1,..., N, và j=1,..., M Chương trình như sau: PROGRAM VIDU106; { Tính tổng nhị quái trận } Uses CRT; Var A, B, C : Array[1..10, 1..10] of Real; i, j , N, M : Integer; Begin Clrscr; Repeat Write(‘Nhập số sản phẩm N, số cột M : ‘); Readln(N, M); Until ( N>0) and ( N0) and (M<11); For i:=1 to tát N tự For j:=1 to tát M tự begin Write(‘Nhập A[‘ , i, ‘,’ , j , ‘]: ‘); Readln(A[i,j]); end; { nhập B và tính C luôn} For i:=1 to tát N tự For j:=1 to tát M tự begin Write(‘Nhập B[‘ , i, ‘,’ , j , ‘]: ‘); Readln(B[i,j]); C[i, j]:=A[i, j] + B[i, j]; end; { In quái trân A lên màn hình hiển thị } Writeln(‘ Ma tran A la :’); For i:=1 to tát N tự begin For j:=1 to tát M tự write(A[i, j]:3:0); Writeln; end; { In quái trân B lên màn hình hiển thị } Writeln(‘ Ma tran B la :’); For i:=1 to tát N tự begin For j:=1 to tát M tự write(B[i, j]:3:0); Writeln; end; { In quái trân C lên màn hình hiển thị } Writeln(‘ Ma tran C la :’); For i:=1 to tát N tự begin For j:=1 to tát M tự write(C[i, j]:3:0); Writeln; end; Readln; End. Chạy công tác Chép tập luyện tin yêu mối cung cấp Ví dụ 10.7: Tìm số lớn số 1 (số nhỏ nhất) nhập quái trận A: Giả sử A là quái trận N sản phẩm, M cột, và Max là vươn lên là chứa chấp số lớn số 1 nên tìm. Khởi đầ? tớ gán A[1,1] mang đến Max, tiếp sau đó duyệt toàn bộ những thành phần của quái trận, nếu như thành phần này to hơn Max thì lưu nó nhập Max, tức là: Max:=A[1,1]; For i:=1 to tát N tự For j:=1 to tát M tự if Max< A[i, j] then Max:=A[i, j]; Writeln(‘ Số lớn số 1 là ’, Max); Ví dụ 10.8 : Tìm số lớn số 1 (hay số nhỏ nhất) vào cụ thể từng sản phẩm (hay từng cột) của quái trận A: Hàng i ( 1� i� N ) của quái trận A với dạng : A[i,1], A[i,2], ..., A[i,M] Nếu coi i là thắt chặt và cố định thì này đó là mảng một chiều với M thành phần, nên số rộng lớn nhất của sản phẩm i được mò mẫm vì thế những lệnh: Max:=A[i, 1]; For j:=1 to tát M tự if Max< A[i, j] then Max:=A[i, j]; Writeln(‘Sln của sản phẩm ‘, i, ‘ là: ‘, Max) ; Vì với tất cả thảy N sản phẩm nên việc làm bên trên nên thực hiện N thứ tự ứng với i=1, 2, ..., N, tức là: For i:=1 to tát N tự begin { mò mẫm số lớn số 1 của sản phẩm i } Max:=A[i, 1]; For j:=1 to tát M tự if Max< A[i, j] then Max:=A[i, j]; Writeln(‘Sln của sản phẩm ‘, i, ‘ là: ‘, Max) ; end; Ví dụ 10.9: Kiểm tra quái trận vuông A với đối xứng ko ?. Ma trận vuông A gọi là đối xứng nếu như nó không bao giờ thay đổi khi tớ thay đổi cột thành sản phẩm và thay đổi sản phẩm trở nên cột. Nói cách tiếp theo, quái trận A là đối xứng khi và chỉ khi A[i,j] =A[j,i] với từng i=1, ..., N và với từng j=1, .., N. Ví dụ, mang đến hai quái trận bên dưới đâỵ: thì A là đối xứng, còn B ko đối xứng vì thế B[1,2] � B[2,1]. Chỉ cần phải có một cặp i, j sao mang đến A[i,j]A[j,i] thì A là quái trận ko đối xứng. Vậy những mệnh lệnh đánh giá tính đối xứng của quái trận A là: Kiemtra := TRUE; For i:=1 to tát N tự For j:=1 to tát N tự if A[i, j]A[j, i] then Kiemtra:=FALSE ; If Kiemtra=TRUE then writeln(‘ Ðối xứng ‘) else writeln(‘ Không đối xứng ‘); Trong số đó Kiemtra là một trong vươn lên là loại lôgic. Nhận xét rằ?g nhị mệnh lệnh For phía trên quét dọn qua quýt toàn bộ những thành phần của quái trận nên với rộng lớn nửa số thứ tự lặp là quá. Thật vậy, lối chéo cánh chủ yếu phân tách quái trận ra thực hiện nhị phần: nửa ngược và nửa nên. Các phầ? tử bên trên lối chéo cánh chủ yếu thì đối xứng với chủ yếu nó nên không nhất thiết phải đánh giá. Nếu từng phầ? tử ở nửa bên ngược đều vì thế thành phần đối xứng với nó ở nửa ở bên phải thì quái trận rõ nét là đối xứng. Vì vậy chỉ việc duyệt đánh giá những thành phần ở nửa phía trái lối chéo đó là đầy đủ (vùng tam giác). Thuật toán đảm bảo chất lượng rộng lớn được kiến nghị là : Kiemtra := TRUE; For i:=2 to tát N tự For j:=1 to tát i-1 tự if A[i, j]A[j, i] then Kiemtra:=FALSE ; If Kiemtra=TRUE then writeln(‘ Ðối xứng ‘) else writeln(‘ Không đối xứng ‘); Hai câu mệnh lệnh For bên trên vẫn tồn tại một điểm yếu kém là: khi xẩy ra A[i,j]A[j, i] rồi, đúng ra hoàn toàn có thể tạm dừng và Kết luận ko đối xứng ngay lập tức thì những vòng For vẫn nối tiếp, i chạy cho tới N và j cho tới i-1. Sử dụng câu mệnh lệnh While tiếp tục xử lý được nhược đặc điểm đó. Chỉ cần thiết xảy ra A[i,j]A[j,i] một thứ tự là vươn lên là Kiemtra được gán ngay lập tức gía trị FALSE, khi đó ĐK Kiemtra=TRUE bị sai và cả nhị vòng lặp đều kết đốc . Kiemtra:=TRUE; i:=2; While (Kiemtra=TRUE) and (i<= N) tự begin j:=1; While ( Kiemtra=TRUE) and ( j<=i-1) tự if A[i, j] A[j, i] then Kiemtra:=FALSE else j:=j+1; i:=i+1; end; If Kiemtra=TRUE then writeln(‘ Ðối xứng ‘) else writeln(‘ Không đối xứng ‘); Chương trình tiếp sau đây tiến hành những việc làm sau: Nhập nhập quái trận vuông A cấp cho N và in quái trận A lên màn hình hiển thị Ðếm nhập quái trận A với từng nào số 0 Tìm số lớn số 1 nhập A Tìm số nhỏ nhất vào cụ thể từng sản phẩm của A Kiểm tra coi A liệu có phải là quái trận đối xứng ko. PROGRAM VIDU109; Uses CRT; Type Matran = Array[1..10, 1..10] of Real; Var A : Matran; i, j , N, Dem : Integer; Max, Min : Real; Kiemtra: Boolean; Begin Clrscr; Repeat Write(‘Nhập cấp cho N : ‘); Readln(N); Until ( N>0) and ( N<11) ; For i:=1 to tát N tự For j:=1 to tát N tự begin Write(‘Nhập A[‘, i, ‘,’ , j , ‘]: ‘); Readln(A[i,j]); end; { In quái trân A lên màn hình hiển thị } Writeln(‘ Ma tran A la : ’); For i:=1 to tát N tự begin For j:=1 to tát N tự write(A[i, j]: 3 :0); Writeln; end; { Ðếm số số 0 } Dem:=0; For i:=1 to tát N tự For j:=1 to tát N tự if A[i, j]=0 then Inc(Dem); Writeln(‘ Có ‘, Dem, ‘ số không’); { Tìm số lớn số 1 của quái trận } Max:=A[1,1]; For i:=1 to tát N tự For j:=1 to tát N tự if Max < A[i,j] then Max:=A[i,j]; Writeln(‘ Số lớn số 1 của quái trận= ‘, Max : 4:1); { Tìm số nhỏ nhất vào cụ thể từng sản phẩm của quái trận } For i:=1 to tát N tự begin Min:=A[i,1]; For j:=1 to tát N tự if Min > A[i,j] then Min:=A[i,j]; Writeln(‘ Số nhỏ nhất của sản phẩm ‘, i , ‘ là: ‘, Min : 4:1); end; { Kiểm tra quái trận với đối xứng không} Kiemtra:=True; For i:=1 to tát N tự For j:=1 to tát i-1 tự if A[i ,j]A[j ,i] then Kiemtra:=False; If Kiemtra=True then Writeln(‘ Ðối xứng’) else Writeln(‘ Không đối xứng’) ; Readln; End. Chạy Chép tập luyện tin yêu mối cung cấp

Các tệp tin đính thêm tất nhiên tư liệu này: