Bài toán số 4

Document Sample
Bài toán số 4 Powered By Docstoc
					Bài toán số 4.1: Viết chương trình thao tác trên mảng 2 chiều với các công việc sau:
       + Nhập xuất mảng 2 chiều.

       + Đếm số lần xuất hiện giá trị 0 trong mảng.

       + Tìm giá trị lớn nhất trong mảng 2 chiều đã nhập vào.

Hướng dẫn:+ Khai báo kiểu dữ liệu mảng 2 chiều.

              Type Mang2C = Array[1..10, 1..10] of Real;

+ Xây dựng thủ tục nhập dữ liệu cho mảng 2 chiều A với kích thước MxN. Lưu ý: các tham số: A (tên mảng), M,
N (kích thước của mảng) đều được truyền theo dạng tham biến để lưu lại giá trị đã nhập sau khi thoát khỏi thủ
tục.Quá trình nhập dữ liệu cho mảng A, được thực hiện nhờ 2 vòng lặp lồng nhau: vòng lặp i, lặp cho chỉ số dòng;
vòng lặp j, lặp cho chỉ số cột. Tại mỗi bước lặp, tiến hành đọc giá trị cho phần tử A[i,j].

+ Xây dựng thủ tục xuất dữ liệu mảng. Sử dụng 2 vòng lặp lồng nhau: vòng lặp i, lặp cho chỉ số dòng; vòng lặp j,
lặp cho chỉ số cột. Tại mỗi bước lặp, tiến hành xuất giá trị A[i,j]. Tại cuối mỗi bước lặp dòng, tiến hành xuống
dòng sau khi đã in các phần tử.

+ Quá trình đếm phần tử 0 trong mảng cũng như tìm giá trị lớn nhất trong mảng làg quá trình duyệt qua tất cả các
phần tử A[i,j].

     Sử dụng 2 vòng lặp lồng nhau: vòng lặp i cho chỉ số dòng; vòng lặp j cho chỉ số cột. Tại mỗi bước lặp, tiến
hành kiểm tra giá trị A[i,j] và thực hiện thao tác tùy theo yêu cầu của bài toán: Đếm hay So sánh và tìm Max.

Source code chương trình

      PROGRAM Mang_2C;
   Uses CRT;
   Type Mang2C = Array[1..10, 1..10] of Real;
   Var A: Array2C;
         N, M: Integer;

   { 1. Thu tục nhap mang 2 chieu }

       Procedure NhapMang2C( Var A : Mang2C; Var M,N : Integer);

   Var i, j: Integer;
   Begin
         Repeat
         Write(‘Nhap so hang N, so cot M: ‘);
              Readln(N, M);
      Until ( N>0 ) and ( N<11 ) and ( M>0 ) and ( M<11 );
      For i:=1 to M do
         For j:=1 to N do
                  Begin
                         Write(‘Nhập A[‘, i, ‘,’, j , ‘]: ‘);
                         Readln(A[i,j]); End; End;

   { 2. Thu tục xuat mang 2 chieu }

       Procedure XuatMang2C( A : Mang2C; M,N : Integer);
   Var i, j: Integer;
   Begin
      For i:=1 to M do
      Begin
         For j:=1 to N do
                  Write(A[i, j],’ ‘);
         Writeln; End; End;

   { 3. Ham dem so phan tu 0 co trong mang 2 chieu }

         Function DemPtu0( A : Mang2C; M,N : Integer) : Integer;

   Var i, j, Dem: Integer;
   Begin
      Dem := 0;
      For i:=1 to M do
         For j:=1 to N do
                  If (A[i, j] = 0) Then inc(Dem);

            DemPtu0 := Dem;

         End;

{ 4. Ham tim gia tri Max trong mang 2 chieu }

         Function TimPtuMax( A : Mang2C; M,N : Integer) : Real;

   Var     i, j: Integer;
            Max : Real;
   Begin
      Max := A[1, 1];
      For i:=1 to M do
         For j:=1 to N do
                  If (A[i, j] > Max) Then Max := A[i,j];

            TimPtuMax : = Max;

         End;

   { 5. Than chuong trinh chinh         }

         BEGIN

                Writeln( ‘Nhap mang 2 chieu:’);      NhapMang2C (A, M, N );

                Writeln( ‘Mang da nhap la:’);        XuatMang2C (A, M, N );

                Writeln( ‘So lan xuat hien 0 trong mang :’, DemPtu0 ( A, M, N) );

                Writeln( ‘Gia tri lon nhat trong mang :’, TimPtuMax( A, M, N) );

                Readln;

         END.
Bài toán số 4.2: Viết chương trình thao tác trên mảng 2 chiều với các công việc sau:
         + Nhập xuất mảng 2 chiều.

         + Tính tổng các phần tử theo từng dòng của mảng.

         + Tìm dòng có tổng giá trị lớn nhất.

Hướng dẫn:

+ Đối với mỗi vòng lặp theo dòng, tiến hành tính tổng cho các phần tử trên dòng. Áp dụng như tính tổng cho
mảng một chiều.

          + Vừa tính tổng vừa tiến hành so sánh và lưu lại giá trị lớn nhất.

Source code các hàm xây dựng

   { 1. Thu tuc tinh & in tong cac phan tu tren dong cua mang 2 chieu }

         Procedure TongCacDong( A : Mang2C; M,N : Integer);

   Var      i, j: Integer;
             S : Real;
   Begin
      For i:=1 to M do
      Begin
         S := 0;
         For j :=1 to N do
                  S := S + A[i, j];
         Writeln( ‘Tong dong ‘, i ,’ la ‘, S);
      End;

         End;



   { 2. Thu tuc tim tong lon nhat cua cac phan tu tren dong cua mang 2 chieu }

         Function MaxTgDong(A:Mang2C; M,N:Integer) : Real;

   Var      i, j, k: Integer;
             Value , S : Real;
   Begin
      For i:=1 to M do
      Begin
         S := 0;
         For j :=1 to N do
                  S := S + A[i, j];
          If (S > Value) Then
              Begin
                  Value := S;
                  K := i;
              End;
      End;
      MaxTgDong := Value;
         End;



   { 3. Than chuong trinh chinh        }

         BEGIN

                 { Nhung ham nhap xuat da de cap o Bai so 4.1, xem chi tiet o tren    }

                 Writeln( ‘Nhap mang 2 chieu:’);       NhapMang2C (A, M, N );

                 Writeln( ‘Mang da nhap la:’);         XuatMang2C (A, M, N );

                 Writeln( ‘Tong cac phan tu theo dong la:’ );

                 TongCacDong( A , M, N );

                 Writeln( ‘Gia tri lon nhat cua cac tong:’, MaxTgDong ( A, M, N) );

                 Readln;

         END.




Bài toán số 4.3: Viết chương trình thao tác trên ma trận vuông với các yêu cầu:
         + Nhập xuất ma trận vuông.

         + Tính tổng các phần tử trên đường chéo chính.

         + Kiểm tra tính đối xứng của ma trận vuông qua dường chéo chính.

Hướng dẫn:

+ Ma trận vuông là mảng 2 chiều nhưng có kích thước dòng bằng kích thước cột. Tức là, M=N, khi dó kích thước
của ma trận là NxN.

+ Đường chéo chính là các phần tử A[i, j] có i = j ( hay A[i, i] ).



Source code các hàm xây dựng

   Quá trinh định nghĩa dữ liệu mảng có thể sử dụng lại bài 4.1.



   { 1. Thu tục nhap mang 2 chieu }

         Procedure NhapMtran( Var A : Mang2C; Var N : Integer);

   Var      i, j: Integer;
Begin
         Repeat
         Write(‘Nhap kich thuoc N: ‘);
              Readln( N );
      Until ( N>0 ) and ( N<11 );
      For i:=1 to N do
         For j:=1 to N do
                  Begin
                         Write(‘Nhập Ptu[‘, i, ‘,’, j , ‘]: ‘);
                         Readln(A[i,j]);

                  End;

      End;

{ 2. Thu tục xuat mang 2 chieu }

      Procedure XuatMtran( A : Mang2C; N : Integer);

Var i, j: Integer;
Begin
   For i:=1 to N do
   Begin
      For j:=1 to N do
               Write(A[i, j],’ ‘);
      Writeln;

          End;

      End;

{ 3. Ham tinh tong tren duong cheo chinh cua ma tran vuong }

      Function TongDgCheoChinh( A : Mang2C; N : Integer) : Real;

Var      i, j: Integer;
          S : Real;
Begin
   S := 0;
   For i:=1 to N do
           S := S + A[i, i];

          TongDgCheoChinh := S;

      End;

{ 3. Ham kiem tra tinh doi xung cua ma tran vuong qua duong cheo chinh }

      Procedure KiemtraDoixung( A : Mang2C; N : Integer);

Var      i, j: Integer;
          Ktra : Boolean;
Begin
      Ktra:= True;
   For i:=1 to N do
                 For j:=1 to N do
                     If (A[i, j] <> A[j, i]) then
                         Ktra:=False;
            If (Kiemtra = True) then
                 Writeln(‘Mang doi xung‘)
            Else
                 Writeln(‘Mang khong doi xung’);
    End;

    { 4. Than chuong trinh chinh          }

        BEGIN

                { Nhung ham nhap xuat da de cap o Bai so 4.1, xem chi tiet o tren    }

                Writeln( ‘Nhap ma tran :’);        NhapMtran (A, N );

                Writeln( ‘Ma tran da nhap la:’);            XuatMang2C (A, N, N );

                Writeln( ‘Tong ptu duong cheo chinh:’, TongDgCheoChinh(A, N) );

                KiemtraDoixung ( A , N );

                Readln;

        END.



Bài toán số 4.4: Tính tổng của hai ma trận A, B cấp NxM. Tính ma trận C là tổng của hai ma trận A và B, in
ma trận C lên màn hình.
Công thức tính các phần tử của ma trận C= A+B:
C[i,j ] = A[i, j] + B[i, j] với i=1,..., N, và j=1,..., M



Source code các hàm xây dựng



    { 1. Ham tinh tong hai ma tran                 }

        Procedure TongHaiMtran( Var A, B, C : Mang2C; N : Integer);

    Var i, j: Integer;
    Begin
          For i:=1 to N do
               For j:=1 to N do
                  C[i, j] = A[j, i] + B[j, i];
    End;


    { 2. Than chuong trinh chinh          }
BEGIN
          { Nhung ham nhap xuat da de cap o Bai so 4.1, xem chi tiet o tren   }

          Writeln( ‘Nhap ma tran A:’); NhapMtran (A, N );

          Writeln( ‘Nhap ma tran B:’); NhapMtran (B, N );

          Writeln( ‘Ma tran A da nhap la:’);   XuatMang2C (A, N, N );

          Writeln( ‘Ma tran B da nhap la:’);   XuatMang2C (B, N, N );

          TongHaiMtran( A, B, C, N);

          Writeln( ‘Ma tran Tong C la:’ );     XuatMang2C (B, N, N );

          Readln;

   END.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:18
posted:11/22/2011
language:Vietnamese
pages:7
muoitt9 muoitt9
About