new microsoft word document

10
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); }

Upload: tran-van-nam

Post on 18-Jul-2015

33 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: New microsoft word document

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);

}

Page 2: New microsoft word document

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!

Page 3: New microsoft word document

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--];

}

Page 4: New microsoft word document

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);

Page 5: New microsoft word document

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);

Page 6: New microsoft word document

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--];

}

Page 7: New microsoft word document

[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)

Page 8: New microsoft word document

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;

Page 9: New microsoft word document

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];

Page 10: New microsoft word document

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]);

}}