2. Curs 2. Structuri de control_f92f845e32c0bed57bad02c5e92a4979.pdf
Document Details
Uploaded by WorthZombie
Universitatea Politehnica din București
Tags
Full Transcript
Informatică Aplicată, Curs 2 [email protected] ✓ GRAFICĂ 2D ȘI 3D ✓ FUNCȚII DEFINITE DE UTILIZATOR ✓IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI. I. STRUCTURA SECVENȚIALĂ Programarea stru...
Informatică Aplicată, Curs 2 [email protected] ✓ GRAFICĂ 2D ȘI 3D ✓ FUNCȚII DEFINITE DE UTILIZATOR ✓IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI. I. STRUCTURA SECVENȚIALĂ Programarea structurată: II. STRUCTURA ALTERNATIVĂ III. STRUCTURA REPETITIVĂ 1. GRAFICA 2D Reprezentarea grafică 2D: plot, plotyy, semilogx, semiology, loglog, bar, barh, hist, stairs, stem, scatter, rose, polar, errorbar, pie, area, fill, comet, … etc. o Se bazează pe doi vectori, unul pentru axa 0x, celălalt pentru axa 0y, care definesc un set de puncte în plan. o Funcții definite explicit: y=f(x), xϵ[a; b] plot o Funcții definite implicit: F(x,y(x))=0,y = y(x), xϵ[a; b] ezplot 2D: o Funcții definite parametric: x = x(t), y = y(t), tϵ[a; b] plot o Funcții definite în coordinate polare: r = f(Ɵ), Ɵϵ[Ɵ1; Ɵ2] polar(teta,r) În general, pentru a realiza o reprezentare grafică, trebuie parcurse etapele următoare: 1. Pregătirea datelor: 2. Apelarea unei funcţii elementare de plotare: 1. GRAFICA 2D 3. Selectarea caracteristicilor liniei şi markerului: 4. Setarea limitelor axelor, afisare grid: 5. Completarea graficului cu etichete pe axe, legendă, text: plot: Generează grafice 2-D cu scalare liniară a axelor loglog: Generează grafice cu scalare logaritmică a axelor semilogx: Generează grafice cu scalare liniară a axei y şi cu scalare logaritmică a axei x semilogy: Generează grafice cu scalare liniară a axei x şi cu scalare logaritmică a axei y plotyy: Generează grafice cu dublă reprezentare a axei y (pe stânga şi pe dreapta) ezplot: Se utilizează pentru reprezentarea funcţiilor date sub formă parametrică. De exemplu: >> ezplot('x.^2/16+y.^2/3-6',[-15 15]) polar: Pentru cazul în care variabilele sunt exprimate în coordonate polare 1. GRAFICA 2D Forma generală: plot(x, y, 'stil') o Prin stil se specifică o serie de opțiuni legate de stilul liniei ce unește punctele graficului, culoarea, grosimea și eventualele marcaje folosite. o Vectorii x și y trebuie să conțină același număr de puncte. o Prin comanda plot(y) graficul obținut este o reprezentare a vectorului y în raport cu numărul de ordine al elementului. o Funcțiile de plotare acceptă argumente de tip caracter care specifică stilul liniei, simbolurile utilizate pentru marker, culoarea etc. Specificarea culorii şi dimensiunii liniilor Caracteristicile liniilor se pot controla prin specificarea unor valori pentru proprietăţile linilor: LineWidth – specifică lăţimea unei linii. MarkerEdgeColor – setează culoarea markerului sau culoarea marginilor markerului în cazul anumitor forme (cerc, pătrat etc.) MarkerFaceColor – setează culoarea interiorului markerelor. MarkerSize – specifică dimensiunea markerului. 1. GRAFICA 2D - EXEMPLE Exemplul 1: Exemplul 2a: Plotarea cu axa Y dublă Comanda plotyy permite crearea unor grafice pentru două seturi de date şi cu reprezentare dublă a axei Y, pe partea stângă şi pe partea dreaptă. 1. GRAFICA 2D - EXEMPLE Exemplul 2b: Plotarea cu axa Y dublă Pentru Matlab se recomandă utilizarea funcției: yyaxis 1. GRAFICA 2D – Setarea parametrilor axelor o Există numeroase situații când este necesar un control mai strict al scalării. Acesta poate fi realizat cu comanda axis, având sintaxa: axis([xmin xmax ymin ymax]), unde: xmin este valoarea minimă pe axa 0x și xmax – valoarea maximă pe axa 0x, ymin – valoarea minimă pe axa 0y și ymax – valoarea maximă pe axa 0y. o La apelarea comenzii plot, sunt setate automat limitele axelor şi gradarea acestora, însă se pot folosi şi setările utilizatorului astfel: o axis - permite scalarea automată a axelor și afișează limitele axelor. o axis('auto’) - permite scalarea automată a axelor. o axis([x_left, x_right, y_infer, y_sup]) o axis equal sau axis('equal’) - scalează axele cu unitatea pe axa Ox egală cu unitatea de pe axa Oy. o axis square sau axis('square’) - scalează axele astfel încât graficul să se încadreze într-un pătrat. o axis off sau axis('off’) - nu mai afișează axele graficului Exemplu: 1. GRAFICA 2D – Afişarea unor grafice multiple în aceeaşi fereastră grafică Exemplul 3: Funcţia subplot(m,n,i) desparte fereastra de tip figură într-o matrice m x n de mici subploturi (subgrafice) şi selectează subplotul i ca grafic curent. 1. GRAFICA 2D – Personalizarea graficelor o GNU Octave-ul / MATLAB-ul furnizează comenzi de etichetare a fiecărei axe şi de plasare a unui text în orice loc din grafic. Prin utilizarea funcţiei text se poate plasa un text (şir de title Adaugă un titlu caractere) oriunde pe grafic. xlabel Adaugă o etichetă pe axa x Exemplul 4: ylabel Adaugă o etichetă pe axa y zlabel Adaugă o etichetă pe axa z legend Adaugă o legendă text Afişează un text la o locaţie specificată gtext Plasează textul pe grafic utilizând mouse-ul Plasarea textului în mod interactiv cu ajutorul mouse-ului >> gtext(‘text’) 1. GRAFICA 3D o Funcții definite explicit: z=f(x,y), xϵ[a; b], yϵ[c; d] o Funcții definite implicit: f(x,y)=0 3D: o Funcții definite parametric: x = x(t), y = y(t), z = z(t), tϵ[a; b] o Funcții definite în coordinate cilindrice/sferice - surf, mesh, surfc, meshc - ezsurf, ezcontour, ezmesh - plot3 *pentru indicaţii privind utilizarea lor se tastează help comanda, de exemplu: help surf în linia de comandă a GNU Octave-ului / MATLAB. 1. GRAFICA 3D Exemplul 5: Funcția colormap('paleta') care are ca efect setarea paletei de culori, codul de culori presetate pentru 'paleta' fiind: 'jet', 'hsv', 'hot', 'spring', 'summer', 'autumn', 'winter', cool', 'copper', 'gray', 'bone', 'pink'; vezi help colormap. Implicit, colormap este setat pe 'jet'. 1. GRAFICA 3D – Crearea de grafice tip contur Funcţiile contour şi contour3 afişează contururi 2-D şi 3-D. Pentru a seta numărul de niveluri de contur (implicit se realizează automat pe baza valorilor minime şi maxime) se foloseşte un argument suplimentar opţional. Exemplul 6: *afişează 20 de contururi ale funcţiei într-o vedere bidimensională. 1. GRAFICA 3D Exemplul 7: Să se reprezinte grafic suprafaţa descrisă de ecuaţiile: Se generează valorile pentru parametrii r și Ɵ Se generează grila perechilor ordonate (r, Ɵ) Se calculează valorile coordonatelor carteziene ale punctelor de pe suprafață Se reprezintă graficul 3D cu funcția mesh 2. FUNCȚII, SCRIPTURI ȘI FUNCȚII DEFINITE DE UTILIZATOR ✓ eig - calculează valorile și vectorii proprii ai unei matrice pătrate. Sintaxa: V=eig(A) ✓ svd - returnează valorile singulare ale unei matrice. Sintaxa: d=svd(X) 2. FUNCȚII, SCRIPTURI ȘI FUNCȚII DEFINITE DE UTILIZATOR Funcții FILE: funcții “specializate” pe domenii de lucru cu extensia “.m” Structura: o Linia de definire a funcției o Textul Help-ului o Corpul funcției 2. FUNCȚII, SCRIPTURI ȘI FUNCȚII DEFINITE DE UTILIZATOR Linia de definire a funcției - această linie informează programul de calcul că fișierul conține o funcție și specifică argumentele. Forma generală: function [param_ieşire]=nume_funcţie(param_intrare) unde: function – este cuvânt cheie care declară fișierul ca fișier funcție (obligatoriu); nume_functie – numele funcției, adică numele sub care se salvează fișierul, fără extensie; param_iesire – parametrii de ieșire, care trebuie separați cu virgulă și cuprinși între paranteze drepte; param_intrare – parametrii de intrare, care trebuie separați cu virgulă și cuprinși între paranteze rotunde. 2. FUNCȚII, SCRIPTURI ȘI FUNCȚII DEFINITE DE UTILIZATOR Textul Help-ului: se poate crea un comentariu prin introducerea uneia sau a mai multor linii de comentariu, fiecare linie începând cu "%“. Corpul funcției – conține toate instrucțiunile care permit efectuarea calculelor și asignează valori argumentelor de ieșire. Exemplul 8: Să se scrie o funcție cu care să se determine n!: *pwd - list the pathway to the current directory 3. IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI o Pentru rezolvarea unei anumite probleme, într-un limbaj de programare trebuie să se implementeze un algoritm proiectat pentru problema respectivă. o Prelucrarea datelor se realizează cu ajutorul instrucţiunilor instrucţiunea descrie un proces de prelucrare pe care un calculator îl poate executa. Formularea problemei o Datele de intrare reprezintă toate informațiile necesare pentru rezolvarea problemei respective. Date de intrare o Datele de ieșire reprezintă datele finale care rezultă în urma aplicării algoritmului de calcul asupra datelor de intrare. Algoritm *Algoritmul de calcul poate să furnizeze și o serie de rezultate intermediare, care au relevanță doar în contextul etapelor intermediare ale algoritmului. Date de ieșire * Utilizatorul, pe baza problemei de rezolvat, va decide care din rezultatele intermediare reprezintă și datele de ieșire relevante Soluția problemei pentru soluția problemei. Programarea structurată o Se bazează pe teorema de structură a lui Corrado Böhm şi Giuseppe Jacopini, teoremă care precizează că orice program de calcul de tip flux (având un singur punct de început şi un singur punct de terminare a execuţiei) poate fi reprezentat ca o combinație a trei structuri de control fundamentale (structuri pentru controlul fluxului): I. STRUCTURA SECVENȚIALĂ Intrare Ieșire Problemă de II. STRUCTURA ALTERNATIVĂ Informatică Informatică III. STRUCTURA REPETITIVĂ Structura secvențială → este o înșiruire de secvențe de prelucrare (instrucțiuni), plasate una după alta, în ordinea în care se dorește execuția acestora EXEMPLU: Schema logică pentru 2 structura secvențială Fie funcția: 𝑓 𝑥 = −𝑥 ∙ 𝑒 −𝑥. Știind că 𝑥 ∈ −𝜋; 𝜋 să se reprezinte grafic valorile funcției. Instrucțiune 1 x = -pi: 0.01: pi; Instrucțiune 2 fx = -x.*exp(-x.^2); plot(x,fx) Instrucțiune 3 Structura alternativă → instrucțiunile se execută în mod alternativ; determină programele să testeze diferite condiții și în funcție de acestea să decidă execuția anumitor comenzi. Schema logică pentru structura alternativă Schema logică pentru structura alternativă cu o ramură (if) cu două ramuri (if … else) Intrare Intrare DA NU DA NU Condiție Condiție Instrucțiune 1 Instrucțiune 1 Instrucțiune 2 Instrucțiune 2 Ieșire Ieșire Structura alternativă – instrucțiunea de decizie multiplă: if – elseif - else Schema logică Intrare Condiție DA 1 Instrucțiune 1 * Definirea condițiilor logice se face cu ajutorul: ✓ operatorilor relaționali: =,==, ~= NU ✓ operatorilor logici: &&, || Condiție DA Instrucțiune 2 2 NU Instrucțiune 3 Ieșire Structura iterativă (repetitivă) → Instrucțiunile se execută în mod iterativ, în funcție de valoarea curentă a unui contor i, care la inițializare are valoarea i = imin. → Ieșirea din bucla iterativă se realizează după un număr cunoscut de iterații, atunci când se cunoaște valoarea maximă a contorului: instrucțiunea for. → Ieșirea din bucla iterativă se realizează după un număr necunoscut de iterații printr-un test inițial (instrucțiunea while), sau final (instrucțiunea do-until – doar în GNU Octave). Instrucțiunea for EXEMPLE: 1. Se dă șirul de termen general: 𝑥𝑛 = 𝑛+1 , 𝑛 ∈ ℕ∗. 3𝑛 Să se reprezinte grafic primii 200 de termeni ai Schema logică șirului. Intrare for i = 1:200 i = imin xn(i) = (i+1)/3/i; end plot(1:200,xn) DA i > tic funcţii care permit cronometrarea >> ps=ones(1,7); timpului de execuţie a >>for i=2:7 instrucţiunilor cuprinse între ele ps(i)=ps(i-1)*i; >>endfor >>f=ps(7) >> toc Această buclă poate fi evitată prin utilizarea setului de instrucţiuni: >>n=1:7; ps=prod(n) % timpul de execuţie este mult mai scurt (avantajul limbajului de programare vectorizat al GNU Octave-ului / MATLAB-ului) 3. IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI Să se construiască matricea A(i,j), 10x10, în care elementele de pe diagonala să fie 1, elementele pentru care i>j să fie egale cu i-j iar cele pentru care i>for i=1:10 >>for j=1:10 if i==j A(i,j)=1 elseif i>j A(i,j) = i-j; else A(i,j)=j-i; endif >>endfor >>endfor 3. IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI n 1 Se dă şirul definit de termenul general , cu n =1,2,...∞. xn = 1 + n Din reprezentarea grafică a termenilor se poate observa că şirul tinde către o valoare finită (e=2,7183). Se pot formula două probleme: 1.Să se determine rangul termenului care aproximează limita şirului (când se cunoaşte valoarea acesteia) cu o precizie impusă(0.001) – impunând ca şi condiţie de oprire diferenţa: n 1 1 + − e delta = 0.001 n 2. Să se determine rangul termenului care aproximează limita şirului dacă nu se cunoaşte valoarea acesteia - impunând condiţia ca diferenţa dintre două valori consecutive să fie mai mică decât o valoare specificată: n n +1 1 1 1 + − 1 + 10 − 7 n n +1 3. IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI >>n=1;delta=0.5; >>while (delta>=0.001) >>n=n+1; >> delta=abs((1+1/n)^n-exp(1)); >>endwhile >>[n] >>n=1;delta=0.5; >>while (delta>=10^-3) >>xn1=(1+1/n)^n; >>n=n+1; >>xn2=(1+1/n)^n; delta=abs(xn2-xn1); >>endwhile >>[n] 3. IMPLEMENTAREA STRUCTURILOR DE CONTROL AL FLUXULUI Să se reprezinte funcția: sin (x 2 + y2 ) TEMĂ (4 p): z= în EXCEL. x=-10:10, y=-10:10 (x 2 + y2 )