1. Trang chủ
  2. » Công Nghệ Thông Tin

Biểu diễn ma trận

5 801 5
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 35,5 KB

Nội dung

Biểu diễn ma trận

Trang 1

Biểu diễn ma trận trên máy tính

Phan Thanh Â'n

Cá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 mà 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 mà 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 do

begin

k:= (42- n*7 div 2);

for j:= 1 to n do

begin

randomize;

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

Trang 2

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;

var

A, B, C: array[ 1 50, 1 50] of real;

tg: real;

m, n, h, i, j, k, d: longint;

congviec : byte;

begin

repeat

textattr := 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: ' );

Trang 3

readln(congviec);

case congviec of

1:begin

textattr:= 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) then

begin

textattr := 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) then

begin

textattr:=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)) and

not ((m>12) or (n >10) or (h >10)) then

begin

textattr:= magenta*16 + lightgreen;

clrscr;

gotoxy(22,10);

write('Bat dau nhap du lieu cho ma tran A');

gotoxy(80,25);

Trang 4

clrscr;

d:=1;

for i:=1 to m do

begin

k:= (42 - n*7 div 2);

for j:=1 to n do

begin

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;

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

begin

k:= (42 - n*7 div 2);

for j:=1 to h do

begin

B[ 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 do

for j:=1 to n do

begin

Trang 5

c[i,j] := 0;

for k:=1 to n do

c[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

begin

k:= (42 - n*7 div 2);

for j:=1 to h do

begin

gotoxy ( 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

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

TỪ KHÓA LIÊN QUAN

w