Hola, El dissabte 18/11/06, a les 11:57 (+0100), iluro va escriure: > He estat cercant pel tiet Google i ... i no acabo de captar les sintaxis i > tal :/ > Crec que necessito els 'fprintf' i 'fscanf', i llavors el "fseek" :? No he > acabat de pillar-els-hi el què i com usar-los :/
El manual de la GNU Libc: http://www.gnu.org/software/libc/manual/html_node/index.html Explica les funcions de la llibreria C de GNU classificades per temes. Després tens el manual de UNIX, la secció 3 són funcions de programació, ex: man 3 fseek et donarà la plana de la funció fseek(). Finalment, aquí trobaràs exemples (codi font) de coses bàsiques del llenguatge C (útil): http://www.java2s.com/Code/C/CatalogC.htm > El que tinc clar és: > 1. Necessito llegir les línies que a cada línia hi hauria d'haver un array[] > que és el que he de pillar (o paraula vamos :P ) > 2. A cada array, comparar el array[0] amb el codi ascii per saber-ne la > primera lletra. > 3. Cada cop que tingui una lletra nova, posar la direcció de la línia dins de > l'array índex, la 'a' al primer, etc... (com sé la direcció???) > 4. copiar d'un arxiu a un altre quan m'entrin una paràula nova (suposo que ho > sabria fer.. no n'estic segur) > > Bé, més o menys els punts estan clars... el "com" està desaparegut :/ > > > Anunciat: > Pràctica: El diccionari (OPCIONAL I EXTRA: +2 punts) > Fer un programa que gestioni un diccionari que haurà d'emmagatzemar-se en un > fitxer. A memòria, com a molt, podré > emmagatzemar una taula amb 28 posicions (una per a cada lletra), en la que > guardaré la posició a on es troba la primera > paraula que comença per aquella lletra dins del fitxer. Aquesta taula la > podré guardar, entre execucions, a un altre fitxer. > Les operacions que hauré de permetre sobre el diccionari seran: > 1. Alta de paraula (farem una còpia en un arxiu temporal i després el > renombrarem) > 2. Baixa de paraula (igual que la opció 1) > 3. Consulta de totes les paraules que comencin per una certa lletra > La consulta haurà de fer servir l'índex que ens indica a quina posició del > fitxer comencen les paraules de cada lletra. > En aquest exercici ens centrarem en agrupar les paraules que comencin per la > mateixa lletra i, per tant, no ens importarà > tant l'ordre intern de les paraules que coincideixin en la seva primera > lletra. Per tant, generarem el fitxer de forma que les > paraules estiguin ordenades per ordre alfabètic de la primera lletra (les > demés no compten per a l'ordre). Jo crec que el primer que cal fer és una taula, que digui A - 0x0000 B - 0x0027 C - 0x007B ........ Z - 0x8510 Que et diu a quina posició el fitxer es troba la primera paraula que comença amb una A, B, C... Z. (Això suposant que el diccionari estigui ordenat!) Llavors, la primera columna en realitat te la pots estalviar, ja que només són les lletres, i quedaria una cosa com taula[0] = posició en el fitxer de la primera paraula que comença en A. taula[1] = posició en el fitxer de la primera paraula que comença en B. etc. Llavors, per exemple, fseek (fitxer, taula[4], SEEK_SET) et portaria a la posició en el fitxer (offset) on hi ha la primera paraula que comença amb la 5a lletra (la "E"). Això seria la bàsic... El punt 3 és fàcil: llegir totes els bytes en el fitxer entre "taula[3]" i "taula[4]" i escriure'ls a la sortida estàndard. Això escriuria totes les paraules que comencen amb la lletra 4a (la "D") a la sortida std. El punt 1 (alta) és anar copiant el fitxer lletra per lletra (igual que el punt 3) però insertar una línia amb la paraula en el moment adequat (i després actualitzar la taula-índex), ex: has d'afegir una paraula que comença amb "C": copies tot el que hi ha entre taula[0] a taula[3] (A-C), escrius una línia amb la paraula, copies tota la resta: de taula[3] a taula[28]. Actualitzes la taula, ja que les posicions a partir de taula[3] hauran canviat. El punt 2 (baixa) ara mateix no se'm acut com fer-ho :) Això és com ho faria jo, però em puc equivocar! -- hrnzt _______________________________________________ llista de correu de l'Internauta [email protected] http://zeus.internauta.net/mailman/listinfo/internauta
