Advertisement
Perlamado

Untitled

Feb 18th, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. // esame 28/02/2018
  2. //file280218.txt
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <string.h>
  8.  
  9. struct giocata{
  10. int x;//numero di x
  11. int o;//numero di o
  12. char g[11];//mi salvo la riga solo quando e' corretta
  13. int valoriSbagliati; // valori sbagliati ed in eccesso
  14. int finePartita; //se e' 1 significa che è la riga di fine partita
  15. int giocataErrata; //se è 1 significa che la giocata non è valida
  16. };
  17. struct partita{
  18. struct giocata v[9];
  19. int nGiocata;//numero di giocate che ho
  20. int partitaErrata; //se è 1 significa che c'è almeno una giocata errata
  21. };
  22.  
  23. struct giocata *letturaFile(FILE *f,int *n);
  24. void funzioneRiempiGiocata(struct giocata *g,int n);
  25. int funzioneCalcoloNumeroPartite(struct giocata *g,int n);
  26. int funzioneRiempiPartita(struct partita *p,int np,struct giocata *g,int n);
  27.  
  28.  
  29. int main( int argc, char *argv[]){
  30.  
  31. int n,nP,numPartite; // n=dim struct giocata; nP=dim struct partita
  32. FILE *f;
  33. struct giocata *giocata;
  34. // struct partita *partita;
  35. if(argc!=2){
  36. return 1;
  37. }
  38. f=fopen(argv[1],"r");
  39. if(f==NULL){
  40. printf("file non trovato\n");
  41. return 1;
  42. }
  43.  
  44. // funzione lettura e stampa
  45. giocata=letturaFile(f,&n);
  46. funzioneRiempiGiocata(giocata,n);
  47. nP=funzioneCalcoloNumeroPartite(giocata,n);
  48.  
  49. struct partita v[nP];
  50. numPartite=funzioneRiempiPartita(partita,v,giocata,n);
  51. fclose(f);
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. return 0;
  59. }
  60.  
  61. struct giocata *letturaFile(FILE *f,int *n){
  62. struct giocata *p1,*p2;
  63. char buffer[100];
  64. int nConv;
  65. int size=10;
  66. *n=0;
  67.  
  68.  
  69. p2=malloc(size*sizeof(struct partita));
  70. while(fgets(buffer,size*sizeof(buffer),f)){
  71.  
  72. p1=p2 + *n;
  73. nConv = sscanf(buffer, "%s", p1->g);
  74.  
  75. (*n)++;
  76. //facciamo la realloc
  77. if(*n>size){
  78. size = size*2;
  79. p2 = realloc(p2, size*sizeof(struct partita));
  80. }
  81. }
  82. p2 = realloc(p2, *n*sizeof(struct giocata));
  83.  
  84. return p2;
  85. }
  86. void funzioneRiempiGiocata(struct giocata *g,int n){
  87.  
  88. int i,j;
  89. char finePartita[]="---";
  90. struct giocata giocata;
  91. int lungh;
  92. char s[11];
  93.  
  94. for(i=0;i<n;i++){
  95. giocata = g[i];
  96. if(strcmp(giocata.g,finePartita)==0){
  97. giocata.finePartita=1;
  98. }else{
  99. giocata.finePartita=0;
  100. giocata.x=0;
  101. giocata.o=0;
  102. giocata.valoriSbagliati=0;
  103. lungh = strlen(giocata.g);
  104.  
  105. strcpy(s, giocata.g);
  106. for(j=0;j<lungh;j++){
  107. if(s[j]=='x'){
  108. giocata.x++;
  109. }else if(s[j] == 'o'){
  110. giocata.o++;
  111. }
  112. else{
  113. if(s[j]!= '.'){
  114. giocata.valoriSbagliati++;
  115. }
  116. }
  117.  
  118. }
  119. if(lungh!=3){
  120. giocata.giocataErrata=1;
  121. }else{
  122. if(giocata.valoriSbagliati==0 && giocata.x==1 && giocata.o==1){
  123. giocata.giocataErrata=0;
  124. }else{
  125. giocata.giocataErrata=1;
  126. }
  127.  
  128. }
  129. }
  130.  
  131. }
  132. }
  133. int funzioneCalcoloNumeroPartite(struct giocata *g,int n){
  134. int count=0;
  135. int i;
  136. for(i=0;i<n;i++){
  137. if(g[i].finePartita==1){
  138. count++;
  139. }
  140. }
  141. return count;
  142. }
  143. int funzioneRiempiPartita(struct partita *p,int np,struct giocata *g,int n){
  144.  
  145. int i,j;
  146. for(i=0;i<n;i++){
  147. if(i==0){
  148. p[j].nGiocata=0;
  149. }else{
  150. g[i].finePartita=1;
  151. j++;
  152. }
  153. }
  154. return j;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement