Viết chương trình tìm kiếm và thay the tất cả các giá trị x trong mảng số nguyên A thành giá trị y

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ínhBEGIN 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.

Ví dụ: A:  1   19   62   7      8   32   12

Ket qua: 20   20   62   7    40   40   12

Procedure ThayTheBangTong[Var A:Mang20; N:Integer; X, Y:Integer]; Var i,k:Integer; Begin For i:=0 to N do If[ [A[i-1]+A[i]] mod 10 = 0] then Begin k := [A[i-1]+A[i]]; A[i-1] := k; A[i] := k; End; End;

This entry is part 39 of 69 in the series Học C Không Khó

90 / 100

Mảng 1 chiều là cấu trúc dữ liệu đầu tiên và cũng là cấu trúc dữ liệu đơn giản & phổ biến nhất. Mảng 1 chiều hay tiếng anh là One-Dimensional Array là bài viết đầu tiên trong loạt bài viết hướng dẫn về cấu trúc dữ liệu tại Blog Nguyenvanhieu.vn. Hi vọng series này cung cấp cho các bạn những kiến thức bổ ích về phần kiến thức cấu trúc dữ liệu. Bài viết hôm nay sẽ trình bày về mảng 1 chiều.

Sau bài học này, bạn có thể ghé thăm bài học “Bài tập mảng 1 chiều có lời giải” để luyện tập kiến thức nhé. Hoặc bạn có thể tự luyện tập trực tuyến nhiều bài tập khác website Luyện Code Online.

1. Lý thuyết về mảng 1 chiều

Mảng là một tập hợp tuần tự các phần tử có cùng kiểu dữ liệu và các phần tử được lưu trữ trong một dãy các ô nhớ liên tục trên bộ nhớ. Các phần tử của mảng được truy cập bằng cách sử dụng “chỉ số”. Mảng có kích thước N sẽ có chỉ số từ 0 tới N – 1.

Ví dụ, với N = 5, khi đó chỉ số mảng[tiếng anh là index] sẽ có giá trị từ 0 tới 4[5-1] tương ứng với 5 phần tử. Các phần tử trong mảng được truy cập bằng cách sử dụng array_name[index].

Hình ảnh mô phỏng cho cấu trúc mảng 1 chiều

Hãy xem xét mảng sau, kích thước của mảng là 5. Nếu bạn muốn truy cập giá trị 12, bạn có thể truy cập bằng cách gọi arr[1].

2. Khai báo mảng 1 chiều

Cú pháp khai báo mảng 1 chiều khác nhau với từng ngôn ngữ lập trình.

Chẳng hạn, trong C/C++, việc khai báo mảng cần 2 tham số sau:

  • Kích thước của mảng: Việc này xác định số lượng phần tử có thể được lưu trữ trong mảng.
  • Kiểu dữ liệu của mảng: Việc này chỉ định kiểu dữ liệu của các phần tử trong mảng; là số nguyên, số thực, ký tự hay là kiểu dữ liệu nào đó.

Một ví dụ khai báo mảng trong C/C++:

Đây là cách khai báo mảng tĩnh; cách khác là khai báo động kích thước vừa đủ dùng. Đối với mảng động, kích thước mảng sẽ tăng lên khi số lượng phần tử mảng tăng lên vượt qua kích thước cũ.

3. Khởi tạo mảng 1 chiều

Mảng có thể được khởi tạo ngay tại thời điểm khai báo mảng hoặc khởi tạo sau khi khai báo.

Cú pháp để khởi tạo mảng trong khi khai báo là:

type arr[size] = {elements}

Một ví dụ khai báo kèm khởi tạo mảng trong C/C++:

int arr[5] = {4, 12, 7, 15, 9};

Mảng cũng có thể được khởi tạo sau khi khai báo xong, bằng cách gán giá trị cho từng phần tử của mảng sử dụng chỉ số:

type arr[size]

arr[index] = 12

Ví dụ trên C/C++:

int arr[5];

arr[0] = 4;

arr[1] = 12;

4. Các thao tác với mảng 1 chiều

Một thao tác đơn giản nhất và hay sử dụng nhất đó là việc lặp qua tất cả các phần tử của mảng theo cách sau:

type arr[size] = {elements}

for idx from 0 to size

    print arr[idx]

Một ví dụ trên ngôn ngữ C:

#include

int main[]

{

    // Array declaration and initialization

    int arr[5] = {4, 12, 7, 15, 9};

    // Iterate over the array

    for[int idx=0; idx

Chủ Đề