Giải chi tiết Tin học 11 định hướng KHMT Kết nối mới bài 17: Dữ liệu mảng một chiều và hai chiều

Giải bài 17: Dữ liệu mảng một chiều và hai chiều sách Tin học 11 định hướng KHMT kết nối. Phần đáp án chuẩn, hướng dẫn giải chi tiết cho từng bài tập có trong chương trình học của sách giáo khoa. Hi vọng, các em học sinh hiểu và nắm vững kiến thức bài học.

Khởi động

Câu hỏi.  Em được giao nhiệm vụ thiết lập và lưu trữ một danh sách các địa điểm là nơi các bạn trong lớp sẽ thường xuyên đến để tham quan và trải nghiệm thực tế. Mỗi địa điểm như vậy cần nhiều thông tin, nhưng thông tin quan trọng nhất là toạ độ (x. y) của thông tin đó trên bàn đồ. Em sẽ dụng cầu trúc dữ liệu gì để mô tả danh sách các địa điểm này?

Hướng dẫn trả lời:

Em sẽ dụng cầu trúc dữ liệu 2 chiều để mô tả danh sách các địa điểm này

1. Cấu trúc dữ liệu mảng một chiều

Hoạt động 1: Tìm hiểu cấu trúc dữ liệu mảng một chiều trong Python

Câu hỏi. Thực hiện các thao tác sau, quan sát, trao đổi và thảo luận, từ đó nhận biết về cấu trúc dữ liệu mảng một chiều trong Python.

Hướng dẫn trả lời:

Cấu trúc dữ liệu màng một chiều trong Python có thể biểu diễn bằng kiểu dữ liệu canh sách (list) với chức năng truy cập dễ dàng từng phần tử theo chỉ số, truy cập theo vùng chỉ số. Toán từ in và lệnh for .. in sẽ hỗ trợ duyệt từng phản từ của mảng.

Câu hỏi 1. Sử dụng hàm sum() tính tổng các số của một dãy. Hãy viết câu lệnh tính giá trị trung bình của dãy số A cho trước.

Hướng dẫn trả lời:

tb = sum(A) / len(A)

print(tb)

Câu hỏi 2. Có thể duyệt các phần tử của mảng theo chiều ngược lại, từ cuối về đầu, được không?

Hướng dẫn trả lời:

  • Có thể duyệt các phần tử của mảng theo chiều ngược lại từ cuối về đầu bằng cách sử dụng các vòng lặp hoặc hàm đệ quy để duyệt các phần tử của mảng từ vị trí cuối cùng về đầu.
  • Ví dụ, trong ngôn ngữ lập trình C, chúng ta có thể sử dụng vòng lặp for để duyệt các phần tử của mảng theo chiều ngược lại từ vị trí cuối cùng đến đầu mảng bằng cách khởi tạo biến đếm i bằng độ dài của mảng trừ đi 1 và sử dụng điều kiện i >= 0 để kiểm tra xem vị trí hiện tại có nằm trong mảng hay không, sau đó giảm giá trị của i sau mỗi lần lặp.
  • Trong Python chúng ta có thể sử dụng hàm reverse() để đảo ngược thứ tự các phần tử trong mảng, sử dụng vòng lặp for kết hợp với chỉ số đếm để duyệt từ vị trí cuối cùng đến đầu mảng hoặc sử dụng hàm reversed() để tạo một danh sách mới với các phần tử đã được đảo ngược.

2. Cấu trúc dữ liệu mảng 2 chiều

Hoạt động 2: Mô hình list của Python

Câu hỏi: Thực hiện các lệnh sau, sau sát, trao đổi và thảo luận, từ đó nhận biết về mô hình danh sách trong Python.

Hướng dẫn trả lời:

Python hỗ trợ mô hình dữ liệu danh sách trong danh sách, tức là mỗi phần tử của danh sách là một đối tượng dạng danh sách khác.

Câu hỏi 1. Thiết lập mảng bao gồm dữ liệu là toạ độ các điểm trên mặt phẳng, mỗi điểm P được cho bởi hai toạ độ (px, py).

Hướng dẫn trả lời:

các điểm trên mặt phẳng. Mỗi điểm sẽ được biểu diễn bằng một danh sách chứa hai phần tử là toạ độ px và py.

Ví dụ, để tạo một mảng bao gồm 3 điểm A(1,2), B(3,4), và C(5,6), bạn có thể sử dụng mã như sau:

p = [[1, 2], [3, 4], [5, 6]]

Câu hỏi 2. Thiết lập màng bao gồm dãy các thông tin là danh sách học sinh và thông tin 3 điểm thi của học sinh tương ứng các bải thi số 1, 2, 3. Viết đoạn lệnh nhập bộ đữ liệu trên và chương trình in ra danh sách học sinh cùng với điểm trung bình của các bài thi

Hướng dẫn trả lời:

#include <iostream>

using namespace std;

//khai báo biến toan, van là bài thi 1,2,3

//biến diemTB là điểm trung bình của bài thi 1,2,3

float toan, van, diemTB;

/* hàm nhập */

void nhap() {

  //sử dụng do..while để yêu cầu người dùng nhập vào bài thi 1,2,3 trong khoảng 1 -> 10

  do{

    cout<<"\nNhập vào điểm 1: ";

    cin>>1;

    cout<<"\nNhập vào điểm 2: ";

    cin>>2;

cout<<"\nNhập vào điểm 3: ";

    cin>>3;

  }while(1 < 0 || 2 < 0 || 3 < 0 ||1 >10 | 2 >10 || 3 > 10);

}

/* hàm tính trung bình cộng */

void tinhTB(){

  diemTB = (1 + 2 + 3) / 3;

}

/* hàm xuất */

void xuat(){

  cout<<"\nĐiểm trung bình 1"<< hoten<<" là: "<< diemTB;

  cout<<"\n--------------------------------------\n";

  cout<<"\nĐiểm trung bình 2"<< hoten<<" là: "<< diemTB;

  cout<<"\n--------------------------------------\n";

  cout<<"\nĐiểm trung bình 3"<< hoten<<" là: "<< diemTB;

  cout<<"\n--------------------------------------\n";

}

int main() {

  nhap();

  tinhTB();

  xuat();

}

Hoạt động 3: Mô hình mảng hai chiều của Python

Câu hỏi: Đọc, trao đổi, thảo luận và cấu trúc dữ liệu mảng hai chiều trong Python

Hướng dẫn trả lời:

Trong tin học, một cấu trúc dữ liệu hai chiều được hiểu là một bảng hay còn gọi là ma trận, bao gồm các hàng và cột dữ liệu. Bảng có thể có kích thước vuông n x n hoặc kích thước bất kì m x n.

Câu hỏi 1: Câu lệnh sau sẽ tạo dữ liệu thuộc thể loại gì?

temp = [1 , 2, 3, 4]

A= [temp, temp]

Hướng dẫn trả lời:

Câu lệnh trên sẽ tạo ra một dữ liệu thuộc thể loại List (danh sách) trong Python, với tên biến A là một danh sách chứa hai phần tử. Mỗi phần tử của danh sách A là một tham chiếu đến đối tượng danh sách temp, được tạo ra trước đó.

Vì vậy, A sẽ chứa hai tham chiếu đến cùng một danh sách temp, với giá trị của temp là [1, 2, 3, 4]. Nếu giá trị của danh sách temp thay đổi, thì giá trị của các phần tử trong danh sách A cũng sẽ thay đổi theo.

Câu hỏi 2. Nếu A là bảng (ma trận) kích thước m X N thì đoạn chương trình sau sẽ in ra thông tin gì trên màn hình?

Hướng dẫn trả lời:

Nếu A là một ma trận kích thước m x n, đoạn chương trình trên sẽ in ra giá trị của từng phần tử trong ma trận A, mỗi dòng một.

Cụ thể, với mỗi giá trị của i trong khoảng từ 0 đến m - 1, vòng lặp đầu tiên sẽ lặp qua từng phần tử trong hàng thứ i của ma trận A. Với mỗi giá trị của j trong khoảng từ 0 đến n-1, vòng lặp thứ hai sẽ in ra giá trị của phần tử tại vị trí (i,j) trong ma trận A bằng lệnh print(A[i][j],end=" "), kết thúc bằng một khoảng trắng.

Sau khi in hết các phần tử trong hàng thứ i, lệnh print() trong vòng lặp đầu tiên sẽ xuống dòng, chuyển sang in hàng tiếp theo của ma trận A. Như vậy, tổng hợp lại, đoạn chương trình sẽ in ra ma trận A dưới dạng bảng trên màn hình.

Luyện tập

Câu hỏi 1. Giả sử số đo chiều cao các bạn trong lớp được cho trong dãy số A. Hãy viết đoạn chương trình tính:

- Số đo chiều cao trung bình của cả lớp.

- Số bạn có chiều cao lớn hơn chiều cao trung bình của cả lớp.

Hướng dẫn trả lời:

A = [170, 175, 160, 180, 165] # ví dụ dãy số đo chiều cao của lớp

n = len(A) # số lượng học sinh trong lớp

tong_chieu_cao = sum(A) # tổng số đo chiều cao của cả lớp

trung_binh_chieu_cao = tong_chieu_cao/n # số đo chiều cao trung bình của cả lớp

so_hs_tren_tb = 0 # số học sinh có chiều cao lớn hơn chiều cao trung bình của cả lớp

for i in range(n):

  if A[i] > trung_binh_chieu_cao:

   so_hs_tren_tb += 1

print("Số đo chiều cao trung bình của cả lớp là:", trung_binh_chieu_cao)

print("Số bạn có chiều cao lớn hơn chiều cao trung bình của cả lớp là:", so_hs_tren_tb)

Câu hỏi 2. Viết chương trình nhập từ bàn phím số tự nhiên m, sau đó lần lượt nhập m dòng, mỗi dòng bao gồm n số cách nhau bởi dấu cách, đưa dữ liệu đã nhập vào ma trận A, sau đó in ma trận A ra màn hình.

Hướng dẫn trả lời:

m = int(input("Nhập số hàng của ma trận: "))

n = int(input("Nhập số cột của ma trận: "))

A = []

for i in range(m):

  # Nhập một dòng gồm n số nguyên cách nhau bởi dấu cách

  row = list(map(int, input(f"Nhập dòng {i+1}: ").split()))

  A.append(row)

# In ma trận A ra màn hình

for i in range(m):

  for j in range(n):

   print(A[i][j], end=" ")

  print()

Vận dụng

Câu hỏi 1. Viết hàm số UnitMatrix(n) với n là số tự nhiên cho trước, hàm trả lại giá trị là ma trận bậc n như Hình 17.1.

Hướng dẫn trả lời:

def UnitMatrix(n):

 matrix = []

 for i in range(n):

  row = []

  for j in range(n):

   if i == j:

    row.append(1)

   else:

    row.append(0)

  matrix.append(row)

 return matrix

Câu hỏi 2: Viết chương trình cho phép người dùng nhập từ bàn phim một dãy số tự nhiên, hãy đếm với mỗi giá trị của dây có bao nhiêu số lặp lại. Ví dụ nếu dãy ban đầu là:

0 1 5 7 0 2 5 1 1 2

thì chương trình cần thông báo như Hình 17.2.

Hướng dẫn trả lời:

numbers = list(map(int, input("Nhập dãy số: ").split()))

count = {}

for number in numbers:

  if number in count:

   count[number] += 1

  else:

   count[number] = 1

for number in count:

   print(f"Số {number} lặp lại {count[number]} lần")

Câu hỏi 3: Em ghi số tiền điện gia đình em theo từng tháng vào một danh sách gồm 12 số. Mỗi năm lại ghi lại số tiền điện vào một danh sách và ghép với danh sách các năm trước. Như vậy em thu được một bảng kích thước n x 12, trong đó hàng thứ k là số tiền điện của năm thứ k, cột tương ứng số tiền điện theo tháng.

a) Thiết lập mảng mới tính số tiền điện trung bình của các năm, mỗi năm ghi một số.

b) Tính số tiền điện trung bình của tất cả các năm đã được ghi dữ liệu trong bảng.

Hướng dẫn trả lời:

#Tạo mảng 2 chiều lưu trữ số tiền điện của gia đình

electricity_bills = [

 [100, 120, 130, 110, 90, 80, 70, 60, 50, 70, 80, 90],

 [110, 130, 140, 120, 100, 90, 80, 70, 60, 80, 90, 100],

 [120, 140, 150, 130, 110, 100, 90, 80, 70, 90, 100, 110],

 [130, 150, 160, 140, 120, 110, 100, 90, 80, 100, 110, 120]

]

# Tính số tiền điện trung bình của từng năm và in kết quả

for i in range(len(electricity_bills)):

 year_total = sum(electricity_bills[i])

 year_average = year_total / len(electricity_bills[i])

 print(f"Average electricity bill for year {i+1}: {year_average}")

# Tính số tiền điện trung bình của tất cả các năm và in kết quả

total = 0

count = 0

for row in electricity_bills:

 total += sum(row)

 count += len(row)

overall_average = total / count

print(f"Overall average electricity bill: {overall_average}")

Tìm kiếm google: Giải tin học 11 kết nối bài 17 Dữ liệu mảng một chiều và hai chiều, Giải tin học 11 kết nối tri thức bài 17, Giải tin học KNTT bài 17

Xem thêm các môn học

Giải tin học 11 định hướng Khoa học máy tính KNTT mới


Đia chỉ: Tòa nhà TH Office, 90 Khuất Duy Tiến, Thanh Xuân, Hà Nội
Điện thoại hỗ trợ: Fidutech - click vào đây
Chúng tôi trên Yotube
Cùng hệ thống: baivan.net - Kenhgiaovien.com - tech12h.com