Tỉa mảng một chiều trong pascal – có code mẫu

Tỉa mảng một chiều trong pascal hay nói cách khác là loại bỏ đi một số phần tử của mảng thỏa một điều kiện nào đó (chẳng hạn loại bỏ nhưng thành phần trùng lặp, hay những số nguyên tố, hay số chính phương, …) là một dạng toán tương đối cơ bản về mảng một chiều, nó thường được ra trong nhưng câu ở mức độ 2 của các đề thi học sinh giỏi Pascal cấp huyện.

Có nhiều cách để giải quyết bài toán này, nhưng mình rất thích kĩ thuật sử dụng mảng đánh dấu để tỉa mảng bởi nó dễ hiểu và có thể áp dụng vào nhiều bài toán khác. Xin chia sẻ với các bạn kĩ thuật này qua bài toán cụ thể sau:

Bài toán tỉa mảng : Viết chương trình nhập vào mảng n số nguyên (n < 1000). loại bỏ các phần tử trùng lặp, mỗi phần tử chỉ giữ lại một phần tử đại diện và thứ tự các phần tử không thay đổi.

Dữ liệu vào file: tia.inp Dữ liệu ra file: tia.out
– Dòng 1: chứa số n

– Dòng 2 chứa n số cách nhau ít nhất 1 khoảng trắng

1 dòng chứa dãy đã tỉa

 

Ví dụ: Với n =10, dãy A ban đầu được nhập là:

7   5     12    5    9     8       3      9       7       5

            Dãy A sau khi tỉa là:

7       5       12    9     8        3

Ý tưởng: Sử dụng một mảng “danhdau” để đánh dấu những phần tử trùng

7 5 12 5 9 8 3 9 7 5
x x x x

– Đầu tiên không đánh dấu phần tử nào

– Duyệt từ phần từ 1 -> n -1

– Nếu chưa được đánh dấu (chưa giống phần tử nào trước đó) thì đem phần tử đó so sánh với tất cả các phần tử sau nó. Nếu gặp phần tử giống nó thì “đánh dấu” phần tử đó

Xuất kết quả: Duyệt qua tất cả các phần tử của mảng, phần tử nào không được đánh dấu thì xuất ra.

Chú ý: Bài toán có thể thay cách hỏi: tỉa bỏ hết các số nguyên tố, số chính phương, …

Mình cũng đã áp dụng kĩ thuật mảng đánh dấu khi viết trò chơi chọn màu đúng bằng Scratch

Code pascal bài toán tỉa mảng

One thought on “Tỉa mảng một chiều trong pascal – có code mẫu

Leave a Reply

Your email address will not be published. Required fields are marked *