Sunteți pe pagina 1din 19

Autor:Stanciu Alexandra Clasa a X-a C

TABLOURI
Caractere generale Un tablou este o multime finita si ordonata de elemente de acelasi tip,care are asociat un nume
Pentru a avea acces la continutul componentelor unui tablou se foloseste pozitia elementelor din tablou(indicele). Indicele trebuie sa fie de un tip ordinal Tipul comun al elementelor de baza poate fi oricare din tipurile de baza sau structurate In cazul in care componentele unui tablou sunt accesate dupa un singur indice,atunci tabloul este unidimensional sau vector,daca sunt accesate dupa 2 indici,atunci tabloul este bidimensional sau matrice,iar daca sunt accesate dupa mai multi indici,atunci tabloul este multidimensional.

1. Vectori
4 12 2 9 0 5 34 23 1 7 4 0 11 17

exemplu de vector Adresare:v[x] v[1]=4 (primul element) v[2]=12 (al doilea element) v[3]=2 (al treilea element) ............ v[14]=17(al paisprezecelea element)
2

Utilizare Vectorii se utilizeaza,in special,pentru a calcula anumite sume,pentru 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;
3

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 nr div 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;
4

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 nr 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.

Program in care sa se calculeze S=a[1]+...+a[n]/b[1]+...+b[n] program suma; type vector=array[1..100] of integer; var a,b:vector; n,i:integer; s:real; begin write(n=); readln(n); for i:=1 to n do begin write(a[,i,]=); readln(a[i]); write(b[,i,]=); readln(b[i]); end; for i:=1 to n do write(a[i], ); for i:=1 to n do write)b[i], ); s:=0; for i:=1 to n do s:=s+(a[i]/b[i]); write(Suma este , s); readln; end.

2. Sortari
a)Sortarea prin metoda bulelor Secventa de program program sortarebule; 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.

Metoda 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.

b)Sortare prin metoda minimului Secventa de program program sortaremin; type vector= array[1..100] of integer; var a:vector i,n,x,min,k,j: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-1 do
8

begin min:=a[i]; k:=i; for j:=i+1 to n do if a[j]<min then begin min:=a[j]; k:=j; end; if k<>i then begin x:=a[i]; a[i]:=a[k]; a[k]:=x; end; end; for i:=1 to n do write(a[i],' '); readln; end. Metoda Se stabileste un minim:presupunem ca minimul este primul element.In functie de el,se ordoneaza celelalte elemente din vector in ordine crescatoare. c)Cautare binara Secventa de program program cautare_binara; type vector=array[1..50] of integer; var v:vector; nr,n,i,st,dr,mij:integer; gasit:boolean;
9

begin writeln('n='); readln(n); for i:=1 to n do begin write('v[',i,']='); readln(v[i]); end; Write('Elementul cautat in vector: '); readln(nr); st:=1; dr:=n; gasit:=false; while (not gasit) and (st<dr) do begin mij:=(st+dr) div 2; if nr=v[mij] then gasit:=true else begin if nr<v[mij] then dr:=mij-1 else st:=mij+1; end; end; if (gasit) then writeln('Numarul ',nr,' se afla in vector pe pozitia: ',mij) else writeln('Numarul ',nr,' nu se afla in vector'); readln; end. Metoda Cautarea binara este o metoda care reduce mult mai mult complexitatea operatiei de cautare a unei valori intr-un tablou ordonat,prin care domeniul de valori in care se cauta
10

solutia unei probleme este redus pas cu pas pana la gasirea solutiei.Problema initiala,cautarea unei valori intr-un tablou ordonat,este descompusa in probleme de acelasi fel,dar din ce in ce mai simple,prin reducerea,pana la un singur element,a intervalului de valori in care se face cautarea. Initial,se compara valoarea cu valoarea unui element reper,anume cel din mijlocul tabloului:daca valoarea cautata este mai mare decat a elementului din mijloc,e clar ca il vom cauta printre elementele aflate la dreapta acestuia;astfel vom cauta la stanga lui;cautarea la dreapa sau la stanga o vom face la fel,alegand ca reper elementul din mijloc. d)Interclasarea Secventa de program program 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;
11

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. 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
12

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

3. Matrice
2 3 44 5 6 7 11 2 45 0 7 8 16 23 9 87 21 54 0 6 34 8 1 23 13 28 65 33 21 17

exemplu de matrice Adresare:a[linie,coloana] a[1,1]=2 a[1,2]=11 a[1,3]=16 ................. a[6,5]=17 Utilizare Folosirea unei matrice este importanta datorita faptului ca putem asocia anumitor elemente corespondentii respectivi acestora si,astfel,rezultatele vor fi mai usor de obtinut si mai usor de intretinut. Declarare
13

type matrice=array[1..80,1..100] of integer/char; var a:matrice 80-nr maxim de linii 100-nr maxim de coloane Diagonala principala Daca matricea este patratica(m=n) (m=nr. linii, n=nr. coloane) ,atunci diagonala principala este formata din elementele a[i,i],unde i=1,n. Altfel,nu avem diagonala principala. Diagonala secundara Daca matricea este patratica(m=n),atunci diagonala secundara este formata din elementele a[i,n-i+1]. Altfel,nu avem diagonala secundara. Program citire+afisare program matrice; type matrice= array[1..50,1..50] of integer var a:matrice; i,j,m,n:integer; begin write('m='); readln(m); write('n='); readln(n); for i:=1 to m do for j:= 1 to n do begin write('a[',i,',',j,']=');
14

readln(a[i,j]); end; for i:=1 to m do begin for j:=1 to n do write(a[i,j],' '); writeln; end; readln; end. Program in care sa se afiseze suma nr de pe linia k si produsul nr de pe coloana l program suma_produs; type matrice= array[1..50,1..50] of integer var a:matrice; i,j,m,n,k,l,s,p:integer; begin write('m=');readln(m); write('n=');readln(n); for i:=1 to m do for j:= 1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; for i:=1 to m do begin for j:=1 to n do write(a[i,j],' '); writeln; end; write(k=); readln(k); write(l=);
15

readln(l); s:=0; for i:=1 to n do s:=s+a[k,i]; writeln(suma pe linia, k,este, s); p:=1; for i:=1 to m do p:=p*a[i,l]; writeln(Prod pe coloana, l,este, p); readln; end. Program in care sa se calculeze suma elem pare si produsul elem imp de pe diag princ a unei matrice patratice program diag_princ; type matrice= array[1..50,1..50] of integer var a:matrice; i,j,n,s,p:integer; begin write('n='); readln(n); for i:=1 to n do for j:= 1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end; s:=0; p:=1; for i:=1 to n do
16

if a[i,i] mod 2=0 then s:=s+a[i,i] else p:=p*a[i,i]; write(Suma elem de pe diag princ este ,s, iar prod elem este ,p); readln; end. Program in care sa se calculeze suma elementelor de deasupra diagonalei secundare a unei matrice patratice program matrice; type matrice= array[1..50,1..50] of integer var a:matrice; i,j,n,s:integer; begin write('n='); readln(n); for i:=1 to n do for j:= 1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end; s:=0; for i:=1 to n-1 do for j:=1 to n-i do s:=s+a[i,j]; write(Suma este ,s); readln; end.
17

Program in care se citeste o variabila x.Daca x este par,sae se interschimbe linia c cu linia d,iar daca x este impar,sa se interschimbe coloana c cu coloana d. program matrice; type matrice= array[1..50,1..50] of integer var a:matrice; i,j,m,n,x,c,d,y,z:integer; begin write('m='); readln(m); write('n='); readln(n); for i:=1 to m do for j:= 1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; for i:=1 to m do begin for j:=1 to n do write(a[i,j],' '); writeln; end; write(x=); readln(x); write(c=); readln(c); write(d=); readln(d); if x mod 2 =0 then begin for i:=1 to n do
18

begin y:=a[c,i]; a[c,i]:=a[d,i]; a[d,i]:=y; end else begin for i:=1 to m do begin z:=a[i,c]; a[i,c]:=a[i,d]; a[i,d]:=z; end; end; readln; end.

19