Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<stdlib.h>
- struct Jucator
- {
- char nume[50];
- char prenume[50];
- int xp;
- struct Jucator *urm;
- };
- struct Echipa
- {
- struct Jucator *cap2;
- char nume_echipa[50];
- int nr_jucatori;
- double mediexp;
- struct Echipa *urm;
- };
- struct meciuri
- {
- struct Echipa *e1;
- struct Echipa *e2;
- int castigatoare;
- struct meciuri *urm;
- };
- int main()
- {
- FILE *fisierin=fopen("in.txt","rt");
- if(fisierin==NULL)
- {
- printf("Nu se poate deschide fisierul. \n");
- exit(1);
- }
- /////////////////////////
- struct Echipa *p,*cap,*q;
- struct Jucator *p2,*q2;
- int n,i,j,aux=0;
- /////////////////////////
- fscanf(fisierin,"%d",&n);
- p=(struct Echipa *)malloc(sizeof(struct Echipa));
- if(p==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%d",&p->nr_jucatori);
- fgets(p->nume_echipa,50,fisierin);
- // fscanf(fisierin,"%s\n",p2->nume_echipa);
- //printf("%s\n\n\n\n\n",p->nume_echipa);
- p2=(struct Jucator*)malloc(sizeof(struct Jucator));
- if(p2==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%s",p2->nume);
- fscanf(fisierin,"%s",p2->prenume);
- fscanf(fisierin,"%d",&p2->xp);
- p2->urm=NULL;
- p->cap2=p2;
- for(j=1;j<p->nr_jucatori;j++)
- {
- q2=(struct Jucator*)malloc(sizeof(struct Jucator));
- if(q2==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%s",q2->nume);
- fscanf(fisierin,"%s",q2->prenume);
- fscanf(fisierin,"%d",&q2->xp);
- q2->urm=NULL;
- p2->urm=q2;
- p2=q2;
- if(j==1)
- p->cap2->urm=q2;
- }
- p->urm=NULL;
- cap=p;
- //creare lista echipe
- for(i=1;i<n;i++)
- {
- q=(struct Echipa *)malloc(sizeof(struct Echipa));
- if(q==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%d",&q->nr_jucatori);
- //fgets(q->nume_echipa,50,fisierin);
- fscanf(fisierin,"%s",q->nume_echipa);
- //creare lista jucatori pentru fiecare echipa
- p2=(struct Jucator*)malloc(sizeof(struct Jucator));
- if(p2==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%s",p2->nume);
- fscanf(fisierin,"%s",p2->prenume);
- fscanf(fisierin,"%d",&p2->xp);
- p2->urm=NULL;
- q->cap2=p2;
- for(j=1;j<p->nr_jucatori;j++)
- {
- q2=(struct Jucator*)malloc(sizeof(struct Jucator));
- if(q2==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- fscanf(fisierin,"%s",q2->nume);
- fscanf(fisierin,"%s",q2->prenume);
- fscanf(fisierin,"%d",&q2->xp);
- q2->urm=NULL;
- p2->urm=q2;
- p2=q2;
- if(j==1)
- p->cap2->urm=q2;
- }
- q->urm=NULL;
- p->urm=q;
- p=q;
- }
- p=cap;
- fclose(fisierin);
- for(i=0;i<n;i++)
- {
- printf("%d ",p->nr_jucatori);
- printf("%s\n",p->nume_echipa);
- p2=p->cap2;
- for(j=0;j<p->nr_jucatori;j++)
- {
- printf("%s ",p2->nume);
- printf("%s ",p2->prenume);
- printf("%d\n",p2->xp);
- p2=p2->urm;
- }
- p=p->urm;
- }
- //calculmedie(cap);
- //eliminare_echipe_in_plus(cap,n);
- /*for(p=cap;p!=NULL;p=p->urm)
- aux++;
- aux=aux/2;
- for(i=0;i<aux;i++)
- crearemeciuri(cap);*/
- }
- void calculmedie(struct Echipa **cap)
- {
- struct Echipa *p,*q;
- struct Jucator *p2,*q2;
- double medie=0.0;
- for(p=*cap;p!=NULL;p=p->urm)
- {
- for(p2=p->cap2;p2!=NULL;p2=p2->urm)
- medie= medie+p2->xp;
- medie=medie/p->nr_jucatori;
- p->mediexp=medie;
- }
- }
- void eliminare_echipe_in_plus(struct Echipa **cap,int n)
- {
- int aux=1,nr;
- double aux2;
- struct Echipa *p,*q,*r;
- for(;aux*2<n;aux=aux*2);
- nr=n-aux;
- aux2=(*cap)->mediexp;
- while(nr!=0)
- {
- for(p=*cap;p!=NULL;p=p->urm)
- if(aux2>p->mediexp)
- aux2=p->mediexp;
- for(p=*cap;p->urm!=NULL;p=p->urm);
- q=p;
- p=*cap;
- if(p->mediexp==aux2||q->mediexp==aux2)
- if(p->mediexp==aux2)
- {
- *cap=p->urm;
- free(p);
- p=*cap;
- }
- else
- {
- for(r=*cap;r->urm->urm!=NULL;r=r->urm);
- r->urm=NULL;
- free(q);
- q=r;
- }
- else
- for(p=*cap;p->urm=NULL;p=p->urm)
- {
- q=p->urm;
- if(aux2==q->mediexp)
- {
- p->urm=q->urm;
- free(q);
- break;
- }
- }
- nr--;
- }
- FILE *fisierout;
- fisierout=fopen("out.txt","at");
- if(fisierout==NULL)
- {
- printf("Nu s-a deschis fisierul.");
- exit(1);
- }
- for(p=*cap;p!=NULL;p=p->urm)
- fprintf(fisierout,"%s\n",p->nume_echipa);
- fclose(fisierout);
- }
- void crearemeciuri(struct Echipa **cap)
- {
- struct meciuri *p3,*q3,*cap3;
- struct Echipa *p,*q;
- int aux=0,aux2;
- for(p=*cap;p!=NULL;p=p->urm)
- aux=aux+1;
- aux=aux/2;
- p=(*cap);
- p3=(struct meciuri *)malloc(sizeof(struct meciuri));
- if(p3==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- p3->e1=p;
- p3->e2=p->urm;
- p3->urm=NULL;
- cap3=p3;
- for(aux2=1;aux2<aux;aux2++)
- {
- q3=(struct meciuri *)malloc(sizeof(struct meciuri));
- if(q3==NULL)
- {
- printf("Nu a alocat.");
- exit(1);
- }
- p=p->urm->urm;
- q3->e1=p;
- q3->e2=p->urm;
- p3->urm=q3;
- q3->urm=NULL;
- p3=q3;
- }
- FILE *fisierout;
- fisierout=fopen("out.txt","at");
- if(fisierout==NULL)
- {
- printf("Nu s-a deschis fisierul.");
- exit(1);
- }
- for(p3=cap3;p3!=NULL;p3=p3->urm)
- fprintf(fisierout,"%s -- %s\n",p3->e1,p3->e2);
- //FA MECIURILE SI PUNELE UN OUT
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement