codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define qMaxID (31+1)
#define qMid (2+1)
#define qdb (1)
#define qHH (24)
#define qMM (60)
typedef struct newE{
int id_h_START,id_m_START,id_day_START;
int id_moneny,m,h;
int up,stop;
int id_H_END,id_M_END,id_day_END;
char id_object[qMaxID];
struct newE *next;
}sped;
struct newE* buildE();
sped* DataBuild(sped *, FILE *);
sped* IN(sped *, char *IN_object,int,int,int);
sped* db_PRINT(sped *);
sped* update(sped *,char *UpD_object,char *,int,int,int);
sped* tempo(sped *);
sped* sort(sped *);
int main(int argc, char *argv[2]){
if(argc!=2){
fprintf(stderr,"\nMissing input details.\n\n");
printf("**********Esempio file di input:************\nPC PotterHarry\t08.00 230\nPC WeasleyRon\t08.30 230\nTI WeasleyRon\t10.30 230\nTI PotterHarry\t12.00 230\nTI WeasleyRon\t14.30 230\nCF PotterHarry\t16.00 230\nPC Granger\t18.00 230\nTI WeasleyRon\t23.30 230\nTI Granger\t08.30 231\nCF WeasleyRon\t10.00 231\n********************************************\n");
exit(EXIT_FAILURE);
}
FILE *fin1;
if((fin1=fopen(argv[1],"r"))==NULL){
fprintf(stderr,"\nERROR!\n Input file [%s] not found \n",argv[1]);
exit(EXIT_FAILURE);
}
sped *ptop;
ptop=NULL;
ptop=DataBuild(ptop,fin1);
tempo(ptop);
if(qdb==1)
db_PRINT(ptop);
sort(ptop);
if(qdb==1)
db_PRINT(ptop);
return 0;
}
struct newE* buildE(){
struct newE *newPTR;
newPTR=(struct newE*)malloc(sizeof (struct newE));
if(newPTR==NULL){
fprintf(stderr,"Memory denied");
exit(EXIT_FAILURE);
}
return(newPTR);
}
sped* DataBuild(struct newE *ptmp, FILE *in){
char db_id[qMid],db_object[qMaxID];
int hh,mm,day;
//sped *ptmp;
while (fscanf(in,"%s %s %d.%d %d",db_id,db_object,&hh,&mm,&day)!=EOF){
if(strcmp(db_id,"PC")==0)
ptmp=IN(ptmp,db_object,hh,mm,day);
else{
update(ptmp,db_object,db_id,hh,mm,day);
}
}
fclose(in);
return (ptmp);
}
sped* IN(struct newE *ptop, char *IN_object, int hh, int mm, int day){
sped *ptmp;
ptmp=buildE();
strcpy(ptmp->id_object,IN_object);
ptmp->id_h_START=hh;
ptmp->id_m_START=mm;
ptmp->id_day_START=day;
ptmp->id_moneny=0;
ptmp->up=0;
ptmp->stop=0;
if(ptop!=NULL){
ptmp->next=ptop;
ptop=ptmp;
}else{
ptmp->next=NULL;
ptop=ptmp;
}
if(qdb==1)
printf("\n****Debug info****\n\tAggiungo in lista [ID:%s TIME:%d.%d DAY:[%d].\n",ptmp->id_object,ptmp->id_h_START,ptmp->id_m_START,ptmp->id_day_START);
return (ptop);
}
sped* db_PRINT(struct newE* ptop){
sped *next;
next=ptop;
printf("\n*******************************DEBUG FUNCION*******************************");
while(next!=NULL){
printf("\nID=[ %s ]\tTI=[ %d ] Killed=[%d], Start %d:%d@%d\tStop %d:%d@%d TOTAL TIME[%d.%d]",next->id_object,next->up,next->stop,next->id_h_START,next->id_m_START,next->id_day_START,next->id_H_END,next->id_M_END,next->id_day_END,next->h,next->m);
next=next->next;
}
printf("\n*************************************+**************************************\n");
}
sped* update(sped * pt, char *UpD_object, char *UpD_id, int UpD_H, int UpD_M, int Upd_Day){
while(pt!=NULL){
if(strcmp(UpD_object,pt->id_object)==0){
if(strcmp(UpD_id,"TI")==0)
pt->up++;
else
pt->stop=1;
pt->id_H_END=UpD_H;
pt->id_M_END=UpD_M;
pt->id_day_END=Upd_Day;
}
pt=pt->next;
}
}
sped* tempo(sped *pt){
int id_TotT,h,tmp,tmp3,tmp2=0,avMAX,DelStart,DelStop,rip=qHH;
float m;
while(pt!=NULL){
tmp=pt->id_m_START;
tmp3=pt->id_H_END;
if(pt->id_M_END>pt->id_m_START){
tmp2=qMM;
pt->id_m_START=qMM;
pt->id_H_END--;
rip--;
}
if(pt->id_day_END==pt->id_day_START)
id_TotT=qMM*(pt->id_H_END-pt->id_h_START) + pt->id_M_END + pt->id_m_START;
else{
if(pt->id_H_END!=qHH)
;// pt->id_H_END++;
DelStart=qMM*(pt->id_h_START) + tmp;
DelStop=qMM*(rip-tmp3) + abs(tmp2-pt->id_M_END);
avMAX=qHH*qMM+(pt->id_day_END-pt->id_day_START)*qMM*qHH;
id_TotT=avMAX-DelStart-DelStop;
}
h=(id_TotT/qMM);
m=abs(qMM*((id_TotT/qMM)-(id_TotT/(float)qMM)));
pt->h=h;
pt->m=m;
if(qdb==1)
printf("\nID[%s]\tMAX=%d\tSTART=%d\tSTOP=%d\t %d.%.0f ",pt->id_object,avMAX,DelStart,DelStop,h,m);
pt=pt->next;
}
}
sped* sort(sped *pt){
if(qdb==1)
printf("SORT:");
int i=0;
sped *swap,*pt_A,*pt_B,*pt_C;
while(pt!=NULL){
swap=pt->next;
while(swap!=NULL){
if(strcmp(pt->id_object,swap->id_object)>0){
printf("\n---------");
printf("\npt_A>pt_B [%s]>[%s]",pt->id_object,swap->id_object);
pt_A=pt;
pt_B=pt->next;
pt_C=swap->next;
printf("\n Rispettivi puntatori salvati.");
printf("\n---------");
}
swap=swap->next;
}
pt=pt->next;
}
}