Programarea Calculatoarelor M6

  • Upload
    adriana

  • View
    291

  • Download
    0

Embed Size (px)

Citation preview

  • 8/8/2019 Programarea Calculatoarelor M6

    1/10

    Programarea Calculatoarelor (limbajul C)

    Curs 6 Tipuri de date compuse

    Universitatea Politehnica din BucuretiFacultatea de Electronic, Telecomunicaii i

    Tehnologia Informaiei

    .l. Bogdan IONESCUProf. Drago BURILEANUProf. Claudius DAN

    2010-20112

    Cuprins

    6.1. Lucrul cu tablouri

    6.2. Lucrul cu iruri de caractere

    6.3. Lucrul cu structuri

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 1/54

    3

    6.1. Lucrul cu tablouri

    Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 2/54 Curs Programarea Calculatoarelor, .l. Bogdan IONESCU, 2010-2011 3/54

    Tablouri de date

    > Un tablou este ostructur omogen format dintr-omulime finit de elemente de acelai tip, denumit i tipde baz.

    informaia este stocatsub form matriceal

    sursa principal deinformaie sunt cifrele,

    sursa secundar deinformaie este dat derelaiile de vecintate.

    84.23

    9.12.22

    5.134.3Exemplu:

    2.2 are ca vecini la: N -3, S 2.4, V 2 i E 1.9.

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 4/54

    Tablouri de date (continuare)

    > Informaia de vecintate este esenial i constituie motivulfolosirii tablourilor i nu a unei liste de valori.Exemplu: dispunem de 14 valori de0, 26 valori de1 i9 valori de0.5 .

    valori independente n memorie

    00.5

    1

    0.50

    00

    1

    0

    0.5

    10

    0 1 etc.

    valori cu vecintate pe o direcie

    1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 etc.

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 5/54

    110.50.50.511

    110.50.50.501

    110.50.50.501

    1100001

    1100001

    1100001

    1111111

    Tablouri de date (continuare)

    Exemplu: dispunem de 14 valori de0, 26 valori de1 i9 valori de0.5 (continuare)

    valori cu vecintate pe dou direcii datele ncep s capetesens datorit informaiilor suplimentare.

    imagine cu dou obiecte

  • 8/8/2019 Programarea Calculatoarelor M6

    2/10

    7Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 6/54

    Tablouri de date (continuare)

    n continuare vom discuta despre urmtoarele tipuri detablouri de date:

    - vectori de date

    - matrice bidimensionale

    - iruri de caractere

    - matrice n-dimensionale (n>2)

    Observaie : nsi modul de reprezentare al datelor n memorieeste unul matriceal, astfel c lucrul cu tablouri de date(definire, manevrare) este eficient i totodat favorizat.

    8Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 7/54

    Tablouri de date (continuare)

    Vectori

    > Un vector reprezint o colecie de date de acelai tipreprezentate sub forma unei linii sau coloane.

    [ ]Exemplu:

    > Datele sunt identificate prin poziia acestora n vector ce este dat deindice .

    0 1 2 3

    sau

    > n limbajul C vom folosi primul tip dereprezentare a vectorilor i anume sub forma uneilinii.Atenie: indicele primului element este ntotdeauna 0.

    0

    1

    2

    3

    9Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 8/54

    Tablouri de date (continuare) Vectori (continuare)

    > Modul de definire a unui vector n limbajul C:

    [];

    tipul datelor coninute de vector:ex .: int, char, float

    numele variabileide tip vector (identificator)

    numrulmaximde elementeale vectorului

    Exemple:

    int x[100];float y[50];

    -variabilax este un vector cu 100de valorintregi ,

    -variabilay este un vector cu 50de valorireale .

    10Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 9/54

    Tablouri de date (continuare) Vectori (continuare)

    > Modul de alocare al memoriei unui vector:

    int x[4];aceast modalitate de alocare a memoriei

    este de tip static , sistemul de calcul alocnd nmemorie numrul specificat de valori, indiferentdac acestea vor fi folosite sau nu.

    > Astfel, se aloc 4 locaii de memorie consecutive de tipint ,ce vor corespunde valorilor vectorului x:

    32 bii 32 bii 32 bii 32 bii

    > Fiecare locaie este identificat prin adresa sa n memorie(adresele sunt consecutive).

    adr. N adr. N+1 adr. N+2 adr. N+3

    123 324 456 100adr. N adr. N+1 adr. N+2 adr. N+3

    indici: 0 1 2 3

    11Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 10/54

    Tablouri de date (continuare)

    Vectori (continuare)> Modul de accesare al valorilor vectorului din memorie:

    printf (%d,x);x stocheaz adresa din memorie aprimului element din vector (N ),

    printf (%d,x[2]);x[2] reprezintvaloarea din a treialocaie de memorie a vectorului x (456),

    printf (%d,&x[3]);operatorul& returneazadresa dinmemorie a variabilei ce il succede (N+3)

    12Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 11/54

    Tablouri de date (continuare)

    Vectori (continuare)> Exemplu citire vector:

    int v[10], i;for (i=0; iv[0]=12 (enter)>v[1]=45 (enter)>v[2]=14 (enter)

    > Observaie : nu este obligatoriu s folosesc toate valorilealocate, n acest caz 10, pot folosi un numr mai mic, dar nuun numr mai mare eroare .Rezultat: v[0]=12, v[1]=45, v[2]=14, v[3]=?, , v[9]=?, v[10]

  • 8/8/2019 Programarea Calculatoarelor M6

    3/10

    13Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 12/54

    Tablouri de date (continuare) Vectori (continuare)

    Exemplu:

    int v[200], dim, i, max;printf (dimensiune vector=);scanf (%d,&dim);for (i=0; i

  • 8/8/2019 Programarea Calculatoarelor M6

    4/10

    19Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 18/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    > Modul de definire a unei matrice n limbajul C:

    [][];

    tipul datelor coninute de matriceex .: int, char, float

    numele variabileide tip matrice(identificator)

    numrulmaximde linii i coloaneale matricei

    Exemple:

    int x[10][10];float y[5][10];

    - variabilax este o matrice ce conine 100de valorintregi , pe 10 linii i 10 coloane

    - variabilay este o matrice ce conine 50de valorireale, pe 5 linii i 10 coloane.

    20Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 19/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    > Modul de alocare al memoriei unei matrice:

    int m[2][4];alocarea este tot detip static , sistemul de

    calcul alocnd n memorie numrul specificat devalori.

    > Astfel, se aloc 2x4 locaii de memorie consecutive de tipint ,ce vor corespunde liniilor i coloanelor matriceim:

    32 bii 32 bii 32 bii 32 bii

    > Observaie: adresele sunt de regul consecutive.

    32 bii 32 bii 32 bii 32 biiadr. N adr. N+1 adr. N+2 adr. N+3

    adr. N+4 adr. N+5 adr. N+6 adr. N+7

    21Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 20/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    > Modul de accesare al valorilor matricei din memorie:

    123 324 456 100

    34 5 258 199adr. N adr. N+1 adr. N+2 adr. N+3

    indici: 0 1 2 30

    1adr. N+4 adr. N+5 adr. N+6 adr. N+7

    printf (%d,m); m stocheaz adresa din memorie aprimului element din matriceam (N ),

    printf (%d,m[1] );m[1] reprezintadresa liniei de indice1, i anume a primului element alacesteia (N+4),

    22Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 21/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    > Modul de accesare al valorilor matricei din memorie (cont.):

    Observaie : practic o matrice este o colecie de vectori linie, ncazul de fa avem doi vectori de adrese N i N+4.

    123 324 456 100adr. N adr. N+1 adr. N+2 adr. N+3

    indici: 0 1 2 30

    1 34 5 258 199adr. N+4 adr. N+5 adr. N+6 adr. N+7

    printf (%d,m[1][3] );m[1][3] reprezintvaloarea de pelinia de indice 1, i coloana de indice3, a matriceim (199),

    23Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 22/54

    Tablouri de date (continuare)

    Matrice 2D (continuare)> Modul de accesare al valorilor matricei din memorie (cont.):

    123 324 456 100adr. N adr. N+1 adr. N+2 adr. N+3

    indici: 0 1 2 30

    1 34 5 258 199adr. N+4 adr. N+5 adr. N+6 adr. N+7

    printf (%d,&m[1][3] );&m[1][3] reprezintadresa dememorie a elementului de pe liniade indice 1 i coloana de indice 3

    24Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 23/54

    Tablouri de date (continuare)

    Matrice 2D (continuare)> Exemplu citire matrice:

    int m[10][10], i, j;for (i=0; iv[0][1]=45 (enter)>v[1][0]=14 (enter)

    > Observaie : ca i n cazul vectorilor, nu este obligatoriu sfolosesc toate locaiile alocate, pot folosi un numr mai mic delinii sau coloane, dar nu mai mare eroare .

    >v[1][1]=42 (enter)

  • 8/8/2019 Programarea Calculatoarelor M6

    5/10

    25Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 24/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    Exemplu:

    int m[5][10], Nl, Nc;int i, j, prod=1;printf (Nl si Nc:);scanf (%d %d,&Nl, &Nc);for (i=0; i

  • 8/8/2019 Programarea Calculatoarelor M6

    6/10

    31Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 30/54

    Tablouri de date (continuare) Matrice 2D (continuare)

    for (x=0; x n practic este ineficient reprezentarea static a matricelor

    cu dimensiuni mai mari de n=3, datorit necesarului dememorie deloc neglijabil.

    eroare : out of memory

    35Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 34/54

    6.2. Lucrul cu iruri de caractere

    36Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 35/54

    > Limbajul Cnu pune la dispoziia utilizatorului un tip individualde date care s permit stocarea irurilor de caractere(exemplu din alte limbaje: String, AnsiString, etc.)

    iruri de caractere

    un ir de caractere = o mulime ordonat de caracterealfanumerice (string).

    Exemplu: exemplu ir ={e,x,e,m,p,l,u, ,,i,r }

    Observaie : constantele ir de caracter sunt marcatecu ghilimele

    Observaie : constantele detip caracter sunt marcatecu apostrof

    > Limbajul C permite totui lucrul cu iruri de caractere, dar acestea sunt reprezentate cavectori de caractere .

  • 8/8/2019 Programarea Calculatoarelor M6

    7/10

    37Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 36/54

    iruri de caractere (continuare)

    > Modul de alocare al unui ir de caractere:

    char x[100];variabilax reprezint un ir de caractere

    ce poate conine maxim 99 de caractere.

    > Principiul alocrii memoriei este identic cu cel folosit lavectori, irul de caractere fiind un vector de tip char.

    8 bii 8 bii \0

    > Atenie: un ir de caractere se ncheie ntotdeauna cucaracterul special \0 sau NULL (sfrit de string)

    adr. N adr. N+98 adr. N+99...

    dimensiunea vectorului = nr.caractere+138

    Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 37/54

    iruri de caractere (continuare)> Modul de citire al irurilor de caractere

    char s[5];int i;for (i=0;i Lucrul cu irurile de caractere:

    bineneles c toate operaiile ce pot fi efectuate cu vectori,sunt valabile i la lucrul cu irurile de caractere,

    limbajul C pune totui la dispoziia utilizatorului o bibliotecde funcii de lucru cu iruri de caractere,string.h :

    Atenie: irurile de caractere sunt vectori, astfel:

    - strcmp : compar dou iruri,- strcpy : copiaz un ir n altul,

    - strlen : determin dimensiune string, etc.

    char s[100];s=proba;

    eroare , nu se pot face atribuiri directei nici calcule cu iruri.

    40Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 39/54

    iruri de caractere (continuare)

    > Exemplu: concatenarea a dou iruri.

    char s1[100], s2[100], s3[200];int i, pos;printf (Introduceti doua siruri:);scanf (%s %s,s1, s2);for (i=0; i Pe lng reprezentarea datelor sub form matriceal (dateomogene), limbajul de programareC mai permite i lucrul custructuri de date : grupuri de date neomogene (tipuri diferite).

    > n acest sens, exist tipurile urmtoare:

  • 8/8/2019 Programarea Calculatoarelor M6

    8/10

    43Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 42/54

    Tipul struct

    P S se realizeze un program care s permit stocareai manipularea datelor personale a N persoane.

    nume ir de caractere (char []),prenume ir de caractere (char []),vrst numr ntreg (int ),

    nlime numr real (float ),ocupaie ir de caractere (char []).

    Exemplu de persoan:

    > Problema este simpl dac ar fi vorba de o singur persoan,ce facem dac trebuie s introducem aceste date pentru 1000de persoane ?

    x1000~5000 devariabileindep. !

    44Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 43/54

    Tipul struct (continuare)

    > Soluia exist de mult timp n domeniul bazelor de date, undeastfel de colecii erau reprezentate pe baza nregistrrilor:

    7 HoundstoothRd.15-Nov-199402-Jul-1969Ms.Sales RepresentativeAnneDodsworth

    4726 -11th Ave. N.E.05-Mar-199409-Jan-1958Ms.Inside Sales Coordinator LauraCallahanEdgehamHollow Winchester Way02-Jan-199429-May-1960Mr.Sales RepresentativeRobertKing

    Coventry House Miner Rd.17-Oct-199302-Jul-1963Mr.Sales RepresentativeMichaelSuyama14 Garrett Hill17-Oct-199304-Mar-1955Mr.Sales Manager StevenBuchanan4110 Old Redmond Rd.03-May-199319-Sep-1958Mrs.Sales RepresentativeMargaretPeacock

    722 Moss Bay Blvd.01-Apr-199230-Aug-1963Ms.Sales RepresentativeJanetLeverling908 W. Capital Way14-Aug-199219-Feb-1952Dr.Vice President, SalesAndrewFuller

    507 -20th Ave. E. Apt. 2A01-May-199208-Dec-1968Ms.Sales RepresentativeNancyDavolioAddressHire DateBirth DateTitle Of CourtesyTitleFirst NameLast Name

    Exemplu baz de date:

    se definesc o serie de tipuri dedate (variabile)

    definite o singur dat

    ceea ce se schimb suntvalorile pentru fiecare persoan

    nregistrri

    45Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 44/54

    Tipul struct (continuare)

    > Limbajul C permite manipularea acestor tipuri de date prinfolosireastructurilor ,structur de date= o colecie devariabile , de regul, detipuri diferite, ce se reunesc ntr-o singur variabil container.

    struct {{{{

    ;... ;

    }}}};

    Sintax: - am definit un nou tipde date (structur)numit:

    - acesta conine oserie de alte tipuri dedate, TipA TipX.

    ; se ncheie definiia.46

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 45/54

    Tipul struct (continuare)

    struct Persoana{{{{char nume[100];char prenume[100];int varsta;float inaltime;

    }}}};

    Exemplu:-am definit tipul de datestructura numit:Persoana

    -acesta va permite stocarea adou iruri de caractere, a unuiint i a unui numr real.

    > Deocamdat am definit doar tipul de date, nu i o variabilcare s stocheze aceste date, pentru aceasta:

    struct Persoana OPersoanaAnume;variabilaOPersoanaAnumeeste de tipPersoana .

    47Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 46/54

    Tipul struct (continuare)

    struct Persoana OPersoanaAnume;variabilaOPersoanaAnumeeste de tipPersoana .

    > Declararea variabilelor struct (continuare):

    > Efect : n memorie se va aloca spaiu pentru stocarea a100+100 de caractere (200x8bii), a unui int (32 bii) i a unuifloat (32 bii).> Aceste locaii de memorie vor fi adresate prin intermediulvariabilei OPersoanaAnume:

    OPersoanaAnume

    .nume[100]

    .prenume[100]

    .varsta

    .inaltime48

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 47/54

    Tipul struct (continuare)

    > Citirea i manipularea variabilelor unei structuri:struct Patrat{{{{int latura;float arie;

    }}}} P1, P2;printf (Patrat 1:);scanf (%d, &P1.latura);P1.arie=P1.latura*P1.latura;printf (\nPatrat 2:);scanf (%d, &P2.latura);P2.arie=P2.latura*P2.latura;printf (Suma arii este: %f, P1.arie+P2.arie);

    - elementele sunt adresate prin:P1.latura i P1.arie , acesteafiind practic ele nsele nitevariabile (fac parte din P1).

    - variabilele de tip structur pot fidefinite idirect dup specificareatipului.

    - calculele se realizeazfolosind variabilele, ca i cum ar fi independente.

  • 8/8/2019 Programarea Calculatoarelor M6

    9/10

    49Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 48/54

    Tipul struct (continuare)Exemplu:

    struct Patrat{{{{int latura;float arie;

    }}}};struct Patrat MultePatrate[100];int i;for (i=0;i Din punct de vedere al sintaxei i al modului de declarare alvariabilelor, acesta este identic cu tipulstruct , astfel:

    union {{{{

    ;... ;

    }}}};

    Sintax: - am definit un nou tipde date (uniune)numit:

    - acesta conine oserie de alte tipuri dedate, TipA TipX.

    ; se ncheie definiia.

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 51/54

    Tipul union (continuare)

    union VarHibrida{{{{int Ix;float Fx;double Dx;char Cx[8];

    }}}} proba;

    Exemplu: -am definit tipul de date uniunenumit:VarHibrida

    -lista datelor ce pot fi coninutede acesta,

    -variabila proba este de acest tip,i anumeVarHibrida .

    > Efect : n memoriese va aloca spaiu pentru a putea stocavaloarea variabilei, din lista de variabile a uniunii, ce necesitspaiul de memorie cel mai mare :

    int = 32 bii, float = 32 bii, double = 64 bii, char [8] = 64 bii

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 52/54

    Tipul union (continuare) union VarHibrida{{{{int Ix;float Fx;double Dx;char Cx[8];

    }}}} proba;

    > Nu se aloc spaiu pentru toatevariabilele, ci doar suficient spaiu pentrua putea stoca oricare dintre valorile variab.

    64 biiadr. N

    > Astfel, la un moment dat, variabila proba nu va putea aveadect una dintre valorile enumerate: int, float, double sau char.

    proba.lx=10;proba.Fx=10.5;scanf (%s,proba.Cx);

    Exemplu:

    1010.5coduri ASCII: 8bii 8bii ... 8bii

    > Fiind disponibil doar o locaie dememorie, valorile sunt suprapuseprogresiv pe msur ce suntschimbate.

    Curs Programarea C alculatoarelor, .l. Bogdan I ONESCU, 2010-2011 53/54

    Tipul union (continuare)

    union Utest{int x, y, z;

    } Var;Var.y=3; Var.z=20;printf (%d %d %d, Var.x, Var.y, Var.z);

    Exemplu: ce se afieaz pe ecran?20 20 20

    x, y i z sunt stocate la aceeailocaie de memorie.

    union Utest{int x, z; float y;

    } Var;Var.y=3.3; Var.z=20;printf (%d %f %d, Var.x, Var.y, Var.z);

    Exemplu: ce se afieaz pe ecran?20 0.00000 20 de ce???

    memorie Var 33x10 -1=100001 120=00000 10100

    int float int

  • 8/8/2019 Programarea Calculatoarelor M6

    10/10

    55Curs Programarea C alculatoarelor, .l. Bogdan IONESCU, 2010-2011 54/54

    Sfritul Cursului 6