Temă pentru acasă. Pointeri către funcţii

Σχετικά έγγραφα
Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

Metode iterative pentru probleme neliniare - contractii

R R, f ( x) = x 7x+ 6. Determinați distanța dintre punctele de. B=, unde x și y sunt numere reale.

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor

5. FUNCŢII IMPLICITE. EXTREME CONDIŢIONATE.

Laborator 11. Mulţimi Julia. Temă

Integrala nedefinită (primitive)

V.7. Condiţii necesare de optimalitate cazul funcţiilor diferenţiabile

Planul determinat de normală şi un punct Ecuaţia generală Plane paralele Unghi diedru Planul determinat de 3 puncte necoliniare

(a) se numeşte derivata parţială a funcţiei f în raport cu variabila x i în punctul a.

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

Curs 14 Funcţii implicite. Facultatea de Hidrotehnică Universitatea Tehnică "Gh. Asachi"

Seminariile Capitolul X. Integrale Curbilinii: Serii Laurent şi Teorema Reziduurilor

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Subiecte Clasa a VII-a

Curs 1 Şiruri de numere reale

COLEGIUL NATIONAL CONSTANTIN CARABELLA TARGOVISTE. CONCURSUL JUDETEAN DE MATEMATICA CEZAR IVANESCU Editia a VI-a 26 februarie 2005.

Asupra unei inegalităţi date la barajul OBMJ 2006

MARCAREA REZISTOARELOR

SEMINAR 14. Funcţii de mai multe variabile (continuare) ( = 1 z(x,y) x = 0. x = f. x + f. y = f. = x. = 1 y. y = x ( y = = 0

III. Serii absolut convergente. Serii semiconvergente. ii) semiconvergentă dacă este convergentă iar seria modulelor divergentă.

Metode de interpolare bazate pe diferenţe divizate

a n (ζ z 0 ) n. n=1 se numeste partea principala iar seria a n (z z 0 ) n se numeste partea

Curs 4 Serii de numere reale

Sisteme diferenţiale liniare de ordinul 1

Subiecte Clasa a VIII-a

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

Toate subiectele sunt obligatorii. Timpul de lucru efectiv este de 3 ore. Se acordă din oficiu 10 puncte. SUBIECTUL I.

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Algebră (1)

riptografie şi Securitate

Conice. Lect. dr. Constantin-Cosmin Todea. U.T. Cluj-Napoca

Analiza în curent continuu a schemelor electronice Eugenie Posdărăscu - DCE SEM 1 electronica.geniu.ro

a. 11 % b. 12 % c. 13 % d. 14 %

z a + c 0 + c 1 (z a)

III. Reprezentarea informaţiei în sistemele de calcul

Definiţia generală Cazul 1. Elipsa şi hiperbola Cercul Cazul 2. Parabola Reprezentari parametrice ale conicelor Tangente la conice

Functii Breviar teoretic 8 ianuarie ianuarie 2011

Capitolul 4 PROPRIETĂŢI TOPOLOGICE ŞI DE NUMĂRARE ALE LUI R. 4.1 Proprietăţi topologice ale lui R Puncte de acumulare

Seminar 5 Analiza stabilității sistemelor liniare

Ecuaţia generală Probleme de tangenţă Sfera prin 4 puncte necoplanare. Elipsoidul Hiperboloizi Paraboloizi Conul Cilindrul. 1 Sfera.

T R A I A N ( ) Trigonometrie. \ kπ; k. este periodică (perioada principală T * =π ), impară, nemărginită.


Problema a II - a (10 puncte) Diferite circuite electrice

Cursul Măsuri reale. D.Rusu, Teoria măsurii şi integrala Lebesgue 15

Esalonul Redus pe Linii (ERL). Subspatii.

Conice - Câteva proprietǎţi elementare

BARAJ DE JUNIORI,,Euclid Cipru, 28 mai 2012 (barajul 3)

Curs 2 Şiruri de numere reale

Metode Runge-Kutta. 18 ianuarie Probleme scalare, pas constant. Dorim să aproximăm soluţia problemei Cauchy

Să se arate că n este număr par. Dan Nedeianu

2.1 Sfera. (EGS) ecuaţie care poartă denumirea de ecuaţia generală asferei. (EGS) reprezintă osferă cu centrul în punctul. 2 + p 2

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

Sortare. 29 martie Utilizarea şi programarea calculatoarelor. Curs 16

Laborator 6. Integrarea ecuaţiilor diferenţiale

1. Scrieti in casetele numerele log 7 8 si ln 8 astfel incat inegalitatea obtinuta sa fie adevarata. <

RĂSPUNS Modulul de rezistenţă este o caracteristică geometrică a secţiunii transversale, scrisă faţă de una dintre axele de inerţie principale:,

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 1998 Clasa a V-a

Profesor Blaga Mirela-Gabriela DREAPTA

Ecuatii trigonometrice

GEOMETRIE PLANĂ TEOREME IMPORTANTE ARII. bh lh 2. abc. abc. formula înălţimii

Integrale cu parametru

EDITURA PARALELA 45 MATEMATICĂ DE EXCELENŢĂ. Clasa a X-a Ediţia a II-a, revizuită. pentru concursuri, olimpiade şi centre de excelenţă

avem V ç,, unde D = b 4ac este discriminantul ecuaţiei de gradul al doilea ax 2 + bx +

Criptosisteme cu cheie publică III

Probleme pentru clasa a XI-a

CONCURSUL DE MATEMATICĂ APLICATĂ ADOLF HAIMOVICI, 2017 ETAPA LOCALĂ, HUNEDOARA Clasa a IX-a profil științe ale naturii, tehnologic, servicii

Ecuatii exponentiale. Ecuatia ce contine variabila necunoscuta la exponentul puterii se numeste ecuatie exponentiala. a x = b, (1)

Laborator 1: INTRODUCERE ÎN ALGORITMI. Întocmit de: Claudia Pârloagă. Îndrumător: Asist. Drd. Gabriel Danciu

Geometrie computationala 2. Preliminarii geometrice

Criterii de comutativitate a grupurilor

Concurs MATE-INFO UBB, 1 aprilie 2017 Proba scrisă la MATEMATICĂ

Lucrare. Varianta aprilie I 1 Definiţi noţiunile de număr prim şi număr ireductibil. Soluţie. Vezi Curs 6 Definiţiile 1 şi 2. sau p b.

Subiecte Clasa a V-a

Metodele numerice de integrare se clasifică după tipul funcţiei de integrat şi valoarea limitelor de integrare.

SERII NUMERICE. Definiţia 3.1. Fie (a n ) n n0 (n 0 IN) un şir de numere reale şi (s n ) n n0

CONCURSUL INTERJUDEȚEAN DE MATEMATICĂ TRAIAN LALESCU, 2017 Clasa a V-a

1. PROPRIETĂȚILE FLUIDELOR

5.4. MULTIPLEXOARE A 0 A 1 A 2

Principiul incluziunii si excluziunii. Generarea şi ordonarea permutărilor. Principiul porumbeilor. Pri

Orice izometrie f : (X, d 1 ) (Y, d 2 ) este un homeomorfism. (Y = f(x)).

Timp alocat: 180 minute. In itemii 1-4 completati casetele libere, astfel incat propozitiile obtinute sa fie adevarate.

f(x) = l 0. Atunci f are local semnul lui l, adică, U 0 V(x 0 ) astfel încât sgnf(x) = sgnl, x U 0 D\{x 0 }. < f(x) < l +

Olimpiada Naţională de Matematică Etapa locală Clasa a IX-a M 1

Componente şi Circuite Electronice Pasive. Laborator 3. Divizorul de tensiune. Divizorul de curent

Subiecte Clasa a VIII-a

CONCURSUL INTERJUDEŢEAN DE MATEMATICĂ ŞI INFORMATICĂ MARIAN ŢARINĂ. Ediţia a XVII-a, 7 8 Aprilie CLASA a IV-a

SEMINARUL 3. Cap. II Serii de numere reale. asociat seriei. (3n 5)(3n 2) + 1. (3n 2)(3n+1) (3n 2) (3n + 1) = a

Fig Impedanţa condensatoarelor electrolitice SMD cu Al cu electrolit semiuscat în funcţie de frecvenţă [36].

CONCURSUL DE MATEMATICĂ APLICATĂ ADOLF HAIMOVICI, 2016 ETAPA LOCALĂ, HUNEDOARA Clasa a IX-a profil științe ale naturii, tehnologic, servicii

Curs 2 DIODE. CIRCUITE DR

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

CONCURS DE ADMITERE, 17 iulie 2017 Proba scrisă la MATEMATICĂ

CURS 11: ALGEBRĂ Spaţii liniare euclidiene. Produs scalar real. Spaţiu euclidian. Produs scalar complex. Spaţiu unitar. Noţiunea de normă.

Examen AG. Student:... Grupa:... ianuarie 2011

Progresii aritmetice si geometrice. Progresia aritmetica.

Ovidiu Gabriel Avădănei, Florin Mihai Tufescu,

Lectia VI Structura de spatiu an E 3. Dreapta si planul ca subspatii ane

SEMINAR TRANSFORMAREA FOURIER. 1. Probleme

CURS XI XII SINTEZĂ. 1 Algebra vectorială a vectorilor liberi

Transcript:

Fundamentele programării Temă pentru acasă. Pointeri către funcţii I. Considerăm următorul program în care este implementată o metodă foarte simplă de aproximare a valorii maxime a unei funcţii: #include<iostream> #include<math.h> using namespace std; double f(double x){ return (x-1)*(5-x); double g(double t){ return exp(1-t*t); double valmax(double (*pf)(double), double a, double b){ const int N=1000; const double h=(b-a)/n; double vmax=(*pf)(a); for( a+=h; a<=b; a+=h){ double val=(*pf)(a); if(vmax<val) vmax=val; return vmax; int main(void) { cout<<valmax(f,1,5)<<endl; cout<<valmax(g,-10,10)<<endl; return 0; Maximul este determinat de subrutina double valmax(double (*pf)(double), double a, double b) care primeşte funcţia de analizat prin intermediul parametrului pf de tip pointer către funcţii de tip double(double). Exersaţi utilizarea acestui tip de pointer completând programul de mai sus conform cerinţelor următoare: 1. Declaraţi cu typedef tipul Functie care să fie sinonim cu funcţie care primeşte un double şi returnează un double, rescrieţi apoi antetul funcţiei valmax sub forma double valmax(functie *pf, double a, double b) 1

2. In limbajul C pentru a afla adresa unei funcţii nu este nevoie de operatorul adresă, numele unei funcţii fiind o constană care desemnează adresa funcţiei. În C++ această facilitate a fost întărită: pentru a desemna funcţia referită de un pointer nu mai este nevoie de operatorul ţintă, adresa funcţiei fiind sinonimă cu numele ei. In exemplul nostru, instrucţiunea double vmax=(*pf)(a); este echivalentă cu double vmax=pf(a); Modificaţi programul pentru a utiliza această facilitate specifică C++. 3. Definiţi funcţia double metodainjumatatirii(functie *pf, double a, double b) care rezolvă prin metoda înjumătăţirii intervalului ecuaţia f(x) = 0, unde f : [ a, b ] R este o funcţie continuă oarecare cu f(a)f(b) 0. La apelarea metodei, f este ţinta pointerului pf. 4. Implementaţi funcţia double formulatrapezelor(functie *pf, double a, double b) care calculează aproximativ integrala Riemann a unei funcţii f : [ a, b ] R prin formula trapezelor sumată: b a ( 1 f(x)dx h 2 f(a) + 1 N 1 2 f(b) + ) f(x i ), cu h = (b a)/n şi x i = a+ih, pentru i = 0, 1, 2,..., N. Formula se stabileşte prin împărţirea intervalului [ a, b ] în N subintervale [ x i, x i+1 ] şi aproximarea integralei pe un subinterval cu aria trapezului determinat de punctele (x i, 0), (x i, f(x i )), (x i+1, f(x i+1 )) şi (x i+1, 0), adică xi+1 x i i=1 f(x)dx (f(x i) + f(x i+1))h. 2 Funcţia f este transmisă în formulatrapezelor prin pointerul pf, iar N este fixat, N = 1000. 5. Scrieţi o subrutină care estimează variaţia totală a unei funcţii f : [ a, b ] R oarecare. Variaţia totală V b a (f) este definită astfel: V b a (f) = sup N f(x i+1 ) f(x i ), i=0 unde supremumul este luat după toate diviziunile ale intervalului [ a, b ]. : a = x 0 < x 1 <... < x N = b 2

II. Fixăm constanta N = 1000 şi considerăm pe mulţimea M = {1, 2,..., N o relaţie ρ M M dată de funcţia sa de comparaţie bool compro(int a, int b) care întoarce true dacă a M, b M şi aρb, altfel întoarce false. De exemplu, funcţia de comparaţie corespunzătoare relaţiei ρ definită de aρb dacă a b, este următoarea: bool comprodiv(int a, int b){ if(a<1 b<1 a>n b>n) return false; return b%a==0; Se cere să se decidă prin verificarea tuturor cazurilor posibile (metoda forţei brute) dacă o relaţie ρ are proprietăţile unei ordini totale pe M. Parcurgeţi etapele: 1. Definiţi cu typedef tipul Comparatie care să fie sinonim cu funcţie cu două argumente de tip int şi cu rezultat de tip bool ; 2. Definiţi funcţiile i) bool estereflexiva(comparatie *ro) ii) bool esteantisimetrica(comparatie *ro) iii) bool estetranzitiva(comparatie *ro) iv) bool estetotala(comparatie *ro) v) bool esteordinetotala(comparatie *ro) care decid proprietăţile relaţiei ρ. La apelare, pointerul ro are ca ţintă funcţia de comparaţie compro corespunzătoare. Amintim că o relaţie ρ este reflexivă dacă aρa pentru orice a M; este antisimetrică dacă din aρb şi bρa rezultă a = b; este tranzitivă dacă aρb şi bρc implică aρc şi este totală dacă oricare două elemente a şi b din M sunt comparabile (i.e. are loc măcar una dintre situaţiile aρb sau bρa). O relaţie ρ care are toate aceste patru proprietăţi este o relaţie de ordine totală. 3. Determinaţi prin program proprietăţile relaţiilor ρ i M M definite astfel i) aρ 1 b dacă a + b a 2 + b 2 ; ii) aρ 2 b dacă 2a 3b; iii) aρ 3 b dacă a(a 2 ab + 1) b(b 2 ab + 1). III. In contextul de mai sus, definiţi funcţia bool esterelatiedeechivalenta(comparatie *ro) care decide dacă ρ este o relaţie de echivalenţă (adică este reflexivă, simetrică şi tranzitivă). Testaţi următoarele relaţii i) aρ 1 b dacă a + b ab; ii) aρ 2 b dacă suma cifrelor lui a este egală cu suma cifrelor lui b; iii) aρ 3 b dacă prima cifră a lui a este egală cu prima cifră a lui b. 3

IV. In programul următor sortăm (aranjăm în ordine) un tablou de numere întregi prin metoda minimul pe primul loc : în prima etapă aflăm minimul din tot tabloul şi îl mutăm pe primul loc, repetăm apoi procedeul aflând de fiecare dată minimul din partea nesortată şi mutândul pe primul loc al acesteia: #include<iostream> #include<time.h> using namespace std; typedef bool Comparatie(int,int); bool compnumascendenta(int a,int b) { return a<=b; bool compnumdescendenta(int a,int b) { return a>=b; void sorteaza(int tab[], int dim, Comparatie *pcomp ) { for(int i=0;i<dim-1;i++){ int imin=i, vmin=tab[imin]; for(int j=i+1;j<dim;j++){ int valj=tab[j]; if(pcomp(vmin,valj))continue; imin=j; vmin=valj; //mutam minimul pe primul loc if(imin!=i) { tab[imin]=tab[i]; tab[i]=vmin; int genereazadate(int tab[], int dim) { cout<<"\ndate:\n"<<endl; srand ( (unsigned)time(null) ); for (int i=0; i < dim; i++) cout<<(tab[i]=rand()%100)<<endl; return dim; int main(void) { const int dim=30; int tab[dim]; //--- generam numerele pe care le vom sorta genereazadate(tab, dim); char optiune; do{ cout<<"\nalegeti ordinea de sortare:\n"<<endl; cout<<"<a> - numeric ascendenta"<<endl; cout<<"<d> - numeric descendenta"<<endl; cout<<"<s> - stop program"<<endl; 4

cout<<"< >\b\b"; cin>>optiune; switch(optiune){ case A : case a : cout<<"\nsortam ascendent\n"<<endl; sorteaza(tab, dim, compnumascendenta); for (int i=0; i < dim; i++) cout<<tab[i]<<endl; break; case D : case d : cout<<"\nsortam descendent\n"<<endl; sorteaza(tab, dim, compnumdescendenta); for (int i=0; i < dim; i++) cout<<tab[i]<<endl; break; while(optiune!= S && optiune!= s ); cout<<"gata"<<endl; return 0; In subrutina care realizează sortarea void sorteaza(int tab[], int dim, Comparatie *pcomp ) relaţia de ordine este dată de pointerul pcomp care ţinteşte către una dintre cele două funcţii de comparaţie bool compnumascendenta(int a,int b) şi bool compnumdescendenta(int a,int b) care stabilesc ordinea numerică ascendentă sau ordinea numerică descendentă, în acord de opţiunea utilizatorului. Atenţie, funcţiile de comparaţie trebuie să returneze true în cazul de egalitate. 1. Schimbaţi metoda de sortare în minimul pe primul şi maximul pe ultimul loc, aflând în fiecare etapă minimul şi maximul din partea nesortată a tabloului şi mutând minimul pe primul loc şi maximul pe ultimul loc al acesteia. 2. Implementaţi sortarea prin metoda bulelor (bubble sort): parcurgem tot tabloul şi schimbăm între ele elementele vecine care nu sunt în ordine, repetăm această parcurgere până când nu mai apare nici o schimbare. 3. Stabiliţi care dintre cele trei metode de sortare implementate este mai eficientă, determinând prin calcul şi verificând prin program numărul total de comparaţii efectuat la sortarea unui tablou; 4. Definiţi funcţia de comparaţie bool complexdirecta(int a, int b) care precizează ordinea lexicografică directă dintre a şi b: comparăm pe rând prima cifră a lui a cu prima cifră a lui b, dacă sunt egale comparăm a doua cifră a lui a cu a doua a lui b şi aşa mai departe până când găsim cifre distincte sau până epuizăm unul dintre numere. Este mai mic numărul epuizat sau, dacă am găsit cifre distincte, este mai mic numărul care o deţine pe cea mai mică dintre cele două cifre distincte. 5

Următoarele numere sunt în ordine lexicografică directă: 10162 10663 1779 20 20 2125 21253 5390 5. Definiţi funcţia de comparaţie bool complexinversa(int a, int b) care precizeză ordinea lexicografică inversă dintre a şi b, care se stabileşte după acelaşi principiu ca în cazul precedent, cu deosebirea că acum parcurgem numerele de la drepta la stânga: comparăm mai întâi ultima cifră a lui a cu ultima cifră a lui b, ş. a. m. d. Următoarele numere sunt în ordine lexicografică inversă: 7210 14310 7121 43 143 3904 11164 2164 Completaţi meniul afişat de funcţia main astfel încât utilizatorul să poată alege şi sortarea în ordine lexicografică directă sau inversă. V. Sortaţi prin metoda bulelor un tablou de puncte din plan, fiecare punct fiind o structură formată din coordonatele x şi y de tip double. Oferiţi utilizatorului posibilitatea să aleagă una dintre următoarele 4 relaţii de ordine: mai la nord-vest, mai la nord-est, mai la sud-vest sau mai la sudest, unde, de exemplu, (x 1, y 1 ) se afla mai la nord-vest decât (x 2, y 2 ) dacă y 1 > y 2 sau dacă y 1 = y 2 şi x 1 x 2. 6