Viết chương trình pascal kiểu mảng

Bài toán số 3.2: Đếm số lần xuất hiện của giá trị X trong mảng A. Đếm số lần xuất hiện của các phần tử trong mảng.

Ví dụ: A:        1   5   6   7   4   1   5   5   1   1

            X:        6

Kết quả:          So lan xuat hien X la 1

So lan xuat hien cua cac phan tu:

1   ==>   4                   5   ==>   3

6   ==>   1                   7   ==>   1

4   ==>   1                   1   ==>   4       …….

Hướng dẫn:

  • Viết hàm đếm số lần xuất hiện củat một giá trị X nào đó được nhập vào, và xem như X nhà là tham số cho việc đếm số lần xuất hiện của nó trong A
  • Viết hàm in ra số lần xuất hiên của tất cả các phần tử trong mảng, sử dụng lại hàm đã xây dựng ở trước.
  • Xây dựng chương trình  giải quyết bài toán trên gồm:
    • Khai báo mảng A, N phần tử.
    • Nhập / Xuất mảng A với N phần tử [lưu ý, phải có định nghĩa hàm nhập /xuất mảng].
  • Hai hàm này được sử dụng kết quả của bài toán 3.1
    • Nhập giá trị X cần đếm số là xuất hiện.
    • In số lần xuất hiện của X trong A. Ý tưởng:
      • Khởi tạo biến đếm ban đầu là 0.
      • Sử dụng vòng lặp i, lặp từ 1 đến N.
      • Đối với mỗi phần tử A[i], nếu A[i] = X thì tăng biến đếm lên 1
      • Kết thúc, giá trị biến đếm là số lần xuất hiện cử X trong A.
  • In số lần xuất hiện của các phần tử trong A.

 Các hàm xây dựng:

{ 1. Dem so phan tu A[i] trong mang bang gia tri X    }

Function DemPtuX[Var A : Mang20; N, X : Integer] : Integer;

Var i , Count : Integer;

Begin

            Count := 0;

            For i:=0 to N do

                        If [ A[i] = X ] then

                                    Count := Count + 1;

            DemPtuX := Count;

End;

 { 2. Dem so lan xuat hien cua tat ca cac phan tu trong mang  }

Procedure InSoLanXHcuaPTu[ A:Mang20; N: Integer];

Var i :Integer;

Begin

    For i:=0 to N do

        Writeln[ A[i] ,'  ===>  ', DemPtuX[ A, N, A[i] ] ];

End;

Source code chương trình chính:

BEGIN

            Clrscr;

            NhapMang1C[ A, N ];

            XuatMang1C[ A, N ];

            Write[ 'Gia tri X:' ];     Readln[ X ];

            Writeln[ 'So lan xuat hien  trong A la:', DemPtuX[A, N, X] ];

            InSoLanXHcuaPTu [ A, N ];

            Readln;

END .

Cải tiến: Không in ra các phần tử được lặp lại.

Hướng dẫn: Đối với mỗi phần tử, trước khi in, kiểm tra xem nó xuất hiện trước nó hay không.

  • Nếu A[i] chưa xuất hiện trước nó, thì in ra số lần xuất hiện của A[i]
  • Nếu A[i] có xuất hiện trước nó, thì không in ra số lần xuất hiện của A[i] nữa, vì đã in ra số lần xuất hiện của phần tử có giá trị bằng A[i] rồi.

Mở rộng: In ra phần tử xuất hiện ít nhất và nhiều nhất trong mảng.

Bài toán số 3.3: Tìm kiếm và thay thế. Tìm kiếm vị trí xuất hiện của x trên mảng A. Thay thế những giá trị Ai là x thành y.

Ví dụ: A:        1   5   6   7   4   1   5   5   1   1

            X=5     Y=15

Kết quả:          Vi tri xuat hien X la 1

Ket qua thay the: 1   15   6   7   4   1   15   15   1   1

Hướng dẫn:

  • Xây dựng hàm tìm kiếm giá trị X trong mảng A, N phần tử. Sử dụng vòng lặp từ 0 đến N-1 để kiểm tra tất cả các giá trị Ai, nếu bằng x thì trả về vị trí i tìm thấy. Nếu thoát vòng lặp mà không tìm thấy thì trả về là –1.
  • Xây dựng hàm thay thế giá trị x bằng y tại vị trí tìm thấy đầu tiên. Tương tự như tìm kiếm, nhưng khi tìm thấy thì tiến hành gán giá trị mới cho Ai là y.
  • Xây dựng hàm thay thế tất cả các giá trị x bằng y tại mỗi vị trí tìm thấy. Sử dụng vòng lặp duyệt qua tất cả các giá trị của Ai, nếu Ai bằng x thì tiến hành gán thành y.

Các hàm xây dựng:

{ 1. Ham tim kiem gia tri X trong mang A voi N phan tu  }

Function TimKiem [ A:Mang20; N:Integer; X:Integer ]:Boolean;

Var Flag : Boolean;

       i:Integer;

Begin

      Flag:=False;

      For  i:=0  to N do

            Begin

                        If [A[i] = x] then

                          Begin

                                    Flag:=True;

                                    Break;              {Tim thay  ==> Tra ve vi tri tim thay }

                          End;

            End;

       TimKiem:=Flag;

End;

{ 2. Thay the phan tu X dau tien tim thay trong mang bang gia tri Y    }

Function ThayThe[Var A:Mang20;Var N, x, y:Integer]:Integer;

Var i:Integer;

Begin

       For i:=0 to N do

              If [A[i] = x] then

              Begin

      A[i] := y;               { Tim thay x ==> thay the thanh y }

                  Break;                   { Cham dut qua trinh thay the}

              End;

       ThayThe := i;

End; 

{ 3. Thay the tat ca cac phan tu co gia tri X tim thay bang gia tri Y    }

Procedure ThayTheTatCa [Var A:Mang20; Var N, x,y:Integer];

Var i:Integer;

Begin

       For i:=0 to N do

              If[A[i] = x] then                    { Tim thay x ==> thay the thanh y }

                     A[i] := y;

End;

 Source code chương trình chính

BEGIN

       NhapMang1C[A, N];                   { Ham nhap xuat khong lam lai nua }

       XuatMang1C[A, N];                    { Su du let qua o truoc  }

       Write['Gia tri x:']; Readln[x];

       If [TimKiem[A,N,x]] then

              Writeln[ 'Tim thay tai vi tri  trong mang A.', x, k ]

       Else

              Writeln[ 'Khong tim thay trong mang A', x ];

       Write['gia tri y:'];  Readln[y];

       ThayThe[A, N, x, y];

       Writeln['Ket qua thay the ',x, y];

       XuatMang1C[A, N];

       ThayTheTatCa[A, N, x, y];

       Writeln['Ket qua thay the tat ca la:',x, y];

       XuatMang1C[A, N];

       Readln;

END.

Mở rộng:  

+ Tìm kiếm các cặp 2 phần tử gần nhau có tổng chia hết cho 10. Thay thế các phần tử đó bằng tổng của chúng.

Chủ Đề