01/10/2018, 15:37

Code xóa các phần tử âm trong mảng chạy giữa chừng rồi đứng lại

Em đã có viết code nhưng nó lại chạy giữa chừng rồi đứng khựng lại và không báo lỗi gì. Ý tưởng của e là e sắp xếp mảng giảm dần rồi đếm phần tử âm sau đó trừ phần tử lẻ ra r in ra thôi ạ. E cảm ơn ạ.

#include <stdio.h>
#include <conio.h>
#define MAX 500
void nhapMang(int &n, double a[]);
void xuatMang(int n, double a[]);
void xepMangGiam(int n, double a[]);
int demPTAm(int n, double a[]);
void xoaPTAm(int &n, double a[]);
void main()
{
	int n;
	double a[MAX];
	nhapMang(n, a);
	xoaPTAm(n, a);
	xuatMang(n, a);
	getch();
}
void nhapMang(int &n, double a[])
{
	do
	{
		printf("Nhap do lon mang : ");
		scanf("%d", &n);
	}while(n <= 0);
	for(int i = 0 ; i < n ; i++)
	{
		printf("
a[%d]: ", i + 1);
		scanf("%lf", &a[i]);
	}
}
void xuatMang(int n,double a[])
{
	for(int i = 0 ; i < n ; i++)
		printf("%lf	", a[i]);
}
void xepMangGiam(int n, double a[])
{
	int j;
	double temp;
	for(int i = 1 ; i < n ; i++)
	{
		temp = a[i];
		j = i--;
		while(temp > a[j] && j >= 0)
		{
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = temp;
	}
}
int demPTAm(int n, double a[])
{
	
	int dem = 0;
	for(int i = 0 ; i < n ; i++)
	{
		if(a[i] < 0)
			dem++;
	}
	return dem;
}
void xoaPTAm(int &n, double a[])
{
	xepMangGiam(n, a);
	n = n - demPTAm(n, a);
}

đây là code của e ạ !! Mong mọi người giúp đỡ
update: Khi e chuyển qua xài sắp xếp bằng cái Selection Soft thì được nhưng sao cái Insertion Soft lại không được nhỉ ?

HK boy viết 17:51 ngày 01/10/2018

Thế bạn muốn tìm phần tử lẻ hay phần tử âm?

Lê Hồng Minh viết 17:51 ngày 01/10/2018

á hình như là e nhầm. Âm anh ạ

HK boy viết 17:49 ngày 01/10/2018

Code bạn phức tạp quá.

Bạn thử in mảng sau khi sort xem có chuyện gì xảy ra. Nếu bạn không in được mảng sau khi sort thì chứng tỏ code sort của bạn sai.

Lê Hồng Minh viết 17:47 ngày 01/10/2018

Dạ e đã thử đúng là không in được. Không hiểu nó sai chỗ nào e nhìn cả tiếng đồng hồ luôn

HK boy viết 17:54 ngày 01/10/2018

Chứng tỏ code sort của bạn sai. Bạn thử tìm thuật toán sort nào khác đơn giản và dễ đọc hơn rồi code xem. Code này của bạn rối quá.

Lê Hồng Minh viết 17:46 ngày 01/10/2018
void xepMangGiam1(int n, double a[])
{
	int vtmax;
	for(int i = 0 ; i < n - 1 ; i++)
	{
		vtmax = a[i];
		for(int j = i + 1 ; j < n ; j++)
		{
			if(a[vtmax] < a[j])
				vtmax = j;
		}HoanVi(a[i], a[vtmax]);

	}
}

em dùng cái này thì lại thành công không hiểu sao kỳ lạ thật cái kia e cũng xài được trong việc sắp xếp cho mấy bài trước mà bai này lại không được

HK boy viết 17:45 ngày 01/10/2018

Code nào dễ đọc, dễ bào trì, dễ thuộc hơn thì cứ dùng.

cái kia e cũng xài được trong việc sắp xếp cho mấy bài trước mà bai này lại không được

Chưa chắc tất cả các trường hợp đều giống nhau.

Lê Hồng Minh viết 17:38 ngày 01/10/2018

Code nào dễ đọc, dễ bào trì, dễ thuộc hơn thì cứ dùng.

Le_Hong_Minh:
cái kia e cũng xài được trong việc sắp xếp cho mấy bài trước mà bai này lại không được

Chưa chắc tất cả các trường hợp đều giống nhau.

dạ e cám ơn a.Tại e thấy cái kia nó là chèn phần tử cũng khá hay với lại mới học nên cũng áp dụng thử 3 cái soft mới học cho hiểu chắc với nhớ luôn

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

j = i--;

Như vầy thì làm sao mà chạy nổi hãy hết sức thận trọng khi đọc và khi định viết những câu sửa biến lặp ngang xương ntn.

Lê Hồng Minh viết 17:45 ngày 01/10/2018

mà chạy nổi hãy

dạ nó là j = i - 1; đó phải không a??

Bài liên quan
0