Diễn đàn tin học Văn Lang - Vạn Ninh
Chào mừng bạn đến với Diễn đàn Tin học Văn Lang - Vạn Ninh của chúng tôi !
Hãy đăng nhập hoặc đăng kí tài khoản để trải nghiệm nhiều điều thú vị tại đây !
Thân ái !

Diễn đàn tin học Văn Lang - Vạn Ninh

Nơi trao đổi thông tin, tăng cường hợp tác, giải đáp những vướng mắc khi học lập trình Pascal
 
Trang ChínhCalendarTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập

Share | 
 

 Giải các bài toán cơ bản về mảng hai chiều

Go down 
Tác giảThông điệp
Admin
Admin
avatar

Posts : 118
Danh tiếng : 5
Join date : 10/11/2014
Age : 17

Bài gửiTiêu đề: Giải các bài toán cơ bản về mảng hai chiều   13/11/2014, 18:18

Bài 1: Nhập vào 1 mảng 2 chiều gồm 3 dòng, 4 cột. In ra màn hình các số theo từng dòng và cột đã nhập.
Bài giải:
uses crt;
type matranthuc=array[1..3,1..4] of integer;
var a:matranthuc;
   i,j,n,m:integer;
(*****)
procedure xuatmatran(var x:matranthuc);
var i,j:integer;
begin
    for i:=1 to 3 do
        begin
             for j:=1 to 4 do write(a[i,j]:5);
             writeln;
        end;
end;
begin
clrscr;
      write('Nhap so dong:');readln(n);
      write('Nhap so cot:');readln(m);
      for i:=1 to n do
      for j:=1 to m do
          begin
               write('Nhap a[',i,',',j,']:');
               readln(a[i,j]);
          end;
          xuatmatran(a);
readln;
end.

Bài 2: Cho ma trận vuông A cấp 4, với phần tử nguyên thuộc đoạn từ 1..100. Tìm phần tử lớn nhất, phần tử nhỏ nhất.
Bài giải:
uses crt;
type matranthuc=array[1..4,1..4] of integer;
var a:matranthuc;
   i,j,m,n,max,min:integer;
(*****)
procedure xuatmatran(var x:matranthuc);
var i,j:integer;
begin
    for i:=1 to 4 do
        begin
             for j:=1 to 4 do write(a[i,j]:5);
             writeln;
        end;
end;
(*****)
begin
clrscr;
      for i:=1 to 4 do
      for j:=1 to 4 do
          begin
               write('Nhap a[',i,',',j,']:');
               readln(a[i,j]);
          end;
      xuatmatran(a);
      max:=a[1,1];
      for i:=1 to 4 do
      for j:=1 to 4 do
      if a[i,j]>max then max:=a[i,j];
      min:=a[1,1];
      for i:=1 to 4 do
      for j:=1 to 4 do
      if a[i,j]<min then min:=a[i,j];
      writeln('PTLN la:',max);
      write('PTNN la:',min);
readln;
end.

Bài 3: Cho ma trận vuông A cấp n với phần tử nguyên thuộc đoạn từ 1..100.
a) Sắp xếp tăng dần với từng dòng
b) Sắp xếp giảm theo từng cột
Bài giải:
uses crt;
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
   i,j,m,n,k,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc; n:integer);
var i,j:integer;
begin
    for i:=1 to n do
    begin
         for j:=1 to n do write(a[i,j]:5);
         writeln;
         writeln;
    end;
end;
(*****)
procedure sx(var s,t:integer);
var tam:integer;
begin
    tam:=s;
    s:=t;
    t:=tam;
end;
(*****)
begin
clrscr;
      write('Ban muon nhap ma tran vuong cap may:');readln(n);
      for i:=1 to n do
      for j:=1 to n do
          begin
               write('Nhap a[',i,',',j,']:');
               readln(a[i,j]);
          end;
      writeln('Ma tran ban dau:');
          xuatmatran(a,n);
      writeln('Sx tang o tung dong la:');
      for i:=1 to n do
      for j:=1 to n do
      for k:=j+1 to n do
          if a[i,j]>a[i,k] then sx(a[i,j],a[i,k]);
          xuatmatran(a,n);
      writeln('Sx giam o tung cot la:');
      for j:=1 to n do
      for i:=1 to n do
      for k:=i+1 to n do
          if a[i,j]<a[k,j] then sx(a[i,j],a[k,j]);
          xuatmatran(a,n);
readln;
end.

Bài 4: Nhập ma trận vuông cấp n. Xuất ra màn hình ma trận chuyển vị (đổi dòng thành cột).
Bài giải:
uses crt; {Matran chuyen vi}
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
   i,j,m,n,k,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc; n:integer);
var i,j:integer;
begin
    for i:=1 to n do
    begin
         for j:=1 to n do write(a[i,j]:5);
         writeln;
         writeln;
    end;
end;
(*****)
begin
clrscr;
      write('Ban muon nhap ma tran vuong cap may:');readln(n);
      for i:=1 to n do
      for j:=1 to n do
          begin
               write('Nhap a[',i,',',j,']:');
               readln(a[i,j]);
          end;
      writeln('Ma tran ban dau:');
          xuatmatran(a,n);
      writeln;
      writeln('Ma tran chuyen vi la:');
      for j:=1 to n do
      begin
           for i:=1 to n do
           write(a[i,j]:5);
           writeln;
           writeln;
      end;
readln;
end.

Bài 5: Cho ma trận vuông A cấp n với phần tử nguyên thuộc đoạn 1..100.
a) Tìm phần tử lớn nhất, phần tử nhỏ nhất.
b) In ra ma trận tam giác trên đường chéo chính.
c) In ra ma trận tam giác dưới đường chéo chính.
d) Sắp xếp tăng dần các phần tử đường chéo chính.
e) Tìm ma trận chuyển vị.
Bài giải:
uses crt;
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
   i,j,max,min,n,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc);
var i,j:integer;
begin
    for i:=1 to n do
    begin
         for j:=1 to n do write(a[i,j]:5);
         writeln;
         writeln;
    end;
end;
(*****)
procedure sx(var x,y:integer);
var tam:integer;
begin
    tam:=x;
    x:=y;
    y:=tam;
end;
(*****)
begin
clrscr;
      write('Ban muon nhap ma tran vuong cap may:');readln(n);
      for i:=1 to n do
      for j:=1 to n do
          begin
               write('Nhap a[',i,',',j,']:');
               readln(a[i,j]);
          end;
      writeln('Ma tran ban dau:');
          xuatmatran(a);
      max:=a[1,1];
      for i:=1 to n do
      for j:=1 to n do
      if a[i,j]>max then max:=a[i,j];
      min:=a[1,1];
      for i:=1 to n do
      for j:=1 to n do
      if a[i,j]<min then min:=a[i,j];
      writeln('PTLN:',max);
      writeln('PTNN:',min);
      writeln('Ma tran tam giac tren duong cheo chinh:');
      writeln;
      for i:=1 to n do
      begin
           for j:=1 to n do
           if j>i then
              write(a[i,j]:5)
           else write('':5);
           writeln;
           writeln;
      end;
      writeln('Matran tam giac duoi duong cheo chinh:');
      writeln;
      for i:=1 to n do
      begin
           for j:=1 to n do
           if j<i then write(a[i,j]:5)
           else write('':5);
           writeln;
           writeln;
      end;
      writeln('SX duong cheo chinh tang.');
      for i:=1 to n-1 do
      for k:=i+1 to n do
      if a[i,i]>a[j,j]) then sx(a[i,i],a[j,j]);
      xuatmatran(a);
      writeln('Matran chuyen vi:');
      for j:=1 to n do
      begin
           for i:=1 to n do
           write(a[i,j]:5);
           writeln;
           writeln;
      end;
readln;
end.

Bài 6: Sinh ngẫu nhiên dãy n số nguyên (n<2000).
a) Tìm phần tử nhỏ nhất và chỉ ra vị trí.
b) Tìm phần tử lớn thứ hai và chỉ ra vị trí
c) Tìm vị trí các dãy đoạn con dài nhất mà các phần tử là 0 (nếu có).
Bài giải:
uses crt;
var a:array[1..100] of integer;
   min,max,vt,max2,vt2,vt1,n,i,j,vitri,tong,dem,max3:integer;
begin
clrscr;
      write('Ban muon sinh ngau nhien bao nhiu so :');readln(n);
      randomize;
      for i:=1 to n do a[i]:=random(2000);
      for i:=1 to n do write(a[i]:5);
      writeln;
      min:=a[1];vt1:=1;
      max:=a[1];vt:=1;
      for i:=1 to n do
      begin
           if a[i]<min then
           begin
                min:=a[i];
                vt1:=i;
           end;
           if a[i]>max then
           begin
                max:=a[i];
                vt:=i;
           end;
      end;
      max2:=0;
      for i:=1 to n do
      if (i<>vt) and (a[i]>max2) then
      begin
           max2:=a[i];
           vt2:=i;
      end;
      max3:=1;
      dem:=0;
      tong:=0;
      for j:=1 to n do
          begin
               for i:=j to n do
               begin
                    dem:=dem+1;
                    tong:=tong+a[i];
                    if (dem>max3) and (tong=0) then
                       begin
                            max3:=dem;
                            vitri:=j;
                       end;
               end;
               dem:=0;
               tong:=0;
          end;
      writeln('a/ Phan tu nho nhat:',min,' vi tri ',vt1);
      writeln('b/ Phan tu lon thu hai:',max2,' vi tri ',vt2);
      if max3>1 then
      writeln('c/ Do dai doan con:',max3,' vi tri bat dau:',vitri)
      else writeln('c/ khong co');
readln;
end.

Bài 7: Cho một dãy gồm N số tự nhiên được sinh ngẫu nhiên có giá trị trong khoảng [1..100], các phần tử của dãy khác nhau từng đôi một và một số tự nhiên k được nhập từ bàn phím. Hãy tìm một dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho k. Cho biết độ dài và vị trí bắt đầu của dãy con tìm được.
Ví dụ: Với dãy số 1 3 4 2 7 ( N=5) và k =3
Kết quả: Độ dài của dãy con tìm được theo yêu cầu là 3, vị trí bắt đầu của dãy con tìm được là 2.
Bài giải:
uses crt;
var a:array[1..100] of integer;
   i,vt,k,n,dem,j,tong,max:integer;
begin
clrscr;
    write('Nhap n:');readln(n);
    write('Nhap so k:');readln(k);
    randomize;
    a[1]:=random(10);
    for i:=2 to n do
    repeat
          a[i]:=random(101);
    until a[i]<>a[i-1];
    for i:=1 to n do write(a[i]:3);
    writeln;
    tong:=0;
    dem:=0;
    max:=0;
    for j:=1 to n do
    begin
         for i:=j to n do
         begin
              tong:=tong+a[i];
              dem:=dem+1;
              if tong mod k=0 then
              if dem>max then
              begin
                   max:=dem;
                   vt:=j;
              end;
         end;
         tong:=0;
         dem:=0;
    end;
    if max<>0 then
       begin
            writeln('Do dai cua day can tim:',max);
            writeln('Vi tri bat dau:',vt);
       end
    else write('Ko co.');
readln;
end.
Về Đầu Trang Go down
Xem lý lịch thành viên http://forumpascalvanlang.forumvi.com
 
Giải các bài toán cơ bản về mảng hai chiều
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Diễn đàn tin học Văn Lang - Vạn Ninh :: Bài tập :: Mảng :: Mảng hai chiều-
Chuyển đến