16
Membri grupei : Cremine Denisa Costea Anneliese Calugar Andrei Prof. Tomsa Gelu

Recursivitate si vectori

  • Upload
    jerod

  • View
    93

  • Download
    1

Embed Size (px)

DESCRIPTION

Recursivitate si vectori. Membri grupei : Cremine Denisa Costea Anneliese Calugar Andrei. Prof. Tomsa Gelu. Motto: Ionformatica nu inseamna calcul.Calculul este facut de masini de calcul.Informaticii ii apartine fantezia, imaginatia, demonstratia. Vectori. 1. Vectori Adresare :v[x] - PowerPoint PPT Presentation

Citation preview

Page 1: Recursivitate si vectori

Membri grupei:Cremine DenisaCostea AnnelieseCalugar Andrei

Prof. Tomsa Gelu

Page 2: Recursivitate si vectori

Motto: Ionformatica nu inseamna calcul.Calculul este facut de masini de calcul.Informaticii ii apartine fantezia, imaginatia, demonstratia.

Page 3: Recursivitate si vectori

1. Vectori Adresare:v[x] Exemplu de vector :4 1 2 9 0 5 3 2

Adresare:v[x] v[1]=4 (primul element) v[2]=1 (al doilea element) v[3]=2 (al treilea element) ............ v[8]=2(al optulea)

Utilizare

Vectorii se utilizeaza,in special,pentru a calcula anumite sume,pentru a aranja in ordine crescatoare anumiti termeni sau pentru ecuatii care ar putea fi mai greu de rezolvat folosind alte programe.

Page 4: Recursivitate si vectori

Declarare

type vector=array[1..100] of tip_de_date; var v:vector; n-nr de elemente

Program citire+afisare

program citire_afisare; type vector=array[1..100] of integer; var a:vector; n,i:integer; begin write(‘n=’); readln(n); for i:=1 to n do begin write(‘a[‘,i,’]=’); readln(a[i]); end; for i:=1 to n do write(a[i],’ ‘); readln; end.

Page 5: Recursivitate si vectori

Program suma si produsul tuturor elementelor program suma_produs; type vector=array[1..100] of integer; 4 var v:vector; n,i,s,p:integer; begin write(‘n=’); readln(n); for i:=1 to n do begin write(‘v[‘,i,’]=’); readln(v[i]); end; for i:=1 to n do write(v[i],’ ‘); s:=0; for i:=1 to n do s:=s+v[i]; writeln(‘Suma nr este’ , s); p:=1; for i:=1 to n do p:=p*v[i]; writeln(‘Produsul nr este’ , p); readln; end.

Page 6: Recursivitate si vectori

Program in care se maresc cu 1 numerele divizibile cu 3

program divizibil; type vector=array[1..100] of integer; var a:vector; n,i:integer; begin write(‘n=’); readln(n); for i:=1 to n do begin write(‘a[‘,i,’]=’); readln(a[i]); end; for i:=1 to n do write(a[i],’ ‘); for i:=1 to n do if v[i] mod 3=0 then v[i]:=v[i]+1; readln; end.

Program in care se numara numerele poz si cele neg program numarare; type vector=array[1..100] of integer; var a:vector; n,i,nn,np:integer; begin write(‘n=’); readln(n); for i:=1 to n do begin write(‘a[‘,i,’]=’); readln(a[i]); end; for i:=1 to n do write(a[i],’ ‘); nn:=0; np:=0; for i:=1 to n do begin if v[i]<0 then nn:=nn+1; if v[i]>0 then np:=np+1; end; write(‘Sunt’ ,nn, ’nr neg si’ ,np, ’nr poz’); readln; end.

Page 7: Recursivitate si vectori

Metoda de sortare

Ordonarea datelor prin interschimb si “miscarea” lor spre stanga sau dreapta,asemenea unor bule,poarta numele de Bubble Sort sau Metoda Bulelor. Se repeta parcurgerea vectorului cu interschimbul elementelor care nu respecta relatia de ordine pana cand se ajunge la o parcurgere fara interschimb.Prin ordonare,elementele si-au schimbat pozitia astfel incat la stanga oricarui element se afla toate valorile mai mici decat el,iar la dreapta sa,toate valorile mai mari.Trecerea vectorului de la configuratia initiala la configuratia finala se face prin compararea elementelor invecinate si schimbarea pozitiei lor astfel incat valorile mici sa se deplaseze spre stanga,,iar cele mari spre dreapta.

Page 8: Recursivitate si vectori

a)Sortarea prin metoda bulelor Secventa de program type vector=array[1..100] of integer; var a:vector; i,n,x:integer; inv:boolean; begin write('n='); readln(n); for i:=1 to n do begin write('a[',i,']='); readln(a[i]); End;

repeat inv:=false; for i:=1 to n-1 do if a[i]>a[i+1] then begin inv:=true; x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; end; until not inv; for i:=1 to n do write(a[i],' '); readln end.

Page 9: Recursivitate si vectori

b)Interclasarea

Secventa de program Metoda :Interclasarea este rationamentul prin care,pornind de la doua tablouri de date ordonate dupa acelasi criteriu,se obtine un tablou nou ce contine fiecare dintre valorile celor doua tablouri,ordonate dupa acelasi criteriu.Pentru realizarea interclasarii sunt necesare urmatoarele: -capacitatea celor doua tablouri de valori -nr de valori(n) din primul tablou -n valori ordonate crescator -numarul de valori(m) din cel de-al doilea tablou -m valori ordonate crescator -valorile tabloului rezultat prin interclasare

Page 10: Recursivitate si vectori

type vector= array[1..20] of integer; var a,b,c:vector; i,n,j,k,x,y,m:integer; begin write('m=');readln(m); for i:=1 to m do begin write('a[',i,']='); readln(a[i]); end; write('n=');readln(n); for i:=1 to n do begin write('b[',i,']='); readln(b[i]); end; i:=1; j:=1; k:=1; while (i<=m) and (j<=n) do begin if a[i]<b[j] then begin c[k]:=a[i]; i:=i+1; end

else begin c[k]:=b[j]; j:=j+1; end; k:=k+1; end; if i<=m then for x:=i to m do begin c[k]:=a[x]; k:=k+1; end; if j<=n then for y:=j to n do begin c[k]:=a[y]; k:=k+1; end; for i:=1 to n do write(c[i],' '); readln; end.

Secventa de program

Page 11: Recursivitate si vectori

Ce este recursivitatea? Recursivitatea este un concept matematic care implica definirea unu concept prin referire la acelasi conceptAstfel |N se poate defini : * 1 este nr natural *orice succesor al unui nr natural este asemenea unui nr natural * valoare initiala (1) * restul valorii se obtine adunand 1 la valoarea anterioara .

Factorialul lui n se poate defini recursiv astfel: 0!=1 n!=n*(n-1)!,pentru n> 0f(n)=n! -----> definitia recursiva a functiei.f(n) {1 daca n=0 {n*f (n-1) ,pentru n>0

Page 12: Recursivitate si vectori

Programul principalVar n : integer;begin write ('n='); readln (n);writeln(n, '!=',f(n));end.

Ex: n=3 f(3)=3* f(2)=6 f (2)=2*f(1)=2 f(1)= 1* f(0)=1 f(0)=1

-Fiecare apel adauga un context nou in stiva -Apelul recursiv se termina cand ajunge la rezolvarea directa -La revenirea la apelul resursiv se goleste stiva

Apel recursiv:

function f(n: integer): integer;

begin

if n=0 then f:=1

else f:= n*f(n-1);

Page 13: Recursivitate si vectori

Reguli pentru scrierea subprogramelor recursive

Orice subprogram recursiv trebuie să se execute, cel puţin o dată, fără a se

autoapela. Condiţia de oprire se va scrie pentru valori extreme ale mulţimii

valorilor de testat.Autoapelurile trebuie să conducă spre situaţia (situaţiile ) în care

subprogramul se execută direct (fără autoapel).

Tipuri de recursivitate

Există două tipuri de subprograme recursive :

*subprograme direct recursive: - un subprogram Q în corpul căruia există

cel puţin un autoapel (Q apelează pe Q) se numeşte subprogram direct

recursiv

*subprograme indirect recursive: - două subprograme A şi B se numesc

indirect recusrive dacă se apelează reciproc (A apelează pe B şi B

apelează A) .

Page 14: Recursivitate si vectori

1.Trebuie să formulăm problema în termeni recursivi- formula de recurenţă- soluţia în cazul rezolvării directe, dată de obicei sub forma condiţiilor iniţiale

- formulăm subproblemele de rezolvat în cazul în care nu dispunem de o formulă de recurenţă

2.Scriem subprogramul recursiv: - soluţia directă se scrie sub forma condiţiei de oprire

- apelul recursiv rezultă din formula de recurenţă - la fiecare apel problema parţială trebuie rezolvată

complet

Page 15: Recursivitate si vectori

Descrescator: var n: integer; procedure p (i:integer);begin

if i=1 then write (1);else begin write (i,' ');p(i-1); end ;end;

beginwrite ('n=');readln;p(n);

readln;end

Page 16: Recursivitate si vectori

2.Se citeste un vector de la

tastatura .Sa se afiseze

literele in ordine inversa:

procedure n;

var c:char;beginread(c);if c<>'.' then if c= '.' then writeln else

begin p;write (c);end;beginp;readln;end.

3.Tipareste vectorul de la V[1] la V[n]:type vector =array [1..100] of integer;var v: vector;n:integer;procedure citire (var v:vector,n:integer);var 1:integer;beginwrite ('n=');readln (n);for i:= 1 to n do begin write ('v[',i,']=');readln (v[i]);end;end;

p recursivaprocedure citire (i: integer)beginif i< n+1 do beginwrite (v[;,i,']=');readln (v[i]);citire (i+1);end;end;beginwrite ('n='); readln (n);citire 1;readln;end.