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 ạ
Giúp bài tập về con trỏ và ma trận trong C
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.
Hi N.T.H.
- Bạn đọc tài liệu về contrỏ.
- Thuật toán xắp xếp.
P/S Bạn đọc lại nội quy xem.
1 Like
Sao bạn không swap mấy con trỏ dòng luôn
chép lại nó dài.
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
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);
2 Likes

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?