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", ¶ula);
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", ¶ula);
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", ¶ula);
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", ¶ula);
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