Advertisement
Perlamado

Untitled

Feb 24th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.61 KB | None | 0 0
  1.  
  2. // esame 28/02/2018
  3. //file280218.txt
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <math.h>
  8. #include <string.h>
  9.  
  10. struct giocata{
  11. int x;//numero di x
  12. int o;//numero di o
  13. char g[11];//mi salvo la riga solo quando e' corretta
  14. int valoriSbagliati; // valori sbagliati ed in eccesso
  15. int finePartita; //se e' 1 significa che è la riga di fine partita
  16. int giocataErrata; //se è 1 significa che la giocata non è valida
  17. };
  18. struct partita{
  19. struct giocata v[9];
  20. int nGiocata;//numero di giocate che ho
  21. int partitaErrata; //se è 1 significa che c'è almeno una giocata errata
  22. };
  23.  
  24. struct giocata *letturaFile(FILE *f,int *n);
  25. void funzioneRiempiGiocata(struct giocata *g,int n);
  26. int funzioneCalcoloNumeroPartite(struct giocata *g,int n);
  27. void funzioneRiempiPartita(struct partita *p,struct giocata *g,int np,int n);
  28. void stampaStructGiocata(struct giocata *g,int n);
  29. void stampaStructPartita(struct partita *p, int n);
  30. int funzioneCaratteriSbagliati(struct giocata *g,int n);
  31. int funzioneMediaX(struct giocata *g,int n,int np);
  32. int funzioneMediaO(struct giocata *g,int n,int np);
  33. int funzionePartiteCorrette(struct partita *p,int n);
  34.  
  35.  
  36. int main( int argc, char *argv[]){
  37.  
  38. int n,nP,valoriErrati,x,o,partiteCorrette;
  39. FILE *f;
  40. struct giocata *giocata;
  41. //struct partita *partita;
  42.  
  43. if(argc!=2){
  44. return 1;
  45. }
  46. f=fopen(argv[1],"r");
  47. if(f==NULL){
  48. printf("file non trovato\n");
  49. return 1;
  50. }
  51.  
  52. // funzione lettura e stampa e rimpeimento vari vet
  53. giocata=letturaFile(f,&n);
  54. fclose(f);
  55. funzioneRiempiGiocata(giocata,n);
  56. stampaStructGiocata(giocata,n);
  57. nP=funzioneCalcoloNumeroPartite(giocata,n);
  58. struct partita v[nP];
  59. funzioneRiempiPartita(v,giocata,nP,n);
  60. stampaStructPartita(v,nP);
  61. // richiesta 1
  62. printf("[PARTITE]\n%d\n",nP);
  63. //richiesta 2
  64. valoriErrati=funzioneCaratteriSbagliati(giocata,n);
  65. printf("[NON-VALIDI]\n%d\n",valoriErrati);
  66. //richiesta 3
  67. x=funzioneMediaX(giocata,n,nP);
  68. o=funzioneMediaO(giocata,n,nP);
  69. printf("[XEO]\n%d\n%d\n",x,o);
  70. //richiesta 4
  71. partiteCorrette=funzionePartiteCorrette(v,nP);
  72. printf("[CORRETTE]\n%d\n",partiteCorrette);
  73. //richiesta 5
  74.  
  75.  
  76.  
  77.  
  78. return 0;
  79.  
  80.  
  81.  
  82. }
  83.  
  84. struct giocata *letturaFile(FILE *f,int *n){
  85. struct giocata *p1,*p2;
  86. char buffer[100];
  87. int nConv;
  88. int size=10;
  89. *n=0;
  90.  
  91.  
  92. p2=malloc(size*sizeof(struct partita));
  93. while(fgets(buffer,size*sizeof(buffer),f)){
  94.  
  95. p1=p2 + *n;
  96. nConv = sscanf(buffer, "%s", p1->g);
  97.  
  98. (*n)++;
  99. //facciamo la realloc
  100. if(*n>size){
  101. size = size*2;
  102. p2 = realloc(p2, size*sizeof(struct partita));
  103. }
  104. }
  105. p2 = realloc(p2, *n*sizeof(struct giocata));
  106.  
  107. return p2;
  108. }
  109. void funzioneRiempiGiocata(struct giocata *g,int n){
  110.  
  111. int i,j;
  112. char finePartita[]="---";
  113. struct giocata giocata;
  114. int lungh;
  115. char s[11];
  116.  
  117. for(i=0;i<n;i++){
  118. giocata = g[i];
  119. if(strcmp(giocata.g,finePartita)==0){
  120. giocata.finePartita=1;
  121. }else{
  122. giocata.finePartita=0;
  123. giocata.x=0;
  124. giocata.o=0;
  125. giocata.valoriSbagliati=0;
  126. lungh = strlen(giocata.g);
  127.  
  128. strcpy(s, giocata.g);
  129. for(j=0;j<lungh;j++){
  130.  
  131. if(s[j]=='x'){
  132. giocata.x++;
  133.  
  134.  
  135. }else if(s[j] == 'o'){
  136. giocata.o++;
  137.  
  138. }
  139. else{
  140.  
  141. if(s[j]!= '.'){
  142. giocata.valoriSbagliati++;
  143. }
  144. }
  145.  
  146. }
  147. if(lungh!=3){
  148. giocata.giocataErrata=1;
  149. }else{
  150. if(giocata.valoriSbagliati==0 && giocata.x==1 && giocata.o==1){
  151. giocata.giocataErrata=0;
  152. }else{
  153. giocata.giocataErrata=1;
  154. }
  155.  
  156. }
  157. }
  158. g[i].x = giocata.x;
  159. g[i].o = giocata.o;
  160. g[i].giocataErrata = giocata.giocataErrata;
  161. g[i].valoriSbagliati = giocata.valoriSbagliati;
  162. g[i].finePartita = giocata.finePartita;
  163.  
  164. }
  165.  
  166.  
  167. }
  168. int funzioneCalcoloNumeroPartite(struct giocata *g,int n){
  169. int count=0;
  170. int i;
  171. for(i=0;i<n;i++){
  172. if(g[i].finePartita==1){
  173. count++;
  174. }
  175. }
  176. return count;
  177. }
  178. void funzioneRiempiPartita(struct partita *p,struct giocata *g,int np,int n){
  179.  
  180. int i,j,k;
  181. j = 0;
  182. k=0;
  183. struct giocata *vettGiocata;
  184. for(i=0;i<np;i++){
  185. p[i].nGiocata=0;
  186. p[i].partitaErrata=0;
  187. }
  188. for(i=0;i<n;i++){
  189.  
  190. if(g[i].finePartita==1){
  191. j++;
  192. k=0;
  193. }else{
  194. printf("%d %d %d\n", j, k, p[j].nGiocata);
  195. vettGiocata=p[j].v;
  196. vettGiocata[k]=g[i];
  197. k++;
  198. p[j].nGiocata++;
  199. if(g[i].giocataErrata==1){
  200. p[j].partitaErrata=1;
  201. }
  202. }
  203. }
  204. }
  205. void stampaStructGiocata(struct giocata *g,int n){
  206. int i;
  207. for(i=0;i<n;i++){
  208. printf("%d %d %s %d %d %d\n",g[i].x,g[i].o,g[i].g,g[i].valoriSbagliati,g[i].finePartita,g[i].giocataErrata);
  209. }
  210. }
  211.  
  212. void stampaStructPartita(struct partita *p, int n){
  213. int i;
  214. for(i=0;i<n; i++){
  215. printf("PARTITA: errata %d nGiocata %d\n", p[i].partitaErrata, p[i].nGiocata);
  216. printf("VETTORE GIOCATA:\n");
  217. stampaStructGiocata(p[i].v, p[i].nGiocata);
  218. }
  219. }
  220. int funzioneCaratteriSbagliati(struct giocata *g,int n){
  221. int i;
  222. int sbagliati=0;
  223. for(i=0;i<n;i++){
  224. sbagliati+=g[i].valoriSbagliati;
  225. }
  226. return sbagliati;
  227. }
  228. int funzioneMediaX(struct giocata *g,int n,int np){
  229. int i;
  230. int media=0;
  231. for(i=0;i<n;i++){
  232. media+=g[i].x;
  233. }
  234. return media/np;
  235. }
  236. int funzioneMediaO(struct giocata *g,int n,int np){
  237. int i;
  238. int media=0;
  239. for(i=0;i<n;i++){
  240. media+=g[i].o;
  241. }
  242. return media/np;
  243. }
  244.  
  245. int funzionePartiteCorrette(struct partita *p,int n){
  246. int i;
  247. int count=0;
  248. for(i=0;i<n;i++){
  249. if(p[i].partitaErrata==0){
  250. count++;
  251. }
  252. }
  253. return count;
  254. }
  255. int funzioneVettore X(struct partita *p,int n,int np){
  256. int i;
  257. int media;
  258. for(i=0;i<n;i++){
  259. if(p[i].partitaErrata==0){
  260. media+=
  261. }
  262.  
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement