01/10/2018, 14:57

Giúp bài tập về con trỏ và ma trận trong C

Mọi người cho mình hỏi, có 1 bài nó yêu cầu như này: Nhập vào 1 ma trận, dùng các con trỏ để trỏ vào từng dòng của nó, sau đó tính tổng các phần tử trên cùng 1 dòng, so sánh các tổng vừa nhận được, dòng nào có tổng các phần tử lớn hơn thì chuyễn xuống dưới, dòng nào có tổng của các phần tử nhỏ hơn thì đẩy lên trên, cuối cùng là in ra ma trận đã sắp xếp. Ai đó chỉ mình hướng giải bài này với ạ

Thân Hoàng viết 17:02 ngày 01/10/2018

Hi bạn. Mình sẽ nói về hướng làm theo suy nghĩ của mình:

  • Đầu tiên hãy giải quyết bài toán con này: Nhập n xâu và in ra các xâu vừa nhập (không dùng mảng 2 chiều char).
    Đáp án https://bugs.vn/8131
  • Tương tự, bài này thay vì dùng mảng 2 chiều bạn có thể dùng kiểu int** để chứa ma trận.

Về ý tưởng giải quyết bài toán:
1.Tạo một mảng có số phần tử bằng số cột của ma trận.
Trong khi nhập từng hàng thì tính tổng của hàng, nhập xong một hàng thì gán mảng[i] = tổng.
2. Sắp xếp giá trị của mảng tổng theo chiều tăng dần, trong khi sắp xếp thì tạo một mảng lưu chỉ số của hàng.
3. Sắp xếp xong thì dùng vòng lặp gán lại cho các hàng.

Tao Không Ngu. viết 17:11 ngày 01/10/2018

Hi N.T.H.

  1. Bạn đọc tài liệu về contrỏ.
  2. Thuật toán xắp xếp.

P/S Bạn đọc lại nội quy xem.

rogp10 viết 17:00 ngày 01/10/2018

dùng kiểu int** để chứa ma trận

Sao bạn không swap mấy con trỏ dòng luôn chép lại nó dài.

Thân Hoàng viết 17:10 ngày 01/10/2018

làm sao để swap luôn hai dòng hả anh ? Tại vì em nghĩ con trỏ này được cấp 1 vùng nhớ luôn chứ không phân rã như linked list

Chế Tiệp Chân Khoa viết 17:13 ngày 01/10/2018
void swap(int** matrix, indexline1, indexline2) {
  int** pline1 = matrix + indexline1;
  int** pline2 = matrix + indexline2;
  int** temp = pline2;
  *pline2 = *pline1;
  *pline1 = *temp;
}
int main() {
  int** matrix = malloc(m*sizeof(int*)); // cấp phát cho mảng dòng
  for (i=0; i++; i<m) {
    *(matrix+i) = malloc(n*sizeof(int)); // cấp phát cho m mảng số
    // như vậy từng mảng số được cấp phát tách biệt với nhau và với mảng dòng
  }
  // ...
  swap(matrix, 5, 7);
Bài liên quan
0