bài dưới đây là 1 lỗi thường gặp khi các bạn làm bt CTDL. các bạn xem tại sao không xóa được các số nhỏ hơn 10 ?. cùng thảo luận và rút kinh nghiệm.
Code:
/*##### LT03C - VietHanIT ######*/
#include<stdio.h>
#define max 20
typedef struct{
int ds[max];
int ptcuoi;
}danhsach;
int kiemtra(danhsach D,int x)
{
for(int i=0;i<D.ptcuoi;)
{
if(D.ds[i]==x)
return i;
else
i++;
}
return -1;
}
//xoa 1 so
void xoa(danhsach &D,int x)
{
int i;
for(i=0;i<D.ptcuoi;i++)
if(D.ds[i]==x)
{
for(int j=i;j<=D.ptcuoi;j++)
D.ds[j]=D.ds[j+1];
}D.ptcuoi--;
}
//chen
void chen(danhsach &D,int so,int vt)
{
int i;
for(i=D.ptcuoi;i>=vt;i--)
{
D.ds[i+1]=D.ds[i];
}
D.ptcuoi++;
D.ds[vt]=so;
}
//tim min
int min(danhsach D)
{
int min=D.ds[0];
for(int i=0;i<D.ptcuoi;i++)
if(D.ds[i]<min)
min=D.ds[i];
return min;
}
int daytang(danhsach D)
{
for(int i=0;i<D.ptcuoi;)
if(D.ds[i]>D.ds[i+1])
return 1;
else
i++;
return 0;
}
void inds(danhsach D)
{
for(int i=0;i<D.ptcuoi;i++)
printf("%d ",D.ds[i]);
printf("\n");
}
main()
{
int i,int_n,int_x;
danhsach D;
//tao ds
D.ptcuoi=0;
//nhap ds
printf("\nNhap so phan tu ds: ");
scanf("%d",&int_n);
for(i=0;i<int_n;i++)
{
printf("\nNhap %d: ",i+1);
scanf("%d",&D.ds[i]);
D.ptcuoi++;
}
inds(D);
//kiem tra tang giam cua day
if(daytang(D)==1)
printf("\nDay khong tang!");
else
printf("\nDay tang!");
//min
printf("\nPhan tu nho nhat: %d",min(D));
//nhap so nguyen x, kiem tra co thuoc day hay khong
printf("\nNhap X: ");
scanf("%d",&int_x);
if(kiemtra(D,int_x)==-1)
printf("\nX Khong thuoc day!");
else
printf("\nvi tri cua x: %d ",kiemtra(D,int_x)+1);
//xoa
int int_xoa,int_vt;
printf("\nNhap so can xoa: ");
scanf("%d",&int_xoa);
if(kiemtra(D,int_xoa)==-1)
printf("\n\aVi tri khong hop le!\n");
else
xoa(D,int_xoa);
inds(D);
//chen so vao vi tri
int int_chen,int_vtchen;
printf("\nNhap so can chen: ");
scanf("%d",&int_chen);
printf("\nVi tri can chen: ");
scanf("%d",&int_vtchen);
int_vtchen-=1;
chen(D,int_chen,int_vtchen);
inds(D);
//xoa so nho hon 10
printf("\nXoa cac so nho hon 10\n");
for(i=0;i<D.ptcuoi;i++)
{
for(int j=i;j<=D.ptcuoi;j++)
if(D.ds[j]<10)
xoa(D,D.ds[j]);
}
inds(D);
}
--------------------------------------------------
Xem các chủ đề cùng chuyên mục: