Menu
CoddyTech

Ôn tập: Bộ xử lý danh sách

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 50 trên 65.

challenge icon

Thử thách

Dễ

Tạo một hệ thống xử lý dữ liệu linh hoạt để minh họa hàm bậc cao bằng cách xây dựng một bộ xử lý danh sách có thể tùy chỉnh. Chương trình của bạn sẽ tạo các hàm xử lý khác nhau và dùng một hàm xử lý chính có thể áp dụng bất kỳ phép toán nào lên một danh sách dữ liệu.

  1. Đọc một chuỗi đầu vào chứa các số được phân tách bằng dấu phẩy (ví dụ: "10,20,30,40")
  2. Đọc một chuỗi đầu vào biểu thị loại phép toán thứ nhất ("multiply", "add" hoặc "subtract")
  3. Đọc một chuỗi đầu vào biểu thị giá trị dùng cho phép toán thứ nhất (ví dụ: "3")
  4. Đọc một chuỗi đầu vào biểu thị loại phép toán thứ hai ("multiply", "add" hoặc "subtract")
  5. Đọc một chuỗi đầu vào biểu thị giá trị dùng cho phép toán thứ hai (ví dụ: "5")
  6. Tách đầu vào thứ nhất thành các số riêng lẻ và chuyển từng số thành số nguyên
  7. Tạo ba hàm phép toán:
    • multiplyBy - nhận hai số nguyên và trả về tích của số thứ nhất với số thứ hai
    • addTo - nhận hai số nguyên và trả về tổng của số thứ nhất và số thứ hai
    • subtractFrom - nhận hai số nguyên và trả về hiệu của số thứ nhất trừ số thứ hai
  8. Tạo một hàm chính tên là processListWithOperation nhận ba tham số:
    • Một danh sách số nguyên
    • Một hàm nhận hai số nguyên và trả về một số nguyên
    • Một giá trị số nguyên dùng cho phép toán
  9. Hàm processListWithOperation cần áp dụng hàm đã cho cho từng số trong danh sách bằng giá trị được cung cấp, rồi trả về một danh sách mới chứa các kết quả
  10. Áp dụng phép toán thứ nhất lên danh sách ban đầu, sau đó áp dụng phép toán thứ hai lên kết quả của phép toán thứ nhất
  11. Hiển thị kết quả theo đúng định dạng bên dưới

Ví dụ, nếu đầu vào là "2,4,6", "multiply", "3", "add" và "10", chương trình của bạn sẽ in ra:

Advanced List Processor
=======================
Original list: [2, 4, 6]
First operation: multiply by 3
After first operation: [6, 12, 18]
Second operation: add 10
Final result: [16, 22, 28]
Processing completed successfully

Nếu đầu vào là "15,25,35", "subtract", "5", "multiply" và "2", chương trình của bạn sẽ in ra:

Advanced List Processor
=======================
Original list: [15, 25, 35]
First operation: subtract 5
After first operation: [10, 20, 30]
Second operation: multiply by 2
Final result: [20, 40, 60]
Processing completed successfully

Chương trình của bạn phải minh họa hàm bậc cao bằng cách truyền hàm phép toán phù hợp cho processListWithOperation dựa trên đầu vào về loại phép toán. Dùng câu lệnh điều kiện để xác định hàm cần truyền cho từng phép toán. Hàm processListWithOperation cần lặp qua danh sách đầu vào, áp dụng hàm đã cho cùng với giá trị được cung cấp cho từng phần tử, rồi thu thập kết quả vào một danh sách mới. Áp dụng các phép toán lần lượt, dùng kết quả của phép toán thứ nhất làm đầu vào cho phép toán thứ hai.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc dữ liệu đầu vào
  String? numbersInput = stdin.readLineSync();
  String? firstOperation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondOperation = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // Chuyển chuỗi đầu vào thành danh sách các số nguyên
  List<int> originalList = numbersInput!.split(',').map((e) => int.parse(e.trim())).toList();
  int firstOpValue = int.parse(firstValue!);
  int secondOpValue = int.parse(secondValue!);
  
  // TODO: Viết code bên dưới
  // Tạo ba hàm thực hiện phép tính: multiplyBy, addTo, subtractFrom
  // Tạo hàm processListWithOperation
  // Thực hiện các phép tính theo thứ tự và lưu kết quả
  
  // In kết quả theo định dạng yêu cầu
  print('Advanced List Processor');
  print('=======================');
  print('Original list: $originalList');
  // In phép tính đầu tiên và kết quả
  // In phép tính thứ hai và kết quả cuối cùng
  print('Processing completed successfully');
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online