#include <iostream>
#define MAX 100
using namespace std;
void nhapMang(int, int);
void xuatMang(int, int);
void hoanVi(int *, int *);
void sapXepGiam(int *, int);
void maiNgoiNguoc(int *, int);
void nhapMang(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << "arr[" << i << "] = ";
cin >> arr[i];
}
}
void xuatMang(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void hoanVi(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void sapXepGiam(int *arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (arr[i] < arr[j])
hoanVi(&arr[i], &arr[j]);
}
}
}
void maiNgoiNguoc(int *arr, int n)
{
sapXepGiam(arr, n);
for (int i = 0; i < n; i++)
{
hoanVi(&arr[n / 2], &arr[n - 1]);
}
}
int main()
{
int n, arr[MAX];
cout << "Nhap n = ";
cin >> n;
nhapMang(arr, n);
xuatMang(arr, n);
maiNgoiNguoc(arr, n);
xuatMang(arr, n);
system("pause");
return 0;
}
Lỗi khi sắp xếp mái ngói ngược
Bạn không mô tả bài toán, hướng làm của bạn, và lỗi mắc phải?
1 Like
mình gặp phải lỗi ở hàm maiNgoiNguoc
nhưng giờ thì tìm ra rồi
1 Like
Có vẻ như bạn đang muốn làm thế này:
#include <iostream>
#define MAX 100
using namespace std;
void nhapMang(int, int);
void xuatMang(int, int);
void hoanVi(int *, int *);
void sapXepGiam(int *, int);
//void maiNgoiNguoc(int *, int);
void nhapMang(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << "arr[" << i << "] = ";
cin >> arr[i];
}
}
void xuatMang(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;
}
void hoanVi(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void sapXepGiam(int *arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (arr[i] < arr[j])
hoanVi(arr[i], arr[j]);
}
}
}
/*
void maiNgoiNguoc(int *arr, int n)
{
sapXepGiam(arr, n);
for (int i = 0; i < n-1; i++)
{
hoanVi(arr[n], arr[n+1]);
}
}
*/
int main()
{
int n, arr[MAX];
cout << "Nhap n = ";
cin >> n;
nhapMang(arr, n);
xuatMang(arr, n);
sapXepGiam(arr, n);
//maiNgoiNguoc(arr, n);
xuatMang(arr, n);
system("pause");
return 0;
}
ko bạn.
Hàm này mình nghĩ là đúng rồi
hoanVi(&arr[n / 2], &arr[n - 1]);
mình bị sai chỗ bị thừa vòng lặp for này
void maiNgoiNguoc(int *arr, int n)
{
sapXepGiam(arr, n);
for (int i = 0; i < n; i++)
{
hoanVi(&arr[n / 2], &arr[n - 1]);
}
}
Nếu task của bạn là sắp xếp ngược thì mình nghĩ bạn thừa hàm maiNgoiNguoc()
nhapMang();
xuatMang(); // vừa nhập
sapXepGiam();
xuatMang(); // xuất mảng mới
Mình chạy thấy nó hoàn thành task bình thường.
Mình cũng đang học nên trao đổi chơi 
bài này ko phải là sắp xếp theo mảng giảm dần mà là sắp xếp mảng theo hình mái ngói ngược
Ừ ha, hèn gì thấy cái hàm đó trông ngồ ngộ. Mình là thợ xây cũng lâu mà sao ko bít kiểu này ta 
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?