Lab1.bC++

download Lab1.bC++

of 10

Transcript of Lab1.bC++

  • 7/24/2019 Lab1.bC++

    1/10

    Ministerul Educatiei Republicii MoldovaUniversitatea Tehnica a Moldovei

    Facultatea Calculatoare Informatic i MicroelectronicCatedra Automatica si Tehnologii Informationale

    RA!RT"isciplina# rogramarea in limba$ul C%%

    &ucrare de laborator 'r()

    Tema# *tructura + mecanism de abstracti,are

    A efectuat #

    A verificat#

    Chisinau -.)/

  • 7/24/2019 Lab1.bC++

    2/10

    Scopul lucrrii:

    )( *tudierea programrii prin abstracti,area datelor0-( *tudierea regulilor de definire i utili,are a structurilor de date01( Crearea variabilelor de tip structur2 accesarea componentelor unei structuri(

    Sarcina:

    3arianta )

    b4 * se cree,e tipul abstract de date 5structura4 + vector2 care se compune dintr6unpointer spre int i din numrul de elemente( * se defineasc func7iile de ini7iali,are2 de eliminarea unui vector0 de setare8 modificare a dimensiunii vectorului0 de acces la elementele vectorului0de calcul a modulului unui vector(9n func7ia main s se reali,e,e adunarea a doi vectori(

    Noiuni teoretice*tructura + este o mul7ime de date grupate2 conform unei ierarhii2 de obicei de tipuri diferite(

    *tructura poate fi comparat cu tabloul2 :ns tabloul con7ine date de un acelai tip2 iar elementele tablouluise accesea, cu a$utorul indicilor2 pe c:nd accesarea componentelor structurii are o form specific(

    *tructura repre,int un tip abstract de date2 un tip definit de utili,ator prin utili,area tipurilor de$ae;istente(

    &a stabilirea i implementarea conceptelor necesare re,olvrii unei probleme se reali,ea, un procesde abstracti,are care privete repre,entarea datelor i prelucrarea acestora( Aceasta $ustific termenul de

    programare prin abstractizarea datelor(Fie defini7ia de structur#

    struct Book{

    // definirea elementelor structurii

    char *author;

    char *title;

    int year;

    int pages;

    };

    :naintea cuv:ntului cheiestruct uneori se adaugcuv:ntul cheietypedef( 9ns aceast sinta; este proprie limba$ului C2 i nu C%%( Elementele structurii pot fi de tip

    predefinit sau definit de utili,ator2 e;cep7ie fiind tipul structurii date( entru definirea variabilelor estesuficient utili,area numelui de structur la fel ca tipurile predefinite#

    Book b1, b2, bs[1!, *bptr;

    9n acest ca, s6au definit dou variabile de tip carte2 un tablou din ). cr7i i un pointer spre carte(Referirea la componentele unei structuri se face utili,:nd at:t numele structurii c:t i a componentei

    respective( Aceasta se reali,ea, printr6o construc7ie de forma#

    b1"pages # 1$%;

    bs[i!"pages # 2&;

    9n ca,ul pointerilor#

  • 7/24/2019 Lab1.bC++

    3/10

    bptr # ne' Book; // alocarea memoriei pentru o (ariabil) nou)

    bptr+pages # 1-;

    "ac structura con7ine componente de tip compus2 referirea elementelor este urmtoarea#

    .ircle1".enter" # 2;

    .ircle1".enter"y # 1;

    Fie defini7ia de structur#

    struct 0ate{

    int day, month, year;

    };

    struct tudent{

    char *name;

    0ate birth0ay;

    float media;

    };

    &a definirea tipului de strutur este bine de a preci,a func7iile care definesc opera7ii cu datele de tipulstructurii( 9n acest scop variabilele se transmit func7iilor prin parametri( entru modificarea variabilei ea setransmite prin referin7(

    (oid setalues3tudent* sptr, char* ne'4,float ne'5,0ate d6

    {

    sptr+name # ne' char[strlen3ne'4671!;

    strcpy3sptr+name,ne'46;

    sptr+media # ne'5;

    sptr+birth0ay # d;}

    Func7ia de mai sus are un nea$uns legat de alocarea memoriei( "eoarece func7ia este obinuit2 eapoate fi apelat de c:teva ori2 ceea ce poate duce la pierderi de memorie( entru solu7ionarea acesteiprobleme2 mai :nt:i trebuie de,alocat memoria ini7ial 5sau s se :nregistre,e posibilitatea unui singurapel al func7iei2 ceea ce se reflect :n denumirea func7iei4(

    (oid setalues3tudent* sptr, char* ne'4,float ne'5,0ate d6

    {

    delete[! sptr+name;

    sptr+name # ne' char[strlen3ne'4671!;

    """

    }

    "ar i aceast solu7ie are nea$unsurile sale2 posibil mai grave dec:t :n primul ca,( ericolul const :n:ncercarea de a elimina memoria nealocat la primul apel al func7iei( ot fi c:teva solu7ii( Una const :nutili,area unui parametru suplimentar2 fie cu valoare implicit2 care indic dac func7ia se apelea, pentru

    prima dat5pentru obiectul dat4 sau nu( Aceast variant nu este tocmai reuit2 este necesar de a urmrisuccesiunea apelurilor2 sarcin reali,at de ctre programator2 :n al doilea r:nd2 func7ia trebuie s con7in ocondi7ie ceea ce :ncetinete :ndeplinirea func7iei(

    Alt solu7ie ar fi :n setarea valorii ini7iale a pointerului( 9n acest scop2 dup crearea obiectului2

    componentelor pointer li se atribuie valoarea 'U&&0

    Book b;

  • 7/24/2019 Lab1.bC++

    4/10

    b"author # 4899;

    set:uthor3b,

  • 7/24/2019 Lab1.bC++

    5/10

    4Functiade modificare a dimensiunii

    Concluzie:

    Efectu:nd aceast lucrare de laborator2 am :nv at cum s fac alocarea memoriei cu a$utoruloperatorului ?ne@( "easemenea2 am lucrat cu o structur i cu c:mpurile ei2 deasemenea amreali,at anumite operatii cu datele acestei structure( Mi6a placut mult sa lucre, la aceasta lucrare delaborator2 deoarece am aflat multe lucruri noi 2 cu a$utorul carora mi6am imbogatit cunostintele sicapacitatile de a lucre cu limba$ul C%%(

    Bibliografie:

    )( 'otatiile de la curs0-( rogramare2repre,entarea algoritmilor si limba$ul Turbo C%%0 Anexa A

  • 7/24/2019 Lab1.bC++

    6/10

    Listing de program:

    8Bb4* se cree,e tipul abstract de date 5structura4 + vector2care se compune dintr6un pointer spre int i din numrul de elemente(* se defineasc func7iile de ini7iali,are2 de eliminare a unui vector0

    de setare8 modificare a dimensiunii vectorului0 de acces la elementele vectorului0de calcul a modulului unui vector( 9n func7ia main s se reali,e,e adunarea a doi vectori( B8

    include DFunction )(hDint main54 meniu# sstem5DclsD40 cout GG DHn)JInitiali,area vectorilorHnD0 cout GG DHn-JAfisarea vectorilorHnD0 cout GG DHn1J*tergerea unui vectorHnD0 cout GG DHn/JModificarea dimensiunii unui vectorHnD0 cout GG DHnJAdunarea a doi vectoriHnHnKKD0

    int b0cin KKb0s@itch 5b4

    case )# sstem5DclsD40 Initial540 goto meniu0 breaL0

    case -# sstem5DclsD40

    sho@540

    getch540 goto meniu0 breaL0 case 1# sstem5DclsD40 del5nvect40 getch540 goto meniu0 breaL0 case /#

  • 7/24/2019 Lab1.bC++

    7/10

    sstem5DclsD40 change5nvect40 getch540 goto meniu0 breaL0

    case # sstem5DclsD40 int n2m0 cout GG DCare vectori doriti sa adunati #D0 cout GG DHnIntroduceti primul vector #D0 cin KK n0 cout GG DHnIntroduceti al doilea vector #D0

    cin KK m0 suma5n2m40 getch540 goto meniu0 breaL0 default # sstem5DclsD40 cout GG D!ptiunea introdusa este gresita(D0 getch540

    goto meniu0

    return .0

    88Functia )(h

    include GcstdioKinclude GcstdlibKinclude GiostreamKinclude GcmathK

  • 7/24/2019 Lab1.bC++

    8/10

    include Gconio(hKinclude GcstringKusing namespace std0

    struct vector

    int B point0int numar0

    0vector v

  • 7/24/2019 Lab1.bC++

    9/10

    cin KK vdel0 for 5iNvdel6)0iGnvect0i%%4 viJNvi%)J0 vnvect66J0

    88Functia de moduficare a dimensiunei unui vectorvoid change 5int nvect4

    int n2i2l0 cout GGDIntroduceti vectoru care doriti sa modificati D0 cin KK n0 nNn6)0 if5nKnvect4cout GG D3ectorul introdus nu e;istaD0 else cout GG DHnIntroduceti lungimea vectorului #D0 cin KK l0 vnJ(numarNl0

    void acces54 int n2e2i2$0

    cout GG DElementul carui vector doriti sa accesati QHnKKD0 cin KK n0 cout GG DCare element doriti sa accesati QHnKKD0 cin KK e0 cout GG DElementul dorit este #D0 cout GG DElementul # DGG vn6)J(pointe6)JGGDJD0 cout GGendl0

    int modul54

    int n2i0 double mN)0 cout GG DModulul carui vector doriti sa aflati #D0 cin KK n0 nNn6)0 for5iN.0iGvnJ(numar0i%%4 m%NvnJ(pointiJBvnJ(pointiJ0 mNsrt5m40 cout GG DHnModulul este #DGGm0

  • 7/24/2019 Lab1.bC++

    10/10

    void suma5int n2int m4 nNn6)0 mNm6)0 int i2$0

    if 5vnJ(numarKvmJ(numar4v-.J(numar N vnJ(numar0 else v-.J(numar N vmJ(numar0 v-.J(point N ne@ intv-.J(numarJ0

    for5iN.0iGv-.J(numar0i%%4

    v-.J(pointiJNvnJ(pointiJ%vmJ(pointiJ0 cout GG D3ectorul suma este #D0for5$N.0$Gv-.J(numar0$%%4 coutGGDO DGGv-.J(point$J0 cout GGDODGGendl0