atestat sortare

Upload: scrapper29

Post on 03-Apr-2018

276 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 atestat sortare

    1/13

    TABLOURI

    In mod surprinzator, incepem cu tabloul, structura fundamentala, predefinita in

    majoritatea limbajelor de programare. Necesitatea de a elabora o noua structura de acest tip

    provine din urmatoarele inconveniente ale tablourilor predefinite, inconveniente care nu sunt

    proprii numai limbajelor C si C++:

    Numarul elementelor unui tablou trebuie sa fie o expresie constanta, fixata in

    momentul compilarii.

    Pe parcursul executiei programului este imposibil ca un tablou sa fie marit sau

    micsorat dupa necesitati.

    Nu se verifica incadrarea in limitele admisibile a indicilor elementelor tablourilor.

    Tabloul si numarul elementelor lui sunt doua entitati distincte. Orice operatie cu

    tablouri (atribuiri, transmiteri de parametri etc) impune specificarea explicita a numarului de

    elemente ale fiecarui tablou.

    Un sir de elemente de acelai tip, n care conteaz ordinea elementelor, se

    numete vector sau tablou unidimensional.

    Un tablou este o structura formata dintr-un numr fixat de componente de

    acelai tip, numit tip de baza. Numrul de componente este determinat de numrul de valori

    ale indicilor, care sunt obligatoriu tipuri ordinale. Poziia unui element se mai numete si

    indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului.

    OBSERVATII: In cazul in care tip_ordinal este unul din tipurile intregi,este obligatoriu sa

    folosim subdomeniile lui variabila v este un tablou de dimensiune 1 cu 100 componente

    intregi identificate prin indici din subdomeniul 1..100.

    Aici tipul ordinal este subdomeniu al tipului int, iar tipul oarecare este tot int.

    Componentele unui tablou sunt memorate pe zone de memorii consecutive. Adresarea unei

    componente a tabloului se face prin indice (o valoare a tipului ordinal) care se specifica dup

    numele tabloului, ntre paranteze drepte.

    Prin declararea unui vector vom nelege numrul maxim de elementele

    acestuia. Numrul elementelor efective folosite, care difer de la o execuie la alta se

    numete numr real (efectiv de elemente).

    1

  • 7/28/2019 atestat sortare

    2/13

    "Vizualizarea" tuturor elementelor pe rnd si prelucrare acestora se numete

    parcurgere. Parcurgerea intr-un ciclu poziiile elementelor din vector i=1,2,3,...,n si pentru

    fiecare valoare a lui i, "vizitm" si prelucram elementul v[i], adic elementul aflat pe poziia i.

    TABLOURI UNIDIMENSIONALE

    Structura de date este o colecie de date nzestrat cu informaii structurale

    care permit identificarea i selecia componentelor.

    Componentele unei structuri de date pot fi identificate si selectate fie prin

    numele, fie prin intermediul relaiilor structurale. Cea mai simpla relaie structurala este

    poziia fiecrei componente in cadrul structurii.

    Asupra unei structuri de date se pot aplica mai multe tipuri de operaii

    :vizualizarea elementelor structurii sub diferite forme, actualizarea(adugarea, modificarea

    sau tergerea unei componente), mbogirea structural(prin adugarea unor informaii de

    legtura) sortare(aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu

    de ordonare.

    Din punct de vedere al coninutului, structurile pot fi:-omogene(toate componentele structurii sunt de acelai tip)

    -neomogene(componentele structurii sunt de tipuri diferite)

    in funcie de modul in care sunt memorate structurile de date se mpart in doua mari

    categorii:

    -Structuri interne, sunt create in memoria interna RAM a sistemului, i au un caracter

    temporar, datorit faptului ca memoria interna este volatila.

    -Structuri externe, sunt depozitate pe un suport de memorie externa (hard-disk.floppy-disk), avnd astfel un caracter permanent.

    Tablourile unidimensionale sunt tablouri cu un singur indice (vectori). Dac

    tabloul conine dim_1 elemente, indicii elementelor au valori ntregi din intervalul [0, dim_1-1].

    La ntlnirea declaraiei unei variabile tablou, compilatorul aloc o zon de memorie continu

    (dat de produsul dintre dimensiunea maxim i numrul de octei corespunztor tipului

    tabloului) pentru pstrarea valorilor elementelor sale. Numele tabloului poate fi utilizat n

    diferite expresii i valoarea lui este chiar adresa de nceput a zonei de memorie care i-a fost

    2

  • 7/28/2019 atestat sortare

    3/13

    alocat. Un element al unui tablou poate fi utilizat ca orice alt variabil (n exemplul urmtor,

    atribuirea de valori elementelor tabloului vector). Se pot efectua operaii asupra fiecrui

    element al tabloului, nu asupra ntregului tablou.

    Exemplu:

    // Declararea tabloului vector

    int vector[6];

    // Iniializarea elementelor tabloului

    vector[0]=100;

    vector[1]=101;

    vector[2]=102;

    vector[3]=103;

    vector[4]=104;

    vector[5]=105;

    Exemplu:

    double alpha[5], beta[5], gama[5];

    int i=2;

    alpha[2*i-1] = 5.78;

    alpha[0]=2*beta[i]+3.5;gama[i]=aplha[i]+beta[i]; //permis

    gama=alpha+beta; //nepermis

    Variabilele tablou pot fi iniializate n momentul declarrii:

    declaraie_tablou=list_valori;

    Valorile din lista de valori sunt separate prin virgul, iar ntreaga list este inclus ntre

    acolade:Exemple:

    //1

    int vector[6]={100,101,102,103,104,105};

    [0] [5]

    //2

    3

    vector

    100

    101

    102

    103

    104

    105

    vector[0]

    vector[1]

    vector[2]

    vector[3]

    vector[4]

    vector[5]

    vector 100 101 102 103 104 105

  • 7/28/2019 atestat sortare

    4/13

    double x=9.8;

    double a[5]={1.2, 3.5, x, x-1, 7.5};

    La declararea unui vector cu iniializarea elementelor sale, numrul maxim de elemente ale

    tabloului poate fi omis, caz n care compilatorul determin automat mrimea tabloului, n

    funcie de numrul elementelor iniializate.

    Exemplu:

    char tab[]={ A, C, D, C};

    [0] [3]

    float data[5]={ 1.2, 2.3, 3.4 };

    [0] [4]

    Adresa elementului de indice idintr-un tablou unidimensional poate fi calculat astfel:

    adresa_elementului_i = adresa_de_baz + i lungime_element

    OPERAII CU VECTORI

    O variabila de tip tablou nu poate fi citita sau scrisa in ntregime. Se pot face

    atribuiri intre variabile de acelai tablou. Dar, e preferabil sa se lucreze pe componente .Cu

    componentele unui tablou Se pot face toate operaiile ce Se pot face cu orice variabil de

    acel tip (afiare, citire, atribuire etc)

    1Citirea unui vector

    Aceasta nseamn citirea numrului n de componente, intr-un ciclu for.

    #include

    4

    tab A B

    1

    C D

    data 1.2 2.3 3.4 ? ?

  • 7/28/2019 atestat sortare

    5/13

    void main()

    {

    int v[100],n,i;

    coutn;

    for(i=1;i

  • 7/28/2019 atestat sortare

    6/13

    5.Determinarea elementului minim dintr-un vector

    Aceasta problema se rezolva astfel:consideram minim primul element,apoi

    parcurgem restul vectorului si,ori de cate ori gasim un element mai mic actualizam minimul la

    valoarea acelui element

    #include

    main()

    {

    int v[9],n,i,min;

    coutn;

    for(i=1;i>v[i];

    min=v[1];

    for(i=1;i

  • 7/28/2019 atestat sortare

    7/13

    cin

  • 7/28/2019 atestat sortare

    8/13

    Se determina minimul dintre valorile retinute in componentele de la 2 la 4.Acesta este 2 si este retinut de componenta 4. Se inverseaza continutul componentelor 2 si4.

    A

    A[1] A[2] A[3] A[4]Se determina minimul dintre valorile retinute in componentele de la 3 la 4.

    Acesta este 3 si este retinut de componenta 4. Se inverseaza continutul componentelor 3 si4.

    A

    A[1] A[2] A[3] A[4]

    In cazul in cae se cere sortarea descrescatoare, la fiecare pas se calculeazamaximul.

    #includeint a[9],n,i,j,k,man,min;void main(){

    coutn;for (i=0;i

  • 7/28/2019 atestat sortare

    9/13

    b. BUBBLE SORT- Sortarea prin interschimbare.Algoritm:

    Se parcurge variabila inversand continuturile componentelor alaturate care nusunt in ordine crescatoare (descrescatoare);

    Procedeul se repeat pana cand are loc o parcurgere in care nu se fac inversari

    Exemplu:

    A

    A[1] A[2] A[3] A[4]

    Se efectueaza prima parcurgere. Se inverseaza valorile retinute de

    componentele 1 si 2. Se obtine:

    A

    A[1] A[2] A[3] A[4]

    Valorile retinute de componentele 2 si 3 nu se inverseaza. In schimb, se

    inverseaza valorile retinute de componentele 3 si 4.

    A

    A[1] A[2] A[3] A[4]

    Intrucat au avut loc inversari se parcurge vectorul. Se inverseaza valorile

    retinute de componentele 2 si 3:

    A

    A[1] A[2] A[3] A[4]

    3 1 4 2

    1 3 4 2

    1 3 2 4

    1 2 3 4

    9

  • 7/28/2019 atestat sortare

    10/13

    Alte inversari nu se fac. Intrucat in actuala parcurgere au fost facute inversari, sereparcurge vectorul, de data asta inutil si algoritmul se incheie.

    #includeint a[9],n,i,k,man,gasit;void main(){

    coutn;for (i=1;i

  • 7/28/2019 atestat sortare

    11/13

    B

    B[1] B[2] B[3] B[4]Valoarea 1 trebuie inserata inaintea valorii 3. Pentru aceasta, 3 se deplaseaza la

    dreapta cu o pozitie sip e pozitia sa se insereaa valoarea 1.

    A

    A[1] A[2] A[3] A[4]

    B

    B[1] B[2] B[3] B[4]

    Valoarea 4 trebuie inserata dupa 3. Pentru aceasta nu este necesara nici o deplasare.

    A

    A[1] A[2] A[3] A[4]

    B

    B[1] B[2] B[3] B[4]

    Valoarea 2 se insereaza pe pozitia ocupata de valoarea 3. Pentru aceasta, valorile 3 si4 se deplaseaza la dreapta cu cate o pozitie.

    A

    A[1] A[2] A[3] A[4]

    3

    3 1 4 2

    1 3

    3 1 4 2

    1 3 4

    3 1 4 2

    11

  • 7/28/2019 atestat sortare

    12/13

    B

    B[1] B[2] B[3] B[4]

    Acum vectorul B retine valorile sortate.#includeint a[9],b[9],n,i,j,k,gasit;void main(){

    coutn;for (i=0;i

  • 7/28/2019 atestat sortare

    13/13

    BIBLIOGRAFIE:

    1. Totul despre C si C++, Dr. Kris Jamsa Lars Klander, Editura TEORA, 2005

    2. Bazele programarii in C++, Doina Logofatu, Editura Polirom, 2004

    3. Informatica varianta C++, Tudor Sorin, Editura L&S Informat, 2000

    4. C++, George Mateescu, Editura Petrion, 2003

    5. Manual de programare in C++, Stefan Prata, Editura TEORA, 2004

    13