Tình hình là sau khi học thuật toán tìm kiếm nhị phân ( binary search ). Sau đó bắt tay vào test với mảng 2 chiều. Vẽ mảng 2 chiều ra và làm thử như mảng 1 chiều thì lại ko đc bởi số lượng phần tử nếu sắp xếp tăng dần thì gặp tình trạng giới hạn bởi dòng và cột chứ ko 1 mạch như mảng 1 chiều nên sẽ gặp phải hiện tượng tràn số nếu đặt giá trị mảng khai báo nhỏ hoặc sẽ thành giá trị rác nếu như khai báo lớn. Sau đó bản thân mình nghĩ sẽ sắp xếp tăng dần theo dòng hoặc cột sẽ tốt hơn. Thao tác của mình là chạy dòng nào cần sắp xếp tăng dần. Sau khi sắp xếp xong và gán giá trị sang mang mới lại gặp tình trạng báo lỗi ko biết giải quyết sao. Mong mọi người xem xét giúp đỡ. @Is2IT @ltd @tuancoi2506 . chỉ cần cho em xin cách giải thôi là okje!
code :
#include <iostream>
using namespace std;
#define MAX 300
void nhapMang2Chieu(int [][MAX], int, int);
void xuatMang2Chieu(int [][MAX], int , int );
void hoanVi(int &, int &);
void sapXepMang2ChieuTangDanChoDong(int [][MAX], int, int, int [], int &);
void nhapMang2Chieu(int a[][MAX], int dong, int cot)
{
for (int i = 0; i < dong; ++i)
{
for (int j = 0; j<cot; ++j)
{
cout << "Moi ban nhap gia tri cho mang[" << i << "]" << " [" << j << "]:";
cin >> a[i][j];
}
}
}
void xuatMang2Chieu(int a[][MAX], int dong, int cot)
{
for (int i = 0; i < dong; ++i)
{
for (int j = 0; j < cot; ++j)
{
cout << " " << a[i][j] << " ";
}
cout << endl;
}
}
void hoanVi(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void sapXepMang2ChieuTangDanChoDong(int a[][MAX], int dongx, int cot,int b[],int &phanTu)
{
phanTu = 0;
for (int i = dongx; i >= dongx; --i)
{
for (int j = 0; j < cot; ++j)
{
if (a[dongx][j]>a[dongx][j + 1])
{
hoanVi(a[dongx][j], a[dongx][j]);
}
}
}
for (int i = dongx; i >= dongx; --i)
{
for (int j = 0; j < cot; ++j)
{
b[phanTu] = a[dongx][j];
phanTu++;
}
}
for (int i = 0; i < phanTu; ++i)
{
cout << " " << b[i] << " ";
}
}
int main(int argc, char **argv)
{
int a[MAX][MAX], dong, cot;
do
{
cout << "Moi ban nhap so dong cua mang 2 chieu : ";
cin >> dong;
if (dong<0 || dong>MAX)
{
cout << "\nSo dong ban nhap ko hop le. xin kiem tra lai!!";
}
} while (dong<0||dong>MAX);
do
{
cout << "Moi ban nhap so cot cua mang 2 chieu : ";
cin >> cot;
if (cot<0 || cot>MAX)
{
cout << "\nSo cot ban nhap ko hop le. xin kiem tra lai!!";
}
} while (cot<0 || cot>MAX);
nhapMang2Chieu(a, dong, cot);
xuatMang2Chieu(a, dong, cot);
int dongX;
do
{
cout << "\nNhap so dong ban mun sap xep tang dan: ";
cin >> dongX;
if (0 > dongX || dongX > dong)
{
cout << "\nDOng ban mun sap xep ko ton tai. vui long kiem tra lai!!";
}
} while (0>dongX || dongX>dong);
sapXepMang2ChieuTangDanChoDong(a, dongX, cot);
system("pause");
return 0;
}