Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza



























Fisiere in C si C++

Informatica











ALTE DOCUMENTE

Modul de setare al programului Direct Connect
Utilizarea functionalitatilor avansate ale limbajului PHP - Accesul la bazele de date relationale
Yahoo!Messenger
Microsoft Word
Windows xp Profesional
windows tunning
Windows XP Pro - Rezolvarea accesului in retea
Alocarea dinamica
Ce calculator cumparam?
Echipamente de retea




Fisiere in C si C++

1.  Operatii de intrare / iesire.

                In limbajul C nu exista instructiuni de intrare / iesire. Operatiile de intrare / iesire sunt realizate prin apelul unor functii ale sistemului de operare. Acestea sunt implementate prin functii, sub o forma compatibila pentru diversele sisteme de operare (sunt portabile).

                Un fisier este o colectie ordonata de articole (înregistrari) pastrate pe un suport extern de memorie si identificate printr-un nume.

                Pentru fisierul standard de intrare , datele sunt introduse de la tastatura.

                Pentru  fisierul standard de iesire , rezultatele sunt afisate pe  terminalul standard de iesire.

                Mesajele de eroare se afiseaza în fisierul standard de eroare .

                Fisierul are un articol care marcheaza sfârsitul fisierului. Pentru fisierul standard de intrare de la tastatura, sfârsitul de fisier, pentru sistemele de operare DOS si Windows se genereaza prin Ctrl-Z (pentru  Unix - prin Ctrl-D).

                Operatiile specifice prelucrarii fisierelor sunt.

·        deschiderea unui fisier

·        închiderea unui fisier

·        creerea unui fisier

·        citirea de articole din fisier (consultarea fisierului)

·        actualizarea  (sau modificarea) fisierului

·        adaugare de articole la sfârsitul fisierului

·        pozitionarea în fisier.

·        stergerea unui fisier

·        schimbarea numelui unui fisier

 Prelucrarea fisierelor se face pe doua niveluri:

-          nivelul inferior, 16216r1716q care apeleaza direct la sistemul de operare.

-          nivelul superior, care utilizeaza structuri speciale FILE

Functiile de pe nivelul superior nu asigura o independenta totala fata de sistemul de operare.

Functiile standard de intrare / iesire au prototipurile în fisierul antet <stdio.h>.

2.  Fisiere text si fisiere binare

         Într-un fisier text, toate datele sunt memorate ca siruri de caractere, organizate pe linii, separate între ele prin marcajul sfârsit de linie '\n' .

         Într-un fisier text spatiul de memorare pe disc nu este folosit în mod eficient pentru datele numerice (astfel întregul 12345 ocupa 5 octeti).

         Într-un fisier binar, datele sunt pastrate în formatul lor intern (2 octeti pentru int, 4 octeti pentru float, etc).

         La fisierele text marcajul de sfârsit de fisier (caracterul 0X1A) exista fizic în fisier. La întâlnirea acestui caracter functia fgetc() întoarce EOF (-1). Marcajul de sfârsit de fisier se genereaza de la tastatura prin Ctrl-Z.

În cazul  fisierelor binare, marcajul de sfârsit de fisier nu exista fizic în fisier, ci este generat de functia fgetc().

În MSDOS (si în Unix), la nivelul liniei de comanda intrarile si iesirile standard pot fi redirectate în fisiere disc, fara a opera nici o modificare la nivelul programului. Astfel:

<  redirecteaza intrarea standard catre fisierul specificat

>  redirecteaza iesirea standard catre fisierul specificat

Fisierul standard de eroare  nu poate fi redirectat.

Fisierul specificat poate fi:

con - pentru consola sistem (tastatura, respectiv ecranul)

prn - pentru imprimanta paralela

com1 - pentru interfata seriala de date

nume_fisier - pentru un fisier disc

NUL - pentru perifericul nul.

Exemple:

> test.exe > prn           redirecteaza iesirea programului la imprimanta

> test.exe < f1.dat > f2.dat   redirecteaza atât intrarea cât si iesirea programului

3.  Accesul la fisiere.

         Fisierele disc si fisierele standard sunt gestionate prin pointeri la structuri specializate FILE, care se asociaza fiecarui fisier pe durata prelucrarii.

Fisierele standard au pointerii predefiniti: stdin, stdout, stderr, stdprn, stdaux.

Declararea unui pointer la fisier se face prin:

FILE *pf;

1.       deschiderea unui fisier:

Înainte de a fi prelucrat, un fisier trebuie sa fie deschis. Prin deschidere:

-          se asociaza unui nume de fisier un pointer la fisier

-          se stabileste un mod de acces la fisier

Pentru deschiderea unui fisier se foloseste functia cu prototipul:

FILE *fopen(char *nume_fisier, char *mod_acces);

Prin deschiderea unui fisier se stabileste o conexiune logica între fisier si variabila pointer si se aloca o zona de memorie (buffer) pentru realizarea mai eficienta a operatiilor de intrare / iesire. Functia întoarce:

-          un pointer la fisier, în caz ca deschiderea fisierului se face în mod corect

-          NULL daca fisierul nu poate fi deschis.

Vom considera mai întâi doua moduri de acces :

-          citire  (sau consultare)  "r" - citirea dintr-un fisier inexistent va genera eroare

-          scriere (sau creare) "w"  - daca fisierul exista deja, el va fi sters

Fisierele standard nu trebuiesc deschise.

Redirectarea unui fisier deschis poate fi realizata cu:

FILE* freopen(char* nume, char* mod, FILE* flux));

Fisierul deschis este închis si este deschis un nou fisier având ca sursa fluxul, numele si modul de acces specificati ca parametri. O utilizare importanta o constituie redirectarea fluxului standard de intrare: datele vor fi citite din fisierul specificat, fara a face nici o modificare în program.

2.       închiderea unui fisier

Dupa terminarea prelucrarilor asupra unui fisier, acesta trebuie închis. Un fisier este închis automat la apelarea functiei exit().

int fclose(FILE *pf);

-          functia întoarce 0 la închidere normala si EOF la producerea unui incident

-          fisierele standard nu se închid de catre programator

-          în cazul unui fisier de iesire, se scriu datele ramase nescrise din buffer în fisier, asa ca operatia de închidere este obligatorie

-          în cazul unui fisier de intrare, datele necitite din bufferul de intrare sunt abandonate

-          se elibereaza bufferele alocate

-          se întrerupe conexiunea pointer - fisier

Secventa urmatoare deschide un fisier cu un nume dat si apoi îl închide.

 FILE *pf = fopen("test1.dat", "w");

 fclose(pf);

4. Operatii de intrare - iesire.

Tip fisier

Conversie

Unitate transferata

Functii folosite

Text

fara

Caracter

fgetc(), fputc()

Linie

fgets(), fputs()

cu

Linii

fscanf(). fprintf()

binar

fara

Articol (structura)

fread(), fwrite()

4.1.  operatii de intrare / iesire la nivel de caracter

Scrierea unui caracter într-un fisier se face folosind functia:

int fputc(int c, FILE *pf);

Functia întoarce primul parametru sau EOF, în caz de eroare.

Citirea unui caracter dintr-un fisier se face cu functia:

int fgetc(FILE *pf);

                Functia întoarce ca rezultat urmatorul caracter citit din fisier, convertit în întreg fara semn sau EOF daca s-a citit sfârsit de fisier sau s-a produs o eroare la citire.

Scrieti un program care realizeaza copierea unui  fisier. Numele celor doua fisiere (sursa si destinatie) sunt citite de la terminal.

#include <stdio.h>

/* copierea unui fisier */

void copiere1(FILE *, FILE *);

void main(void)

void copiere1(FILE *d, FILE *s)

4.2.  operatii de intrare / iesire pentru siruri de caractere

char *fgets(char *s, int n, FILE *pf);

-          citeste caractere din fisierul cu pointerul pf, pâna la întâlnirea primului caracter '\n' (cel mult n-1 caractere)  în tabloul s; pune la sfârsit '\n'  si '\0'

-          întoarce s sau NULL la întâlnire sfârsit de fisier sau la eroare

                Scrieti o functie care simuleaza functia fgets().

char  *fgets(char *s, int n, FILE *pf)

int fputs(char *s, FILE *pf);

-          copiaza sirul în fisierul de iesire

-          nu copiaza terminatorul de sir '\0'

-          întoarce un rezultat nenegativ (numarul de caractere scrise în fisier), sau EOF la producerea unei erori

                Scrieti o functie care simuleaza functia fputs().

int fputs(char *s, FILE *pf)

  return (ferror(pf)) ? EOF: n;

}

                Copierea unui fisier folosind functii orientate pe siruri de caractere are forma:

#define MAX 100

void copiere2(FILE *d, FILE *s)

                Revenim acum asupra modurilor de acces la disc. Sunt posibile urmatoarele situatii:

1.        fisierul nu exista; dorim sa-l creem si sa punem informatii în el

-         "w"  - deschidere pentru scriere, noile scrieri se fac peste cele vechi

2.        fisierul exista deja; dorim sa extragem informatii din el

-         "r"  - deschidere pentru citire, fisierul trebuie sa existe deja

-    "r+"  - citire si scriere ;  fisierul trebuie sa existe 

3.        fisierul exista deja; dorim sa adaugam informatii la el, pastrând informatiile deja existente

-    "a"  - deschidere pentru adaugare,  toate scrierile se adauga la sfârsitul fisierului existent sau nou creat

-         "a+" - citire si adaugare; daca fisierul nu exista, el va fi creat

4.        fisierul exista deja; dorim sa punem alte informatii în el stergând pe cele existente

-    "w+"  - citire si scriere;  daca fisierul exista deja el este sters

Modul de acces binar se specifica cu sufixul "b". Astfel avem: "rb", "w+b"

Modul text este considerat implicit, dar poate fi specificat explicit prin "t".

4.3. operatii de intrare / iesire cu format

-          scrierea cu format

int fprintf(FILE *pf, char *format, lista_expresii);

-          transfera în fisierul specificat, valorile expresiilor, convertite, potrivit formatului în caractere

-          întoarce numarul de caractere scrise, sau o valoare negativa, daca s-a produs o eroare.

Un descriptor de conversie din format începe prin % si poate avea un mai multi specificatori optionali, care preced descriptorul:

%[indicator][latime][.precizie][spec_lung]descriptor;

Indicatorul poate avea una din valorile:

-    aliniere stânga

+   afisare numere cu semn

0         completare stânga cu zerouri

adaugare spatiu înaintea primei cifre, daca numarul este pozitiv

#    %#o  - scrie 0 initial

      %#x  - scrie 0x

      %#e,f,g,E,G - scrie punctul zecimal si nu elimina zerourile la sfârsit

Latimea - numar ce indica latimea minima a câmpului în care se face scrierea.

                * latimea este data de argumentul urmator

Precizia este un numar interpretat diferit în functie de descriptorul folosit.Astfel:

%e, %E, %f - numarul de cifre dupa punctul zecimal

%s -numarul maxim de caractere afisate

%g, %G - numarul de cifre semnificative

%d, %i - numarul minim de cifre (cu zerouri în fata)

Specificarea lungimii se face prin:

H - short   l - long    L - long double

-          citirea cu format

int fscanf(FILE *pf, char *format, lista_adrese_variabile);

-          se citesc date din fisierul pf, sub controlul formatului, initializându-se variabilele din lista

-          functia întoarce numarul de câmpuri citite sau EOF în caz de producere a unui incident la citire sau întâlnire a marcajului de sfârsit de fisier.

4.4. intrari / iesiri în modul de acces binar

-          sunt operatii de transfer (citiri / scrieri) fara conversii

-          se fac la nivel de articol

-          pozitia în fisier este actualizata dupa fiecare citire / scriere

unsigned fread(void *zona, unsigned la, unsigned na, FILE *pf);

-          citeste cel mult na articole, de lungime la fiecare, din fisierul pf în zona

-          întoarce numarul de înregistrari citite sau 0 în caz de eroare sau sfârsit de fisier

unsigned fwrite(void *zona, unsigned la, unsigned na, FILE *pf);

-          scrie na articole de lungime la, din zona în fisierul pf

-          întoarce numarul de articole scrise.

Pentru a copia un fisier binar (sau text) folosind functiile fread() si fwrite() vom considera lungimea articolului 1 octet.

void copiere3(FILE * d, FILE * s)

5. Operatii pentru fisiere cu acces direct.

5.1. Pozitionarea în fisier

int fseek(FILE *pf, long depl, int orig);

-          modifica pozitia curenta în fisierul cu pointerul pf cu depl octeti relativ la cel de-al treilea parametru orig, dupa cum urmeaza:

·        fata de începutul fisierului, daca orig=0 (sau SEEK_SET)

·        fata de pozitia curenta, daca orig=1 (sau SEEK_CUR)

·        fata de sfârsitul fisierului, daca orig=2 (sau SEEK_END)

-          întoarce rezultatul 0 pentru o pozitionare corecta, si diferit de 0 în caz de eroare.

void rewind(FILE *pf);

realizeaza o pozitionare la începutul fisierului, fiind echivalent cu:

fseek(pf, 0L, SEEK_SET);

long ftell(FILE *pf);

-          întoarce pozitia curenta în fisier, exprimata prin numarul de octeti fata de începutul fisierului

Scrieti o functie care determina numarul de octeti ai unui fisier.

#include <stdio.h>

long FileSize(FILE *pf)

    tratarea erorilor

int feof(FILE *pf);

-          întoarce o valoare diferita de 0, daca s-a detectat marcajul de sfârsit de fisier

int ferror(FILE *pf);

-          întoarce o valoare diferita de 0, daca s-a detectat o eroare în cursul operatiei de intrare / iesire

Fisierul "comenzi.dat" contine articole structuri cu câmpurile:

-denumire produs- un sir de 20 de caractere

-cantitate comandata - o valoare reala.

Fisierul "depozit.dat" este format din articole având câmpurile:

- denumire produs - un sir de 20 de caractere

- stoc si stoc_minim- valori reale

- pret unitar - valoare reala

Sa se actualizeze fisierul de stocuri, prin onorarea comenzilor. O comanda este onorata, daca prin satisfacerea ei, stocul ramas în magazie nu scade sub stocul minim.

Se va creea un fisier "facturi.dat", continând pentru fiecare comanda onorata, denumirea produsului comandat si valoarea comenzii.

Se vor crea de asemeni doua fisiere, unul cu comenzi care nu au fost satisfacute, deoarece produsele erau în cantitati insuficiente, celalalt cu comenzi de produse care nu exista în depozit.

#include <stdio.h>

#include <stdlib.h>

typedef struct comanda;

typedef struct depozit;

typedef struct factura;

void main(void)

;

  if((fd=fopen("depozit.dat","r+b"))==NULL);

  ff=fopen("facturi.dat","wb");

  fc1=fopen("com1.dat","wb");

  fc2=fopen("com2.dat","wb");

  while(1)

          else

            fwrite(&com, sizeof(com), 1, fc1);

          break;

        }

      }

    } while(!gasit && !eof);

    if(!gasit)

      fwrite(&com, sizeof(com), 1, fc2);

  }

  fclose(fc);

  fclose(fd);

  fclose(ff);

  fclose(fc1);

  fclose(fc2);

}

Semnatura

Efect

FILE* fopen(char* nume, char* mod);

deschide fisierul; întoarce pointerul la fisierul deschis sau NULL daca operatia esueaza

int fclose(FILE* pf);

închide fisierul

int fgetc(FILE* pf);

citeste 1 caracter din fisiers întoarce caracterul citit sau EOF

int fputc(char c, FILE* pf);

scrie caracterul în fisier

char* fgets(char* s, int n,

            FILE* pf);

citeste din fisier în s cel mult n-1 caractere,sau pâna la întâlnire '\n', în locul caruia pune '\0'. Întoarce s sau NULL, daca s-a citit EOF.

int fputs(char* s, FILE* pf);

copiaza sirul în fisierul de iesire.Înlocuieste terminatorul '\0' cu '\n'.

int fscanf(FILE* pf, char* format,

             lista_adrese);

citire din fisier sub controlul formatului. Întoarce numarul de câmpuri citite sau EOF, în caz de eroare sau sfârsit de fisier.

int fprintf(FILE* pf, char* format,

             lista_expresii);

scriere în fisier sub controlul formatului. Întoarce numarul de caractere scrise sau valoare negativa în caz de eroare.

int fread(char* zona, int la,

          int na, FILE* pf);

citeste din fisier în zona, na articole de lungime la  fiecare.Întoarce numarul de articole efectiv citite.

int fwrite(char* zona, int la,

          int na, FILE* pf);

scrie în fisier din zona, na articole de lungime la fiecare.Întoarce numarul de articole efectiv scrise.

int fseek(FILE* pf, long depl,

          int orig);

pozitionare cu depl octeti fata de început, pozitia curenta sau sfârsitul fisierului

void rewind(FILE* pf);

pozitionare la începutul fisierului

long ftell(FILE* pf);

determina pozitia curenta în fisier.

int feof(FILE* pf);

întoarce nenul daca s-a detectat sfârsit de fisier

int ferror(FILE* pf);

întoarce nenul daca s-a detectat o eroare în cursul operatiei de intrare / iesire

Fisiere în C++.

                Realizarea functiilor de intrare/iesire în C++  se realizeaza prin intermediul fluxurilor (streamuri). Un flux este o clasa.

                Fluxurile pot fi clasificate în:

-          fluxuri de intrare/iesire standard

-          fluxuri de intrare/iesire folosind fisiere

-          fluxuri de intrare/iesire în memorie

În instructiunea cout << x;  cout este un obiect de tip flux de iesire standard. Transferul informatiei în fisier se realizeaza prin intermediul operatorului << supraîncarcat.

cin este obiectul flux de intrare standard; transferul informatiei se face prin operatorul supraîncarcat  >>.

Obiectele cin si cout sunt declarate în iostream.h.

                Utilizatorul îsi defineste propriile fluxuri, declarându-le ca obiecte în clasele:

ofstream., pentru operatii de scriere

ifstream, pentru operatii de citire

fstream, pentru operatii atât de citire, cît si de scriere

                Pentru a folosi aceste clase trebuie  inclus fisierul antet fstream.h .

                Deschiderea unui fisier (asocierea fisier - stream) se face cu functia membru open(), avînd semnatura:

void open(char* numefisier, int mod, int acces);

                Modul în care poate fi deschis un fisier este precizat în clasa ios prin enumeratorii:

in                           - fisierul se deschide pentru citire; fisierul trebuie sa existe

out                        - fisierul se deschide pentru scriere; daca exista - se sterge si se creaza un nou fisier

ate                        - fisierul se deschide pentru adaugare la sfârsit, daca nu exista - se creaza

app                        - fisierul se deschide pentru adaugare la sfârsit; fisierul trebuie sa existe

trunc                   - daca fisierul exista, va fi sters si se va crea un fisier nou pentru scriere

nocreate           - fisierul deschis trebuie sa existe (el nu poate fi creat)

noreplace        - fisierul este deschis, iar continutul lui nu poate fi înlocuit

binary                - fiserul deschis va fi prelucrat ca un fisier binar

ifstream f;

f.open("note.dat", ios::in);

                Modul de acces poate specifica una din valorile:

0 - fisier fara restrictii de acces

1 - fisier protejat la scriere

2 - fisier ascuns

4 - fisier sistem

8 - fisier arhiva

Desfacerea legaturii fisier - stream se face folosind functia close().

                Daca în urma deschiderii fisierului, variabila stream este egala cu  NULL, atunci operatia de deschidere a esuat.

ifstream f;

if(!f.open("note.dat", ios::in))

                Deschiderea fisierului se poate face implicit, fara a folosi functia open(), daca parametrii sunt specificati la declararea obiectului fisier:

ifstream f("note.dat", ios::in);

                Operatorii de insertie (<<) si extractie (>>) sunt supraîncarcati, putând fi folositi pentru a scrie, respectiv citi din fisier.

Semnatura

Efect

void open(const char* nume,

          int mod, int acces);

deschide fisierul numit, în modul specificat, cu restrictiile de acces precizate

void close();

închide fisierul

istream& get(char& c);

citeste un caracter din fluxul de intrare; la citire EOF întoarce NULL

int peek();

preia urmatorul caracter din fluxul de intrare, fara a-l extrage

istream& putback();

pune înapoi în fisier un caracter

istream& get(char* sir, int n,

             char sep='\n');

se citesc cel mult n-1 caractere, sau pâna la întâlnirea separatorului sep. Separatorul este pus în sir.

istream& getline(char* sir,

         int n, char sep='\n');

se citesc cel mult n-1 caractere, sau pâna la întâlnirea separatorului sep. În locul separatorului este pus terminatorul de sir '\0'.

istream& read(char* sir, int n);

citeste în mod binar cel mult n caractere

int gcount();

determina câte caractere s-au citit în ultima operatie de citire

long tellg();

determina pozitia curenta la citire

istream& seekg(long deplas,

              int orig=ios::beg);

pozitionare cu deplas octeti fata de: început (ios::beg), pozitia curenta (ios::cur) sau sfârsit (ios::end)

ostream& put(char c);

insereaza caracterul c în fluxul de iesire

ostream& write(const char* sir,

               int n);

scrie cel mult n caractere în fluxul de iesire

long tellp();

determina pozitia curenta la scriere

ostream& seekp(long deplas,

             int orig=ios::beg);

pozitionare cu deplas octeti fata de: început (ios::beg), pozitia curenta (ios::cur) sau sfârsit (ios::end)

Exemplu:

#include <fstream.h>

void main()

5.  Probleme propuse.

                1. Sa se scrie un program pentru creerea unui fisier binar, având articole structuri cu urmatoarele câmpuri:

·        Nume depunator  - sir de maxim 30 de caractere

·        Data depunerii - o structura având câmpurile întregi: zi, luna, an.

·        Suma depusa - o valoare reala.

Articolele sunt grupate pe zile în ordine cronologica. Datele se introduc de la consola, fiecare pe trei linii.

2. Sa se scrie un program care folosind fisierul creat în problema 1 calculeaza si afiseaza:

·        Suma maxima depusa, împreuna cu data si numele depunatorului.

·        Numarul depunerilor din fiecare zi, si suma totala depusa în fiecare zi, tinând cont ca tranzactiile dintr-o zi sunt contigue în fisier.

3. Sa se scrie un program pentru actualizarea fisierului creat în problema 1, pe baza unor foi de restituire, introduse de la tastatura, continând numele si suma solicitata. Programul semnaleaza la consola urmatoarele situatii:

·        Solicitant inexistent

·        Suma solicitata depaseste soldul.

Fisierul actualizat este listat la consola.

4. Sa se scrie un program, care folosind fisierul creat în problema 1 actualizeaza acest fisier prin adaugarea dobânzii la data curenta.

Se precizeaza urmatoarele date:

·        Data curenta la care se calculeaza dobânda (an, luna, zi)

·        Dobânda anuala

Se va folosi o functie care determina numarul de zile între data depunerii si data curent, pentru a calcula dobânda cuvenita.

1.        Pentru a sorta elementele unui tablou T, fara a le deplasa, se creeaza un nou tablou P, în care un element PI reprezinta pozitia pe ar ar avea-o elementul corespunzator din T în tabloul sortat, adica numarul de elemente care ar trebui sa se gaseasca înaintea fiecarui element din tabloul sortat.:


De exemplu:

I

0

1

2

3

4

T

8

2

5

9

6

P

3

0

1

4

2

X

1

2

4

0

3

Pe baza tabloului P se obtine relativ simplu pozitia (indexul) elementelor sortate din tabloul T. Cel mai mic element se afla în T în pozitia k, astfel încât Pk=0, urmatorul - în pozitia corespunzatoare lui Pk=1, ultimul element corespunde pozitiei k pentru care Pk=n-1.

Daca tabloul T nu are toate elementele distincte, pentru crearea tabloului P se face modificarea:


De exemplu:

I

0

1

2

3

4

5

6

7

8

T

8

2

5

8

5

9

2

6

5

P

6

0

2

7

3

8

1

5

4

X

1

6

2

4

8

7

0

3

5

                Problema prezinta interes în cazul în care în locul tabloului T avem un fisier cu tip. Sortarea fisierului în raport cu o cheie (unul din câmpurile articolelor  fisierului) revine la creearea unui fisier index care reprezinta un fisier de întregi (echivalent tabloului x), în care fiecare element xI da pozitia celui de.al i.lea element din fisierul sortat în fisierul initial.

·        Sa se defineasca o functie, care primind ca parametru un fisier binar, creeaza un fisier index în raport cu o cheie.

·        Sa se defineasca o functie care primind ca parametri un fisier si un fisier index asociat, afiseaza articolele fisierului sortate în raport cu indexul dat.

6. Se da un fisier text.

a)       Sa se determine numarul de linii din fisier.

b)       Sa se creeze un nou fisier cu liniile din primul, aparând în ordine inversa.

c)       Pe baza fisierului initial, sa se creeze un fisier de caractere, în care nu mai apar caracterele de sfârsit de linie, iar fiecare linie este precedata de lungimea ei (un octet)

d)       Se da un fisier de întregi reprezentând numere de linii din fisierul initial. Sa se afiseze la imprimanta liniile din fisier în ordinea precizata de fisierul de întregi.

7. Fisierul text prog.c reprezinta un program sursa C. Sa se copieze acest fisier la iesirea standard suprimând toate comentariile.

8. Se considera fisierul abonati.dat cu articole structuri având câmpurile:

·        Nume - un sir de 20 de caractere

·        Adresa - un sir de 30 de caractere

·        Data_expirarii - o structura cu câmpurile an, luna, zi.

Consideram ca data curenta se introduce de la tastatura.

Sa se actualizeze fisierul de abonati, stergând pe aceia al caror abonament a expirat la data curenta. Actualizarea se face creind un nou fisier în care se trec numai abonatii al caror abonament nu a expirat si care la sfârsit va primi numele fisierului initial.

Se va defini si folosi o functie care compara doua date (d1 si d2) si întoarce 1 , daca d1 este înaintea lui d2, si 0 în caz contrar.


Document Info


Accesari: 9772
Apreciat:

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site

Copiaza codul
in pagina web a site-ului tau.

 


Copyright © Contact (SCRIGROUP Int. 2014 )