Algorismes fitxers

De franhpWiki

Dreceres ràpides: navegació, cerca
  • Escriure un algorisme que ens digui quina és la longitud en bytes (o caràcters), d’un fitxer en format text desat en el disc (anomenat dades.txt).
var
    enter   contador<-0;
    FITXER *pf;
    caràcter c;
fvar
si ((pf=obrir("dades.bin", "rt"))==NULL) aleshores escriure ("error d'obertura de fitxer");
sino
    mentre(EOF(pf)=0) fer
        llegir(pf,c);
        contador++;
    fmentre
    tancar(pf);
    escriure(contador)
fsi
  • Crear un algorisme que obri dos fitxers de tipus text, i en creï un tercer amb els continguts dels dos fitxers inicials.
var
    FITXER *po1,*po2, *pd;
    caràcter c;
fvar
po1=obrir("fitxer1.txt", "rt");
po2=obrir("fitxer2.txt", "rt");
pd=obrir("fitxer1.txt","wt");
si ((po1=NUL)||(po2=NUL)||(pd=NUL)) escriure(error!)
sino
    mentre(!EOF(po1)) fer
        llegir(po1,c);
        escriure(pd,c);
    fmentre
    tancar(po1);   
    mentre(!EOF(po2)) fer
        llegir(po2,c);
        escriure(pd,c);
    fmentre
    tancar(po2);
    tancar(pd);
fsi
falgorisme
  • Crear un algorisme que obri un fitxer binari on hi ha desades parelles de valors que corresponen al voltatge i intensitat, en calculi les resistències corresponents, i ho desi en un altre fitxer binari.
Algorisme
var
    FITXER *pf,*pd;
    estructura valors{
        real v,i;
    }p;
    real resistencia;
fvar
si((pf=fopen("parelles.bin","rb"))=NUL) escriure (caca)
sino
    pd=fopen("resistencies.bin","wb");
    mentre(!EOF(pf))
        llegir(p,pf)
        resistencia=p.v/p.i;
        escriure(resistencia,pd);
    fmentre    
tancar(pf);
tancar(pd);
falgorisme
  • Fer un algorisme que gestioni un fitxer que conté punts de coordenades (que hauran d’estar desats en una estructura de dos membres). L’algorisme haurà de permetre desar, recuperar, modificar i afegir dades al fitxer.
algorisme
const N <- 20 fconst
var
   estructura coordenades{
      real x,y;
   }punts[N],afegit;
   FITXER *pf;
fvar
//desar
per(i<-0;i<N;i++)
    llegir(punts[i].x,punts[i].y);
fper
si ((pf=fopen("coordenades.bin", "wb"))==NULL) escriure(caca)
sino
    fwrite(&punts,sizeof(estructura coordenades)*N,1,pf);
    tancar(pf);
fsi
//recuperar
si ((pf=fopen("coordenades.bin", "rb"))==NULL) escriure(caca)
sino
    fread(&punts,sizeof(estructura coordenades)*N,1,pf);
    tancar(pf);
fsi
//modificar
si ((pf=fopen("coordenades.bin", "r+b"))==NULL) escriure(caca)
sino
    fread(&punts,sizeof(estructura coordenades)*N,1,pf);
    llegir(i);
    llegir(punts[i].x,punts[i].y);
    fwrite(&punts,sizeof(estructura coordenades)*N,1,pf);
    tancar(pf);
fsi
//afegir
si ((pf=fopen("coordenades.bin", "ab"))==NULL) escriure(caca)
sino
    llegir(afegit.x,afegit.y);
    fwrite(&afegit,sizeof(estructura coordenades),1,pf);
    tancar(pf);
fsi


  • Escriure un algorisme que compari 2 arxius de text, ens haurà de dir quines són aquestes diferències i en quina posició estan.
algorisme compara
FITXER *p1, *p2;
caràcter c1,c2;
p1=fopen("arxiu.txt", "rt");
p2=fopen("arxiu2.txt", "rt");
si(p1=NUL o p2=Nul) escriure (caca);
sino
   mentre(!EOF(p1) i !EOF(p2))
       si(llegir(c1,p1)!=llegir(c2,p2))
           escriure("canvi a %d, %s per %s " , posicio(pf), c1, c2);
       fsi
   fmentre
   
   tancar(p1,p2);
fsi   
fsi
falgorisme