Home | BAC/Teze | Biblioteca | Jobs | Referate | Horoscop | Muzica | Dex | Games | Barbie

 

Search!

     

 

Index | Forum | E-mail

   

 NOTA pentru REFERATE si ESEURI: Articolele prezentate in aceasta sectiune de referate au scop strict didactic. Ele sunt elaborate de profesori, elevi sau studenti care s-au documentat atent pentru elaborarea lor. Prezenta sectiunii de REFERATE in cadrul site-ului are un rol enciclopedic. Pagina de referate interzice strict predarea acestor materiale pentru orele de curs in gimnaziu, liceu sau facultate!

 

 
 
 
 
 + Click:  Grupuri | Newsletter | Portal | Ziare,Radio/TV | Forum discutii | Premii de excelenta | Europa

 

 

 

 

  < Inapoi la Cuprins Referate

Referat trimis de: Radu Serban | ADAUGA UN REFERAT! - APASA AICI!

 

Fisiere Pascal

(continuare)

 

[inapoi la prima pagina]
 

ADĂUGAREA DE ARTICOLE

Fiind dat un fișier , se cere să-i adăugăm un număr de articole. În programul următor, adăugarea articolelor se face la sfârșitul fișierului (deci după toate articolele conținute deja în fișier).
Pentru a realiza acest lucru se poziționează pointer-ul pe marcajul sfârșitului de fișier (seek(f1,filesize(f1)), iar înregistrările care se adaugă sunt citite de la tastatură și scrise în continuare. Se observă că deschiderea fișierului a fost făcută cu RESET (o deschidere cu RESET permite și scrierea în fișier).

program  ft5;

type inr= record

            nume:string[10];

            varsta:byte

          end;

fisier=file of inr;

var  inreg:inr;

     f1:fisier;

     dfghjkl;c:char;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  seek(f1,filesize(f1));

  repeat

    write('nume');

    readln(inreg.nume);

    write('varsta');

    readln(inreg.varsta);

    write(f1,inreg);

    write('continuati ? (y/n) ');

    readln (c);

  until c='n';

  close(f1)

end.

De multe ori , adăugarea noilor înregistrări trebuie făcută în interiorul fișierului (după o anumită înregistrare). Limbajul Turbo Pascal nu permite ca această operație să se facă în mod direct . Din acest motiv , pentru a realiza ceea ce dorim se procedează în felul următor:
• Se deschide un al doilea fișier;
• Se copiază în acesta toate înregistrările care se găsesc plasate înaintea celor care se adaugă ;
• Se scriu , în continuare, noile înregistrări;
• Se copiază restul înregistrărilor (din vechiul fișier);
• Vechiul fișier este șters , iar noul fișier capătă numele vechiului fișier.
Programul care urmează citește de la tastatură înregistrările ce se adaugă .Pentru ștergere, se folosește procedura ERASE care are forma generală:
ERASE (var fișier, ‘nume’)
unde ‘nume’ este un parametru de tip string și reprezintă noul nume al fișierului.

program  ft6;

type inr=record

           nume:string[10];

           varsta:byte

         end;

fisier=file of inr;

var inreg:inr;

f1,f2:fisier;

c:char;

i:integer;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  assign(f2,'fis1');

  rewrite(f2);

  for i:=1 to 3 do

  begin

    read(f1,inreg);

    write(f2,inreg);

  end;

  repeat

    write('nume');

    readln(inreg.nume);

    write('varsta');

    readln(inreg.varsta);

    write(f2,inreg);

    write('continuati ? (y/n) ');

    readln (c);

  until c='n';

  while not eof(f1) do

  begin

    read(f1,inreg);

    write(f2,inreg)

  end;

  close(f1);

  close(f2);

  erase (f1);

  rename(f2,'fdat2')

end.

De multe ori, este necesar să modificăm un câmp (sau mai multe) al unei înregistrări (sau ale mai multor înregistrări). Programul ft7 face modificare 1n câmpul vârstă al înregistrării cu n unele de ordine 4. Pentru aceasta , se procedează în felul următor:
• După deschiderea fișierului (cu RESET) , poziționăm pointer-ul pe înregistrarea care urmează a fi modificată (cu SEEK);
• Se citește înregistrarea;
• Se face modificarea în câmpul corespunzător;
• Întrucât, la citire, pointer-ul s-a poziționat pe înregistrarea următoare, acesta se repoziționează pe înregistrarea care a fost citită;
• Această înregistrare este suprascrisă (câmpul a fost modificat) cu procedura WRITE.

program  ft7;

type inr= record

            nume:string[10];

            varsta:byte

          end;

fisier=file of inr;

var inreg:inr;

    f1:fisier;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  seek(f1,4);

  read(f1,inreg);

  inreg.varsta:=70;

  seek(f1,inreg);

  close(f1)

end.

Cum putem șterge una sau mai multe înregistrări ale fișerului? În practică, pentru aceasta se poate proceda în două feluri:
• Înregistrările se șterg fizic;
• Înregistrările se șterg logic.

Ștergerea fizică
nu este posibilă decât dacă prin a crea un nou fișier care să nu conțină înregistrările care se șterg. Vechiul fișier este șters iar noul fișier capătă numele fișierului inițial (cel din care s-au șters înregistrări). Programul care urmează șterge înregistrarea a patra din fișier.
Din păcate , această modalitate de ștergere cere mult timp (pentru a șterge o înregistrare am creat un alt fișier).

program  ft8;

type inr= record

            nume:string[10];

            varsta:byte

          end;

fisier=file of inr;

var inreg:inr;

    f1,f2:fisier;

    i:integer;

 

begin

  assign(f1,'fdat2');

  assign(f2,'fman');

  reset(f1);

  rewrite(f2);

  for i:=1 to 3 do

  begin

    read(f1,inreg);

    write(f2,inreg)

  end;

  seek(f1,filepos(f1)+1);

  while not eof(f1) do

  begin

    read(f1,inreg);

    write(f2,inreg)

  end;

  close(f1);

  close(f2);

  erase(f1);

  rename(f2,'fdat2')

end.

end.

Ștergerea logică are la bază următorul mecanism: fiecare înregistrare a fișierului în care urmează să se facă ștergeri are un câmp în plus și anume un indicator de ștergere (is). Convenim ca acest câmp să conțină valoarea 1 în situația în care înregistrarea nu este ștearsă și să conțină valoarea 0 în caz contrar. În acest fel , a șterge o înregistrare înseamnă să modificăm câmpul is (va lua valoarea 0) . Această modalitate de ștergere este mult mai rapidă , dar prezintă dezavantajul că înregistrările șterse rămân pe suport (se ocupă spațiu).
Următoarele trei programe creează , listează și efectuează ștergeri pentru un fișier.
Observație: orice program care lucrează cu un astfel de fișier trebuie să testeze, pentru fiecare înregistrare, valoarea indicatorului de ștergere (nu vor fi supuse prelucrării înregistrări șterse).

program  ft9;

type inr=record

           is:byte;

           nume:string[10];

           varsta:byte;

         end;

fisier=file of inr;

 

var inreg:inr;

    f1:fisier;

    c:char;

 

begin

  assign(f1,'fdat2');

  rewrite(f1);

  repeat

    write('nume');

    readln(inreg.nume);

    write('varsta');

    readln(inreg.varsta);

    inreg.is:1;

    write(f1,inreg);

    write('continuati ? (y/n) ');

    readln(c);

  until c='n';

  close(f1)

end.

 

 

program  ft10;

type  inr= record

             is:byte;

             nume:string[10];

             varsta:byte

           end;

fisier=file of inr;

var inreg:inr;

    f1:fisier;

    c:char;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  while not eof(f1) do

  begin

    read(f1,inreg);

    if  inreg.is=1 then  writeln(inreg.nume, ' ',inreg.varsta)

  end;

  close(f1)

end.

 

 

program  ft11;

type inr= record

            is:byte;

            nume:string[10];

            varsta:byte;

          end;

fisier=file of inr;

var inreg:inr;

    f1:fisier;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  seek(f1,5);

  read(f1,inreg);

  seek(f1,filepos(f1)-1);

  inreg.is:=0;

  write(f1,inreg);

  close(f1)

end.

Se consideră un fișier. Se cere ca acesta să fie sortat crescător (sau descrescător) după valorile unui anumit câmp. În programul care urmează , fișierul se sortează după valoarea câmpului nume (sortarea alfabetică).
Pentru a realiza sortarea , se folosește „metoda bulelor” . În esență , se parcurge fișierul de mai multe ori și se inversează înregistrările alăturate care nu sunt în ordinea cerută . Dacă la o parcurgere s-a efectuat cel puțin o inversare , fișierul se parcurge din nou.

program  ft12;

type  inr= record

             nume:string[10];

             varsta:byte

           end;

fisier=file of inr;

var f1:fisier;

    i:integer;

    inv:boolean;

    inr1,inr2:inr;

begin

  assign(f1,'fdat2');

  reset(f1);

  repeat

    inv:=false;

    for i:=0 to filesize(f1)-2 do

    begin

      seek(f1,i);

      read(f1,inr1,inr2);

      if inr1.nume>inr2.nume then

      begin

        seek(f1,i);

        write(f1,inr2,inr1);

        inv:=true

      end

    end

  until not inv;

  close(f1)

end.


UN EXEMPLU DE LUCRU CU UN FIȘIER


Se cere să se scrie un program care să permită prelucrarea pe calculator a rezultatelor unui examen de admitere la liceu. Acest program trebuie să creeze , să actualizeze și să listeze un fișier ce conține rezultatele obținute de fiecare candidat. Fiecare înregistrare trebuie să conțină:
• Numele elevului;
• Nota obținută la proba 1;
• Nota obținută la proba 2;
• Media generală.
Această aplicație urmărește să de4monstreze complexitatea programelor care se folosesc în practică. Desigur, există limbaje specializate pentru scrierea aplicațiilor de acest gen (DBASE, FOXPRO).
Programul realizează următoarele:
• Crearea fișierului;
• Adăugarea unor înregistrări;
• Ștergere de înregistrări;
• Modificarea înregistrărilor;
• Sortarea fișierului în ordinea descrescătoare a mediilor;
• Listarea lui pe monitor, în vederea verificării informațiilor;
• Listarea la imprimantă a candidaților admiși.
În afara acestora , programul trebuie să realizeze și alte operații cum ar fi:
• Listarea la imprimantă a candidaților respinși;
• Listarea pe monitor atât a candidaților admiși, cât și a celor respinși.

Schema de principiu a aplicației:



Apelul procedurilor care realizează funcțiile specifice este realizat de procedura APLIC, prezentă în cadrul unității de program FIS. Aceasta creează un meniu prin utilizarea unității MENU. În afara procedurilor care realizează funcțiile specificate, mai este apelată o procedură numită DIALOG 1.

Procedura DIALOG 1 cere numele fișierului de candidați cu care se va lucra în continuare. Procedura testează dacă acest fișier se găsește sau nu pe suportul magnetic. Rezultatul este afișat pe ecran . Pentru aceasta se procedează astfel:
• Se încearcă deschiderea pentru citire a fișierului cu nume specificat (opțiunile de compilare {$i/} și {$I+} ce încadrează procedura RESET au rolul de a inhiba o eventuală oprire a unui fișier inexistent iar funcția IORESULT returnează valoarea 0 în cazul unei operații de intrare / ieșire reușite, altfel returnează o valoare diferită de 0).
• În funcție de reușita sau nu a operației, se afișează mesajul corespunzător;
• În cazul în care fișierul a fost deschis spre citire (deci se găsește pe suport) este închis;
• Numele fișierului este reținut în variabila nume_f, variabilă la care au acces toate procedurile din unitatea de program.

Procedura CREARE are rolul de a crea fișierul cu candidați. Numele său este preluat din variabila nume_f. Pentru aceasta se procedează astfel:
• Pentru citirea informațiilor de pe ecran se folosește procedura CITIRE_TAST;
• Media generală care este conținută în înregistrare se calculează înainte de a scrie înregistrarea în fișier;
• După fiecare înregistrare , utilizatorul este întrebat dacă dorește sau nu să continue.

Procedura CITIRE_TAST apelează repetitiv procedura INTERFATA (spre a citi datele de pe ecran) până când utilizatorul consideră că datele tastate sunt corecte.

Procedura INTERFATA realizează următoarele:
• Șterge ecranul;
• Afișează numărul înregistrării curente (care urmează să fie citită);
• Afișează în locuri fixe numele informațiilor ce urmează a fi citite;
• Citește în locuri fixe informațiile , procedând în felul următor:
o Citirea propriu-zisă se face în variabile de tip string;
o În cazul notelor, care sunt numere reale, citirea se face în mod repetitiv până când sunt îndeplinite simultan condițiile:
- Conținutul tipului string în care au fost citite se poate converti fără eroare în variabile reale (pentru aceasta se utilizează procedura VAL cu cei trei parametri: numele variabilei de tip string, numele variabilei reale în care urmează să se facă conversia și numele variabilei care reține dacă operația a reușit , caz în care ia valoarea 0, astfel ia o valoare diferită de 0);
- Notele tastate sunt mai mari ca 0 și mai mici sau egale cu 10;
- Șirul citit nu este vid (datorită apăsării din greșeală a tastei RETURN).

Procedura ADAUGARE are rolul de a adăuga la sfârșitul fișierului una sau mai multe înregistrări. Se procedează în felul următor:
• Se deschide fișierul pentru citire ;
• Se află numărul de înregistrări ale fișierului (pentru aceasta se utilizează funcția FILESIZE);
• Cu ajutorul funcției SEEK se face poziționarea după ultima înregistrare (pe marcajul sfârșitului de fișier);
• Cu ajutorul procedurii CITIRE_TAST se citesc informațiile de la tastatură;
• După calculul mediei generale, înregistrarea este scrisă;
• Procedeul continuă până când utilizatorul , care este întrebat de fiecare dată dacă dorește sau nu acest lucru, răspunde negativ.

Procedura STERGERE are rolul de șterge o înregistrare. În acest scop se procedează astfel:
• Se cere numele candidatului ce urmează a fi șters;
• Întrucât în fișiere secvențele nu există o instruncțiune capabilă de a șterge o înregistrare, fișierul de unde urmează a fi ștearsă înregistrarea este citit iar fiecare înregistrare diferită de cea care urmează a fi ștearsă este trecută într-un fișier de manevră; în final , fișierul inițial este șters iar fișierul de manevră capătă numele inițial;
• În plus, dacă este găsită înregistrarea ce urmează a fi ștearsă , se semnalează acest lucru într-o variabilă booleană iar la sfârșit utilizatorul știe dacă acțiunea de ștergere a fost încununată de succes sau nu.
Funcția POS are rolul de a căuta un subșir și în cazul în care acesta este găsit ia o valoare diferită de 0 , în caz contrar ia valoarea 0. Această funcție este folosită în procedură pentru a căuta numele candidatului în cadrul variabilei ce reține numele din înregistrarea citită (în felul acesta se evită cerința suplimentară ca atât numele prezent în cadrul înregistrării cât și numele tastat în procedură să ocupe aceleași poziții în cadrul variabilelor ce le corespund).

Procedura MODIFICARE are rolul de a modifica o înregistrare din cadrul fișierului. Se procedează astfel:
• Se cere numele candidatului a cărui înregistrare urmează a fi modificată;
• Se parcurge fișierul până când este găsită înregistrarea corespunzătoare sau până când a fost citit tot fișierul;
• Dacă înregistrarea a fost găsită , poziționăm pointer-ul asupra ei (utilizând funcția FILEPOS , care furnizează numărul de înregistrări deja citite și procedura SEEK pentru poziționare);
• Se citesc noile informații corespunzătoare ei prin intermediul procedurii CITIRE_TAST , informații care sunt trecute în locul vechii înregistrări;
• Se semnalează utilizatorului dacă înregistrarea cu numele citit în procedură nu a fost găsită.

Procedura SORTARE are rolul de a sorta fișierul de candidați în ordinea descrescătoare mediilor. Pentru aceasta se folosește o metodă cunoscută sub numele de metoda bulelor. Algoritmul este următorul:
• Se compară media generală a candidatului care se găsește în prima înregistrare cu media generală a candidatului ce se găsește în a doua înregistrare din fișier iar în cazul în care prima medie este mică decât a doua cele două înregistrări se inversează;
• Se compară în mod asemănător și se inversează dacă este cazul înregistrările a doua cu a treia ;
• Se compară și se inversează dacă este cazul penultima și ultima înregistrare din fișier;
• Dacă în timpul parcurgerii fișierului s-a efectuat cel puțin o interschimbare de înregistrări , se reia parcurgerea fișierului , în caz contrar algoritmul se încheie iar înregistrările sale sunt sortate.

Procedura LISTARE_P listează pe monitor fișierul de candidați:
• Utilizează procedura CAPTAB ce are rolul de a tipări capul de tabel (întrucât procedura CAPTAB are posibilitatea de a tipări capul de tabel atât pe monitor cât și la imprimantă , aceasta este apelată ca un parametru ce ia valoarea 0 pentru monitor și valoarea 1 pentru imprimantă);
• Pentru a evita consecințele neplăcute ale fenomenului de defilare pe monitor , se cere numărul de rânduri ce vor fi prezentate simultan pe ecran (număr ce include și cele 4 rânduri ocupate de capul de tabel și titlul raportului);
• După fiecare ecran listat utilizatorul este întrebat dacă dorește să continue sau nu listarea.
Listarea la imprimantă a candidaților admiși se face prin apelarea a trei proceduri:
• DIALOG
• ADMRESP
• LISTARE_A.
Procedura DIALOG îi cere utilizatorului numărul de locuri puse la dispoziția candidaților. Dialogul cu utilizatorul se face luând măsurile de protecție următoare:
• De a nu introduce un număr greșit (pentru siguranță , utilizatorul este întrebat dacă ce a introdus este corect sau nu);
• Dea inhiba o eventuală întrerupere de program ca urmare a introducerii unei litere în locul unei cifre.

Procedura ADMRESP calculează numărul de candidați admiși și numărul de candidați respinși. Pentru ca un candidat să fie admis este necesar să îndeplinească următoarele condiții:
• Să aibă o medie generală mai mare sau egală cu 5;
• În ordinea descrescătoare a mediilor să aibă o medie care se încadrează în numărul de locuri , sau egală cu cea a candidatului ultim admis;
• Numărul de candidați respinși se calculează ca diferența dintre numărul candidaților (numărul de înregistrări din fișier) și cei admiși.
Procedura LISTARE_A are rolul de a lista la imprimantă candidații admiși. Ea cere utilizatorului să furnizeze numărul de rânduri ce se vor tipări pe o pagină:
• Se tipărește capul de tabel utilizând procedura CAPTAB cu parametrul 1 (pentru a lista capul de tabel și titlul la imprimantă);
• Informațiile corespunzătoare fiecărei înregistrări sunt convenite în variabile de tip string (cu procedura STR ce are doi parametri: numele variabilei sursă și numele variabilei destinație), iar acestea sunt inserate în variabile de tip string rând (cu ajutorul procedurii INSERT cu trei parametri și anume variabila destinație , variabila sursă și lungimea pe care să se facă transferul );
• Variabila rând este tipărită;
• După fiecare pagină se așteaptă introducerea noii pagini după care procesul se reia până la tipărirea tuturor candidaților;

Procedura CAPTAB scrie titlul și capul de tabel pe monitor sau la imprimantă, după parametrul cu care a fost apelată (0 sau1).Pentru scrierea titlului se apelează procedura TITLU cu același parametru (0 și 1) pentru monitor sau imprimantă.
Programul utilizator care lansează această aplicație este următorul:

program  examen;

uses  fis;

 

begin

  aplic

end.

Iată și unitatea de program:
 

unit fis;

 

interface

uses  crt, menu,util;

procedure  aplic;

 

implementation

type inr= record

            nume:string[20];

            nota1,nota2,media:real

          end;

var n1,n2:real;

    nume,nume_f:string[20];

    tit:string[40];

    buf:string[5];

    c_er,inr_loc,nr_adm,nr_resp:integer;

    inreg:inr;

    f,h:file of inr;

    imprim:text;

procedure  interfata;

begin

  window(1,1,80,25);

  textbackground(negru);

  textcolor(alb);

  clrscr;

  cursor(true);

  gotoxy(25,1);

  write('inregistrarea ',i);

  gotoxy(3,3);

  write('nume candidat');

  gotoxy(3,5);

  write('nota proba 1');

  gotoxy(3,7);

  write('nota proba 2');

  repeat

    gotoxy(20,3);

    clreol;

    readln(nume)

  until nume<>'';

  repeat

    gotoxy(20,5);

    clreol;

    readln(buf);

    val(buf,n1,c_er)

  until (c_er=0) and (buf<>'') and (n1>=0 and (n1<=10;

  repeat

    gotoxy(20,7);

    clreol;

    readln(buf);

    val(buf,n2,c_er)

  until (c_er=0) and (buf<>'') and (n2>=0) and (n2<=10);

end;

 

procedure citire_tast;

var c:char;

begin

  repeat

    interfata;

    gotoxy(3,20);

    write('corect (y/n)');

    gotoxy(17,20);

    c:=readkey;

  until c<>'n'

end;

 

procedure  creare;

var c:char;

begin

  rewrite(f);

  i:=0

  repeat

    i:=i+1;

    citire_tast;

    inreg.nume:=nume;

    inreg.nota1:=n1;

    inreg.nota2:=n2;

    inreg.media:=(n1+n2)/2;

    write(f,inreg);

    gotoxy(3,21);

    write('continuati (y/n) ');

    gotoxy(20,21);

    c:=readkey;

  until c='n';

  close(f)

end;

 

procedure dialog1;

var  c:char;

begin

  textbackground(negru);

  textcolor(alb);

  clscr;

  gotoxy(10,4);

  write('numele fisierului');

  repeat

    gotoxy(30,4);clreol;

    read(nume_f);

    gotoxy(10,20);

    write('corect (y/n)');

    gotoxy(25,20);

    readln;

    c:=reakey;

    delline

  until c='y';

  assign(f,nume_f);

  {$i-} reset(f); {$i+}

  gotoxy(10,20);

  if ioresult=0 then

  begin

    close(f);

    gotoxy(10,20);

    write('fisierul exista ');

  end

  else write('fisierul trebuie creat ');

  delay(2000);

end;

 

procedure  adaugare;

var  c:char;

begin

  assign(f,nume_f);

  reset(f);

  i:=filesiye(f);

  seek(f,i);

  repeat

    i:=i+1;

    citire_tast;

    inreg.nume:=nume;

    inreg.nota1:=n1;

    inreg.nota2:=n2;

    inreg.media:=(n11+m2)/2;

    write(f,inreg);

    gotoxy(3,21);

    write('continuati (y/n) ' );

    gotoxy(20,21);

    c:=readkey;

  until c='n';

  close(f);

end;

 

procedure stergere;

var c:inr;

    num:string[80];

    gasit:boolean;

    a:string[1];

begin

  window(1,1,80,25);

  textbackground(negru);

  textcolor(alb);

  clrscr;

  write('numele  candidatuluipe care il stergeti : ');

  readln(num);

  assign(f,nume_f);

  reset(f);

  assign(h,'fman.dat');

  rewrite(h);

  gasit:=false;

  while not eof(f) do

  begin

    read(f,c);

    if pos(num,c.nume)<>0 then gasit:=true

                          else  write(h,c);

  end;

  if gasit   then writeln ('succes-inregistrare stearsa')

             else  writeln ('inregistrare negasita ');

  close(f);

  close(h);

  erase(f);

  rename*(h,nume_f);

  gotoxy(1,20);

  writeln('apasati o tasta...');

  a:=readkey

end;

 

procedure  modificare;

var  c:inr;

     num:string[80];

     gasit:boolean;

     a:string[1];

begin

  window(1,1,89,25);

  textbackground(negru);

  textcolor(alb);

  clrscr;

  cursor(true);

  assign(f,nume_f);

  reset(f);

  write('numele candidatului ce urmeaza a fi modificat  ?');

  readln(num);

  gasit:=false;

  while (not eof(f)) and (not gasit)do

  begin

    read(f,c);

    if num=c.nume then gasit:=true;

  end;

  i:=filepos(f);

  if gasit then

  begin

    citire_tast;

    c.nume:=nume;

    c.nota1:=n1;

    c.nota2:=n2;

    c.media:=(n1+n2)/2;

    seek(f,i-1);

    write(f,c);

  end

  else  writeln('nu exista aceasta inregistrare ');

  writeln(apasati o tasta');

  a:=readkey;

  close(f);

end;

 

procedure sortare;

var c,d:inr;

    n,j:integer;

    inversari:boolean;

begin

  assign(f,nume_f);

  reset(f);

  n:=filesize(f);

  repeat

    inversari:=false;

    for j:=0 to n-2 do

    begin

      seek(f,j);

      read(f,c);

      read(f,d);

      if d.media>c.media then

      begin

        seek(f,j);

        write(f,d);

        write(f,c);

        inversari:=true

      end

    end

  until not invarsari;

  close(f)

end;

 

procedure  titlu(t:integer);

var c:char;

begin

  if t=0 then

  begin

    clrscr;

    gotoxy(14,1);

    write(tit)

  end

  else

  begin

    writeln('deschideti imprimanta');

    writeln('apasati o tasta');

    c:=readkey;

    repeat

      {$i-}

      writeln(imprim,tit);

      {$i+}

    until ioresult=0

  end;

end;

 

procedure captab(t: integer);

var a,b:string[60];

begin

  a:='***********************************************************';

  b:='*nc*          nume elev     *  nota1   * nota2  *  media  *';

  titlu(t);

  if t=0 then

  begin

    gotoxy(1,2);write(a);

    gotoxy(1,3);write(b);

    gotoxy(1,4);write(a);

  end

  else

  begin

    a:='    '+a;

    b:='    '+b;

    writeln(imprim,a);

    writeln(imprim,b);

    writeln(imprim,a);

  end

end;

 

procedure  listare_p;

var nr_rand,j:integr;

    c:string[1];

begin

  tit:='lista de verificare';

  repeat

    window(1,1,80,25);

    textbackground(negru);

    textcolor(alb);

    clrscr;

    cursor(true);

    write('cate randuri sa se tipareasca pe ecran ? ');

    readln(nr_rand)

  until (nr_rand>=4) and (nr_rand<=20);

  assign(f,nume_f);

  reset(f);

  c:='y';

  i:=1;

  while (not eof(f)) and (c<>'n') do

  begin

    j:=5;

    captab(0);

    while (j<=nr_rand) and (not eof(f)) and (c<>'n') do

    begin

      read(f,inreg);

      gotoxy(2,j); write(i);

      gotoxy(5,j); write(inreg.nume);

      gotoxy(26,j); write(inreg.nota1:2:2);

      gotoxy(34,j); write(inreg.nota2:2:2);

      gotoxy(42,j); write(inreg.media:2:2);

      j:=j+1;

      i:=i+1

    end;

    gotoxy(1,21);

    write('continuati? (y/n) ');

    gotoxy(20,21);

    readln(c);

  end;

  close(f)

end;

 

procedure listare_a;

var c:char;

    n,j,k:integer;

    rand :string[60];

    man:string[3];

    man1:string[5];

 

begin

  if nr_adm<>0 then

  begin

    clrscr;

    assign(f,nume_f);

    reset(f);

    repeat

      write('cate randuri pe pagina (5..55) ');

      {$i-} readln(n) {$i+}

    until (ioresult=0) and (n>5) and(n<=55);

    j:=1;

    assign(imprim,'prn');

    rewrite(imprim);

    repeat

      k:=5;

      tit:='candidati admisi';

      captab(1);

      repeat

        read(f,inreg);

        rand:='

        man:='   ';

        man1:='    ';

        str(j,man);

        insert(man,rand,2);

        insert(inreg.nume.rand,5);

        str(inreg.nota1:2:2,man1);

        insert(man1,rand,26);

        str(inreg.nota2:2:2,man1);

        insert(man1,rand,34);

        str(inreg.media:2:2,man1);

        insert(man1,rand,42);

        rand:='    '+rand;

        writeln(imprim,rand);

        j:=j+1;

        k:=k+1

      until (k=n) or ( j=nr_adm+1)

    until j=nr_adm+1;

    close(f);

    close(imprim)

  end

end;

 

procedure  dialog;

var c:char;

begin

  window(1,1,80,25);

 

  textbackground(negru);

  textcolor(alb);

  cursor(true);

  clrscr;

  repeat

    repeat

      write('cate locuri sunt ? ');

      {$i-} readln(nr_loc);{$i+}

    until ioresult=0;

    write (,corect (y/n) ');

    readln(c);

  until c='y'

end;

 

 

procedure  admresp;

var c:inr;

    n:real;

    d:char;

begin

  nr_adm:=0;

  assign(f,nume_f);

  reset(f);

  repeat

    read(f,c);

    if c.media>=5 then  nr_adm:=nr_adm+1

  until eof(f) or (c.media>5) or(nr_adm=nr_loc);

  n:=c.media;

  while (c.media=n) and (n>=5) and (not eof(f) do

  begin

    read(f,c);

    if c.media=n then nr_adm:=nr_adm+1;

  end;

  nr_resp:=filesize(f)-nr_adm;

  clrscr;

  writeln('nr_adm=',nr_adm);

  writeln('nr_resp+',nr_resp);

  close(f);

  writeln('apasati o tasta ');

  d:=readkey

end;

 

procedure  aplic;

var a:men;

    b:string;

begin

  dialog1;

  textbackground(negru);

  clrscr;

  b:='  CREARE   ADAUGARE   STERGERE ';

  b:=-b+'MODIFICARE  SORTARE ';

  b:=b+'  LIST-PROB  LIST-ADMS ';

  a.deschidm(2,1,77,1,rosu,verde,0,11,0,b,false);

  repeat

    if a.selectat then a. salvez;

    case a.citxb of

      1: creare;

      12: adaugare;

      23: stergere;

      34: modificare;

      45: sortare;

      56: listare_p;

      67: begin

            dialog;

            admresp;

            listare_a

          end

    end {case};

    a.restaurezm

  until a.inchis

end;

end.


FIȘIERE FĂRĂ TIP


Fișierele fără tip sunt constituite din blocuri de lungime fixă, motiv pentru care acestea se mai numesc și fișiere cu prelucrare la nivel de bloc. În cadrul blocurilor, informația se scrie direct sub forma în care apare în memoria internă, fără a se converti.
Blocurile se numerotează cu numere cuprinse între 0 și n. Din acest motiv se poate folosi procedura SEEK în forma cunoscută și ea are rolul de a poziționa pointer-ul pe un anume loc. O variabilă de tip fișier fără tip se declară cu ajutorul cuvântului cheie FILE.
Exemplu: a:file;
Asignarea fișierului la suportul extern se face cu ajutorul procedurii ASSIGN, exact cum se procedează și în cazul celorlalte tipuri de fișiere.
Deschiderea fișierelor pentru a creare se realizează cu ajutorul procedurii REWRITE. Forma generală a acestei proceduri este:
REWRITE (var nume fișier,[număr de octeți pentru un bloc])
În cazul în care al doilea parametru este absent, blocul va avea o lungime standard de 128 octeți.
Scrierea blocurilor se face cu ajutorul procedurii BLOCKWRITE care are următoarea formă generală :
BLOCKWRITE (nume fișier, nume variabilă în care se face citirea, număr de blocuri care se citesc ,[variabila ce re’ine numărul de blocuri efectiv citite]).
În cazul în care ultimul parametru este absent se citesc mai puține blocuri decât au fost solicitate , procedura se termină cu eroare de intrare / ieșire.

Programul care urmează creează un fișier fără tip cu n înregistrări.

program  fft1;

 type inreg= record

               nume:string[16];

               varsta:integer;

             end;

 var f:file;

     inr:inreg;

     n,i:integer;

 

 begin

   assign(f,'fblk');

   write('n');

   readln(n);

   rewrite(f,19);

   for i:=1 to n do

   begin

     write('nume=');

     readln(inr.nume);

     write('varsta=');

     readln(inr.varsta);

     blockwrite(f,inr,1);

     end;

     close(f)

 end.

Deschiderea pentru citire (sau scriere, în caz de actualizare a fișierului) se face cu ajutorul procedurii RESET care are forma de apel:
RESET (variabila fișier,[număr de octeți pe care a fost scris blocul]).
Citirea unui bloc se face cu ajutorul procedurii BLOCKREAD, în care:
BLOCKREAD (variabila fișier, variabila unde se face citirea , numărul de blocuri care se vor citi, [variabila care reține numărul de blocuri efectiv citite]).
Sfârșitul de fișier se testează cu ajutorul funcției booleene EOF, la fel ca și la celelalte tipuri de fișiere.

program   fft2;

 type  inreg= record

                nume:string[16];

                varsta:integer;

              end;

 var f:file;

     inr:inreg;

 

 begin

   assign(f,'fblk');

   reset(f,19);

   while not eof(f) do

   begin

     blockread(f,inr,1);

     writeln(inr.nume, ' ', inr.varsta)

   end;

   close(f)

 end.

Nu este obligatoriu să se citească un fișier fără tip într-o variabilă de tip record. Blocul se memorează începând cu o anumită variabilă , pe toată lungimea lui (acolo trebuie să se găsească alte variabile în care să se facă memorarea). Un exemplu, în acest sens , îl constituie programul următor (listează același fișier).

program  fft3;

 {$a-}

 var f:file;

     nume:string[16];

     varsta:integer;

 

 begin

   assign9f,'fblk');

   reset(f,19);

   while not eof(f) do

   begin

     blockread(f,nume,1);

     writeln(nume,'  ', varsta)

   end;

   close(f)

 end.

compilatorul rezervă spațiu pentru variabile în memoria internă, după un anumit mecanism. Astfel, pentru o variabilă de tip integer se rezervă doi octeți la o adresă multiplu de 2. Din acest motiv, apar octeți neocupați de variabile, care însă sunt folosiți la citirea blocului. În acest fel, este posibil să nu regăsim rezultatele pe care le așteptăm. Rolul opțiunii de compilare este acela de a comanda compilatorul ca toate variabilele să fie adrese multiple de 1 (deci nu rămân octeți nerezervați).
Și pentru aceste fișiere poate fi folosită funcția FILESIZE la fel ca la cele cu tip. Toate operațiile de actualizare se fac la fel cala fișierele cu tip.




NOTA IMPORTANTA:
ARTICOLELE PUBLICATE IN PAGINA DE REFERATE AU SCOP DIDACTIC SI SUNT ELABORATE IN URMA UNEI DOCUMENTARI SUSTINUTE. ESTE STRICT INTERZISA PRELUAREA ARTICOLELOR DE PE SITE SI PREZENTAREA LOR LA ORELE DE CURS. Referatele din aceasta sectiune sunt trimise de diferiti colaboratori ai proiectului nostru. Referatele va sunt prezentate pentru COMPLETAREA STUDIULUI INDIVIDUAL, si va incurajam si sustinem sa faceti si voi altele noi bazate pe cercetari proprii.

   Daca referatele nu sunt de ajuns, va recomandam pagina de download gratuit, unde veti gasi prezentari PowerPoint, programe executabile, programe pentru bacalaureat, teze nationale, etc. 

 

 

Home | BAC/Teze | Biblioteca | Referate | Games | Horoscop | Muzica | Versuri | Limbi straine | DEX

Modele CV | Wallpaper | Download gratuit | JOB & CARIERA | Harti | Bancuri si perle | Jocuri Barbie

Iluzii optice | Romana | Geografie | Chimie | Biologie | Engleza | Psihologie | Economie | Istorie | Chat

 

Joburi Studenti JOB-Studenti.ro

Oportunitati si locuri de munca pentru studenti si tineri profesionisti - afla cele mai noi oferte de job!

Online StudentOnlineStudent.ro

Viata in campus: stiri, burse, cazari, cluburi, baluri ale bobocilor - afla totul despre viata in studentie!

Cariere si modele CVStudentCV.ro

Dezvoltare personala pentru tineri - investeste in tine si invata ponturi pentru succesul tau in cariera!

 

 > Contribuie la proiect - Trimite un articol scris de tine

Gazduit de eXtrem computers | Project Manager: Bogdan Gavrila (C)  

 

Toate Drepturile Rezervate - ScoalaOnline Romania