Sunteți pe pagina 1din 20

COLEGIUL NAIONAL SPIRU HARET TECUCI

-LUCRARE DE ATESTAT la INFORMATIC


Realizat de: Coordonator:

HULEA ALEXANDRU

Prof. GHEORGHIU BOGDAN

TECUCI -MAI, 2012-

TEMA LUCRRII
-STUDIU DE CAZMATRICE: INSERRI I ELIMINRI DE LINII I COLOANE

CUPRINS
1. Despre programare...............................................................3 Motivarea alegerii temei.......................................................3
2.

3. Noiuni generale despre matrice, suprograme..................4 4. Abordarea temei........................5 5. Schema logic.......................8 6. Listingul programului....................... 10 7. Schema logic bloc a aplicaiei.......................17 8. Bibliografie.........................18

DESPRE PROGRAMARE
Pascal este unul dintre limbajele de programare de referin n tiina calculatoarelor, fiind cel care a definit programarea calculatoarelor. Pascal a fost dezvoltat de elveianul Niklaus Wirth n 1970 pentru a pune n practic programarea structurat, aceasta fiind mai uor de compilat. Unul dintre marile avantaje este asemnarea cu limbajul natural-limba englez, ceea ce l face limbajul ideal pentru cei care sunt la primul contact cu programarea. Pascal este bazat pe limbajul Algol i a fost denumit astfel n onoarea matematicianului Blaise Pascal, creditat pentru construirea primelor maini de calcul numeric. Programul poate fi privit ca o unitate de operare. Indiferent n ce limbaj este scris, pentru a fi executat, programul trebuie translatat (tradus) n cod -main. Exist dou tipuri mari de translatoare: compilatoarele i interpretoarele. Modul de lucru al compilatorului este urmtorul. Se analizeaz sintactic programul surs i se furnizeaz o list de erori. Dup eliminarea erorilor de ctre programator, se obine forma binar translatabil (BT) a programului. Formatul BT nseamn un numr de module obiect fr legtur ntre ele. Programul care realizeaz legturile dintre module este editorul de legturi (linkeditorul). Se obine forma IMT (Imagine Translatabil a Memoriei). Este forma care va fi preluat de programul ncrctor i va fi ncrcat la o adres concret de memorie obinndu-se formatul IMA (Imagine Absolut a Memoriei). In aceast form programul poate fi executat. Compilatorul limbajelor de asamblare se numete asamblor. Modul de lucru al interpretorului este urmtorul. Se analizeaz sintactic linie cu linie programul. Dac linia de program analizat este corect din punct de vedere sintactic atunci se i execut nainte de a trece la analiza urmtoarei linii. Se observ c diferena esenial dintre compilator i interpretor se refer la momentul cnd se face execuia n raport cu analiza sintactic a programului. La compilator execuia se face dup ce tot programul a fost translatat, la interpretor analiza sintactic a unei linii de program este urmat obligatoriu de execuia ei. Fiecare din cele dou metode de translatare prezint avantaje i dezavantaje. Cnd se folosete compilatorul, necesarul de memorie este mai mare (memoria trebuie s conin att codul surs ct i codul obiect), dar modulele obiect rezultate pot fi catalogate n biblioteci i folosite la nevoie. n cazul interpretorului este nevoie de memorie relativ puin, dar execuia programului este mai anevoioas deoarece presupune pentru fiecare linie, la fiecare rulare, att translatarea ct i execuia.

MOTIVAREA ALEGERII TEMEI


4

Am ales s realizez acest program, deoarece capitolul Matrice m-a interesat n mod deosebit, avnd multiple utilizri. Una dintre aplicaiile ce urmeaz a fi prezentate imit cu succes un tabel ce poate fi realizat n baze de date, putnd ajuta la nelegerea acestora. Un altul expune o aplicaie n cadrul grafurilor. Acestea pot contribui la fixarea unor noi noiuni, prin reprezentare vizual.

NOIUNI GENERALE
O structur de date reprezint un ansamblu, o colecie de date, organizate dup anumite reguli, care depind de tipul structurii. Un tablou este o colecie de date de acelai tip, reunite sub un nume comun (numele tabloului). Tablourile sunt de 2 tipuri: - bidimensionale (se mai numesc i Matrice) -unidimensionale (se mai numesc i Vectori) O matrice este un tip de dat structurat n cadrul creia beneficiem de 2 informaii structurale asupra unui element: numrul liniei, respectiv numrul coloanei pe care se afl elementul. Matricele pot fi ptrate (numrul de linii= numrul de coloane) sau neptrate (numrul de linii <> numrul de coloane). Declarare: Type matrice= array[1..n,1..m] of tip_elemente; Var a:matrice; -n fiind numrul de linii, iar m numrul de coloane Parcurgerea matricei are loc cu 2 intruciuni for i se poate realiza pe linii(1) sau pe coloane(2): 1. for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; 2. for j:=1 to m do for i:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end;

n realizarea programului am utilizat subprograme, acestea definindu-se drept fraciuni dintr-un program caracterizate prin antet, zon declarativ i corpul subprogramului. Acestea pot fi nelese ca programe n programul iniial capabile s primeasc date, s le prelucreze i s furnizeze rezultate. Exist 2 tipuri de suprograme: funcii i proceduri. Subprogramele primesc n antet o serie de parametri formali, acetia putnd fi transmii prin valoare sau prin referin. Transmiterea prin valoare are loc atunci cnd n urma modificrilor suferite n timpul rulrii subprogramului, parametrul revine la valoarea iniial. Transmiterea prin referin se particularizeaz prin cuvntul cheie var n faa variabilei
5

respective n antetul suprogramului i presupune modificarea variabilei n urma executrii subprogramului. Funcia returneaz un singur rezultat, n numele ei, numele ei putnd fi utilizat direct n expresii de calcul, instruciuni de afiare. Tipul funciei este tipul rezultatului ntors de funcie. Procedura returneaz unul sau mai multe rezultate n numele unor variabile:parametri sau variabile globale. Apelul unor proceduri este simplu, adic nu face parte din expresii.

ABORDAREA TEMEI
Subprogramele care constituie fundamentul aplicaiilor ce se vor regsi n schema logic bloc a programului: 1.TERGEREA DE LINII I COLOANE program atestat; type matrice=array[1..10,1..10] of string; var a:matrice; m,n,i,j,d,b:byte; procedure sterge_linie (var a:matrice; l:byte); var k,c:byte; begin for k:=l to n-1 do for c:=1 to m do a[k,c]:=a[k+1,c]; dec(n); end; procedure sterge_coloana (var a:matrice; c:byte); var k,l:byte; begin for k:=c to m-1 do for l:=1 to n do a[l,k]:= a[l,k+1]; dec(m); end; begin writeln('Matrice-Studiu de caz:Eliminari de linii si coloane'); write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Eliminarea unei linii'); repeat write('Introduceti numarul liniei ce va fi eliminata,b='); readln(b); until (b>0) and (b<n+1); sterge_linie (a,b);
6

for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; writeln; writeln('Eliminarea unei coloane'); repeat write('Introduceti numarul coloanei ce va fi eliminata,d='); readln(d); until (d>0) and (d<m+1); sterge_coloana (a,d); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end. Pentru tergerea unei linii am folosit un subprogram- o procedur(avnd transmis numrul liniei ce va fi terse ca parametru formal). Procedura parcurge matricea pe linii i mut liniile cu o poziie mai sus de la linia urmtoare liniei ce va fi terse. Pentru parcurgerea matricii pe linii am folosit 2 structuri repetitive cu numr cunoscut de pai: for. n final ultima linie va fi tears prin dec(n)-prin scaderea numarului de linii. Pentru tergerea unei coloane, am folosit un subprogram- o procedur(avnd transmis numrul coloanei ce va fi terse ca parametru formal). Procedura parcurge matricea pe coloane i mut coloanele cu o poziie spre stanga de la coloana urmatoare coloanei ce va fi terse. Pentru parcurgerea matricii pe coloane am folosit 2 structuri repetitive cu numr cunoscut de pai: for. n final ultima coloan va fi ters prin dec(m)-prin scaderea numarului de coloane. Lansarea programului se realizeaz prin combinaia de taste Ctrl+F9, rezultatele putnd fi vizualizate prin combinaia Alt+F5.

2.INSERAREA DE LINII I COLOANE


program atestat; type matrice=array[1..10,1..10] of string; var i,j,n,m,z,t:byte; a:matrice; procedure inserare_linie (var a:matrice;x:byte); var i,j:byte; begin inc(n); for i:=n downto x do for j:=1 to m do a[i,j]:=a[i-1,j]; writeln('Introduceti valorile de inserat'); for j:=1 to m do begin write('a[',x,',',j,']=',' '); readln(a[x,j]); end; end;
7

procedure inserare_coloana (var a:matrice; y:byte); var i,j:byte; begin inc(m); for j:=m downto y do for i:=1 to n do a[i,j]:=a[i,j-1]; writeln('Introduceti coloana'); for i:= 1 to n do begin write('a[',i,',',y,']=',' '); readln(a[i,y]); end; end; begin writeln('Inserare de linii si coloane'); write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Inserarea unei linii'); write('Introduceti numarul liniei unde va avea loc inserarea,z='); readln(z); inserare_linie (a,z); writeln('Afisarea matricei modificate'); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; writeln; writeln('Inserarea unei coloane'); write('Introduceti numarul coloanei unde va avea loc inserarea,t='); readln(t); inserare_coloana (a,t); writeln('Afisarea matricei modificate'); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end. Pentru inserarea unei linii am folosit un subprogram- o procedur(avnd numrul poziiei unde va fi inserat linia-x trimis sub form de parametru formal). Procedura parcurge pe linii matricea, mutnd de la n pn la linia de pe poziia x toate liniile cu o poziie n jos, pentru ca apoi s se insereze linia a[x,j] cu j parcurgnd valorile de la 1 la m. Parcurgerea matricei pe linii este realizat cu 2 strucuri for.
8

Pentru inserarea unei coloane am folosit un subprogram- o procedur (avnd numrul poziiei unde va fi inserat coloana-y trimis sub form de parametru formal). Procedura parcurge pe coloane matricea, mutnd de la m pn la coloana de pe poziia y toate coloanele cu o poziie spre dreapta, pentru ca apoi s se insereze coloana a[i,y] cu i parcurgnd valorile de la 1 la n. Parcurgerea matricei pe coloane este realizat cu 2 structuri for. Lansarea programului se realizeaz prin combinaia de taste Ctrl+F9, rezultatele putnd fi vizualizate prin combinaia Alt+F5.

SCHEMA LOGIC
TERGEREA UNEI LINII DIN MATRICE procedure sterge_linie (var a:matrice; l:byte); var k,c:byte; begin for k:=l to n-1 do for c:=1 to m do a[k,c]:=a[k+1,c]; dec(n); end;
Star t Citete n,m,l n,mnnn,m k l

k= n c

n-1

Stop

c=m+ 1 a[k,c] c

k+1

a[k+1,c] c+1

INSERAREA UNEI COLOANE N MATRICE procedure inserare_coloana (var a:matrice; y:byte); var i,j,k:byte; begin Start inc(m); for j:=m downto y do for i:=1 to n do a[i,j]:=a[i,j-1]; Citete n,m,y writeln('Introduceti coloana'); for k:= 1 to n do m m+1 begin j m write('a[',k,',',y,']=',' '); readln(a[k,y]); end; end; A
j=y1

k=n+ 1

i=n +1

Stop

Citete a[k,y]

j-1

a[i,j] i

a[i,j-1] i+1

k+1

10

LISTINGUL PROGRAMULUI
program atestat; type matrice=array[1..10,1..10] of string; vector=array[1..10] of string; var b,d,k,p,i,q,j,n,m,z,t,nr,nr1,nr3,nr4,x,y,ig,r,o:byte; nr2,cont:string; a:matrice; v:vector; procedure sterge_linie (var a:matrice; l:byte); var k,c:byte; begin for k:=l to n-1 do for c:=1 to m do a[k,c]:=a[k+1,c]; dec(n); end; procedure sterge_coloana (var a:matrice; c:byte); var k,l:byte; begin for k:=c to m-1 do for l:=1 to n do a[l,k]:= a[l,k+1]; dec(m); end; procedure inserare_linie (var a:matrice;r:byte); var i,j:byte; begin inc(n); for i:=n downto r do for j:=1 to m do a[i,j]:=a[i-1,j]; writeln('Introduceti valorile de inserat'); for j:=1 to m do begin write('a[',r,',',j,']=',' '); readln(a[r,j]); end; 11

end; procedure inserare_coloana (var a:matrice; ig:byte); var i,j:byte; begin inc(m); for j:=m downto ig do for i:=1 to n do a[i,j]:=a[i,j-1]; writeln('Introduceti coloana'); for i:= 1 to n do begin write('a[',i,',',ig,']=',' '); readln(a[i,ig]); end; end; procedure meniu; var p:byte; begin writeln('Bine ati venit!'); writeln('Matrice-Studiu de caz:Inserari si eliminari de linii si coloane'); writeln('Programul contine 8 aplicatii'); writeln('1.Eliminare linie'); writeln('2.Eliminare coloana'); writeln('3.Inserare linie'); writeln('4.Inserare coloana'); writeln('5.Eliminarea tuturor liniilor pare'); writeln('6.Eliminarea tuturor coloanelor impare'); writeln('7.Aplicatie graf'); writeln('8.Aplicatie lista'); repeat writeln('Introduceti numarul aplicatiei dorite'); readln(p); if p=1 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Eliminarea unei linii'); repeat write('Introduceti numarul liniei ce va fi eliminata,b='); readln(b); 12

until (b>0) and (b<n+1); sterge_linie (a,b); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=2 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Eliminarea unei coloane'); repeat write('Introduceti numarul coloanei ce va fi eliminata,d='); readln(d); until (d>0) and (d<m+1); sterge_coloana (a,d); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=3 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Inserarea unei linii'); write('Introduceti numarul liniei unde va avea loc inserarea,z='); 13

readln(z); inserare_linie (a,z); writeln('Afisarea matricei modificate'); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=4 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Inserarea unei coloane'); write('Introduceti numarul coloanei unde va avea loc inserarea,t='); readln(t); inserare_coloana (a,t); writeln('Afisarea matricei modificate'); for i:= 1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=5 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Caz particular-Eliminarea tuturor liniilor pare'); i:=n; 14

while i>1 do begin if i mod 2 =0 then sterge_linie(a,i); i:=i-1; end; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=6 then begin write('Introduceti numarul de linii='); readln(n); write('Introduceti numarul de coloane='); readln(m); writeln('Introducerea matricei'); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln('Caz particular-Eliminarea tuturor coloanelor impare'); j:=m; while j>0 do begin if j mod 2 =1 then sterge_coloana(a,j); j:=j-1; end; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=7 then begin write('Introduceti numarul de noduri ale grafului,n='); readln(n); m:=n; writeln('Introduceti un graf prin matricea de adiacenta'); for i:=1 to n do a[i,i]:='0'; for i:=1 to n-1 do for j:=i+1 to m do begin 15

repeat write('a[',i,',',j,']='); readln(a[i,j]); until (a[i,j]='0') or (a[i,j]='1'); a[j,i]:=a[i,j]; end; repeat write('Nodul ce va fi eliminat/Tara care a intrerupt legaturile diplomatice,x='); readln(x); until (1<=x) and (x<=n); sterge_linie(a,x); sterge_coloana(a,x); writeln('Afisarea noii matrici de adiacenta, in conformitate cu subgraful obtinut'); for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end; if p=8 then begin writeln('Matricea-Lista cu date ale elevilor'); write('Introduceti numarul de elevi,m='); readln(m); n:=0; write('Introduceti numarul de caracteristici,y='); readln(y); for x:=1 to y do begin write('Introduceti o noua caracteristica,nr2='); readln(nr2); repeat write('pe pozitia,nr3='); readln(nr3); until (nr3>=1) and (nr3<=n+1); inserare_linie(a,nr3); for o:=n downto nr3+1 do v[o]:=v[o-1]; v[nr3]:=nr2; end; for i:=1 to n do begin write(v[i],' '); for j:=1 to m do write(a[i,j],' '); writeln; end; repeat 16

write('Introduceti elevul care va fi transferat la alta scoala,nr='); readln(nr); until (nr>=1) and (nr<=m); sterge_coloana(a,nr); for i:=1 to n do begin write(v[i],' '); for j:=1 to m do write(a[i,j],' '); writeln; end; repeat write('Introduceti caracteristica ce va fi eliminata din lista,nr1='); readln(nr1); until (nr1>=1) and (nr1<=n); for i:=nr1 to n do v[i]:=v[i+1]; sterge_linie(a,nr1); for i:=1 to n do begin write(v[i],' '); for j:=1 to m do write(a[i,j],' '); writeln; end; repeat write('Introduceti o noua persoana in lista, pe pozitia,nr4='); readln(nr4); until (nr4>=1) and (nr4<=m+1); inserare_coloana(a,nr4); for i:=1 to n do begin write(v[i],' '); for j:=1 to m do write(a[i,j],' '); writeln; end; writeln('Afisarea listei'); for i:=1 to n do write(v[i],' '); writeln; for j:=1 to m do begin for i:=1 to n do write(a[i,j],' '); writeln; end; end; 17

writeln('Doriti sa vizualizati o alta aplicatie? (DA/NU)'); readln(cont); until cont='NU' end; begin meniu; end.

SCHEMA LOGIC BLOC A PROGRAMULUI


n cadrul programului am folosit 5 proceduri: sterge_linie, sterge_coloana, inserare_linie, inserare_coloana i meniu, aceasta din urm coninnd toate aplicaiile programului i fiind accesat n programul principal.
Start

cont:=DA

Meniu

cont=N U

Stop 1 2 3 4 5 6 7 8

1.Eliminare linie 2.Eliminare coloan 3.Inserare linie 4.Inserare coloan 5.Eliminarea tuturor liniilor pare 6.Eliminarea tuturor coloanelor impare 7.Aplicaie graf 8.Aplicaie list

citete cont

18

Aplicaia 7 citete de la tastatur un graf prin matricea de adiacen i afieaz subgraful obinut prin eliminarea unui nod x citit de la tastatur, prin matricea de adiacena a subgrafului.Astfel, graful, apare ca o ntruchipare a unei aliane de ri, prin eliminarea unui nod acea ar rupnd relaiile diplomatice cu restul. Aplicaia 8 citete de la tastatur numrul persoanelor din list i prin procedura inserare_linie proprietile vizate de examinator. Prin procedura sterge_coloana se terge o persoan din list; prin procedura sterge_linie se terge o proprietate a listei, iar prin procedura inserare_coloana se introduce o persoan n list. Continuarea vizualizrii i accesrii unei alte aplicaii are loc daca variabila cont nu este citit drept NU.

BIBLIOGRAFIE
1. Borland Pascal Help 2. www.hackpedia.info 3. www.wikipedia.com

19

20

S-ar putea să vă placă și