Biểu diễn ma trận

5 801 5
Biểu diễn ma trận

Đang tải... (xem toàn văn)

Thông tin tài liệu

Biểu diễn ma trận

Biểu diễn ma trận trên máy tínhPhan Thanh Â'nCác bạn lập trình trên Turbo Pascal không xa lạ gì với dữ liệu kiểu mảng Arraỵ Đây là kiểu dữ liệu quan trọng thường được ứng dụng để giải các bài toán trên máy tính, tìm kiếm và sắp xếp . Tuy nhiên, có một nhược điểm là khi nhập và xuất dữ liệu ta phải nhập và xuất từng phần tử một của mảng và các phần tử của mảng hiện ra lần lượt trên màn hình thông qua chỉ số của phần tử. Điều này có thể làm cho các bạn cảm thấy chẳng hấp dẫn lắm khi làm việc với mảng và đôi khi khó định hình được mảng khi mảng hơi lớn một chút. Sau đây là thủ thuật để làm cho mảng của bạn trông giống như ma trận khi biểu diễn trên màn hình và đồng thời khi nhập giá trị cho các phần tử của mảng cũng trực quan và linh động hơn là cách thông thường bạn vẫn làm. Đối với viẹc nhập dữ liệu có tính chất thử khi lập trình ta chỉ việc dùng vòng lặp chạy từ phần tử đầu đến phần tử cuối của mảng và gán cho mỗi phần tử của mảng một giá trị ngẫu nhiên là xong. Trường hợp các giá trị hoặc số liệu có tính chất thực tế hoặc bắt buộc phải nhập vào thì ta phải nhập từng giá trị cho đúng thôị Tuy nhiên với cách biểu diễn mảng sau đây thì việc nhập cũng dễ dàng hơn. Đối với các hàng của mảng ta không cần căn lề ở giữa màn hình chỉ cần cho chạy từ dòng đầu tiên trên màn hình đến khi nào hết mảng thì thôi, tất nhiên đối với những bài chúng ta thường làm thì rất ít mảng có số dòng vượt quá số dòng màn hình. Đối với các cột ta căn lề tuỳ theo số cột của mảng sao cho mảng nằm cân đối giữa màn hình với khoảng cách nhất định. Thường khi biểu diễn mảng ta thường dùng hai vòng lặp For lồng nhau, đoạn lệnh sau mô tả cách căn lề cho các cột của mảng:d := 1;for i:= 1 to m dobegink:= (42- n*7 div 2);for j:= 1 to n dobeginrandomize; A[ i, j] := random (10);gotoxy ( k, d);if (A[ i, j] = trunc ( A[ i, j] ) ) then write( A[ i, j]: 0: 0) else write ( A[ i, j] : 0: 1);{ readln( A[ i, j] ); }inc( k, 7);end;inc( d, 2);end;Trong đoạn lệnh trên biến d dùng để biểu diễn vị trí của hàng, ở đây d = 1 tức là hàng thứ nhất bắt đầu từ dòng thứ nhất của màn hình, sau mỗi vòng lặp for lớn ở ngoài thì giá trị của d tăng thêm 2 đơn vị tức là cứ hai dòng của màn hình thì ta biểu diễn một dòng của mảng. Biến k dùng để căn lề cho các cột của mảng. Bản chất của việc căn lề như sau: Chia đôi màn hình hiển thị (ở đây lấy giá trị 42) sau đó đem trừ đi số cột của mảng nhân với khoảng cách các cột (ở đây lấy giá trị 7) chia cho 2. Trong vòng lặp for thứ hai, sau mỗi giá trị tăng của biến j thì giá trị của k tăng thêm 7 tức là các cột của mảng cách đều nhau 7 đơn vị. Lệnh nhảy gotoxy( k, d) dùng để đưa con trỏ màn hình tới vị trí mong muốn có toạ độ ( k, d) để viết ra các giá trị của mảng. Câu lệnh if chỉ có tác dụng trong nhập liệu tự động và khi in kết quả ra màn hình, nó bỏ dấu chấm và số không ở sau các số nguyên nhưng các số thực thì vẫn giữ lại và lấy một số thập phân sau dấu phảỵ Bạn có thể bỏ câu lệnh if này cùng lệnh gán A[i, j] := random(10; trong vòng for thứ hai khi bạn muốn nhập liệu bằng taỵTrên đây tôi vừa trình bày cách để trình bày mảng trên máy tính trông giống như ma trận toán học để bạn dễ hình dung mảng, dễ nhập liệu cũng như không cảm thấy nhàm chán khi làm viêc với mảng. Bạn có thể cải tiến thêm như căn lề cho các hàng để mảng luôn nằm giữa màn hình trên dưới đều bằng nhaụ Sau đây là chương trình mẫu tôi viết minh hoạ, mong nhận được ý kiến đóng góp của các bạn.Chương trình nhân hai mảng thực:Program bdmtbtmt;uses crt;varA, B, C: array[ 1 50, 1 50] of real;tg: real;m, n, h, i, j, k, d: longint;congviec : byte;beginrepeattextattr := red*16 + lightcyan;clrscr;gotoxy(80, 25);delay(500);gotoxy(25, 9);write('BAN CHON CAC VIEC SAU' );gotoxy(80, 25);delay(100);textcolor(yellow);gotoxy(25, 10);write(' 0. THOAT CHUONG TRINH ' );gotoxy(80, 25);delay(100);textcolor(lightgreen);gotoxy(25, 11);write('1. NHAN HAI MANG THUC ' );gotoxy(80, 25);textcolor(lightcyan);gotoxy(25, 12);write(' CONG VIEC BAN CHON LA: ' ); textcolor(lightgreen);readln(congviec);case congviec of1:begintextattr:= magenta*16 + white;clrscr;gotoxy(20, 9);write(' So hang cuc dai cua ma tran A la:' );textcolor(lightgreen);readln(m);textcolor(white);gotoxy(20, 11);write(' So cot & hang cua ma tran A & B la: ' );textcolor(lightgreen);readln(n);textcolor(white);gotoxy( 20, 23);write(' So cot cuc dai cua ma tran B la :' );textcolor( lightgreen);readln( h);if ( m<= 0) or ( n<= 0) or ( h<= 0) thenbegintextattr := red*16 + white;clrscr;gotoxy( 20, 10);write(' Ma trn khong ton tai voi so hang va cot dó );gotoxy( 80, 25);readln;end; if ( m > 12) or ( n > 10) or ( h >10) thenbegintextattr:=red*16 + white;clrscr;gotoxy(22,10);write('Ma tran hien thi khong dep mat');gotoxy(80,25);readln;end;if not ((m<=0) or (n <=0) or (h <= 0)) andnot ((m>12) or (n >10) or (h >10)) thenbegintextattr:= magenta*16 + lightgreen;clrscr;gotoxy(22,10);write('Bat dau nhap du lieu cho ma tran A');gotoxy(80,25); delay(3000);clrscr;d:=1;for i:=1 to m do begink:= (42 - n*7 div 2);for j:=1 to n dobeginA[ i, j] := random (10);gotoxy ( k, d);if (A[ i, j] = trunc ( A[ i, j] ) ) then write( A[ i, j]: 0: 0) else write ( A[ i, j] : 0: 1);{ readln( A[ i, j] ); }inc( k, 7);end;inc( d, 2);end;gotoxy(80,25);delay(3000);clrscr;gotoxy(22,10);write('Bat dau nhap du lieu cho ma tran B');gotoxy(80,25);delay(3000);clrscr;d:=1;for i:=1 to n do begink:= (42 - n*7 div 2);for j:=1 to h dobeginB[ i, j] := random (10);gotoxy ( k, d);if (B[ i, j] = trunc ( B[ i, j] ) ) then write( B[ i, j]: 0: 0) else write ( B[ i, j] : 0: 1);{ readln( B[ i, j] ); }inc( k, 7);end;inc( d, 2);end;gotoxy(80,25);delay(3000);{Thuc hien nhan hai ma tran}for i:=1 to m dofor j:=1 to n dobegin c[i,j] := 0;for k:=1 to n doc[i,j] := c[i,j] + a[i,k]*b[k,j];end;textattr := magenta*16 + lightgreen;clrscr;gotoxy(80,25);delay(1000);gotoxy(20,10);write('Ma tran tich cua hai ma tran A va B nhu saú);gotoxy(80,25);delay(3000);clrscr;d:=1;for i:=1 to m do begink:= (42 - n*7 div 2);for j:=1 to h dobegingotoxy ( k, d);if (C[ i, j] = trunc (C[ i, j] ) ) then write(C[ i, j]: 0: 0) else write (C[ i, j] : 0: 1);{ readln(C[ i, j] ); }inc( k, 7);end;inc( d, 2);end;gotoxy(80,25);readln;end;end;end;until congviec = 0;end. . Biểu diễn ma trận trên máy tínhPhan Thanh Â'nCác bạn lập trình trên Turbo Pascal. chút. Sau đây là thủ thuật để làm cho mảng của bạn trông giống như ma trận khi biểu diễn trên màn hình và đồng thời khi nhập giá trị cho các phần tử của

Ngày đăng: 07/09/2012, 11:12

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan