Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // esame 28/02/2018
- //file280218.txt
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <string.h>
- struct giocata{
- int x;//numero di x
- int o;//numero di o
- char g[11];//mi salvo la riga solo quando e' corretta
- int valoriSbagliati; // valori sbagliati ed in eccesso
- int finePartita; //se e' 1 significa che è la riga di fine partita
- int giocataErrata; //se è 1 significa che la giocata non è valida
- };
- struct partita{
- struct giocata v[9];
- int nGiocata;//numero di giocate che ho
- int partitaErrata; //se è 1 significa che c'è almeno una giocata errata
- };
- struct giocata *letturaFile(FILE *f,int *n);
- void funzioneRiempiGiocata(struct giocata *g,int n);
- int funzioneCalcoloNumeroPartite(struct giocata *g,int n);
- int funzioneRiempiPartita(struct partita *p,int np,struct giocata *g,int n);
- int main( int argc, char *argv[]){
- int n,nP,numPartite; // n=dim struct giocata; nP=dim struct partita
- FILE *f;
- struct giocata *giocata;
- // struct partita *partita;
- if(argc!=2){
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- // funzione lettura e stampa
- giocata=letturaFile(f,&n);
- funzioneRiempiGiocata(giocata,n);
- nP=funzioneCalcoloNumeroPartite(giocata,n);
- struct partita v[nP];
- numPartite=funzioneRiempiPartita(partita,v,giocata,n);
- fclose(f);
- return 0;
- }
- struct giocata *letturaFile(FILE *f,int *n){
- struct giocata *p1,*p2;
- char buffer[100];
- int nConv;
- int size=10;
- *n=0;
- p2=malloc(size*sizeof(struct partita));
- while(fgets(buffer,size*sizeof(buffer),f)){
- p1=p2 + *n;
- nConv = sscanf(buffer, "%s", p1->g);
- (*n)++;
- //facciamo la realloc
- if(*n>size){
- size = size*2;
- p2 = realloc(p2, size*sizeof(struct partita));
- }
- }
- p2 = realloc(p2, *n*sizeof(struct giocata));
- return p2;
- }
- void funzioneRiempiGiocata(struct giocata *g,int n){
- int i,j;
- char finePartita[]="---";
- struct giocata giocata;
- int lungh;
- char s[11];
- for(i=0;i<n;i++){
- giocata = g[i];
- if(strcmp(giocata.g,finePartita)==0){
- giocata.finePartita=1;
- }else{
- giocata.finePartita=0;
- giocata.x=0;
- giocata.o=0;
- giocata.valoriSbagliati=0;
- lungh = strlen(giocata.g);
- strcpy(s, giocata.g);
- for(j=0;j<lungh;j++){
- if(s[j]=='x'){
- giocata.x++;
- }else if(s[j] == 'o'){
- giocata.o++;
- }
- else{
- if(s[j]!= '.'){
- giocata.valoriSbagliati++;
- }
- }
- }
- if(lungh!=3){
- giocata.giocataErrata=1;
- }else{
- if(giocata.valoriSbagliati==0 && giocata.x==1 && giocata.o==1){
- giocata.giocataErrata=0;
- }else{
- giocata.giocataErrata=1;
- }
- }
- }
- }
- }
- int funzioneCalcoloNumeroPartite(struct giocata *g,int n){
- int count=0;
- int i;
- for(i=0;i<n;i++){
- if(g[i].finePartita==1){
- count++;
- }
- }
- return count;
- }
- int funzioneRiempiPartita(struct partita *p,int np,struct giocata *g,int n){
- int i,j;
- for(i=0;i<n;i++){
- if(i==0){
- p[j].nGiocata=0;
- }else{
- g[i].finePartita=1;
- j++;
- }
- }
- return j;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement