new microsoft word document
TRANSCRIPT
18. Viết hàm sắp xếp các phần tử lẻ tăng dần.
void HoanVi(int &x, int &y)
{ int t=x;
x=y;
y=t;
}
void LeTang(int a[], int n)
{ int i, j;
for(int i=0; i<n-1; i++)
if(a[i]%2!=0)
for(j=i+1; j<n; j++)
if(a[j]%2!=0 && a[j]<a[i])
HoanVi(a[j], a[i]);
XuatMang(a, n);
}
19. Viết hàm sắp xếp các phần tử chẵn giảm dần. void HoanVi(int &x, int &y)
{ int t=x;
x=y;
y=t;}
void ChanGiam(int a[], int n)
{ int i, j;
for(int i=0; i<n-1; i++)
if(a[i]%2==0)
for(j=i+1; j<n; j++)
if(a[j]%2==0 && a[i]<a[j])
HoanVi(a[i], a[j]);
XuatMang(a, n);}
20. Viết hàm xóa phần tử tại vị trí lẻ trong mảng. void Xoa_PhanTu_ViTriLe(int a[], int n)
{ for(int i=1; i<n; i++)
{ a[i]=a[i*2];
n--; }
XuatMang(a, n);
}
Mở rộng: Xóa phần tử chẵn trong mảng.
void Xoa_PhanTu_ViTriChan(int a[], int n)
{ for(int i=0; i<n; i++)
{ a[i]=a[i*2+1];
n--;
}
XuatMang(a, n);}
21. Viết hàm xóa phần tử có giá trị lớn nhất trong mảng. int Max(int a[], int n)
{ int max=a[0];
for(int i=1; i<n; i++)
if(a[i]>max)
max=a[i];
return max;}
void Delete_Max(int a[], int &n, int vt)
{ for(int i=vt; i<n; i++)
a[i]=a[i+1];
n--;}
void Delete_All_Max(int a[], int &n)
{ int GTMax=Max(a, n);
for(int i=0; i<n; i++)
if(a[i]==GTMax)
{ Delete_Max(a, n, i);
i--; }
}
Phần 2
[C++] Bài tập ghép mảng – Part 2 Đề bài: Cho 2 mảng a, b (a, b tăng có cả âm lẫn dương) => Ghép thành mảng c sao cho dương tăng
trước, âm giảm sau!
P/s: Tình hình là xếp mảng dương tăng trước, số âm giảm! Vì vậy, nếu mà mảng có số 0 thì nhét nó
vào đầu tiên! vì nếu là mảng dương tăng thì tăng từ 1 tới cuối mảng dương, rồi sau đó xuất ra âm
giảm!
int SoDuongDauTien(int a[], int n) //Tinh ca so 0
{ for(int i=0; i<n; i++)
if(a[i]>=0)
return i;}
void NgauNhien_AmDuong(int a[], int n)
{ srand((unsigned)time(NULL));
a[0]=-rand()%100;
for(int i=1; i<n; i++)
a[i]=a[i-1]+rand()%10;
}
void GhepMang_DuongTang_AmGiam(int a[], int na, int b[],
int nb, int c[], int &nc)
{ int kqa=SoDuongDauTien(a, na);
int kqb=SoDuongDauTien(b, nb);
cout<<"Duong dau tien cua a = "<<kqa;
cout<<"\nDuong dau tien cua mang b = "<<kqb<<"\n\n";
int i=kqa, j=kqb;
if(kqa!=0 && kqb!=0)
for( ; i<na && j<nb; )
if(a[i]<b[j]) c[nc++]=a[i++];
else c[nc++]=b[j++];
while(i<na)
c[nc++]=a[i++];
while(j<nb)
c[nc++]=b[j++];
i=kqa-1; j=kqb-1;
for( ; i>=0 && j>=0; )
if(a[i]>b[j]) c[nc++]=a[i--];
else c[nc++]=b[j--];
while(i>=0)
c[nc++]=a[i--];
while(j>=0)
c[nc++]=b[j--];
}
Cách 2: Dùng toán tử 3 ngôi. Ngắn gọn (CCI Group)
void GhepMang_DuongTang_AmGiam(int a[], int na, int b[],
int nb, int c[], int &nc)
{
int kqa=SoDuongDauTien(a, na);
int kqb=SoDuongDauTien(b, nb);
cout<<"Duong dau tien cua a = "<<kqa;
cout<<"\nDuong dau tien cua mang b = "<<kqb<<"\n\n";
int i=kqa, j=kqb;
while(i<na || j<nb)
{
while(a[i]<=0) i++;
while(b[j]<=0) j++;
c[nc++]=(a[i]<=b[j]?a[i++]:b[j++]);
}
i=na-1;j=nb-1;
while(i>=0 || j>0)
{ while(a[i]>0) i--;
while(b[j]>0) j--;
c[nc++]=(a[i]>b[j])?a[i--]:b[j--];
}
}
[C++] Bài tập ghép mảng – Part 1 Cho 2 mảng a, b (a TĂNG, b TĂNG) => Ghép mảng c thành mảng TĂNG!
#include <iostream>
#include <time.h>
using namespace std;
void NgauNhienTang(int a[], int n);
void NgauNhienGiam(int a[], int n);
void XuatMang(int a[], int n);
void GhepMangTang_2MangTang(int a[], int na, int b[],
int nb, int c[], int &nc);
void NgauNhienTang(int a[], int n)
{
srand((unsigned)time(NULL));
a[0]=rand()%100;
for(int i=1; i<n; i++)
a[i]=a[i-1]+rand()%100+1;
}
void XuatMang(int a[], int n)
{ for(int i=0; i<n; i++)
cout<<a[i]<<"\t";
}
void GhepMangTang_2MangTang(int a[], int na, int b[],
int nb, int c[], int &nc)
{ int i=0, j=0;
for( ; i<na && j<nb; )
if(a[i]<b[j])
c[nc++]=a[i++];
else
c[nc++]=b[j++];
while(i<na)
c[nc++]=a[i++];
while(j<nb)
c[nc++]=b[j++];
}
void main()
{ int na, nb, a[100], b[100], c[100], nc=0;
cout<<"Nhap so luong phan tu mang a: "; cin>>na;
NgauNhienTang(a, na);
cout<<endl;
XuatMang(a, na);
cout<<"\n\nNhap so luong phan tu mang b: "; cin>>nb;
NgauNhienTang(b, nb);
cout<<endl;
XuatMang(b, nb);
cout<<"\n\nMang TANG sau khi ghep 2 mang TANG cho truoc: \n\n";
GhepMangTang_2MangTang(a, na, b, nb, c, nc);
XuatMang(c, nc);
cout<<endl<<endl;
}
Thêm 1 cái code tham khảo của 1 thành viên CCI Group! Code ngắn gọn, dùng toán tử
3 ngôi!
void GhepMangTang_2MangTang(int a[], int na, int b[],
int nb, int c[], int &nc)
{
int i=0, j=0;
do
{
c[nc++]=(a[i]<=b[j]?a[i++]:b[j++]);
}while(i<na || j<nb);
}
Cho 2 mảng a, b (a TĂNG, b TĂNG) => Ghép mảng c thành mảng GIẢM! void GhepMangGiam_2MangTang(int a[], int na, int b[],
int nb, int c[], int &nc)
{
int i=na-1, j=nb-1;
for( ; i>=0 && j>=0; )
if(a[i]>b[j]) c[nc++]=a[i--];
else c[nc++]=b[j--];
while(i>=0)
c[nc++]=a[i--];
while(j>=0)
c[nc++]=b[j--];
}
[C++] Các dạng toán tổng quát Không thỏa điều kiện thì xuất ra 1 câu kết luận
void Xuat_???(int a[], int n)
{ bool flag=false; //Gan co ban dau la false
for(int i=0; i<n; i++) //Duyet den cuoi mang
if(a[i] thoa dieu kien) //Thoa dk yeu cau cua bai toan
{
if(flag==false) //Gan de xuat ra 1 lan (1)
cout<<"Cac gia tri thoa dk: "; //(1)
cout<<a[i]<<"\t";
flag=true; //Bat co len de ko xuat (1) lan nua
}
if(flag==false) //Sau khi duyet het mang
cout<<"Ko co gia tri thoa yeu cau bai toan";
}
ĐẾM int Dem_???(int a[], int n)
{ int dem=0, i;
for(i=0; i<n; i++)
if(a[i] thoa dieu kien) dem++;
return dem;
}
TÍNH TỔNG
long Tong_???(int a[], int n)
{ long tong=0;
for(int i=0; i<n; i++)
if(a[i] thoa dieu kien)
tong+a[i]; //tong=tong+a[i];
return tong;
}
TÍNH TÍCH long Tich_???(int a[], int n)
{ long tich=1;
for(int i=0; i<n; i++)
if(a[i] thoa dieu kien)
tich=tich*a[i]; //tich*=a[i];
return tich;
}
TÍNH TRUNG BÌNH
void TrungBinh_???(int a[], int n)
{ int tong=0, dem=0, i;
for(i=0; i<n; i++)
if(a[i] thoa dieu kien)
{
tong+=a[i]; //tong=tong+a[i];
dem++; //dem=dem+1;
}
if(dem!=0)
cout<<"Ket qua la: "<<(float)tong/dem;
else
cout<<"Khong co so thoa yeu cau bai toan";
}
VỊ TRÍ ĐẦU TIÊN int ViTriDau_???(int a[], int n)
{ for(int i=0; i<n; i++)
if(a[i] thoa dieu kien)
return i;
return -1;
}
VỊ TRÍ CUỐI CÙNG
int ViTriCuoi_???(int a[], int n)
{ for(int i=n-1; i>=0; i--)
if(a[i] thoa dieu kien)
return i;
return -1;
}
KIỂM TRA TOÀN GIÁ TRỊ
bool Kiem_Tra_Toan_GiaTri_???(int a[], int n)
{ for(int i=0; i<n; i++)
if(a[i] KHONG THOA dieu kien) return false;
return true;
}
KIỂM TRA TỒN TẠI GIÁ TRỊ
bool Kiem_Tra_Ton_Tai_GiaTri_???(int a[], int n)
{ for(int i=0; i<n; i++)
if(a[i] THOA dieu kien) return true;
return false;
}
[C++] Nhập Xuất Ma trận – Mảng 2 chiều (Ma trận) Posted on 16/11/2011 by oanhtran23
Nhập ma trận bằng tay với n phần tử:
void Input_Matrix(int a[][100], int d, int c)
{ for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
{ cout<<"Nhap pt a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
Khởi tạo ma trận ngẫu nhiên:
void Input_Matrix_Random(int a[][100], int d, int c)
{ srand((unsigned)time(NULL));
for(int i=0; i<d; i++)
for(int j=0; j<c; j++)
a[i][j]=rand()%100;
}
Nhập mảng bằng tay với n phần tử số nguyên dương, nhập sai thì yêu cầu nhập lại!
void Input_Matrix(int a[][100], int d, int c)
{ int i, j;
for(i=0; i<d; i++)
{ for(j=0; j<c; j++)
{ cout<<"Nhap pt ["<<i<<"]["<<j<<"]:";
do
{ cin>>a[i][j];
if(a[i][j]<1)
cout<<"Nhap lai pt";
}while(a[i][j]<1);
}}}
Xuất ma trận: void Output_Matrix(int a[][100], int d, int c)
{ for(int i=0; i<d; i++)
{ for(int j=0; j<c; j++)
cout<< a[i][j] <<"\t";
cout<<endl<<endl;
}}
[C++] Nhập Mảng Bằng tay – Mảng một chiều Nhập mảng bằng tay với n phần tử:
void NhapMangBangTay(int a[], int n)
{ for(int i=0; i<n; i++)
{ cout<<"Phan tu thu "<< i <<": ";
cin>>a[i];
}}
Nhập mảng bằng tay với n phần tử, nếu khi nhập mà phần tử này trùng với những phần tử trước
nó, thì yêu cầu nhập lại! void NhapBangTay_TrungNhapLai(int a[], int n)
{ int i, j;
for( i=0; i<n; i++)
{ cout<<"Nhap phan tu thu a["<<i<<"] = ";
cin>>a[i];
for( j=0; j<i; j++)
do {
if(a[i]==a[j])
{ cout<<"Nhap trung. Nhap lai. ";
cout<<"Nhap phan tu thu a["<<i<<"] = ";
cin>>a[i];
j=0;
} }while(a[i]==a[j]);
}}