Thực hành mảng một chiều¶
Tóm lược nội dung
Bài này hướng dẫn một số bài toán liên quan đến mảng một chiều:
- Phát sinh ngẫu nhiên mảng một chiều.
- Tìm phần tử lớn nhất.
- Tính tổng tích luỹ trong phạm vi cho trước.
- Đánh dấu các phần tử thoả yêu cầu.
Bài 1¶
Đề bài¶
Yêu cầu:
Viết chương trình phát sinh n phần tử ngẫu nhiên cho mảng một chiều. Các phần tử đều là số nguyên trong phạm vi từ 0 đến 10.
Đầu vào:
Số phần tử cần phát sinh n.
Đầu vào:
Mảng một chiều A gồm n phần tử nguyên.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| 20 | [ 3 8 4 0 8 8 3 4 6 8 10 10 3 0 1 3 1 8 5 8] |
Cách giải đề xuất¶
Ý tưởng chính
Dùng hàm randint() trong module random của thư viện Numpy để phát sinh ngẫu nhiên.
Viết chương trình
0. Cài đặt thư viện Numpy.
Sau khi cài đặt Numpy, hãy tạo cell mới để viết mã lệnh của chương trình.
1. Nạp thư viện numpy.
2. Viết hàm generate() dùng để phát sinh ngẫu nhiên mảng một chiều.
Hàm gồm có:
- Một tham số đầu vào là
n. - Giá trị trả về là mảng một chiều
A.
- Hàm
randint()phát sinhnsố nguyên, có giá trị ngẫu nhiên từ0đến10.
3. Viết chương trình chính.
- Cho người dùng nhập vào số phần tử, lưu vào biến
size. - Gọi hàm
generate()ra thực hiện, gán kết quả cho biếnA. - In ra mảng
A.
4. Chạy chương trình trên, nhập vô 20, kết quả tương tự như sau:
Phát sinh ngẫu nhiên
Mỗi lần chạy lại chương trình, máy tính sẽ phát sinh các số một cách ngẫu nhiên, không giống những lần khác.
Bài 2¶
Đề bài¶
Yêu cầu:
Viết chương trình tìm phần tử lớn nhất trong mảng đã phát sinh ở bài 1.
Đầu vào:
Mảng một chiều A.
Đầu ra:
Giá trị của phần tử lớn nhất và vị trí của nó.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| [ 3 8 4 0 8 8 3 4 6 8 10 10 3 0 1 3 1 8 5 8] | Lớn nhất: 10 Vị trí: 10 |
Cách giải đề xuất¶
Ý tưởng chính
Trong cùng chương trình với bài trên, ta viết thêm hàm tìm giá trị lớn nhất.
Để tìm giá trị lớn nhất trong mảng:
- Ta tạm coi phần tử đầu là lớn nhất.
-
Duyệt mảng từ phần tử thứ hai trở đi:
Nếu phần tử nào lớn hơn phần tử lớn nhất (tạm thời) thì nó là lớn nhất, ta cập nhật giá trị lớn nhất mới.
Viết chương trình
1. Viết hàm maximum() (1) dùng để tìm chỉ số của phần tử lớn nhất trong mảng.
- Ta không đặt tên là
max()vì trùng tên với hàmmax()có sẵn của Python hoặc của thư viện Numpy.
Hàm gồm có:
- Một tham số đầu vào là mảng
array. - Giá trị trả về là chỉ số
mcủa phần tử lớn nhất (tứcarray[m]là lớn nhất).
Hàm hoạt động như sau:
- Biến
mdùng để lưu chỉ số của phần tử lớn nhất. - Tạm coi phần tử đầu tiên là lớn nhất: khởi tạo
m = 0. -
Duyệt mảng bằng biến
itừ chỉ số1đến cuối mảng:Nếu
array[i]lớn hơnarray[m]thì cập nhậtmmới. -
Trả về m.
2. Viết chương trình chính:
- Gọi hàm
maximum()ra thực hiện, gán kết quả cho biếnindex. - Dùng biến
valueđể lưu giá trị lớn nhất. - In ra
indexvàvalue.
3. Chạy chương trình trên, kết quả tương tự như sau:
Bài 3¶
Đề bài¶
Yêu cầu:
Viết chương trình tính tổng luỹ của mảng một chiều ở bài 1, biết rằng:
- Phạm vi tính tổng là từ chỉ số
beginđến chỉ sốend(không bao gồmend). - Tổng có giá trị ban đầu là
init.
Đầu vào:
- Mảng một chiều
A. - Chỉ số bắt đầu
begin. - Chỉ số kết thúc
end. - Giá trị tổng ban đầu
init.
Đầu ra:
Tổng tích luỹ.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| [ 3 8 4 0 8 8 3 4 6 8 10 10 3 0 1 3 1 8 5 8] 15 20 2 |
27 |
Cách giải đề xuất¶
Ý tưởng chính
Dùng vòng lặp để duyệt mảng A trong phạm vi cho trước, cộng dồn các phần tử vào biến tổng.
Viết chương trình
1. Viết hàm accumulate() dùng để tính tổng.
Hàm gồm có 4 tham số:
- Mảng một chiều
array - Chỉ số bắt đầu
begin - Chỉ số kết thức
end - Tổng ban đầu
init
Giá trị trả về là tổng.
Hàm hoạt động như sau:
- Khởi tạo biến
slà tổng ban đầu có giá trị làinit. -
Duyệt mảng
arraytừbeginđếnend(không bao gồmend):Cộng dồn
array[i]vào biếns.
2. Viết chương trình chính:
- Cho người dùng nhập chỉ số bắt đầu, chỉ số kết thúc và tổng ban đầu, lưu vào các biến
b,e,t. - Gọi hàm
accumulate()ra thực hiện, gán kết quả cho biếnresult. - In ra
result.
3. Chạy chương trình trên, kết quả tương tự như sau:
Bài 4¶
Đề bài¶
Yêu cầu:
Viết chương trình đánh dấu mảng một chiều ở bài 1, cụ thể:
- Phần tử từ 5 trở xuống được đánh dấu True.
- Phần tử lớn hơn 5 được đánh dấu False.
Đầu vào:
Mảng một chiều A.
Đầu ra:
Mảng một chiều gốm các giá trị True và False.
Ví dụ:
| Đầu vào | Đầu ra |
|---|---|
| [ 3 8 4 0 8 8 3 4 6 8 10 10 3 0 1 3 1 8 5 8] | [ True False True True False False True True False False False False True True True True True False True False] |
Cách giải đề xuất¶
Ý tưởng chính
Dùng vòng lặp for để duyệt mảng.
Dùng câu lệnh if để xét các phần tử nhỏ hơn hay lớn hơn 5, gán giá trị True hoặc False tương ứng vào mảng mới.
Viết chương trình
1. Viết hàm mark() dùng để đánh dấu.
Hàm gồm có:
- Một tham số đầu vào là mảng một chiều
array. - Giá trị trả về là mảng một chiều
M.
Hàm hoạt động như sau:
- Khởi tạo mảng một chiều
Mcó số phần tử bằng với mảngarray, tất cả phần tử đầu làTrue. -
Duyệt mảng
arraytừ đầu đến cuối:Nếu
array[i]lớn hơn5thì đánh dấuM[i]tương ứng làFalse. -
Trả về mảng
M.
2. Viết chương trình chính:
- Gọi hàm
mark()ra thực hiện, gán kết quả cho biếnmarked_A. - In ra
marked_A.
3. Chạy chương trình trên, kết quả tương tự như sau:
Mã nguồn¶
Code đầy đủ được đặt tại: