Bones,

Amb alguna cosa m'he quedat :| (lo d'establir les lletres :P). Demà m'intentaré mirar la info que m'has donat a veure què entenc :D són fins a 2 punts extres i no els puc deixar escapar perque l'examen de dilluns m'enfonsaré xD

Si et pots mirar per sobre el que tinc fet fins ara a veure si hi trobes errors xungos o em pots donar algun consell... :)
Encara em falta el menú i posar-ho tot dins el 'main' jeje
Estic mitg dormit, així que és possible que hagi fotut bones cagades :/

gràcies de nou :D



FILE *fdades;  //arxiu diccionari-estàtic
FILE *faux;  //arxiu auxiliar-dinàmic
char fitxa[7]="estatic"; //nom arxiu estàtic
char fitxb[7]="dinamic"; // nom arxiu dinàmic
int index[26]; //índex del diccionari

char paraula[32]; //paraula del diccionari.
char paraulb[32]; //paraula a entrar/treure
int ipara; //index de 'paraula[]'

void indexat(); //resseteja l'array index posant-hi la taula ascii que usarem.
void obrir();
void index();
void discrimina();
void mostra(int indx);

void indexat()
{ int i, j=65;
  for (i=0; i<=(25); i++)
      {index[i]=j; j++;}
} //void
void reindexat(int opc, int ini) //actualitza l'índex després de treure/posar una paraula
{int i;
 for (i=ini; i<=25-ini; i++)
   {if (index[i]!=-1)
  { if(opc==1)
         {index[i]=index[i]+1;}
    else {index[i]=index[i]-1;}
  }
}
} //void

void mostra(int indx)
{ bool sino=false;
if (index[indx]==-1)
{ printf("No hi ha cap paraula al diccionari que comenci per aquesta lletra");
 }else
 {
 obrir()
 int i,j=indx+1;
while (index[j]==-1) {j++;} //comprovem on està la següent lletra i n'establim el limit fseek (fdades,index[indx-1], SEEK_SET) // <---- o seria 'index[indx] ??? Això no ho tinc pas clar :/
  for (i=index[indx]; i<=j); i++)
      {fscanf(fdades, "%s", &paraula);
       printf("%s\n", paraula);
   }
 } //else
fclose(fdades);
} //void

void obrir() //obre en mode lectura l'arxiu "fdades"
{

if ((fdades=fopen("diccio.txt","r+"))==NULL) // +r ò +w??
{
    if ((fdades=fopen("diccio.txt","w+"))==NULL)
     {
printf("No tens cap arxiu de diccionari ni tens permisos per crear-ne un\n");
   exit(0);
  }
}
}
/*  discriminar simple
void discrimina()
{
if (n>96 && n<123) { mostra(n-96);}
else { if (n>64 && n<91) {mostra(n-64);}
else {printf("Ha d'entrar una lletra compresa entre la 'a' i la 'z' (la 'ñ' i 'ç' no son valides)");}
  }
} //void

void discrimina(int opcio) //discrimina per 'mostrar' ( 0 ), 'afegir' ( 1 ) i 'esborrar' ( 2 )
{ int j, n=paraulb[0], fi;
if (n>96 && n<123) { n=n-96;} //cerco la posició de l'índex, si existeix.. ?
else { if (n>64 && n<91) {n=n-64;}
    else { n=-1;}
  }
if (n==-1)
  { printf(" **ERROR** \n La ");
      if (opcio==0) {printf("lletra entrada");}
    if (opcio==1) {printf("paraula que vol esborrar.");}
 if (opcio==2) {printf("paraula que vol afegir");}
printf(" es erronia (paraules començades amb la 'ñ' o 'ç' no son valides)");
  }
else
  { if (opcio==0) {mostra(n);} // n= posició d'inici.
    else
  { fi=n+1;
    while (index[n]==-1) {n++;} // n=posició fi.
    if (cerca(opcio, n, fi))
{ reindexa(opcio,n); //reindexem la taula d'index a partir d'on es modificarà el diccionari.
       treballa(opcio-1,n);
  }
  }
  }
} //void

//    fprintf(faux,"%s",paraula);

void index()
{
   obrir();
char j="a";
int i=96, conta=0, indx=0; //establim els valors ASCII de 'a', (comencem a un caracter abans) un contador de línies i un índex. h=65
while (i<=122)
 { conta++;
   fscanf(fdades,"%s", &paraula);

      if ((paraula[0]!=i)&&(paraula[0]!=(i-32)))
         { i++; //h++;
     if (paraula[0]!=index[indx] && conta!=1)
      {index[indx]=-1;}
  if (paraula[0]==index[indx])
      {index[indx]=conta;}
      }
    } //while
fclose(fdades);
} //void

void treballa(int accio, int posfi) //l'acció ens dirà si esborrem o afegim una paraula nova.
{int conta=0; bool valida=false;
 obrir();
 faux=fopen(fitxb,"w");
 while (!feof(fdades))
{ conta++;
  fscanf(fdades, "%s", &paraula);
if (accio==0 && strcmp(paraula, paraulb)!=0) { fprintf(faux, "%s", paraula); }
  else { conta--; valida=true; }
  if (accio==1 && conta==posfi) {fprintf(fauxm "%s",paraulb); conta++;}
}
 fclose(fdades);
 fclose(faux);
}

bool cerca(int opc, int posini, int posfi) //cerquem la paraula a esborrar.
{ bool trobat=false
 obrir();
fseek (fdades,index[inic-1], SEEK_SET) // <---- o seria 'index[indx] ??? Això no ho tinc pas clar :/
 while (posini!=posfi)
{ fscanf(fdades, "%s", &paraula);
  if (strcmp(paraula, paraulb)==0) {trobat=true;}
  posini++;
}
  if (!trobat) //si no existeix la paraula
   {printf(" **ERROR** \n La paraula que vol ";)
    if (opc==1) {printf("esborrar no");}
 if (opc==2) {printf("entrar ja");}
 printf(" esta en el diccionari");
   }
return trobat
}

                
______________________________________________ LLama Gratis a cualquier PC del Mundo. Llamadas a fijos y móviles desde 1 céntimo por minuto. http://es.voice.yahoo.com
_______________________________________________
llista de correu de l'Internauta
[email protected]
http://zeus.internauta.net/mailman/listinfo/internauta

Respondre per correu electrònic a