30/09/2018, 16:23

Thắc mắc về vị trí các hàm

#include<stdio.h>
#include<conio.h>
//Khai báo nguyên hàm
void Nhapmang(int a[],int n);
void Xuatmang(int a[],int n);
void Xoa(int a[],int &n);
void Sapxeptangdan(int a[],int n);
int DemPhanBiet(int a[],int n);

void Nhapmang(int a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("
a[%d]: ",i);
		scanf("%d",&a[i]);
	}
}
void Xuatmang(int a[],int n)
{
	
	for(int i=0;i<n;i++)
	{
		printf("%2d",a[i]);
	}
}
//Xóa các phần tử giống nhau để mãng chỉ gồm những phần tử phân biệt
void Xoa(int a[],int &n)
{
	for(int i=0;i<n;i++)
	{
		int j=i+1;
		while(j<n)
		{
			if(a[i]==a[j])
			{
				for(int k=j;k<n;k++)
				{
					a[k]=a[k+1];
					
				}
				n--;
			}
			else
			{
				j++;
			}
		}
	}
}
void Sapxeptangdan(int a[],int n)
{
	int temp;
	for(int i=0;i<n-1;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i]>a[j])
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
}
int DemPhanBiet(int a[],int n)
{
	Sapxeptangdan(a,n); //Gọi lại hàm sắp xếp tăng dần.
	int dem1=0,dem2=0;
	for(int i=0;i<n;i++)
	{
		if(a[i]==a[i+1])
		{
			dem1++;
		}
	}
	for(int i=0;i<n;i++)
	{
		if(a[i]==a[i+1] && a[i+1]!=a[i+2])
		{
			dem2++;
		}
	}
	return n-(dem1+dem2);
}
void main()
{
	int a[100];
	int n=10;
	//==============Nhập xuất=============//
	Nhapmang(a,n);
	printf("
Mang vua nhap la: ");
	Xuatmang(a,n);
	//=====Đếm các phần tử phân biệt====//
	printf("
So phan tu phan biet: %d",DemPhanBiet(a,n));
	//====Xóa các phần tử giống nhau=====//
	Xoa(a,n);
	printf("
Mang sau khi xoa cac phan tu giong nhau la: ");
	Xuatmang(a,n);
	/*
	//=====Đếm các phần tử phân biệt====//
	printf("
So phan tu phan biet: %d",DemPhanBiet(a,n));
	*/
	getch();
}

Cho em hỏi là sao khi đưa hàm đếm DemPhanBiet(int a[],int n) lên trên hàm Xoa(int a[],int n). Thì kết quả ra đúng, Còn ngược lạ kết quả sẽ ra số lượng phần tử còn lại sau khi đã xóa các phần tử giống nhau.

Kelvin Nguyễn viết 18:26 ngày 30/09/2018

Minh hiểu rồi.Nhưng sao hàm đếm phân biệt lại sao. Mình test đúng mà

Bài liên quan
0