Advertisement
Perlamado

Untitled

Feb 24th, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.54 KB | None | 0 0
  1. //esame 30-06-2015
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <math.h>
  7.  
  8. struct mosse{
  9. int giocatore1;
  10. int giocatore2;
  11. int vittoria;// se viottoria g1 allora 1 se vittoria g2 2 pareggio 0
  12. int nSet;
  13.  
  14. };
  15.  
  16. struct mosse *letturaFile(FILE *f,int *n);
  17. void funzioneRiempiVittoria(struct mosse *m,int n);
  18. void stampaStruttura(struct mosse *m,int n);
  19. int funzioneRiempiNset(struct mosse *m,int n);
  20. int funzioneVittoriaGiocatore1(struct mosse *m,int n);
  21. void funzioniPuntiSet(struct mosse *m,int n,int nSet);
  22. int funzioneVittoriaPartita(struct mosse *m,int n);
  23. double frequenzaMosseVittoria(struct mosse *m,int n, int giocatore,int mossa);
  24. int funzioneForbice(struct mosse *m,int n,int giocatore);
  25.  
  26.  
  27. int main(int argc,char *argv[]){
  28. int n,nSet,maniVinteg1,vittP,perdente,forbice;
  29. double pSasso,pForbice,pCarta;
  30. FILE *f;
  31. struct mosse *mosse;
  32. if(argc!=2){
  33. printf("paramentri inseriti sbagliati\n");
  34. return 1;
  35. }
  36. f=fopen(argv[1],"r");
  37. if(f==NULL){
  38. printf("file non trovato\n");
  39. return 1;
  40. }
  41. //lettura e stampa
  42. mosse=letturaFile(f,&n);
  43. fclose(f);
  44. funzioneRiempiVittoria(mosse,n);
  45. nSet=funzioneRiempiNset(mosse,n);
  46. printf("numero di set :%d\n",nSet);
  47. stampaStruttura(mosse,n);
  48. //richiesta 1
  49. maniVinteg1=funzioneVittoriaGiocatore1(mosse,n);
  50. printf("[MANI]\n%d\n",maniVinteg1);
  51. //richiesta2
  52. funzioniPuntiSet(mosse,n,nSet);
  53. //richiesta 3
  54. vittP=funzioneVittoriaPartita(mosse,n);
  55. printf("VINCITORE: %d\n", vittP);
  56. if(vittP==1){
  57. perdente=2;
  58. }else{
  59. perdente=1;
  60. }
  61.  
  62. pSasso=frequenzaMosseVittoria(mosse , n, vittP,0);
  63. pForbice=frequenzaMosseVittoria(mosse , n, vittP,1);
  64. pCarta=frequenzaMosseVittoria(mosse , n, vittP,2);
  65. printf("[FREQUENZE]\n%lf %lf %lf\n",pSasso,pForbice,pCarta);
  66. //richiesta 4
  67. forbice=funzioneForbice(mosse,n,perdente);
  68. printf("[SOLO_FORBICE]\n%d\n",forbice);
  69. return 0;
  70. }
  71.  
  72. struct mosse *letturaFile(FILE *f,int *n){
  73.  
  74. int nConv;
  75. int size=10;
  76. char buffer[100];
  77. char s1[10];
  78. char s2[10];
  79. struct mosse *m1,*m2;
  80. *n=0;
  81.  
  82. m2=malloc(size*sizeof(struct mosse));
  83.  
  84. while(fgets(buffer,sizeof(buffer),f)){
  85. m1=m2+*n;
  86. nConv=sscanf(buffer,"%s %s",s1,s2);
  87. if(strcmp(s1,"sasso")==0){
  88. m1->giocatore1=0;
  89. } else if(strcmp(s1,"forbice")==0){
  90. m1->giocatore1=1;
  91.  
  92. }else{
  93. m1->giocatore1=2;
  94. }
  95. if(strcmp(s2,"sasso")==0){
  96. m1->giocatore2=0;
  97. } else if(strcmp(s2,"forbice")==0){
  98. m1->giocatore2=1;
  99.  
  100. }else{
  101. m1->giocatore2=2;
  102. }
  103. (*n)++;
  104. if(*n>=size){
  105. size=size*2;
  106. m2=realloc(m2,size*sizeof(struct mosse));
  107. }
  108. }
  109. m2=realloc(m2,*n*sizeof(struct mosse));
  110. return m2;
  111. }
  112. void funzioneRiempiVittoria(struct mosse *m,int n){
  113. int i;
  114. for(i=0;i<n;i++){
  115. if(m[i].giocatore1==m[i].giocatore2){
  116. m[i].vittoria=0; //parita'
  117.  
  118. }else{
  119. if(m[i].giocatore1==0 && m[i].giocatore2==1){
  120. m[i].vittoria=1;//vittoria g1
  121. }
  122. if(m[i].giocatore1==1 && m[i].giocatore2==0){
  123. m[i].vittoria=2;//vittoria g2
  124. }
  125. if(m[i].giocatore1==0 && m[i].giocatore2==2){
  126. m[i].vittoria=1;
  127. }
  128. if(m[i].giocatore1==2 && m[i].giocatore2==0){
  129. m[i].vittoria=2;
  130. }
  131. if(m[i].giocatore1==1 && m[i].giocatore2==2){
  132. m[i].vittoria=1;
  133. }
  134. if(m[i].giocatore1==2 && m[i].giocatore2==1){
  135. m[i].vittoria=2;
  136. }
  137.  
  138. }
  139.  
  140. }
  141. }
  142. int funzioneRiempiNset(struct mosse *m,int n){
  143. int i;
  144. int nSet=0;
  145. int vittoria1=0;
  146. int vittoria2=0;
  147. for(i=0;i<n;i++){
  148. m[i].nSet=nSet;
  149. if(m[i].vittoria==1){
  150. vittoria1++;
  151. }
  152. if(m[i].vittoria==2){
  153. vittoria2++;
  154. }
  155. if(vittoria1==11 || vittoria2==11){
  156. nSet++;
  157. vittoria1=0;
  158. vittoria2=0;
  159. }
  160.  
  161. }
  162.  
  163. return nSet;
  164. }
  165. void stampaStruttura(struct mosse *m,int n){
  166. int i;
  167. for(i=0;i<n;i++){
  168. printf("%d %d %d %d\n",m[i].giocatore1,m[i].giocatore2,m[i].vittoria,m[i].nSet);
  169. }
  170. }
  171. int funzioneVittoriaGiocatore1(struct mosse *m,int n){
  172. int i;
  173. int mani=0;
  174. for(i=0;i<n;i++){
  175. if(m[i].vittoria==1){
  176. mani++;
  177. }
  178. }
  179. return mani;
  180. }
  181. void funzioniPuntiSet(struct mosse *m,int n,int nSet){
  182. int i,j;
  183. int v[nSet];
  184. for(i=0;i<nSet;i++){
  185. v[i]=0;
  186. }
  187. for(i=0;i<n;i++){
  188. for(j=0;j<nSet;j++){
  189. if(m[i].vittoria==1 && m[i].nSet==j){
  190. v[j]++;
  191. }
  192.  
  193. }
  194. }
  195. printf("[SET]\n");
  196. for(i=0;i<nSet;i++){
  197. printf("%d\n",v[i]);
  198. }
  199. }
  200. int funzioneVittoriaPartita(struct mosse *m,int n){
  201.  
  202. int i;
  203. int nSet=0;
  204. int vittoria1=0;
  205. int nSetG1=0;
  206. int nSetG2=0;
  207. int vittoria2=0;
  208. for(i=0;i<n;i++){
  209.  
  210. if(m[i].vittoria==1){
  211. vittoria1++;
  212. }
  213. if(m[i].vittoria==2){
  214. vittoria2++;
  215. }
  216. if(vittoria1==11 || vittoria2==11){
  217. nSet++;
  218. if(vittoria1==11){
  219. nSetG1++;
  220. }
  221. if(vittoria2==11){
  222. nSetG2++;
  223. }
  224. vittoria1=0;
  225. vittoria2=0;
  226. }
  227. }
  228. if(nSetG1==3){
  229. return 1;
  230. }else{
  231. return 2;
  232. }
  233. }
  234. double frequenzaMosseVittoria(struct mosse *m,int n, int giocatore,int mossa){ // giocatore==1 vince partita g1 e viceversa
  235. int i;
  236. double count=0;
  237. for(i=0;i<n;i++){
  238. if(giocatore==1){
  239. //printf("%d %d\n", m[i].giocatore1, mossa );
  240. if(m[i].giocatore1==mossa){
  241. count++;
  242. }
  243. }else{
  244. if(m[i].giocatore2==mossa){
  245.  
  246. count++;
  247. }
  248. }
  249.  
  250. }
  251. return (count/n)*100;
  252. }
  253. int funzioneForbice(struct mosse *m,int n,int giocatore){ // 1 gioc 1 2 giocatore 2
  254. int i;
  255. int count =0;
  256. for(i=0;i<n;i++){
  257. if(giocatore==1){
  258. if(m[i].giocatore2==2){
  259. count ++;
  260. }
  261. }else{
  262. if(m[i].giocatore1==2){
  263. count++;
  264. }
  265. }
  266. }
  267. return count;
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement