Membri grupei:Cremine DenisaCostea AnnelieseCalugar Andrei
Prof. Tomsa Gelu
Motto: Ionformatica nu inseamna calcul.Calculul este facut de masini de calcul.Informaticii ii apartine fantezia, imaginatia, demonstratia.
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.
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.
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.
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.
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.
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.
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
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
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
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);
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) .
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
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
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.