Đọc ma trận từ file trong C++

4
17195
bai-tap-cpp-co-loi-giai

Hôm nay Lập trình không khó sẽ cùng các bạn đi làm một bài tập lập trình C++. Yêu cầu của đề bài là đọc ma trận từ file sử dụng C++ và sau đó kiểm tra xem ma trận đó có phải ma trận đường chéo không? Có một lưu ý là file chứa thông tin ma trận không có thông tin số lượng hay kích thước của ma trận. Điều này sẽ giúp bài toán trở nên thú vị hơn rất nhiều.

Phân tích bài toán

Sau đây là hình ảnh nội dung đề bài:

Đọc ma trận từ file
Đọc ma trận từ file và kiểm tra ma trận có phải ma trận đường chéo không

Phân tích đề:

Như bạn thấy, ma trận trong file text không hề có kích thước. Vậy một số việc chúng ta cần làm ở bài toán này bao gồm:

  1. Đọc ma trận từ file
  2. Lấy được kích thước của ma trận
  3. Kiểm tra ma trận có phải ma trận vuông không? Xem ma trận đường chéo phía dưới.
  4. Kiểm tra có phải ma trận đường chéo không?

Ma trận đường chéo là gì?

Xét ma trận vuông A. Nếu mọi phần tử nằm bên ngoài đường chéo chính đều bằng 0, thì A được gọi là ma trận đường chéo.

Ví dụ ma trận đường chéo

Như vậy, ta cần kiểm tra nếu không phải ma trận vuông thì thông báo ra và kết thúc.

Đọc ma trận từ file trong C++

Để đơn giản hơn, mình sẽ bỏ dấu phảy trong file text. Cụ thể, ma trận lưu trong text file sẽ có dạng như sau:

Ý tưởng đọc ma trận:

  • Bỏ qua dòng đầu tiên, dòng này là tên ma trận nên bỏ nó đi
  • Đọc vào từng dòng, tách phần tử và lưu nó vào một trận 2 chiều
  • Đặt kích thước mảng 2 chiều bằng số phần tử của hàng đầu tiên
  • Nếu có một hàng có số phần tử khác kích thước của ma trận => trả về giá trị false
  • Nếu số lượng hàng khác với kích thước mảng => trả về false

Hàm đọc ma trận từ file

Hàm kiểm tra ma trận đường chéo

Ý tưởng là: Nếu tồn tại một phần tử nằm ngoài đường chéo mà có giá trị khác 0 thì kết luận là không phải ma trận đường chéo. Đây là một bài tập C++ sử dụng kiến thức về vòng lặp và cấu trúc điều khiển

Toàn bộ lời giải của bài toán

Lưu ý: Bạn cần để file input.txt nằm cùng thư mục với source code nhé.

Kết quả chạy thử:

 

Subscribe
Notify of
guest
4 Bình luận
Inline Feedbacks
View all comments