Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //esame 30-06-2015
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- struct mosse{
- int giocatore1;
- int giocatore2;
- int vittoria;// se viottoria g1 allora 1 se vittoria g2 2 pareggio 0
- int nSet;
- };
- struct mosse *letturaFile(FILE *f,int *n);
- void funzioneRiempiVittoria(struct mosse *m,int n);
- void stampaStruttura(struct mosse *m,int n);
- int funzioneRiempiNset(struct mosse *m,int n);
- int funzioneVittoriaGiocatore1(struct mosse *m,int n);
- void funzioniPuntiSet(struct mosse *m,int n,int nSet);
- int funzioneVittoriaPartita(struct mosse *m,int n);
- double frequenzaMosseVittoria(struct mosse *m,int n, int giocatore,int mossa);
- int funzioneForbice(struct mosse *m,int n,int giocatore);
- int main(int argc,char *argv[]){
- int n,nSet,maniVinteg1,vittP,perdente,forbice;
- double pSasso,pForbice,pCarta;
- FILE *f;
- struct mosse *mosse;
- if(argc!=2){
- printf("paramentri inseriti sbagliati\n");
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- //lettura e stampa
- mosse=letturaFile(f,&n);
- fclose(f);
- funzioneRiempiVittoria(mosse,n);
- nSet=funzioneRiempiNset(mosse,n);
- printf("numero di set :%d\n",nSet);
- stampaStruttura(mosse,n);
- //richiesta 1
- maniVinteg1=funzioneVittoriaGiocatore1(mosse,n);
- printf("[MANI]\n%d\n",maniVinteg1);
- //richiesta2
- funzioniPuntiSet(mosse,n,nSet);
- //richiesta 3
- vittP=funzioneVittoriaPartita(mosse,n);
- printf("VINCITORE: %d\n", vittP);
- if(vittP==1){
- perdente=2;
- }else{
- perdente=1;
- }
- pSasso=frequenzaMosseVittoria(mosse , n, vittP,0);
- pForbice=frequenzaMosseVittoria(mosse , n, vittP,1);
- pCarta=frequenzaMosseVittoria(mosse , n, vittP,2);
- printf("[FREQUENZE]\n%lf %lf %lf\n",pSasso,pForbice,pCarta);
- //richiesta 4
- forbice=funzioneForbice(mosse,n,perdente);
- printf("[SOLO_FORBICE]\n%d\n",forbice);
- return 0;
- }
- struct mosse *letturaFile(FILE *f,int *n){
- int nConv;
- int size=10;
- char buffer[100];
- char s1[10];
- char s2[10];
- struct mosse *m1,*m2;
- *n=0;
- m2=malloc(size*sizeof(struct mosse));
- while(fgets(buffer,sizeof(buffer),f)){
- m1=m2+*n;
- nConv=sscanf(buffer,"%s %s",s1,s2);
- if(strcmp(s1,"sasso")==0){
- m1->giocatore1=0;
- } else if(strcmp(s1,"forbice")==0){
- m1->giocatore1=1;
- }else{
- m1->giocatore1=2;
- }
- if(strcmp(s2,"sasso")==0){
- m1->giocatore2=0;
- } else if(strcmp(s2,"forbice")==0){
- m1->giocatore2=1;
- }else{
- m1->giocatore2=2;
- }
- (*n)++;
- if(*n>=size){
- size=size*2;
- m2=realloc(m2,size*sizeof(struct mosse));
- }
- }
- m2=realloc(m2,*n*sizeof(struct mosse));
- return m2;
- }
- void funzioneRiempiVittoria(struct mosse *m,int n){
- int i;
- for(i=0;i<n;i++){
- if(m[i].giocatore1==m[i].giocatore2){
- m[i].vittoria=0; //parita'
- }else{
- if(m[i].giocatore1==0 && m[i].giocatore2==1){
- m[i].vittoria=1;//vittoria g1
- }
- if(m[i].giocatore1==1 && m[i].giocatore2==0){
- m[i].vittoria=2;//vittoria g2
- }
- if(m[i].giocatore1==0 && m[i].giocatore2==2){
- m[i].vittoria=1;
- }
- if(m[i].giocatore1==2 && m[i].giocatore2==0){
- m[i].vittoria=2;
- }
- if(m[i].giocatore1==1 && m[i].giocatore2==2){
- m[i].vittoria=1;
- }
- if(m[i].giocatore1==2 && m[i].giocatore2==1){
- m[i].vittoria=2;
- }
- }
- }
- }
- int funzioneRiempiNset(struct mosse *m,int n){
- int i;
- int nSet=0;
- int vittoria1=0;
- int vittoria2=0;
- for(i=0;i<n;i++){
- m[i].nSet=nSet;
- if(m[i].vittoria==1){
- vittoria1++;
- }
- if(m[i].vittoria==2){
- vittoria2++;
- }
- if(vittoria1==11 || vittoria2==11){
- nSet++;
- vittoria1=0;
- vittoria2=0;
- }
- }
- return nSet;
- }
- void stampaStruttura(struct mosse *m,int n){
- int i;
- for(i=0;i<n;i++){
- printf("%d %d %d %d\n",m[i].giocatore1,m[i].giocatore2,m[i].vittoria,m[i].nSet);
- }
- }
- int funzioneVittoriaGiocatore1(struct mosse *m,int n){
- int i;
- int mani=0;
- for(i=0;i<n;i++){
- if(m[i].vittoria==1){
- mani++;
- }
- }
- return mani;
- }
- void funzioniPuntiSet(struct mosse *m,int n,int nSet){
- int i,j;
- int v[nSet];
- for(i=0;i<nSet;i++){
- v[i]=0;
- }
- for(i=0;i<n;i++){
- for(j=0;j<nSet;j++){
- if(m[i].vittoria==1 && m[i].nSet==j){
- v[j]++;
- }
- }
- }
- printf("[SET]\n");
- for(i=0;i<nSet;i++){
- printf("%d\n",v[i]);
- }
- }
- int funzioneVittoriaPartita(struct mosse *m,int n){
- int i;
- int nSet=0;
- int vittoria1=0;
- int nSetG1=0;
- int nSetG2=0;
- int vittoria2=0;
- for(i=0;i<n;i++){
- if(m[i].vittoria==1){
- vittoria1++;
- }
- if(m[i].vittoria==2){
- vittoria2++;
- }
- if(vittoria1==11 || vittoria2==11){
- nSet++;
- if(vittoria1==11){
- nSetG1++;
- }
- if(vittoria2==11){
- nSetG2++;
- }
- vittoria1=0;
- vittoria2=0;
- }
- }
- if(nSetG1==3){
- return 1;
- }else{
- return 2;
- }
- }
- double frequenzaMosseVittoria(struct mosse *m,int n, int giocatore,int mossa){ // giocatore==1 vince partita g1 e viceversa
- int i;
- double count=0;
- for(i=0;i<n;i++){
- if(giocatore==1){
- //printf("%d %d\n", m[i].giocatore1, mossa );
- if(m[i].giocatore1==mossa){
- count++;
- }
- }else{
- if(m[i].giocatore2==mossa){
- count++;
- }
- }
- }
- return (count/n)*100;
- }
- int funzioneForbice(struct mosse *m,int n,int giocatore){ // 1 gioc 1 2 giocatore 2
- int i;
- int count =0;
- for(i=0;i<n;i++){
- if(giocatore==1){
- if(m[i].giocatore2==2){
- count ++;
- }
- }else{
- if(m[i].giocatore1==2){
- count++;
- }
- }
- }
- return count;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement