cursul05_atp2015

29
+ Algoritmi și tehnici de programar e Cursul 5

Upload: corbu-cristian

Post on 07-Nov-2015

214 views

Category:

Documents


2 download

DESCRIPTION

Curs Algoritmi si tehnici de programare

TRANSCRIPT

  • +Algoritmi i tehnici de programare

    Cursul 5

  • +Cuprins

    Fiiere text i binare

    Validarea datelor

    Algoritmi de prelucrare cu fiier conductor.

    Prelucrarea masivelor memorate n fiiere binare.

  • +Fiiere text i binare

    Exist dou tipuri de fiiere cu care se poate opera ntr-unprogram:

    Fiierele text:

    stocheaz datele ca o secven de caractere alfanumerice iconinutul acestor fiiere poate fi vizualizat i poate fi editat directcu ajutorul unui editor de texte.

    Fiierele binare:

    stocheaz informaia fr prelucrri exact aa cum apare ea nmemorie

  • +Fiiere text i binare

    typedef struct Student{

    short int nota1;

    short int nota2;

    char nume[30];

    float medie;

    } Student;

    // ... main() i alte funcii ...

    Student stud;

    stud.nota1 = 7;

    stud.nota2 = 10;

    stud.medie = (stud.nota1 + stud.nota2) / 2.0;

    strcpy(stud.nume,Ana");

  • +Fiiere text i binare

    FILE* f = fopen(test.txt","w");

    fprintf(f,"%d %d %f %s\n", stud.nota1, stud.nota2, stud.medie, stud.nume);

    Fiierul arat n memorie astfel:

    0 1 2 3 4 5 6 7 8

    7 1 0 8 . 5

    9 10 11 12

    a n a \n

    00110111 0011000100100000 00110000 00100000 00111000 00101110 00110101 00110111

    01100001 011000101101110 00001010

  • +Fiiere text i binare

    FILE* g = fopen(test_binar.dat","wb");

    fwrite(&stud, sizeof(stud), 1, g);

    Fiierul arat n memorie astfel:

    0 1 2 3 4 5 6 7

    (short int) 7 (short int) 10 (float) 8.5

    8 9 10 11 ..17

    a n a \0

    00000111 0000101000000000 00000000 01000001 00001000 00000000 00000000

    01100001 011000101101110 00000000 xxxxxxx

  • +Validarea datelor

    Niveluri de validare

    cmp ndeplinirea condiiilor proprii

    articol corelaii ntre cmpuri, alte condiii

    Ex: CNP, Nume, Vrsta etc.

    grup de articole relaii ntre articole, completitudine pachet, totaluri etc.

    fiier completitudine, totaluri etc.

  • +Validarea datelor

    er = 0

    condiie 1

    -> cmp

    NU

    er = 1

  • +Validarea datelor

    Tipuri de validri la nivel de cmp / articol

    Existen

    Natur

    Lungime

    Ex: CNP

    Semn

    Ex: Pret

    apartenen la o mulime / interval

    Ex: Sex: {m, f/}

    corelaii ntre cmpuri (aritmetice, logice etc.)

  • +Validarea datelor

    Natur

    numeric 0-9 . (spaii la nceput/sfrit)

    alfabetic a-z, A-Z, spaiu altele (submulime)

    alfanumeric orice caracter / submulime

  • +Validarea datelor

    Validare natur numeric

    direct (prin citire) depinde de posibilitile limbajului

    ir de caractere, [verificat fiecare caracter], conversie

    Validare natur alfabetic

    ir de caractere, verificat fiecare caracter

  • +Validarea datelor

    er = 1;while( er ){ printf("\nVarsta = ");fflush( stdin );if( scanf("%d", &x) == 1 ) er = 0;

    }

  • +Validarea datelor

    Pentru conversia datelor din format numeric n formatir de caractere i invers se folosesc dou seturi defuncii:

    din format ir de caractere n format numeric (atoi, atof, atol)

    int atoi(const char *s);

    long atol(const char *s);

    double atof(const char *s);

    din format numeric n ir de caractere (itoa, ltoa, ultoa).

  • +Validarea datelor

    #include

    #include

    #include

    void main()

    {

    char *s[]={"12345","12345.67","123456.78","123a45.67","a12345.67",

    "12345.a67"};

    int j, n, er, i, nr, k=0,v[5];

    for(j=0; j

  • +Validarea datelor

    Lungime

    existen (diferit de zero)

    lungime propriu-zis

    Domeniu / mulime de valori

    ir de caractere: tabel predefinit de iruri

    numeric: tabel de valori, capete interval

    caracter: valori predefinite, capete interval

  • +Fiier conductor

    Fiier de intrare

    Parcurs secvenial

    Asigur controlul prelucrrilor

    Prelucrarea acestuia nu depinde de prelucrarea altor fiiere

    La un moment dat exist un singur fiier conductor

    Pot fi fiiere standard (stdin) sau utilizator

  • +Schema logic general

    START

    STOP

    ! (sfrit prelucrare) Da

    NuPrelucrare articol

    NCEPUT

    SFRIT

    Operaii standardOperaii specifice

    Operaii standardOperaii specifice

  • + Operaii standard iniiale

    Deschiderea fiierului

    Operaii specifice iniiale

    Iniializare variabile

    Scriere cap de tabel

    Operaii standard finale

    nchiderea fiierului

    Operaii specifice finale

    Scriere totaluri finale tabel

    Schema logic general

  • +Varianta 1

    START

    STOP

    Da

    Citete articol

    !feof(f)

    Citete articol

    Operaii finale

    Nu

    Operaii iniiale

    Prelucrare articol

  • +START

    STOP

    Da

    SF = fread ()

    SF != 0

    Operaii finale

    Nu

    Operaii iniiale

    Prelucrare articol

    SF = fread ()

    Varianta 2

  • +START

    STOP

    Da!fread ()

    Operaii finale

    Nu

    Operaii iniiale

    Prelucrare articol

    Varianta 3

  • + START

    STOP

    Dai nr

    Operaii finale

    Nu

    Operaii iniiale

    Prelucrare articol

    Calculare numrarticole (nr)

    i = 1

    Citete articol

    i = i+1

    Varianta 4

  • +Masive memorate n fiier

    Scop:

    memorarea masivelor de date de dimensiuni mari

    Problema principal:

    determinarea poziiei unui anumit element dinmasiv n cadrul fiierului.

  • +Masive memorate n fiier

    Prelucrarea depinde de:

    numrul de dimensiuni ale masivului;

    ordinea de memorare n fiier (lexicografic sau invers lexicografic);

    modul de memorare (dens sau nedens);

    ordinea de parcurgere a masivului.

  • +Masive memorate n fiier

    Vectorii se memoreaz dens

    Numrul relativ al articolului depinde de rangul elementului ncadrul vectorului, astfel:

    nr_relativ=rang(xi+1) =i, pentru i=0..n-1,

    vectorul se memoreaz ncepnd cu primul articol

    dimensiunea vectorului este n=ftell(fisier)/sizeof(articol)

  • +Masive memorate n fiier

    O matrice poate fi memorat ntr-un fiier binar:

    nedens

    n ordine lexicografic

    invers lexicografic.

    dens

    n ordine lexicografic

    invers lexicografic.

  • +Masive memorate n fiier

    Pe prima poziie se memoreaz numrul de linii n cazulmemorrii lexicografice

    Numrul de coloane =numrul total de elemente / numrul delinii

    nr_linii*icol)sizeof(art

    linii)sizeof(nr_-er)ftell(fisi nr_coloane

  • +Masive memorate n fiier

    Pe prima poziie se memoreaz numrul de coloane n cazulmemorrii invers lexicografice

    Numrul de linii =numrul total de elemente/ numrul decoloane

    nr_coloane*icol)sizeof(art

    coloane)sizeof(nr_-er)ftell(fisi nr_linii

  • +Masive memorate n fiier

    Numrul relativ al elementului aij se determin astfel:

    rang(aij)=i*nr_coloane+j+1, n cazul memorrii lexicografice,unde nr_coloane este fie numrul coloanelor efective (popularedens), fie numrul coloanelor rezervate (populare nedens);

    rang(aij)=j*nr_linii+i+1, n cazul memorrii inverslexicografice, unde nr_linii este fie numrul liniilor efective(populare dens), fie numrul liniilor rezervate (popularenedens).