lucrare de atestat-info

25
-LUCRARE DE ATESTAT - la INFORMATICĂ Realizat de: Coordonator: COLEGIUL NAŢIONAL “SPIRU HARET” TECUCI HULEA ALEXANDRU Prof. GHEORGHIU BOGDAN TECUCI - MAI, 2012-

Upload: alex-hulea

Post on 06-Aug-2015

68 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lucrare de Atestat-Info

-LUCRARE DE

ATESTAT -la INFORMATICĂ

Realizat de: Coordonator:

COLEGIUL NAŢIONAL “SPIRU HARET” TECUCI

HULEA ALEXANDRU Prof. GHEORGHIU BOGDAN

TECUCI

-MAI, 2012-

Page 2: Lucrare de Atestat-Info

TEMA LUCRĂRII

-STUDIU DE CAZ-

MATRICE:INSERĂRI ŞI ELIMINĂRI

DE LINII ŞI COLOANE

1

Page 3: Lucrare de Atestat-Info

CUPRINS

1. Despre programare...............................................................3

2. Motivarea alegerii temei.......................................................3

3. Noţiuni generale despre matrice, suprograme…..................4

4. Abordarea temei……………………………........................5

5. Schema logică…………………………….…......................8

6. Listingul programului……………………....................... 10

7. Schema logică bloc a aplicaţiei…………….......................17

8. Bibliografie…………………………….…........................18

2

Page 4: Lucrare de Atestat-Info

DESPRE PROGRAMARE

Pascal este unul dintre limbajele de programare de referinţă în ştiinţa calculatoarelor, fiind cel care a definit programarea calculatoarelor. Pascal a fost dezvoltat de elveţianul Niklaus Wirth în 1970 pentru a pune în practică programarea structurată, aceasta fiind mai uşor de compilat. Unul dintre marile avantaje este asemănarea 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 maşini 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 -maşină. Există două tipuri mari de translatoare: compilatoarele şi interpretoarele. Modul de lucru al compilatorului este următorul. Se analizează sintactic programul sursă şi se furnizează o listă de erori. După eliminarea erorilor de către programator, se obţine forma binar translatabilă (BT) a programului. Formatul BT înseamnă un număr de module obiect fără legătură între ele. Programul care realizează legăturile dintre module este editorul de legături (linkeditorul). Se obţine forma IMT (Imagine Translatabilă a Memoriei). Este forma care va fi preluată de programul încărcător şi va fi încărcată la o adresă concretă de memorie obţinându-se formatul IMA (Imagine Absolută a Memoriei). In această formă programul poate fi executat. Compilatorul limbajelor de asamblare se numeşte asamblor. Modul de lucru al interpretorului este următorul. 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 următoarei linii. Se observă că diferenţa esenţială dintre compilator şi interpretor se referă la momentul când se face execuţia în raport cu analiza sintactică a programului. La compilator execuţia se face după ce tot programul a fost translatat, la interpretor analiza sintactică a unei linii de program este urmată obligatoriu de execuţia ei. Fiecare din cele două metode de translatare prezintă avantaje şi dezavantaje. Când se foloseşte compilatorul, necesarul de memorie este mai mare (memoria trebuie să conţină atât codul sursă cât şi codul obiect), dar modulele obiect rezultate pot fi catalogate în biblioteci şi folosite la nevoie. În cazul interpretorului este nevoie de memorie relativ puţină, dar execuţia programului este mai anevoioasă deoarece presupune pentru fiecare linie, la fiecare rulare, atât translatarea cât şi execuţia.

MOTIVAREA ALEGERII TEMEI3

Page 5: Lucrare de Atestat-Info

Am ales să realizez acest program, deoarece capitolul Matrice m-a interesat în mod deosebit, având multiple utilizări.

Una dintre aplicaţiile ce urmează a fi prezentate imită cu succes un tabel ce poate fi realizat în baze de date, putând ajuta la înţelegerea acestora. Un altul expune o aplicaţie în cadrul grafurilor. Acestea pot contribui la fixarea unor noi noţiuni, prin reprezentare vizuală.

NOŢIUNI GENERALE

O structură de date reprezintă un ansamblu, o colecţie de date, organizate după anumite reguli, care depind de tipul structurii.

Un tablou este o colecţie de date de acelaşi 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 căreia beneficiem de 2 informaţii

structurale asupra unui element: numărul liniei, respectiv numărul coloanei pe care se află elementul. Matricele pot fi pătrate (numărul de linii= numărul de coloane) sau nepătrate (numărul de linii <> numărul de coloane).

Declarare:Type matrice= array[1..n,1..m] of tip_elemente;Var a:matrice;-n fiind numărul de linii, iar m numărul de coloane

Parcurgerea matricei are loc cu 2 intrucţiuni ”for” şi se poate realiza pe linii(1) sau pe coloane(2):

1. for i:=1 to n do 2. for j:=1 to m do for j:=1 to m do for i:=1 to n do begin write('a[',i,',',j,']='); begin write('a[',i,',',j,']='); readln(a[i,j]); end; readln(a[i,j]); end;

În realizarea programului am utilizat subprograme, acestea definindu-se drept fracţiuni dintr-un program caracterizate prin antet, zonă declarativă şi corpul subprogramului. Acestea pot fi înţelese ca programe în programul iniţial capabile să primească date, să le prelucreze şi să furnizeze rezultate.

Există 2 tipuri de suprograme: funcţii şi proceduri.Subprogramele primesc în antet o serie de parametri formali, aceştia putând fi transmişi

prin valoare sau prin referinţă. Transmiterea prin valoare are loc atunci când în urma modificărilor suferite în timpul rulării subprogramului, parametrul revine la valoarea iniţială.

4

Page 6: Lucrare de Atestat-Info

Transmiterea prin referinţă se particularizează prin cuvântul cheie var în faţa variabilei respective în antetul suprogramului şi presupune modificarea variabilei în urma executării subprogramului.

Funcţia returnează un singur rezultat, în numele ei, numele ei putând fi utilizat direct în expresii de calcul, instrucţiuni de afişare. Tipul funcţiei este tipul rezultatului întors de funcţie.

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 aplicaţiilor ce se vor regăsi î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);

5

Page 7: Lucrare de Atestat-Info

sterge_linie (a,b); 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ă(având transmis numărul

liniei ce va fi şterse ca parametru formal). Procedura parcurge matricea pe linii şi mută liniile cu o poziţie mai sus de la linia următoare liniei ce va fi şterse. Pentru parcurgerea matricii pe linii am folosit 2 structuri repetitive cu număr cunoscut de paşi: 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ă(având transmis numărul coloanei ce va fi şterse ca parametru formal). Procedura parcurge matricea pe coloane şi mută coloanele cu o poziţie spre stanga de la coloana urmatoare coloanei ce va fi şterse. Pentru parcurgerea matricii pe coloane am folosit 2 structuri repetitive cu număr cunoscut de paşi: for. În final ultima coloană va fi ştersă prin dec(m)-prin scaderea numarului de coloane. Lansarea programului se realizează prin combinaţia de taste Ctrl+F9, rezultatele putând fi vizualizate prin combinaţia Alt+F5.

2.INSERAREA DE LINII ŞI COLOANEprogram 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;

6

Page 8: Lucrare de Atestat-Info

end;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ă(având numărul poziţiei

unde va fi inserată linia-x trimis sub formă de parametru formal). Procedura parcurge pe linii matricea, mutând de la n până la linia de pe poziţia x toate liniile cu o poziţie în jos, pentru ca apoi să se insereze linia a[x,j] cu j parcurgând valorile de la 1 la m. Parcurgerea matricei pe linii este realizată cu 2 strucuri ”for”.

7

Page 9: Lucrare de Atestat-Info

Pentru inserarea unei coloane am folosit un subprogram- o procedură (având numărul poziţiei unde va fi inserată coloana-y trimis sub formă de parametru formal). Procedura parcurge pe coloane matricea, mutând de la m până la coloana de pe poziţia y toate coloanele cu o poziţie spre dreapta, pentru ca apoi să se insereze coloana a[i,y] cu i parcurgând valorile de la 1 la n. Parcurgerea matricei pe coloane este realizată cu 2 structuri “for”. Lansarea programului se realizează prin combinaţia de taste Ctrl+F9, rezultatele putând fi vizualizate prin combinaţia 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; A F

A F

8

Start

Citeşte n,m,l n,mnnn,m

k l

k=n

c=m+1

c 1

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

k k+1

Stop

n n-1

Page 10: Lucrare de Atestat-Info

INSERAREA UNEI COLOANE ÎN MATRICE

procedure inserare_coloana (var a:matrice; y:byte);var i,j,k: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 k:= 1 to n do begin write('a[',k,',',y,']=',' '); readln(a[k,y]); end; end; A F

A F A F

9

Start

Citeşte n,m,y

m m+1 j m

j=y-1

k 1 i 1

i=n+1

k=n+1

Stop

Citeşte a[k,y]

k k+1

j j-1 a[i,j] a[i,j-1] i i+1

Page 11: Lucrare de Atestat-Info

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]);

10

Page 12: Lucrare de Atestat-Info

end;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=');

11

Page 13: Lucrare de Atestat-Info

readln(b); 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');

12

Page 14: Lucrare de Atestat-Info

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; 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');

13

Page 15: Lucrare de Atestat-Info

i:=n; 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

14

Page 16: Lucrare de Atestat-Info

begin 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;

15

Page 17: Lucrare de Atestat-Info

repeat 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;

16

Page 18: Lucrare de Atestat-Info

end; 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ă conţinând toate aplicaţiile programului şi fiind accesată în programul principal.

A F

1.Eliminare linie2.Eliminare coloană3.Inserare linie4.Inserare coloană5.Eliminarea tuturor liniilor pare6.Eliminarea tuturor coloanelor impare7.Aplicaţie graf

17

Start

cont:=’DA’

cont=’NU’

8 7 6 5 4 3 2 1

citeşte cont

Stop

Meniu

Page 19: Lucrare de Atestat-Info

8.Aplicaţie listă

Aplicaţia 7 citeşte de la tastatură un graf prin matricea de adiacenţă şi afişează subgraful obţinut prin eliminarea unui nod x citit de la tastatură, prin matricea de adiacenţa a subgrafului.Astfel, graful, apare ca o întruchipare a unei alianţe de ţări, prin eliminarea unui nod acea ţară rupând relaţiile diplomatice cu restul. Aplicaţia 8 citeşte de la tastatură numărul persoanelor din listă şi prin procedura inserare_linie proprietăţile 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 vizualizării şi accesării unei alte aplicaţii are loc daca variabila cont nu este citită drept ‘NU’.

BIBLIOGRAFIE

1. Borland Pascal Help

2. www.hackpedia.info

3. www.wikipedia.com

18

Page 20: Lucrare de Atestat-Info

19