Profesor ndrumtor: Gheorghiu Carmen =MAI 2014= Titlul lucrarii: Matrici.Studiu de caz prelucrari ale valorilor din zonele determinate de diagonale 2 Memoriu ju!i"i#$!i% Am ales aceasta lucrare deoarece tablourile constituie o arte imortanta a algoritmicii! ce sta la ba"a multor alicatii ractice si de laborator# Prelucrarea elementelor din "onele determinate de diagonale este o arte a tablourilor care necesita atentie! concentrare si cunostinte sulimentare# $ Ge&er$'i!$!i TABLOURI Structura de date este o colectie de date inzestrata cu informatii structurale care permit identificarea si selectia componentelor. Componentele unei structuri de date pot fi identificate si selectate fie prin numele, fie prin intermediul relatiilor structurale. Cea mai simpla relatie structurala este pozitia fiecarei componente in cadrul structurii. Asupra unei structuri de date se pot aplica mai multe tipuri de operatii :vizualizarea elementelor structurii sub diferite forme, actualizarea(adaugarea, modificarea sau stergerea unei componente), imbogatirea structurala(prin adaugarea unor informatii de legatura) sortare(aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu de ordonare. Din punct de vedere al continutului, structurile pot fi: -omogene(toate componentele structurii sunt de acelasi tip) -neomogene(componentele structurii sunt de tipuri diferite) in functie de modul in care sunt memorate structurile de date se impart in doua mari categorii: -Structuri interne, sunt create in memoria interna A! a sistemului, si au un caracter temporar, datorita faptului ca memoria interna este volatila. % -Structuri e"terne, sunt depozitate pe un suport de memorie e"terna (#ard- dis$.flopp%-dis$), avand astfel un caracter permanent. TABLOURI BIDIMENSIONALE & matrice este un tabel cu elemente de acela'i tip, dispuse pe linii 'i coloane. Datorit( acestei a'ez(ri a elementelor, o matrice este de fapt un tablou bidimensional. )iecare element al matricii se afl( pe o anumit( linie 'i pe o anumit( coloan(. *ozi+ia unui element pe linie se mai nume'te 'i indicele linie, iar pozi+ia elementului pe coloan( se mai nume'te 'i indice de coloan(. Dac( not(m variabila matrice cu a, atunci elementul de pe linia i 'i coloana j ,n matricea a se noteaz( cu a-i,j.. /lustrez ,n continuare o matrice a cu 0 linii 'i 1 coloane, av2nd ca elemente numere naturale. Se observ( cum fiecare element e reprezentat de dou( coordonate. De e"emplu a-0.-3. 4 56, asta ,nseamn( c( elementul de pe linia 0 'i coloana 1 este 56. & variabil( matrice se declar( asem(n(tor cu o variabil( vector, cu deosebirea c( ,n loc de num(rul ma"im de elemente, trebuie sa preciz(m dou( valori: num(rul ma"im de linii 'i num(rul ma"im de coloane. Tip nume[nr1][nr2]; Dac( am declarat o matrice a cu ma"im 56 linii 'i 57 coloane, asta nu ,nseamn( c( trebuie s( folosim toate cele 576 de elemente ale sale. A'a cum ,n cazul unui vector defineam ca variabil( un num(r real de elemente & ' 2 $ % & coloana linia (num(rul elementelor efectiv folosite), la fel pentru o matrice a vom defini dou( variabile: un num(r real de linii 'i un num(r real de coloane, notate de obicei cu n 'i m. 8n aceste condi+ii, ,n mod implicit indicii de linie vor fi 5,3...n iar cei de coloan( vor lua valori de la 5,3...m. De e"emplu pentru o matrice a cu n linii 'i m coloane, elementele ei sunt: a-5,5., a-5,3., a-5,0., ..., a-5,n. linia 5 a-3,5., a-3,3., a-3,0., 9, a-3,n. linia 3 9999999999999999999999999. a-m,5., a-m,3., a-m,0., 9, a-m,n. linia n Parcurgerea unei matrici Consider(m o matrice a, cu n linii 'i m coloane. *arcurgem ,ntr-un ciclu liniile i45, 3, ..., n.*entru fiecare linie i, parcurgem ,ntr-un alt ciclu coloanele acesteia j45, 3, ..., m. *entru fiecare valoare a lui i 'i j :vizit(m ; elementul a-i,j., de pe linia i 'i coloana j. *rezint ,n continuare algoritmul de parcurgere, precum 'i ordinea ,n care vor fi :vizitate; elementele matricii a. Pentru i de la 1 la n execut Pentru j de la 1 la m execut <prelucreaz a[i,j]> i45 j45 a-5,5. j43 a-5,3. 999999999. j4m a-5,m. i43 j45 a-3.5. j43 a-3,3. .................................... j4m a-3,m. ................................... i4n j45 a-n,5. j43 a-n,3. .................................... j4m a-n,m. Citirea unei matrici de la tastatur Citim mai ,n2i num(rul de linii 'i coloane, n respectiv m, apoi pentru a citi elementele matricii a folosim algoritmul de mai sus: parcurgem ,n dou( ( cicluri linile i45, 3, ..., n 'i coloanele j45, 3, ..., m 'i pentru fiecare linie i 'i coloan( j, citim elementul a-i,j.. Pentru i de la 1 la n execut Pentru j de la 1 la m execut Citete (a[i,j]) Citirea unei matrici dintr-un fiier *entru a ,nc(rca o matrice dintr-un fi'ier este necesar s( parcurgem fi'ierul dup( care s( copiem datele ,n matrice. S( presupunem c( fi'ierul se nume'te Date.in 'i pe prima linie sunt trecute num(rul de linii 'i de coloane ale matricii (n 'i m). *e urm(toarele n linii se g(sesc c2te m numere ce reprezint( elementele matricei, numere ,ntregi, desp(r+ite printr-un spa+iu. Afiarea unei matrici )olosim tot idea algoritmului de parcurgere descris anterior, la citirea unei matrici. *entru a afi'a fiecare linie a matricii pe un r2nd de ecran vom proceda ,n felul urm(tor: parcurgem ,ntr-un ciclu liniile i45, 3, ..., n 'i pentru fiecare linie i afi'(m elemenele liniei i pe r2nd nou al ecranului 'i mut(m cursorul la ,nceputul r2ndului urm(tor. <om proiecta apoi un alt ciclu, ,n care parcurgem coloanele j45, 3, ..., m ale liniei i, 'i la fiecare pas afi'(m elementul a-i,j. cu c2te un spa+iu ,ntre ele. I&mu'!ire$ $ (ou$ m$!ri#i /nmultimea este posibila daca numarul de coloane de la prima matrice este egal cu numarul de linii de la a doua martice. /nmultirea dintre doua matrici se face inmultind ementele de pe o linie de la prima matrice cu elementele de pe o coloana de la a doua matrice. Aici vom inmulti o matrice 0=0 (de ordin 0 40 r2nduri, 0 coloane) cu alta matrice 0=0 (de ordin 040 r2nduri, 0 coloane). !atrice A !atrice > a55 a53 a50 a35 a33 a30 a05 a03 a00 " b55 b53 b50 b35 b33 b30 b05 b03 b00 !atricea rezultat( va fi o matrice 0=0. <a trebui s( calculeze fiecare celul( a matricei rezultat separat. S( presupunem rezultatul va fi o martice notata cu ?. ) *asul 5: Pentru a calcula X ?55 este celula ,n cazul ,n care ,mbin( primul r2nd (linie), cu prima coloan(. Deci, ,n scopul de a calcula rezultatul vom folosi primul r2nd(linie) din matricea A, 'i prima coloana dim matricea >. !atricea A !atricea > ezulta matricea ? a55 a53 a50 a35 a33 a30 a05 a03 a00 @ b55 b53 b50 b35 b33 b30 b05 b03 b00 4 "55 "53 "50 "35 "33 "30 "05 "03 "00 Acum, "55 poate fi calculat ca ! " a#$ % a&#$& % a'#$' *asul 3: Pentru a calcula !& "53 este celula ,n cazul ,n care ,mbin( primul r2nd(linie) cu a doua coloan(. Deci, ,n scopul de a calcula rezultatul vom folosi primul r2nd din matricea A 'i a doua coloana din matricea > !atricea A !atricea > ezulta matricea ? a55 a53 a50 a35 a33 a30 a05 a03 a00 @ b55 b53 b50 b35 b33 b30 b05 b03 b00 4 "55 "53 "50 "35 "33 "30 "05 "03 "00 Acum, "53 poate fi calculat ca !& " a#$& % a&#$&& % a'#$'& Analog se calculeaza !'4a#$' % a&#$&' % a'#$''. ezultatul este: a55@b55Aa53@b35Aa50@ b05 a55@b53Aa53@b33Aa50@ b03 a55@b50Aa53@b30Aa50@ b00 a35@b55Aa33@b35Aa30@ b05 a35@b53Aa33@b33Aa30@ b03 a35@b50Aa33@b30Aa30@ b00 a05@b55Aa03@b35Aa00@ b05 a05@b53Aa03@b33Aa00@ b03 a05@b50Aa03@b30Aa00@ b00 * Re)o'%$re$ !eore!i#*
+n re"olvarea alicatiei am aelat la o rocedura ,meniu- care ofera utili"atorului osibilitatea alegerii uneia dintre otiunile existente "0-Introducere date"<<endl; "1-Verificarea proprietatii de simetrie"; "2-Calculul ma a val. pp de D.D.S."; "3-Calculul min si ma de S.D.S."; "!-"arasire pro#ram"; Pentru fiecare otiune! am construit subrograme adecvate! care re"olva eficient cerintele# Astfel! am construit func.iile: /introducere /verif /ma /det /meniu
0 '1 '' Li!i&+,u' -ro+r$mu'ui. $include<iostream.%& $include<conio.%& $include<mat%.%& int a'10('10()n; void introducere*+ , int i)-; cout<<"Introduceti dimensiunea matricii"; cin&&n; for*i.1;i<.n;i//+ for*-.1;-<.n;-//+ , cout<<"a'"<<i<<"('"<<-<<"(."; cin&&a'i('-(; 0 0 int verif*int a'10('10()int n+ , int i)-; for*i.1;i<.n-1;i//+ for*-.i/1;-<.n;-//+ if*a'i('-(1.a'-('i(+ return 0; return 1; 0 float ma*int a'10('10()int n+ , int i)-)s.0)nr.0; for*i.1;i<.n-1;i//+ for*-.1;-<.n-i;-//+ '2 if*s2rt*a'i('-(+..int*s2rt*a'i('-(+++ , nr//; s.s/a'i('-(; 0 if*nr..0+ return 0; else return *float+s3nr; 0 void det*int a'10('10()int n+ , int i)-)min.a'2('n()ma.a'2('n(; for*i.3;i<.n;i//+ for*-.n-i/2;-<.n;-//+ if*a'i('-(<min+ min.a'i('-(; else if*a'i('-(&ma+ ma.a'i('-(; cout<<"min."<<min<<endl; cout<<"ma."<<ma; 0 void meniu*+ ,c%ar c)4; float t; do , clrscr*+; cout<<"0-Introducere date"<<endl; cout<<"1-Verificarea proprietatii de simetrie"<<endl; cout<<"2-Calculul ma a val. pp de D.D.S."<<endl; cout<<"3-Calculul min si ma de S.D.S."<<endl; cout<<"!-"arasire pro#ram"<<endl; cout<<"Introduceti optiunea5 "; cin&&c; '$ if*c..606+ , introducere*+; 0 if*c..616+ , if*verif*a)n++ cout<<"7atricea este simetrica"; else cout<<"7atricea nu este simetrica"; cout<<endl; cout<<"apasati o litera"; cin&&4; 0 if*c..626+ , t.ma*a)n+; if*t&0+ cout<<"ma."<<ma*a)n+; else cout<<"8u sunt valori pp D.D.S."; cout<<endl; cout<<"apasati o litera"; cin&&4; 0 if*c..636+ , det*a)n+; cout<<endl; cout<<"apasati o litera"; cin&&4; 0 04%ile*c1.6!6+; 0 void main*+ , meniu*+; 0 '% /i0'io+r$"ie '#2aite 3#! Prata 4t#! 3artin 5# !-C Primer Plus-! 6o7ard 2# 4ans 8 C1! '0*( 2#9amsa :#! :lander ;#/ <otul desre C si C==# 3anual fundamental de rogramare in C si C==# <eora 2112 $#4childt 6# > C manual comlet# <eora '00* %# 4childt 6# > C== manual comlet# <eora '00* &#:ernighan ?#! Ritchie 5# > <he C Programming ;anguage! Printice 6all!'0** (#Cristea @#! :alis" E#! Giumale C#! Panoiu A#/ ;imbaBul C standard! <eora '002 )#3arian Gh#! si alti/ 3odele de grile entru examenele de diloma si absolvire! Editura Cniversitaria 211% +4?N 0)$/*1%$/&1$/$ *#Patrascoiu D#! 3arian Gh#! 3itroi N# > Elemente de grafuri si combinarorica# 3etode! algoritmi si rograme! Editura A;; '00$ +4?N 0)$/&)'/1')/E 0# Patrascoiu D#! 3itroi N# ! 3arian Gh#/ ;imbaBul C! <eorie si rograme! Editura 3icrocomuter 4ervice! Craiova! '00%# '1#Petrovici @#! Goicea A# > Programare in limbaBul C! Ed# <ehnica '0** ''#3arian Gh#! ?adica C#! ;ascu 3#!+ordache 4#/;imbaBul C/Alicatii! Editura 4irit Romanesc! Craiova '00) '2#3ocanu 3#! 3arian Gh#! ?adica +#! C#! ?adica P#! C# / $$$ robleme de rogramare! Editura <EDRA! ?ucuresti! '00$# '& Cu-ri& '#<itlul lucrariiFFFFFFFFF#' 2#3emoriu BustificativFFFFFF##2 $#GeneralitatiFFFFFFFFFF$ %#Re"olvare teoreticaFFFFFF##* &#;isting/ul rogramuluiFFFFF'' (#?ibliografieFFFFFFFFF#'% '(