Em đang có một mớ bài tập Borland Pascal 7.0 (dễ có, khó cũng có)
Một mình em làm không xuể. Bác nào có lòng hảo tâm xin liên hệ tại hộp mail hxnghia1992@yahoo.com ; Em sẽ gửi BT cho
Em đang có một mớ bài tập Borland Pascal 7.0 (dễ có, khó cũng có)
Một mình em làm không xuể. Bác nào có lòng hảo tâm xin liên hệ tại hộp mail hxnghia1992@yahoo.com ; Em sẽ gửi BT cho
Bạn ko biết hay ko hiểu bài nào cứ post lên đây đi !!!!
PHẦN MA TRẬN
1/ Viết CT theo dạng thủ tục và hàm thực hiện các công việc sau :
a. Nhập ma trận (không cho biết số dòng, cột)
b. Xuất mà trận
c. Sắp xếp MT tăng theo hàng
d. Sắp xếp MT giảm theo cột
e. Sắp xếp MT tăng theo đường chéo chính (MT vuông)
f. Sắp xếp MT tăng theo đường chéo phụ (MT vuông)
g. Sắp xếp MT tăng theo hướng xoắn từ ngoài vào trong
h. KT xem MT có đối xứng loại 1 không
i. Sắp xếp MT tăng theo đường chéo chính, giảm theo đường chéo phụ (MT vuông)
j. KT MT vuông. Tính tổng giá trị tam giác vuông trên kể cả đường chéo
k. KT MT vuông. Lưu đường chéo chính - phụ vào 2 mảng 1 chiều rồi xuất ra
l. KT MT vuông. Lưu các đường chéo song song đường chéo chính vào mảng 1 chiều rồi xuất ra màn hình
m. KT MT có phải là MT có các phần tử trên 2 đường chéo bằng 0
n. KT MT có phải là MT có hơn nửa số phần tử = 0
o. KT MT có pjải là MT có các phần tử trên đường chéo =1,<>0
p. KT tính đối xứng tâm, đối xứng chéo chính, đối xứng chéo phụ
q. KT MT có phải là MT có mỗi hàng mỗi cột đều là hoán vị của [1..n]
r. KT MT có phải là MT có tổng mỗi hàng = tổng mỗi cột = tổng mỗi đừơng chéo
s. Xoá các phần tử trùng nhau trong MT
t. Xoá hàng/cột có STT là số nhập vào
* Đề không có ví dụ. Mong Bác thông cảm và giải giúp !
Cảm ơn
Có bao nhiêu bài bạn cứ post cả lên đi. Mọi người chia nhau giải cho lẹ.
Mấy anh/chị giải hết mớ bài tập ma trận giúp em trước đi.
Tinh thần "tương thân tương ái" của mấy anh chị em xin ghi nhận nhưng em chưa học tới mấy phần sau, tới đây là đủ rồi !
Mong anh chị giải giúp câu g và câu k trước (càng sớm càng tốt trong tuần này)
để em còn nộp bài
Cảm ơn nhiều !
Em đã bí rồi mới Post bài lên chứ đâu phải tại lười
Câu k thì em giải xong rồi nhưng còn câu g thì khó quá (chả biết làm từ đâu)
Mong các anh chị cho biết ý tưởng hay hướng giải thì em cũng "mãn nguyện" rồi
Nhớ giúp em nhen !
Cảm ơn nhiều
Mình không biết bạn đã giải các bài tập được hết chưa, nếu chưa thì có thể tham khảo bài này xem sao. Có thể hơi phức tạp đó, bạn chịu khó tìm hiểu nhé!
Thủ tục sắp xếp là MapSort, dựa trên thuật giải sắp xếp chọn trực tiếp. Thủ tục này sắp xếp tăng dần, ma trận cần sắp xếp là A, còn ma trận B là một ma trận để tham khảo vị trí. Các thủ tục Gen_.. để sinh ra ma trận B theo yêu cầu.Code:const max = 10; type matrix = array [1..max, 1..max] of integer; function min(a, b: integer): integer; begin if a <= b then min := a else min := b end; procedure Input(var A: matrix; m, n: integer); var x, y: integer; begin for y := 1 to m do for x := 1 to n do begin write('A[', y, ',', x, ']= '); readln(A[y, x]); end; end; procedure Output(const A: matrix; m, n: integer); var x, y: integer; begin for y := 1 to m do begin for x := 1 to n do write(A[y, x]:3); writeln; end; end; { Duong cheo chinh, tang dan } procedure Gen_DiagonalIncrease(var A: matrix; n: integer); var x: integer; begin fillchar(A, Sizeof(A), 0); for x := 1 to n do A[x, x] := x; end; { Duong cheo phu, giam dan } procedure Gen_MinorDiagonalIncrease(var A: matrix; n: integer); var x: integer; begin fillchar(A, Sizeof(A), 0); for x := 1 to n do A[n-x+1, x] := x; end; procedure Gen_IncreaseByRow(var A: matrix; m, n: integer); var x, y, count: integer; begin count := 1; for y := 1 to m do for x := 1 to n do begin A[y, x] := count; inc(count); end; end; procedure Gen_DecreaseByCol(var A: matrix; m, n: integer); var x, y, count: integer; begin count := m*n; for x := 1 to n do for y := 1 to m do begin A[y, x] := count; dec(count); end; end; { Xoan oc } procedure Gen_Spiral(var A: matrix; m, n: integer); var x, y, seed, count, direct, total: integer; begin direct := 4; total := m*n; count := 0; x := 0; y := 1; for seed := 1 to total do begin while count = 0 do case direct of 1, 3: begin inc(direct); dec(n); count := m; end; 2, 4: begin inc(direct); dec(m); count := n; if direct = 5 then direct := 1; end; end; case direct of 1: inc(x); 2: inc(y); 3: dec(x); 4: dec(y); end; dec(count); a[y, x] := seed; end; end; procedure Swap(var a, b: integer); var temp: integer; begin temp := a; a := b; b := temp; end; { Map or Template } procedure MapSort(var A, B: matrix; m, n, total: integer); var x, y, curx, cury, minx, miny: integer; first: boolean; cur: integer; begin for cur := 1 to total do begin first := true; for y := 1 to m do for x := 1 to n do if B[y, x] > 0 then begin if first or (A[miny, minx] > A[y, x]) then begin minx := x; miny := y; first := false; end; if B[y, x] = cur then begin curx := x; cury := y; end; end; Swap(A[cury, curx], A[miny, minx]); B[cury, curx] := 0; end; end; var m, n: integer; A, B: matrix; begin m := 3; n := 4; writeln('Nhap ma tran:'); Input(A, m, n); writeln('Ma tran sau khi nhap:'); Output(A, m, n); writeln('Sap xep ma tran tang dan theo duong cheo chinh'); Gen_DiagonalIncrease(B, min(m, n)); Output(B, m, n); MapSort(A, B, m, n, min(m, n)); Output(A, m, n); writeln('Sap xep ma tran tang dan theo duong cheo phu'); Gen_MinorDiagonalIncrease(B, min(m, n)); Output(B, m, n); MapSort(A, B, m, n, min(m, n)); Output(A, m, n); writeln('Sap xep ma tran tang dan theo hang'); Gen_IncreaseByRow(B, m, n); MapSort(A, B, m, n, m*n); Output(A, m, n); writeln('Sap xep ma tran giam dan theo cot'); Gen_DecreaseByCol(B, m, n); MapSort(A, B, m, n, m*n); Output(A, m, n); writeln('Sap xep ma tran tang dan theo duong xoan oc'); Gen_Spiral(B, m, n); MapSort(A, B, m, n, m*n); Output(A, m, n); readln; end.
Ví dụ: để sắp xếp tăng dần theo hình xoắn ốc thì phải tạo ma trận B như sau (lấy 3x3):
1 2 3
8 9 4
7 6 5
Để sắp xếp giảm dần theo đường chéo chính thì cần có ma trận B như sau:
3 0 0
0 2 0
0 0 1
Các phần tử tương ứng với 0 trên B sẽ không tham gia vào sắp xếp.
Như vậy, thủ tục MapSort là khá tổng quát cho các yêu cầu sắp xếp trên ma trận đã cho. Vấn đề phức tạp đã được chia làm 2 mảng:
- Mảng 1: Sắp xếp theo thuật giải chọn trực tiếp.
- Mảng 2: Sinh ra một ma trận theo hình thù yêu cầu.
Nếu ma trận A có kích thước/số phần tử là k (ở đây k = m*n) thì độ phức tạp của thuật giải này là O(k^2) (tính luôn phần sinh ra ma trận B). Đối với trường hợp như sắp xếp trên đường chéo chính, mặc dù chỉ có n phần tử tham gia sắp xếp nhưng độ phức tạp của MapSort vẫn là O(k^2); trong khi đó trường hợp đơn giản này có thể cài đặt để có độ phức tạp nhưng kích thước nhỏ hơn O(n^2).
Mình đã chạy thử rồi, thuật giải làm việc rất tốt (hy vọng là không có sai sót nào khác). Bạn cố gắng tìm hiểu nhé! (Để giải thích cặn kẽ bài này khá dài dòng đó)
Hay lắm! Mai em thi Pascal mà nhận được bài hay như thế này thì đã quá!
Em xin chân thành cảm ơn các bác!
Các bác có bài gì hay thì chia sẽ cho em với nha. Thanks
borland pascal và turbo pascal có gì khác nhau không?
giúp mình vouiws vì mình mới mua một cuón sách và trong sãhs đẻ borland pascal mình không biết nó là cái gì hết
Bookmarks