births/未命名1.cpp

244 lines
5.7 KiB
C++
Raw Permalink Normal View History

2023-05-26 08:59:13 +00:00
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct peoples{
int year;
int month;
int day;
char gender[10];
int births;
} Peo;
typedef struct people{
int year;
int F;
int M;
int ALL;
int cha;
} Peop;
typedef struct years{
int year;
int births;
} Year;
void clean(int i,Peo *peo){
if(peo[i].year%4!=0&&peo[i].year%100==0||peo[i].year%400!=0){
if(peo[i].month==2&&peo[i].day==29){
peo[i].births=0;} }
if((peo[i].month==2&&peo[i].day==30)||(peo[i].month==2&&peo[i].day==31)){
peo[i].births=0;}
if(peo[i].month==4&&peo[i].day==31){
peo[i].births=0;}
if(peo[i].month==6&&peo[i].day==31){
peo[i].births=0;}
if(peo[i].month==9&&peo[i].day==31){
peo[i].births=0;}
if(peo[i].month==11&&peo[i].day==31){
peo[i].births=0;}
}
void init(Peo *peo,char *b,int i){
char s[5]=",";
peo[i].year=atoi(strtok(b,s));
peo[i].month=atoi(strtok(NULL, s));
peo[i].day=atoi(strtok(NULL, s));
strcpy(peo[i].gender,strtok(NULL,s));
peo[i].births=atoi(strtok(NULL,s));
}
Peo *read(char *t){
FILE *fp;
fp=fopen(t,"r");
char buff[500];
int q=15547;
Peo *peo;
peo=(Peo*)malloc(sizeof(Peo)*(q));
fgets(buff,500,fp);
int i;
for(i=0;i<15547;i++){
fgets(buff,500,fp);
init(peo,buff,i);
}
fclose(fp);
return peo;
}
void display(Peo *peo){
int i;
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\t<EFBFBD>·<EFBFBD>\t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\t<EFBFBD>Ա<EFBFBD>\t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
for(i=0;i<15547;i++){
printf("%d\t%d\t%d\t%s\t%d\n",peo[i].year,peo[i].month,peo[i].day,peo[i].gender,peo[i].births);
}
}
void form(Peo *peo,Peop *peop,int a[]){
int i,e,j,k;
a[0]=0;
printf("year\tF\t\tM\t\tALL\t\tF-M\n");
peop=(Peop*)malloc(sizeof(Peop)*(5));
peop[0].year=1960;
for( i=0;i<15547;i++){
if(peo[i].year==1969){
a[1]=i+1;
peop[1].year=peo[i+1].year;
}
if(peo[i].year==1979){
a[2]=i+1;
peop[2].year=peo[i+1].year;
}
if(peo[i].year==1989){
a[3]=i+1;
peop[3].year=peo[i+1].year;
}
if(peo[i].year==1999){
a[4]=i+1;
peop[4].year=peo[i+1].year;
}
if(peo[i].year==2008){
a[5]=i+1;
peop[5].year=peo[i+1].year;
}
}
int sumC=0,sum=0,sumf=0,summ=0;
for( i=0;i<5;i++){
for( j=a[i];j<a[i+1];j++){
clean(j,peo);
sum=sum+peo[j].births;
peop[i].ALL=sum;
if(strcmp(peo[j].gender,"F")==0){
sumf=sumf+peo[j].births;
peop[i].F=sumf;
}
if(strcmp(peo[j].gender,"M")==0){
summ=summ+peo[j].births;
peop[i].M=summ;
}
sumC=sumf-summ;
peop[i].cha=sumC;
}
}
int all=0,all01=0,all02=0,allcha=0;
for(int e=0;e<5;e++){
all=all+peop[e].ALL;
all01=all01+peop[e].F;
all02=all02+peop[e].M;
allcha=allcha+peop[e].cha;
}
for(k=0;k<5;k++){
printf("%d\t%10d\t%10d\t%10d\t%10d\n",peop[k].year,peop[k].F,peop[k].M,peop[k].ALL,peop[k].cha);
}
printf("all\t%10d\t%10d\t%10d\t%10d\n",all01,all02,all,allcha);
}
void month(Peo *peo){
double z,sum0;
for(int h=0;h<15547;h++){
clean(h,peo);
sum0=sum0+peo[h].births;
}
z=sum0/480;
printf("ƽ<EFBFBD><EFBFBD>ÿ<EFBFBD>³<EFBFBD><EFBFBD><EFBFBD>%0.2f<EFBFBD><EFBFBD>\n",z);
}
void day(Peo *peo,int d[]){
int count=0,i,h;
double sum0,z;
for(i=0;i<40;i++){
d[i]=i+1969;
if(d[i]%4==0&&d[i]%100!=0||d[i]%400==0){
count=count+1;
}
}
for(h=0;h<15547;h++){
clean(h,peo);
sum0=sum0+peo[h].births;
}
z=sum0/(((2008-1969)*365)+count);
printf("ƽ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%0.2f<EFBFBD><EFBFBD>\n",z);
}
int cmp(const void *a,const void *b){
return (*(Year*)a).births>(*(Year*)b).births?1:-1;
}
void sort(Peo *peo,int d[],Year *year,int c[]){
int j,h,q,u,e,w;
year=(Year*)malloc(sizeof(Year)*(40));
for( j=0;j<40;j++){
for( h=0;h<15547;h++){
if(peo[h].year==d[j]){
c[j]=h;
}
}
}
int sum=0,sum1=0;
for(j=0;j<c[0];j++){
clean(j,peo);
sum=sum+peo[j].births;
year[0].births=sum;
year[0].year=d[0];
}
for(u=1;u<40;u++){
sum1=0;
for( e=c[u-1];e<c[u];e++){
clean(e,peo);
sum1=sum1+peo[e].births;
year[u].births=sum1;
year[u].year=d[u];
}
}
qsort(year,40,sizeof(Year),cmp);
// printf("<22><><EFBFBD><EFBFBD>\t<><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
// for( w=0;w<40;w++){
// printf("%d\t%10d\n",year[w].year,year[w].births);
// }
int p;
p=((2008-1969+1)/2);
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><EFBFBD><EAA3AC><EFBFBD><EFBFBD>Ϊ%d\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><EFBFBD><EFBFBD>%d<><EFBFBD><EAA3AC><EFBFBD><EFBFBD>Ϊ%d\n",year[39].year,year[39].births,year[0].year,year[0].births);
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><64>%d\n",year[p].year,year[p+1].year);
}
typedef struct last{
int month;
int day;
int births;
} Last;
void qilin(Peo *peo,int c[],Last *las){
las=(Last*)malloc(sizeof(Last)*(800));
int j,w,a,b;
int t[800]={0};
for(j=c[0]+1;j<c[1]+1;j=j+2){
if(peo[j].day==99||peo[j+1].day==99){
peo[j].births=0;
peo[j+1].births=0;
}
a=c[0];
b=c[0]-1;
las[j-a].births=peo[j].births+peo[j+1].births;
las[j-a].day=peo[j].day;
las[j-a].month=peo[j].month;
las[j-b].births=0;
las[j-b].day=0;
las[j-b].month=0;
}
int max=0,month01,day01,min=9999999,month02,day02;
for(int u=0;u<766;u++){
if(las[u].births>max){
max=las[u].births;
month01=las[u].month;
day01=las[u].day;
}
if(las[u].births!=0&&las[u].births<min){
min=las[u].births;
month02=las[u].month;
day02=las[u].day;
}
}
printf("1970<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><64>%d<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ%d\n1970<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD><EFBFBD><EFBFBD>%d<><64>%d<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ%d\n",month01,day01,max,month02,day02,min);
}
int main(){
int a[10]={0};
int d[100]={0};
int c[100]={0};
Peo *peo=read("births.csv");
Peop *peop;
Year *year;
Last *las;
display(peo);
form(peo,peop,a);
month(peo);
day(peo,d);
sort(peo,d,year,c);
qilin(peo,c,las);
return 0;
}