Bài 18: Thực hành dữ liệu mảng một chiều và hai chiều

Chủ đề 6. Kĩ thuật lập trình – Bài 18: Thực hành dữ liệu mảng một chiều và hai chiều – sách bài tập trang 64 lớp 11 Khoa học máy tính – Kết Nối Tri Thức, mời các em tham khảo cùng Bumbii.

Chủ đề 6. Kĩ thuật lập trình – Bài 18: Thực hành dữ liệu mảng một chiều và hai chiều

Câu 18.1

Khi thiết lập các giá trị trong mảng thông qua kiểu dữ liệu list của Python, dùng kí tự nào để phân cách các phần tử?

A. Dấu chấm “.”.

B. Dấu phẩy “,”.

C. Dấu hai chấm “:”.

D. Dấu cách ” “.

E. Không dùng kí tự nào.

Trả lời:

Đáp án B. Trong kiểu dữ liệu list của Python, sử dụng dấu phẩy “,” để phân cách các phần tử trong mảng.

Câu 18.2

Hàm nào sau đây dùng để đếm số phần tử của mảng một chiều trong Python?

A. count().

B. length().

C. len().

D. size().

Trả lời:

Đáp án C. Trong Python, để đếm số phần tử của mảng một chiều, sử dụng hàm len().

Câu 18.3

Khi sử dụng lệnh append để bổ sung một phần tử vào list thì phần tử đó được chèn vào vị trí nào?

A. Đầu tiên.

B. Vị trí được chỉ định.

C. Vị trí ứng với chỉ số 1.

D. Cuối cùng.

Trả lời:

Đáp án D.
Khi bạn sử dụng lệnh append để bổ sung một phần tử vào một danh sách (list) trong Python, phần tử đó sẽ được chèn vào cuối danh sách (list). Điều này có nghĩa là phần tử mới sẽ trở thành phần tử cuối cùng của danh sách, và danh sách sẽ tăng kích thước lên một đơn vị.

Câu 18.4

Hãy dự đoán nội dung được in ra bởi chương trình sau:

Trả lời:

  • Mảng trong Python cho phép truy cập sử dụng các chỉ số âm chạy ngược với các chỉ số dương tức là theo chiều từ phải sang trái, -1 ứng với phần tử cuối cùng do vậy giá trị là 6.
  • Như vậy chỉ số -5 ứng với phần tử thứ 5 đếm từ cuối cùng bên phải, trong trường hợp này giá trị là 2. danh_sach[-5:-1] chạy đến phần tử ngay trước phần tử cuối cùng. Tóm lại danh_sach[-5:-1] gồm các giá trị [2, 3, 4, 5].
  • Nội dung được in ra có thể như sau:

Câu 18.5

Viết chương trình hỏi số điện thoại người dùng, lưu các chữ số vào một mảng. Sau đó thống kê các chữ số không xuất hiện trong số điện thoại đó. Định dạng số điện thoại nhập vào chỉ gồm các chữ số, không có các kí tự khác. Nếu tất cả các chữ số đều xuất hiện thì thông báo “Số điện thoại này gồm tất cả các chữ số từ 0 đến 9”.

Trả lời:

line = input("Hãy nhập một số điện thoại: ")
digits = [int(x) for x in line]
missing = []
for i in range(10):
    if not (i in digits):
        missing.append(i)
if len(missing) == 0:
    print("Số điện thoại này gồm tất cả các chữ số từ 0 đến 9", end=" ")
else:
    print("Các chữ số không xuất hiện: ", end=" ")
    print(missing)
  • Yêu cầu nhập "Hãy nhập một số điện thoại: ". Kết quả nhập vào được lưu trong biến line.
  • Dòng digits = [int(x) for x in line] biến chuỗi line thành một danh sách digits, trong đó mỗi chữ số trong chuỗi được chuyển thành một số nguyên và được lưu trong danh sách.
  • Một danh sách trống missing được tạo để lưu các chữ số không xuất hiện trong số điện thoại đã nhập.
  • Một vòng lặp for chạy từ 0 đến 9 (bao gồm tất cả các chữ số từ 0 đến 9).
  • Trong vòng lặp, if not (i in digits): kiểm tra xem chữ số i có tồn tại trong danh sách digits không. Nếu không tồn tại, nghĩa là nó đã “thiếu” trong số điện thoại nhập vào, chữ số này sẽ được thêm vào danh sách missing.
  • Cuối cùng, sau khi vòng lặp hoàn thành, chương trình kiểm tra độ dài của danh sách missing. Nếu danh sách này có độ dài bằng 0, điều này có nghĩa là tất cả các chữ số từ 0 đến 9 đều xuất hiện trong số điện thoại. Chương trình sẽ in ra thông báo "Số điện thoại này gồm tất cả các chữ số từ 0 đến 9".
  • Nếu danh sách missing không rỗng, chương trình sẽ in ra thông báo "Các chữ số không xuất hiện:" theo sau là danh sách missing.

Câu 18.6

Em hãy lưu điểm tổng kết ba môn học Toán, Ngữ văn, Tiếng Anh của các học sinh vào một mảng hai chiều, mỗi dòng là điểm của một học sinh theo thứ tự Toán, Ngữ văn, Tiếng Anh. Sau đó tính điểm trung bình cả ba môn của mỗi học sinh và số thứ tự của học sinh có điểm cao nhất mỗi môn học. Trường hợp nhiều học sinh cùng đạt điểm cao nhất trong một môn học thì chỉ cần in ra số thứ tự của học sinh đầu tiên.

Trả lời:

names = []
marks_all = []
size = int(input("Hãy nhập số lượng học sinh: "))
for i in range(size):
    marks = []
    while len(marks) != 3:
        line = input("Điểm tổng kết các môn Toán, Ngữ văn, Tiếng Anh của học sinh thứ " + str(i + 1) + ": ")
        marks = [float(x) for x in line.split()]
        if len(marks) != 3:
            print("Cần nhập điểm tổng kết của 3 môn")
    marks_all.append(marks)

# Tính điểm trung bình tổng kết của mỗi học sinh
for i in range(size):
    total = 0
    for m in marks_all[i]:
        total += m
    avg = round(total / len(marks_all[i]), 1)
    print("Điểm trung bình tổng kết học sinh thứ", i + 1, ":", avg)

subject_names = ["Toán", "Ngữ văn", "Tiếng Anh"]  # Mảng lưu tên các môn học
for subject_index in range(3):  # tìm học sinh có điểm cao nhất từng môn
    max_score = 0
    best_student_index = 0
    for student_index in range(size):
        if max_score < marks_all[student_index][subject_index]:
            max_score = marks_all[student_index][subject_index]
            best_student_index = student_index
    print("Học sinh thứ", best_student_index + 1, "có điểm cao nhất môn", subject_names[subject_index])

Câu 18.7

Viết chương trình yêu cầu người dùng nhập vào toạ độ ba đỉnh của một tam giác. Lưu các toạ độ đó trong một mảng hai chiều sau đó tính chu vi tam giác.

Trả lời:

import math

points = []

print("Hãy nhập toạ độ 3 đỉnh của tam giác")
for i in range(3):
    line = input("Toạ độ điểm thứ " + str(i + 1) + ": ")
    coordinates = [float(x) for x in line.split()]
    points.append(coordinates)

perimeter = 0
for i in range(3):  # lặp qua các đỉnh
    length = math.sqrt(
        pow(points[i][0] - points[(i + 1) % 3][0], 2) + pow(points[i][1] - points[(i + 1) % 3][1], 2)
    )
    perimeter += length

print("Chu vi tam giác là: ", perimeter)
  • Trong vòng lặp tính chu vi, sử dụng toán tử % để tính toán độ dài đúng giữa các đỉnh của tam giác, vì vòng lặp cần quay trở lại đỉnh đầu tiên sau khi đã xử lý ba đỉnh.

Câu 18.8*

Viết chương trình khai báo một mảng hai chiều 8×8 biểu diễn trạng thái của một bàn cờ vua. Giá trị một ô bàn cờ là 0 nếu không có quân cờ. Bên quân trắng sử dụng giá trị 1 đến 6 lần lượt cho các quân vua, hậu, xe, mã, tượng, tốt của bên trắng. Tương tự quân đen sử dụng giá trị -1 đến -6. Các cột bàn cờ được kí hiệu bằng các kí tự A, B, C, D, E, F, G, H trong khi đó các dòng được kí hiệu bằng số 1 đến 8 từ dưới lên.

Giả sử quân trắng chuẩn bị đi, hãy in ra vị trí các quân xe trắng cùng các ô nó có thể được đi ở nước tiếp theo.

Gợi ý: Đầu tiên cần tìm vị trí các quân xe trắng bằng cách dùng hai vòng lặp duyệt qua tất cả các hàng và cột của mảng hai chiều tìm các ô có giá trị là 3 (ứng với quân xe trắng). Vì con xe có thể đi dọc và ngang nên để tìm các ô nó có thể đi chỉ cần duyệt từ vị trí mỗi con xe theo 4 hướng trên, dưới, trái, phải cho đến khi gặp một quân cờ khác hoặc đến biên bàn cờ.

Trả lời:

board = [   [-3, -4, -5, -2, -1, -5, -3, -2],
            [-6, -6, -6, -6, -6, -6, -6, -6],
            [0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0, 3, 0],
            [0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 3, 0, 0, 0, 0, 0],
            [0, 0, 0, 1, 2, 0, 0, 0] ]

columns = ["A", "B", "C", "D", "E", "F", "G", "H"]
rows = ["8", "7", "6", "5", "4", "3", "2", "1"]

for i in range(8): #lặp mỗi hàng bàn cờ từ trên xuống 
    for j in range(8): #lặp mỗi cột từ trái sang
        if board[i][j] == 3:
            print("Quân xe trắng ở vị trí", columns[j], rows[i], sep = " ")
            
            # Duyệt các ô theo cột hướng lên trên
            ii = i - 1
            while ii >= 0:
                if board[ii][j] == 0:
                    print(columns[j], rows[ii])
                    ii -= 1
                else:
                    break
            
            # Duyệt các ô theo cột hướng xuống dưới
            ii = i + 1
            while ii <= 7:
                if board[ii][j] == 0:
                    print(columns[j], rows[ii])
                    ii += 1
                else:
                    break
            
            # Duyệt các ô theo hàng hướng sang trái
            jj = j - 1
            while jj >= 0:
                if board[i][jj] == 0:
                    print(columns[jj], rows[i])
                    jj -= 1
                else:
                    break
            
            # Duyệt các ô theo hàng hướng sang phải
            jj = j + 1
            while jj <= 7:
                if board[i][jj] == 0:
                    print(columns[jj], rows[i])
                    jj += 1
                else:
                    break

Xem các bài giải khác: Giải Sách Bài Tập Lớp 11 Khoa Học Máy Tính Kết Nối Tri Thức Với Cuộc Sống

Thông tin liên hệ & mạng xã hội:
Website: https://bumbii.com/
Facebook: https://www.facebook.com/bumbiiapp
Pinterest: https://www.pinterest.com/bumbiitech

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest

0 Bình luận
Phản hồi nội tuyến
Xem tất cả bình luận
0
Cùng chia sẻ bình luận của bạn nào!x