+ All Categories
Home > Documents > 01+02 - Introducere. Subprograme (cont)

01+02 - Introducere. Subprograme (cont)

Date post: 13-Apr-2018
Category:
Upload: chirita-alexandra
View: 252 times
Download: 0 times
Share this document with a friend

of 39

Transcript
  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    1/39

    Algoritmi i tehnici de

    programare

    ? ? ??

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    2/39

    programare

    Fi a disciplinei ( programare.ase.ro, pagina ATP ) Con inut, cuno tin e anterioare necesare Bibliografie manual, culegere de probleme

    Evaluare !eminar" 40% Teme obligatorii (condi ie de intrare la p.p.)" 10% Probe practice" 30%

    E#amen" 50%

    $in oficiu"10% $iverse

    pre%en &, recuper&ri, studiu individual, reguli, colaborare

    Consulta ii

    '*, +oi *"*-", vineri /"*"'

    Algoritmi i tehnici de programare

    http://programare.ase.ro/http://var/www/apps/conversion/tmp/scratch_4/Algoritmi%20si%20tehnici%20de%20programare_Uscatu.JPGhttp://var/www/apps/conversion/tmp/scratch_4/Algoritmi%20si%20tehnici%20de%20programare_Uscatu.JPGhttp://programare.ase.ro/
  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    3/39

    Subprograme (continuare)

    Pointeri la func ii (subprograme)

    0ecursivitate

    Biblioteci de subprograme

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    4/39

    Pointeri la func ii (subprograme)

    1umele unei func2ii poate fi folosit capointerconstant(asem&n&tor masivelor)

    !emnifica2ie adresadin memorie unde se afl& codul e#ecutabil al

    subprogramului respectiv Tip

    pointer c&tre un subprogram care prime3te o anumitlist de parametri3i 4ntoarce un anumit tip de rezultat

    5tili%are Transmiterea subprogramelor ca parametri pentru alte

    subprograme

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    5/39

    Pointeri la func ii (subprograme)

    E#empluvoid sortare(float v[], int n);sortarepointer ctre o func!ie care prime"te ca parametri un

    vector cu elemente float"i un ntreg"i are rezultat de tip void

    float minim(float v[], int n, int poz[], int*

    nr);minimpointer ctre o func!ie care prime"te ca parametri un vectorcu elemente float# un ntreg#un vector cu elemente ntregi"i un

    pointer ctre ntreg"i are rezultat de tip float

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    6/39

    Pointeri la func ii (subprograme)

    $eclarare ariabil&parametru tip pointer la func!ie "i utili'are

    void sortare(float v[], int n);

    float minim(float v[], int n, int poz[], int* nr);

    void main()

    { int dim; float a[100]; int unde[100], cite;

    void (*p)(float v[], int n);

    float (*q)(float v[], int n, int poz[], int* nr);

    p = sortare;

    q = minim;

    sortare(a,dim); (*p)(a, dim); p(a, dim);

    minim(a,dim,unde,!cite); (*q)(a,dim,unde,!cite);

    "

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    7/39

    Pointeri la func ii (subprograme)

    E#emplu 6etoda bisec2iei pentru re%olvarea unei ecua2ii

    #* #'

    n, eps#

    f(#)

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    8/39

    Pointeri la func ii (subprograme)

    #include $stdio%&'

    float ecuatie(float ){ return * * + 1;"

    int -isectie( float 1, float , float eps, int n,

    float (*f)(float),

    float *){ int cod = 0; .&ile ((n ' 0) !! (cod == 0)) { * = (1 + ) ; if((*f)(*) == 0)

    cod = 1; else

    if((1) $ eps)cod = ;

    elseif((*f)(1)*(*f)(*)$0) = *; else

    1 = *;n;

    " return cod;"

    void main(){ float a, -, sol, prec; int nr, cod; printf(/na=/); scanf(/f/,!a); printf(/n-=/); scanf(/f/,!-); printf(/nprecizia=/); scanf(/f/,!prec);

    printf(/nnr=/); scanf(/d/,!nr);cod =-isectie(a,-,prec,nr,ecuatie,!sol);

    s.itc&(cod) { case 02 printf(/n3ara solutie/); -rea4; case 12 printf(/n5olutia eacta

    este

    %6f/, sol);-rea4; case 2 printf(/n5olutia

    aproimativa este %6f/, sol); ""

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    9/39

    ecursiitate

    Algoritmi iterativi Algoritmi recursivi

    0ecursivitate simpl& (algoritm unirecursiv)

    0ecursivitate multipl& (algoritm multirecursiv) Formul& de start (una sau mai multe) Formul& recursiv&

    E#emple 1um&rarea valorilor care 4ndeplinesc o condi2ie !uma elementelor unui vector Algoritmul lui Euclid 7irul lui Fibonacci

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    10/39

    ecursiitate# subprograme recursie

    5n algoritm, iterativ sau recursiv, poate fi implementatprintrun subprogram iterativ, fie recursiv

    !ubprogram recursiv" generea%& (cel pu2in) un apel c&tre

    el 4nsu3i 0ecursivitate direct&

    !impl& 6ultipl&

    0ecursivitate mutual&

    8mplica2ii 6od de construire a subprogramelor 1ecesar de memorie

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    11/39

    ecursiitate# subprograme recursie

    Construc2ia subprogramelor recursive !& asigure respectarea caracterului finit alalgoritmului" ie3irea dup& un

    num&r finit de pa3i Fiecare apel recursiv trebuie aplicat unei probleme mai simple dec4t 4n pasul

    anterior 0e%ult& o metod& simpl& de oprire a gener&rii de noi apeluri

    Condi2ie de oprire a gener&rii de noi apeluri Aplicarea formulei de start dac& e 4ndeplinit& condi2ia Aplicarea formulei recursive 4n ca% contrar

    long factorial( unsigned n ){ long f; if ( !n )

    f = 1; else

    f = n*factorial( n-1); return f;}

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    12/39

    ecursiitate# subprograme recursie

    1ecesarul de memorie

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    13/39

    ecursiitate# subprograme recursie

    fib(n) = fib(n-1) + fib(n-2), fib(1) = fib(0) = 1

    fib( - )fib( )

    fib( )

    fib( * )fib( ' )

    9

    '

    *

    *

    fib( * )

    *

    fib( ' )

    **

    fib( * )

    fib( )

    '

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    14/39

    ecursiitate# subprograme recursie

    C4nd alegem subprograme iterative : recursive; Avanta+e 3i de%avanta+e

    Consum memorie

    Timp de e#ecu2ie

    53urin2& 4n proiectare : implementare

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    15/39

    ecursiitate# subprograme recursie

    Calculul combin&rilor de nluate c4te k => ,

    long comb(unsigned n, unsigned ){ long c; if (n)

    c = 0;

    elseif ((==0)""(==n))c = 1;

    elsec = comb(n-1,) + comb(n-1,-1);

    return c;}

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    16/39

    ecursiitate# subprograme recursie

    !uma elementelor unui vector #(n) = $%n-1& + #(n-1), #(0) = 0

    double suma(double '%&, int n)

    { double s; if( n == 0)

    s = 0; else

    s = '%n-1& + suma(', n-1);

    return s;}

    Produsul elementelor unui vector

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    17/39

    ecursiitate# subprograme recursie

    C&utarea binar&

    int cauta(float '%&, int , int u, float ){ int m;

    if ( u)m = -1;

    else {m = ( + u) 2; if( '%m&)

    m = cauta(', , m-1, );

    elseif( '%m&)m = cauta(', m+1, u, );

    } return m;

    }

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    18/39

    ecursiitate# subprograme recursie

    Cum se transform& un subprogram iterativ 4n unulrecursiv;*. instruc2iunea iterativ& dispare

    '. condi2ia de la instruc2iunea iterativ& devine (eventual modificat&)condi2ie de oprire a gener&rii de noi autoapeluri. 0epetarea este asigurat& prin autoapel. E#emplu" metoda bisec2iei

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    19/39

    ecursiitate# subprograme recursie

    etoda bisec iei

    int bisectie( float $1, float $2, float es, int n,float (*f)(float), float *$)

    { int cod = 0;

    ile ((n 0) (cod == 0)) { *$ = ($1 + $2) 2; if((*f)(*$) == 0)

    cod = 1; else

    if(($2-$1) es)cod = 2;

    elseif((*f)($1)*(*f)(*$)0)

    $2 = *$; else

    $1 = *$; n--;

    } return cod;

    }

    int bisectie( float $1, float $2, float es, int n, float (*f)(float), float *$){ int cod; if ( n == 0)

    cod = 0; else

    { *$ = ($1 + $2) 2; if((*f)(*$) == 0)

    cod = 1; else

    if(($2-$1) es)cod = 2;

    else

    { if( (*f)($1) * (*f)(*$) 0 ) $2 = *$; else

    $1 = *$; n--; cod = bisectie( $1, $2, es, n, f, $ ); }

    return cod;}

    if((*f)($1)*(*f)(*$)0)

    cod = bisectie( $1, *$, es, n-1, f, $ );else cod = bisectie( *$, $2, es, n-1, f, $ );

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    20/39

    ecursiitate# subprograme recursie

    Teme"

    1um&rul de elemente negative dintrun vector

    Produs scalar 4ntre doi vectori

    Algoritmul lui Euclid

    Calculul c.m.m.d.c.

    6etoda tangentei

    Problema turnurilor din =anoi!ortarea unui vector

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    21/39

    *iblioteci de subprograme

    Bibliotec&" colec ie de subprograme, grupate 4ntrunsingur fi ier (compilat)

    !cop 0eutili%area codului 4n mai multe aplica ii $istribuirea c&tre al i utili%atori

    Tipuri cod surs&, cod binar statice, dinamice

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    22/39

    *iblioteci de subprograme

    >ariante de lucru

    ?n mod comand&

    cl+e,e - compilator lib+e,e - manager de biblioteci lin.+e,e - editor de legturi

    ?n mediul de programare (8$E) >isual !tudio

    ?n aceea i solu ie (mai multe proiecte) ?n solu ie independent&

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    23/39

    *iblioteci de subprograme/ statice

    Codul subprogramelor utili%ate este inclus 4n e#ecutabil

    E#tensie @indos" +lib

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    24/39

    *iblioteci de subprograme/ statice

    Editare de leg&turi

    Fi iere codsurs&(.c, .cpp, .)

    Fi iere codobiect(.ob+)

    Bibliotecicod obiect(.lib)

    Fi iere codsurs&(.c, .cpp, .)

    Cod binare#ecutabil(.e#e)

    Compilare6anagerbiblioteci

    Bibliotecicod obiect(.lib)

    Fi iere codobiect(.ob+)

    Compilare

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    25/39

    *iblioteci de subprograme/ statice

    Fiiere sursantet matrice.h

    implementare matrice.cpptest test.cpp

    alocare dinamica matrice . - nr/ linii, nr/ coloane - adresa matriceidouble **alocamatrice(int m, int n);

    dealocare matrice dinamica . - adresa matricei, nr/ linii - adresa matricei (3455)double** dealocarematrice(double **a, int m);

    rodus matrice atrate de dimensiuni egale, realocate . - a, b, n - c'oid rodusmn(double** a, double **b, int n, double** c);

    coiaa matrice realocate . - a, m, n - b'oid coiaa(double** a, int m, int n, double** b);

    citire matrice atrata cu alocare . - - adresa matrice, dimensiunedouble** citirematrice(int *m);

    afisare matrice atrata . - adresa matrice, dimensiune -'oid afisarematrice(double** a, int m);

    6include stdio/6include malloc/

    6include 7matrice/7

    citire matrice atrata cu alocare . - - adresa matrice, dimensiunedouble** citirematrice(int *m){ int i,8; double** a; rintfs(79n9n:imensiune 7); scanfs(7

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    26/39

    *iblioteci de subprograme/ statice

    ?n mod comand& !e creea%& un director nou pentru proiect 4n care se salvea%& cele

    fi iere !e e#ecut&cars3+bat, aflat in subdirectorul binal >isual !tudio

    ?9@rogram Ailes ($B>)9icrosoft Cisual #tudio 10/09C?9bin

    cl -c matrice/c

    matrice/ob8

    lib matrice/ob8 outmatrice/libmatrice/lib

    cl test/c matrice/lib

    test/e$e

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    27/39

    *iblioteci de subprograme/ statice

    ?n 8$E creare bibliotec& binar& !e creea%& un proiect nou de tip Win32 Console Application

    numele solu iei" BSIDE, al proiectului" matrice

    ?n fereastra Application settings se alege Application tpe! Static li"rar Additional options!Empt pro#ect, f&r& $recompiled %eaders

    !e adaug& la proiect fi ierele surs& (antet i implementare)

    !e compilea%& solu ia ( Build)

    ?n directorul BSIDE&De"u'se va genera biblioteca binar&

    numele bibliotecii"matrice(li"

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    28/39

    *iblioteci de subprograme/ statice

    ?n 8$E utili%are bibliotec& binar& 4n aceea i solu ie !e creea%& un proiect nou de tip Win32 Console Application

    numele proiectului" )est, se adaug& la solu ia BSIDE ?n fereastra Application settings se alege

    Application tpe! Console Application Additional options!Empt pro#ect, f&r& $recompiled %eaders !e adaug& la proiect fi ierul surs& (cu func ia main) $ro#ect $roperties Common $roperties *rame+ork and e-erences

    Add .e+ e-erence/ matrice

    $ro#ect $roperties Con-i'uration $roperties C0C11 eneralAdditional Include Directories calea c&tre matrice(% $ro#ect Set As Startp $ro#ect !e compilea%& solu ia ( Build) !e lansea%& 4n e#ecu ie din 8$E sau separat

    )est(e4e se afl& 4n BSIDE&De"u'

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    29/39

    *iblioteci de subprograme/ statice

    ?n 8$E utili%are bibliotec& binar& 4n alt& solu ie !e creea%& un proiect nou de tip Win32 Console Application

    numele solu iei ( i al proiectului)" )estS ?n fereastra Application settings se alege

    Application tpe! Console Application Additional options!Empt pro#ect, f&r& $recompiled %eaders

    !e adaug& la proiect fi ierul surs& (cu func ia main) !e copia%& 4n directorul proiectului fi ierele matrice(% i matrice(li" $ro#ect $roperties Con-i'uration $roperties 5inker Input

    Additional Dependencies se adaug& matrice(li" !e compilea%& solu ia ( Build) !e lansea%& 4n e#ecu ie

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    30/39

    *iblioteci de subprograme/ dinamice

    Codul subprogramelor utili%ate este separat de e#ecutabil

    E#tensie @indos" +dll

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    31/39

    *iblioteci de subprograme/ dinamice

    Editare de leg&turi

    Fi iere codsurs&(.c, .cpp, .)

    Fi iere codobiect (.ob+)Tabela deimport (.lib)

    Bibliotecidinamice(.dll)

    Fi iere codsurs&(.c, .cpp, .)

    Cod binare#ecutabil(.e#e)

    CompilareEditare de

    leg&turi

    Bibliotecicod obiect(.lib)

    Fi iere codobiect(.ob+)

    Compilare

    Cod binare#ecutabil

    (.e#e)

    Biblioteci

    dinamice(.dll)

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    32/39

    *iblioteci de subprograme/ dinamice

    Crearea i utili%area este asem&n&toare cu a bibliotecilorstatice

    $iferen e Antetul func iilor trebuie s& con in& (doar 4n .) declspec(dlle,port)

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    33/39

    *iblioteci de subprograme/ dinamice

    ?n mod comand& !e creea%& un director nou pentru proiect 4n care se salvea%& cele

    fi iere !e e#ecut&cars3+bat, aflat in subdirectorul binal >isual !tudio

    ?9@rogram Ailes ($B>)9icrosoft Cisual #tudio 10/09C?9bin

    cl matrice/c 5:

    matrice/dll, matrice/lib

    cl test/c matrice/lib test/e$e

    Pentru e#ecu ie s4nt necesare" te$t/e$e i matrice/dll

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    34/39

    *iblioteci de subprograme/ dinamice

    ?n 8$E creare bibliotec& binar& !e creea%& un proiect nou de tip Win32 Console Application

    numele solu iei" BDIDE, al proiectului" matrice

    ?n fereastra Application settings se alege Application tpe! D55 Additional options!Empt pro#ect

    !e adaug& la proiect fi ierele surs& (antet i implementare)

    !e compilea%& solu ia ( Build)

    ?n directorul BDIDE&matrice&De"u'se va genera biblioteca binar&

    fi iere" matrice(dll, matrice(li"

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    35/39

    *iblioteci de subprograme/ dinamice

    ?n 8$E utili%are bibliotec& binar& 4n aceea i solu ie !e creea%& un proiect nou de tip Win32 Console Application

    numele proiectului" )est, se adaug& la solu ia BDIDE ?n fereastra Application settings se alege

    Application tpe! Console Application Additional options!Empt pro#ect, f&r& $recompiled %eaders

    !e adaug& la proiect fi ierul surs& (cu func ia main) $ro#ect $roperties Common $roperties *rame+ork and e-erences

    Add .e+ e-erence/ matrice $ro#ect $roperties Con-i'uration $roperties C0C11 eneral

    Additional Include Directories calea c&tre matrice(% $ro#ect Set As Startp $ro#ect !e compilea%& solu ia ( Build) !e lansea%& 4n e#ecu ie

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    36/39

    *iblioteci de subprograme/ dinamice

    ?n 8$E utili%are bibliotec& binar& 4n alt& solu ie !e creea%& un proiect nou de tip Win32 Console Application

    numele solu iei ( i al proiectului)" )estD !e copia%& 4n directorul proiectului fi ierele matrice(% i matrice(li" ?n fereastra Application settings se alege

    Application tpe! Console Application Additional options!Empt pro#ect, f&r& $recompiled %eaders

    !e adaug& la proiect fi ierul surs& (cu func ia main) $ro#ect $roperties Con-i'uration $roperties 5inker Input

    Additional Dependencies se adaug& matrice(li" $ro#ect $roperties Con-i'uration $roperties De"u''in'

    En6ironment se adaug& calea c&tre matrice(dll !e compilea%& solu ia ( Build) !e lansea%& 4n e#ecu ie

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    37/39

    *iblioteci de subprograme/ dinamice

    Compara ie dimensiuni" T E 6

    C4nd folosim biblioteci;

    C4nd folosim biblioteci statice : dinamice;

    Static (.lib) Dinamic (.dll)

    L.C. IDE L.C. IDE

    matrice/D D D D

    matrice/lib D D D D

    matrice/dll - - D D

    test/e$e D D D D

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    38/39

    *iblioteci de subprograme/ dinamice

    Tem& Crea i i testa i o bibliotec& format& din func iile necesare

    prelucr&rii vectorilor

    Bibliotec& static&

  • 7/26/2019 01+02 - Introducere. Subprograme (cont)

    39/39

    Spor la nvat!


Recommended