Mã:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
// Phần 1 : khai báo nguyên mẫu hàm
// 1.Xây dụng hàm nhập mảng, có dữ liệu trả về; có tham số đầu vào
int Nhap_n(int &n);
// 2.Xây dựng hàm nhập mảng
void NhapMang(int *a,int n );
// 3.Xây dựng hàm xuất mảng
void XuatMang(int *a,int n);
// 4.Xây dựng hàm tính tổng, trả dử liệu Tong về
int TinhTong(int *a,int n);
// 5.Xây dựng hàm tính tổng các số nguyên tố trong mảng
int TinhTong_SNT(int *a,int &n) ;
// 6.Xây dựng hàm kiểm tra số nguyên tố
int KiemTraSNT(int &SNT);
// 7.Xây dựng hàm liệt kê các số nguyên tố co trong mảng đã nhập
void LietKe_SNT(int *a,int &n);
// 8.Xây dựng hàm kiểm tra tăng dần
int KiemTraTang(int *a, int &n);
// 9.Xây dựng hàm kiểm tra số lẻ và lớn hơn 100
int KiemTraLe(int *a, int& n);
// 10.Xây dựng hàm tìm số lớn nhất trong mảng
int TimMax(int *a, int &n);
// 11.Xây dựng ham tìm kiếm phần tử x
int TimX (int *a, int &n, int &x);
// 12.Xây dựng hàm đếm các phần tử chia hết cho 5 trong mảng các số nguyên.
int Dem_ChiaHetCho5 (int *a, int &n );
// 13.Xây dựng hàm hoán vi
void HoanVi (int &a, int &b);
// 14.Xây dựng hàm sắp xếp thứ tự mảng tăng dần
void SapXepTang(int *a, int &n);
// 15.Xây dựng hàm sắp xếp thứ tự mảng giảm dần
void SapXepGiam(int *a, int &n);
// 16.Xây dựng hàm tách mảng ra 2 phần
void TachMang(int *a, int &n, int *v, int &m, int *u, int &l);
// 17.Xây dưng hàm nối 2 mảng lại với nhau
void NoiMang(int *v, int &m, int *u, int &l, int *z, int &h);
// 18.Xây dựng hàm xét tính đối xứng của mảng
int KtDoiXung(int *a,int &n);
// 19.Xây dựng hàm thêm phân tử vào mảng, tại vi trí nhập vào
void ThemPhanTu(int *&a,int &n,int ViTriThem, int PhanTuThem);
// 20.Xây dựng hàm Xóa phần tử mảng
void XoaPhanTu(int *&a,int &n,int ViTriXoa);
// Phần 2 : Xây dựng các hàm đã khai báo
// 1.Xây dụng hàm nhập mảng, có dữ liệu trả về; có tham số đầu vào
int Nhap_n(int &n)
{
do{
printf("
nhap so luong phan tu cua mang n = ");
scanf("%d",&n);
if(n<0 )
{
printf("
n khong hop le.Yeu cau kiem tra lai");
}
}while(n<0 );
return n;
}
// 2.Xây dựng hàm nhập mảng
void NhapMang(int *a,int n )
{
int temp;
printf("
Nhap mang");
for (int i=0;i<n;i++)
{
printf("
Nhap phan tu mang a[%d] = ",i);
scanf("%d",&temp);
if (temp==0)
a[i]=NULL;
else
a[i]=temp;
}
}
// 3.Xây dựng hàm xuất mảng
void XuatMang(int *a,int n)
{
printf("
Xuat Mang");
for(int i = 0; i<n; i++)
{
printf("%5d",a[i]);
}
for (int i=0;i<n;i++)
{
if (a[i]!=NULL)
printf("
[%d]: %d",i,a[i]);
else
printf("
[%d]: chua co du lieu",i);
}
}
// 4.Xây dựng hàm tính tổng, trả dử liệu Tong về
int TinhTong(int *a,int n)
{
int Tong = 0 ;
for(int i =0;i<n;i++)
{
Tong =Tong + a[i] ;
}
return Tong;
}
// 5.Xây dựng hàm tính tổng các số nguyên tố trong mảng
int TinhTong_SNT(int *a,int &n)
{
int Tong_SNT = 0;
for(int i = 0; i < n; i++)
{
if(KiemTraSNT(a[i]))
Tong_SNT += a[i];
}
return Tong_SNT;
}
// 6.Xây dựng hàm kiểm tra số nguyên tố
int KiemTraSNT(int &SNT)
{
if(SNT < 2) return 0; // không phải SNT
for(int i=2;i<=sqrt((float)SNT);i++)
{
if(SNT %i == 0) return 0; // không phải SNT
}
return 1; // SNT: Sau khi kiểm tra tất cả
}
// 7.Xây dựng hàm liệt kê các số nguyên tố co trong mảng đã nhập
void LietKe_SNT(int *a,int &n)
{
int flag_KT = 0 ;
int j=0 ;
int *b ;
b = (int *)malloc(n*sizeof(int *)); // Cấp phát động cho con trỏ
for(int i = 0; i < n; i++)
{
if(KiemTraSNT(a[i]))
{
b[j++] = a[i];
flag_KT++ ;
}
}
if(flag_KT)
{
printf("
Co %d phan tu la SNT",flag_KT);
XuatMang(b,flag_KT);
}
else printf("
Khong co phan tu la SNT trong mang");
free(b);
}
// 8.Xây dựng hàm kiểm tra tăng dần
int KiemTraTang(int *a, int &n)
{
for (int i = 0; i < n-1; i ++ )
if ( a[i] > a[i+1] ) // Vi phạm điều kiện tăng dần
{
return 0;
break;
}
return 1;
}
// 9.Xây dựng hàm kiểm tra số lẻ và lớn hơn 100
int KiemTraLe(int *a, int& n)
{
for (int i = 0; i < n; i ++ )
if ( a[i] % 2 != 0 && a[i]> 100 ) //Gặp phần tử thoả
{
return 1;
break;
}
return 0;
}
// 10.Xây dựng hàm tìm số lớn nhất trong mảng
int TimMax(int *a, int &n)
{
int max, i = 1;
max = a[0];
for (int i = 0; i < n; i ++ )
{
if ( *(a+i) > max )
max = *(a+i) ;
}
return max;
}
// 11.Xây dựng ham tìm kiếm phần tử x
int TimX (int *a, int &n, int &x)
{
for (int i = 0; i < n ; i ++)
if ( x==a[i] )
return i;
return -1;
}
// 12.Xây dựng hàm đếm các phần tử chia hết cho 5 trong mảng các số nguyên.
int Dem_ChiaHetCho5 (int *a, int &n )
{
int dem = 0;
for (int i = 0; i < n ; i++ )
if ( a[i] % 5 == 0 )
dem++;
return dem ;
}
// 13.Xây dựng hàm hoán vi
void HoanVi (int &a, int &b)
{
int tam = a;
a = b;
b = tam;
}
// 14.Xây dựng hàm sắp xếp thứ tự mảng tăng dần
void SapXepTang(int *a, int &n)
{
for (int i = 0; i < n-1 ; i++)
for (int j = i+1; j < n; j++)
if (a[i] > a [j])
HoanVi (a[i], a[j]);
printf("
Mang sau khi sap xep Tang");
XuatMang(a,n);
}
// 15.Xây dựng hàm sắp xếp thứ tự mảng giảm dần
void SapXepGiam(int *a, int &n)
{
for (int i = 0; i < n-1 ; i++)
for (int j = i+1; j < n; j++)
if (a[i] < a [j])
HoanVi (a[i], a[j]);
printf("
Mang sau khi sap xep giam");
XuatMang(a,n);
}
// 16.Xây dựng hàm tách mảng ra 2 phần
void TachMang(int *a, int &n, int *v, int &m, int *u, int &l)
{
int j=0;
for (int i=0; i<n; i++)
{
if ( i < m)
v[i]=a[i];
else
{
u[j]=a[i];
j++;
}
}
}
// 17.Xây dưng hàm nối 2 mảng lại với nhau
void NoiMang(int *v, int &m, int *u, int &l, int *z, int &h)
{
h = m +l;
for(int i = 0; i<h; i++)
if(i<m)
z[i] = v[i];
else
z[i] = u[i-m];
}
// 18.Xây dựng hàm xét tính đối xứng của mảng
int KtDoiXung(int *a,int &n)
{
int i;
for(i=0; i<n-1; i++)
if(a[i]==a[n-1-i])
return 1;
return 0;
}
// 19.Xây dựng hàm thêm phân tử vào mảng, tại vi trí nhập vào
void ThemPhanTu(int *&a,int &n,int ViTriThem, int PhanTuThem)
{
////Gia tăng bộ nhớ thêm 1 ô nữa
//realloc(a,(n+1)*sizeof(int*));
for(int i=n; i>=ViTriThem +1; i--)
{
a[i] = a[i-1] ;
}
a[ViTriThem]= PhanTuThem ;
n++ ;
}
// 20.Xây dựng hàm Xóa phần tử mảng
void XoaPhanTu(int *&a,int &n,int ViTriXoa)
{
for(int i = ViTriXoa; i<n-1; i++ )
{
a[i] = a[i+1];
}
n-- ;
realloc(a,n*sizeof(int *));
}
// Xây dựng hàm chính
void main()
{
int n ;
n= Nhap_n(n);
int *a,*v, *u ,*z ; ; // Khai báo con trỏ a
a = (int *)malloc(n*sizeof(int *)); // Cấp phát động cho con trỏ
v = (int *)malloc(n*sizeof(int *)); // Cấp phát động cho con trỏ
u = (int *)malloc(n*sizeof(int *)); // Cấp phát động cho con trỏ
z = (int *)malloc(n*sizeof(int *)); // Cấp phát động cho con trỏ
if(a==NULL)
{
printf("
Cap phat bo nho khong thanh cong!!!. Xin kiem tra lai");
}
else
{
NhapMang(a,n );
XuatMang(a,n);
LietKe_SNT(a,n);
int flag_Doixing = KtDoiXung(a,n) ;
// Kiểm tra tính đối xứng của mảng
switch (flag_Doixing)
{
case 1 : printf("
Mang da nhap doi xung");
break;
default : printf("
Mang da nhap khong doi xung!!!");
break;
}
int Tong;
Tong = TinhTong(a,n);
printf("
Tong_Mang = %d",Tong);
Tong = TinhTong_SNT(a,n);
printf("
Tong_SNT = %d",Tong);
int KT_Tang = KiemTraTang (a, n);
int flag_le = KiemTraLe(a, n);
switch(KT_Tang)
{
case 0: printf("
Mang sap xep khong tang dan !!!");
break;
case 1: printf("
Mang sap xep tang dan");
break;
}
switch(flag_le)
{
case 0: printf("
Khong co phan tu le >100 !!!");
break;
case 1: printf("
Co phan tu le >100");
break;
}
int flag_Max = TimMax(a,n);
printf("
Phan tu lon nhat trong mang la : %d ",flag_Max);
int flag_TimX,x ;
printf("
Nhap phan tu can tim kiem x = ");
scanf("%d",&x);
flag_TimX = TimX(a,n,x);
if(flag_TimX ==-1) printf("
Khong Tim thay phan tu x = %d can tim kiem",x);
else printf("
Phan tu x = %d can tim kiem nam vi tri a[%d]",x,flag_TimX);
int flag_demchiacho5 = Dem_ChiaHetCho5(a,n);
if(flag_demchiacho5)
printf("
Co %d phan tu chia het cho 5",flag_demchiacho5);
else printf("
Khong co phan tu nao chia het cho 5 !!!");
//Tách mảng
int m,l;
do
{
printf("
Nhap do dai cho mang v[], m [ %d-->%d ]: ",0,n);
scanf("%d",&m);
if(m < 0 || m>n)
printf("
Yeu cau nhap lai m ");
}while (m < 0 || m>n);
printf("
Do dai cua mang v[%d],",m);
do
{
printf("
Nhap do dai cua mang u[],l [ %d-->%d ]: ",0,n-m);
scanf("%d",&l);
if(l < 0 || l > (n -m) )
printf("
Yeu cau nhap lai l ");
}while (l < 0 || l > (n -m ) );
printf("
Do dai cua mang u[%d] ",l);
TachMang(a, n, v, m, u, l);
printf("
Xuat mang v ");
XuatMang(v,m);
printf("
Xuat mang u ");
XuatMang(u,l);
//Nối 2 mảng vừa tách
int h ;
printf("
Noi mang v & u ");
NoiMang(v, m, u, l, z,h);
XuatMang(z,h);
int ViTriThem ,PhanTuThem ;
//Nhập vị trí cần thêm và giá trị phần tử cần thêm
do
{
printf("
Nhap vao vi tri can them [%d-->%d]: ",0,n);
scanf("%d",&ViTriThem);
if(ViTriThem <0 || ViTriThem > n)
{
printf("
Vi tri them khong hop le. Xin kiem tra lai!!!");
}
}while(ViTriThem <0 || ViTriThem > n);
printf("
Nhap vap phan tu can them: ");
scanf("%d",&PhanTuThem);
ThemPhanTu(a,n,ViTriThem,PhanTuThem);
printf("
Mang a sau khi them than tu %d ,Tai vi tri them a[%d] :",PhanTuThem,ViTriThem);
XuatMang(a,n);
Tong = TinhTong(a,n);
printf("
Tong mang sau khi them,Tong = %d",Tong);
//Nhập trị trí muốn xóa nằm trong đoạn từ 0 đến n-1 ;
int ViTriXoa;
do
{
printf("
Nhap vao vi tri xoa [%d-->%d]: ",0,n-1);
scanf("%d",&ViTriXoa);
if(ViTriXoa <0 || ViTriXoa > n-1)
{
printf("
Vi tri xoa khong hop le. Xin kiem tra lai!!!");
}
}while(ViTriXoa <0 || ViTriXoa > n-1);
int PhanTuXoa = a[ViTriXoa];
XoaPhanTu(a,n,ViTriXoa);
printf("
Mang a sau khi xoa phan tu %d,tai vi tri a[%d] : ",PhanTuXoa,ViTriXoa);
XuatMang(a,n);
Tong = TinhTong(a,n);
printf("
Tong mang sau khi xoa,Tong = %d",Tong);
SapXepTang(a,n);
SapXepGiam(a,n);
printf("
**** Ket Thuc Chuong Trinh ***
");
}
free(a);
free(v);
free(u);
free(z);
getch();
}
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...