- Code:
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#define Max 100
typedef struct
{
int tu;
int mau;
}ps;
typedef struct
{
ps b[Max];
int n;
}songuyen;
int Add(songuyen &a,ps x);
int Del(songuyen &a,ps x);
int Search(songuyen a,ps x);
int IsFull(songuyen a);
int IsEmpty(songuyen a);
void InPut(songuyen &a);
void OutPut(songuyen a);
void DelLike(songuyen &a);
void Quicksort(songuyen &a,songuyen &b,int l,int r);
void Hoi(songuyen a,songuyen b,songuyen &c);
void Giao(songuyen a,songuyen b,songuyen &c);
void PhanBu(songuyen c,songuyen &b);
int BCNN(int a,int b);
void quidong(songuyen &a);
int main()
{
char t;
songuyen a,c;
int i;
a.n=0;
c.n=0;
while(1)
{
printf("\n1.Khoi tao Tap Hop");
printf("\n2.Xuat Tap Hop");
printf("\n3.Them phan tu vao Tap Hop");
printf("\n4.Xoa phan tu");
printf("\n5.Tim kiem phan tu thuoc Tap Hop");
printf("\n6.Khoi tao mot Tap Hop thu 2");
printf("\n7.Hoi cua 2 Tap Hop");
printf("\n8.Giao cua 2 Tap Hop");
printf("\n9.Hieu cua 2 Tap Hop");
printf("\nBam Enter de ket thuc chuong trinh!!!\n");
t=getch();
if(t=='1') { InPut(a);
songuyen b;
b=a;
quidong(b);
Quicksort(a,b,0,a.n-1);
}
else if(t=='2')
{ printf("\nTap Hop dang co la:");
OutPut(a);
}
else if(t=='3')
{
while(1)
{
ps x;
printf("\nNhap vao phan tu can them :");
scanf("%d/%d",&x.tu,&x.mau);
i=Add(a,x);
if(i==0) printf("\nChua them duoc phan tu!");
else printf("\nDa them duoc phan tu!");
printf("\nBan co muon them tiep phan tu?-C/K");
if(toupper(getch())=='K') break;
}
DelLike(a);
songuyen b;
b=a;
quidong(b);
Quicksort(a,b,0,a.n-1);
}
else if(t=='4')
{
while(1)
{
ps x;
printf("\nNhap vao phan tu can xoa :");
scanf("%d/%d",&x.tu,&x.mau);
i=Del(a,x);
if(i==0) printf("\nChua xoa duoc phan tu!");
else printf("\nDa xoa duoc phan tu!");
printf("\nBan co muon xoa tiep phan tu?-C/K");
if(toupper(getch())=='K') break;
}
}
else if(t=='5')
{
while(1)
{
ps x;
printf("\nNhap phan so can tim:");
scanf("%d/%d",&x.tu,&x.mau);
i=Search(a,x);
if(i==0) printf("\nKhong co phan tu do trong Tap Hop!");
else printf("\nCo phan tu do trong Tap Hop!");
printf("\nBan co muon tim kiem phan tu?-C/K");
if(toupper(getch())=='K') break;
}
}
else if(t=='6')
{
InPut(c);
songuyen b;
b=c;
quidong(b);
Quicksort(c,b,0,c.n-1);
printf("\nTap Hop 2 vua khoi tao la:");
OutPut(c);
}
else if(t=='7')
{ songuyen b;
b.n=0;
printf("Hoi cua 2 Tap Hop la:");
Hoi(a,c,b);
OutPut(b);
}
else if(t=='8')
{
songuyen b;
b.n=0;
printf("Giao cua 2 Tap Hop la:");
Giao(a,c,b);
OutPut(b);
}
else if(t=='9')
{
songuyen b,d;
d=c;
b.n=0;
Giao(a,c,b);
printf("Hieu cua 2 Tap Hop la:");
PhanBu(b,d);
OutPut(d);
}
else break;
}
}
void InPut(songuyen &a)
{
int i=0;
//printf("Ban co muon nhap Tap Hop?-C/K");
//if(toupper(getch())=='C')
{
while(1)
{
if(IsFull(a))
{
printf("\nTap Hop da day!!");
break;
}
printf("\nNhap vao phan tu thu %d cua Tap Hop:",i+1);
scanf("%d/%d",&a.b[i].tu,&a.b[i].mau);
a.n++;
printf("Co nhap tiep hay ko?-C/K");
if(toupper(getch())=='K') break;
i++;
}
}
DelLike(a);
}
void DelLike(songuyen &a)
{ songuyen t;
int b[Max],l=0;
for(int i=0;i<a.n;i++)
b[i]=1;
for(int i=0;i<a.n;i++)
{
if(b[i]!=0)
{
t.b[l]=a.b[i];
for(int j=i+1;j<a.n;j++)
if((a.b[i].tu==a.b[j].tu)&&(a.b[i].mau==a.b[j].mau)) b[j]=0;
l++;
}
}
t.n=l;
a=t;
}
void OutPut(songuyen a)
{
int i;
if(IsEmpty(a)) printf("\nTap hop rong!!");
else
{
//printf("\nDay dang co la:");
for(i=0;i<a.n;i++)
printf("%d/%d ",a.b[i].tu,a.b[i].mau);
}
}
int IsEmpty(songuyen a)
{
if(a.n==0) return 1;
else return 0;
}
int IsFull(songuyen a)
{
if(a.n==Max) return 1;
else return 0;
}
int Add(songuyen &a,ps x)
{
if(IsFull(a))
{
printf("Tap Hop da day!");
return 0;
}
a.n++;
a.b[a.n-1]=x;
}
int Del(songuyen &a,ps x)
{
if(IsEmpty(a))
{
printf("Tap Hop rong!");
return 0;
}
int i;
for(i=0;i<a.n;i++)
if((a.b[i].tu==x.tu)&&(a.b[i].mau==x.mau)) break;
for(int j=i;j<a.n-1;j++)
{
a.b[j]=a.b[j+1];
}
a.b[a.n-1].tu=a.b[a.n-1].mau=0;
a.n--;
return 1;
}
void Quicksort(songuyen &a,songuyen &b,int l,int r)
{
if(IsEmpty(a)) printf("Tap Hop khong co phan tu de sap xep!");
else
{ int i,j;
songuyen t;
int x;
x=b.b[(l+r)/2].tu;
i=l;
j=r;
do
{
while(b.b[i].tu<x) i++;
while(b.b[j].tu>x) j--;
if(i<=j)
{
t.b[i]=a.b[i];
a.b[i]=a.b[j];
a.b[j]=t.b[i];
t.b[i]=b.b[i];
b.b[i]=b.b[j];
b.b[j]=t.b[i];
i++;
j--;
}
}while(i<j);
if(l<j)
Quicksort(a,b,l,j);
if(i<r)
Quicksort(a,b,i,r);
}
}
int BCNN(int a,int b)
{ int bcnn,i,max;
if(a>b) max=a;
if(b>=a) max=b;
for(i=max;i<=a*b;i++)
if((i%a==0)&&(i%b==0)) break;
bcnn=i;
return(bcnn);
}
void quidong(songuyen &a)
{
int bcnn=a.b[0].mau,s;
for(int i=1;i<a.n;i++)
{
s=BCNN(bcnn,a.b[i].mau);
bcnn=s;
}
for(int i=0;i<a.n;i++)
{
if((a.b[i].tu<0)&&(a.b[i].mau<0))
{
s=(-1)*(bcnn/a.b[i].mau);
a.b[i].tu*=-1;
a.b[i].tu*=s;
a.b[i].mau=s;
}
else
{
s=(bcnn/a.b[i].mau);
a.b[i].tu=(a.b[i].tu*s);
a.b[i].mau=s;
}
}
}
int Search(songuyen a,ps x)
{
if(IsEmpty(a))
{
printf("Tap Hop Rong!");
return 0;
}
for(int i=0;i<a.n;i++)
if((a.b[i].tu==x.tu)&&(a.b[i].mau==x.mau)) return 1;
return 0;
}
void Hoi(songuyen a,songuyen b,songuyen &c)
{
c=a;
c.n=a.n+b.n;
int j=0;
for(int i=a.n;i<c.n;i++)
{
c.b[i]=b.b[j];
j++;
}
DelLike(c);
}
void Giao(songuyen a,songuyen b,songuyen &c)
{
int k=0;
for(int i=0;i<a.n;i++)
{
for(int j=0;j<b.n;j++)
{
if((a.b[i].mau==b.b[j].mau)&&(a.b[i].tu==b.b[j].tu))
{
c.b[k]=a.b[i];
k++;
c.n++;
}
}
}
}
void PhanBu(songuyen c,songuyen &b)
{
int k=0;
for(int i=0;i<c.n;i++)
{
for(int j=0;j<b.n;j++)
{
if((c.b[i].tu==b.b[j].tu)&&(c.b[i].mau==b.b[j].mau)) Del(b,c.b[i]);
}
}
}
3 posters
Tiếp tục nhìn lại bài Tập hợp Phân số nào
DarkEternal- New Member
- Giới tính : Bài gửi : 7
Tổng Điểm : 15
Điểm Thưởng : 4
Sinh Nhật : 11/08/1990 Bị Dụ Dỗ : 01/12/2009
Tuổi : 34
NgPPhung- Super Moderator
- Giới tính : Bài gửi : 73
Tổng Điểm : 144
Điểm Thưởng : 8
Sinh Nhật : 26/04/1990 Bị Dụ Dỗ : 11/09/2009
Tuổi : 34
Hay thiệt! Bài này hồi đầu năm chưa có biết nhìu về danh sách liên kết nên làm không ra hồn , mà hồi đã bạn đã làm đc như vậy rùi đáng nể thiệt, vote cho bạn 1 + nè
Vy Thanh Định- Web Master
- Giới tính : Bài gửi : 228
Tổng Điểm : 544
Điểm Thưởng : 16
Sinh Nhật : 19/05/1990 Bị Dụ Dỗ : 11/09/2009
Tuổi : 34
Good, bài hay như vậy mà giờ mới chia sẻ, rất cám ơn bạn