Declaraţii de variabile, tipuri, funcţii

Σχετικά έγγραφα
Curs 10 Funcţii reale de mai multe variabile reale. Limite şi continuitate.

Metode iterative pentru probleme neliniare - contractii

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

Integrala nedefinită (primitive)

Functii definitie, proprietati, grafic, functii elementare A. Definitii, proprietatile functiilor X) functia f 1

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

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

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

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

Aplicaţii ale principiului I al termodinamicii la gazul ideal

Curs 1 Şiruri de numere reale

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

Curs 4 Serii de numere reale

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

MARCAREA REZISTOARELOR

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

riptografie şi Securitate

Laborator 4 suport teoretic Tipuri de date utilizate în limbajul de programare C.

Instructiunea while. Forma generala: while (expresie) instructiune;

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

Laborator 11. Mulţimi Julia. Temă

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

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

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

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

Subiecte Clasa a VIII-a

5.5. REZOLVAREA CIRCUITELOR CU TRANZISTOARE BIPOLARE

V O. = v I v stabilizator

Metode de interpolare bazate pe diferenţe divizate

5.4. MULTIPLEXOARE A 0 A 1 A 2

Subiecte Clasa a VII-a

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

Curs 2 DIODE. CIRCUITE DR

Sisteme diferenţiale liniare de ordinul 1

DISTANŢA DINTRE DOUĂ DREPTE NECOPLANARE

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

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


2. Circuite logice 2.4. Decodoare. Multiplexoare. Copyright Paul GASNER

Limbaje de Programare Curs 3 Iteraţia. Reprezentare internă. Operatori pe biţi

III. Reprezentarea informaţiei în sistemele de calcul

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

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

1.7. AMPLIFICATOARE DE PUTERE ÎN CLASA A ŞI AB

CARACTERISTICILE LIMBAJULUI DE PROGRAMARE

Esalonul Redus pe Linii (ERL). Subspatii.

* K. toate K. circuitului. portile. Considerând această sumă pentru toate rezistoarele 2. = sl I K I K. toate rez. Pentru o bobină: U * toate I K K 1

Valori limită privind SO2, NOx şi emisiile de praf rezultate din operarea LPC în funcţie de diferite tipuri de combustibili

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


TEMA 9: FUNCȚII DE MAI MULTE VARIABILE. Obiective:

Teme de implementare in Matlab pentru Laboratorul de Metode Numerice

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

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

Foarte formal, destinatarul ocupă o funcţie care trebuie folosită în locul numelui

Erori si incertitudini de măsurare. Modele matematice Instrument: proiectare, fabricaţie, Interacţiune măsurand instrument:

Capitolul 4. Integrale improprii Integrale cu limite de integrare infinite

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

Seminar 5 Analiza stabilității sistemelor liniare

Studiul elementelor de bază din limbajul C++ - continuare

4. Măsurarea tensiunilor şi a curenţilor electrici. Voltmetre electronice analogice

Editura EduSoft Bacău

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

28. SUPRADEFINIREA OPERATORILOR

Lucrarea de laborator nr. 1

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

Asupra unei inegalităţi date la barajul OBMJ 2006

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

Fișiere de tip Script, Function și CallBack - uicontrol.

PROGRAMAREA CALCULATOARELOR Note de curs

Criptosisteme cu cheie publică III

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

Curs 2 Şiruri de numere reale

Elemente de Visual Basic

Capitolul 2 - HIDROCARBURI 2.4.ALCADIENE

INTRODUCERE ÎN PROGRAMAREA MATLAB

Capitolul ASAMBLAREA LAGĂRELOR LECŢIA 25

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

1. Structura internă. Categorii de comenzi MAPLE.

Προγραμματισμός Συστημάτων

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

Profil informatică Teste pentru licenţă

De ce sa invat un limbaj de programare? Programele comerciale sunt scumpe Nu exista un program (comercial sau gratis) pentru fiecare problema

P R E F A Ţ Ă Algoritmul Programul Programarea

Examen AG. Student:... Grupa: ianuarie 2016

2. Circuite logice 2.2. Diagrame Karnaugh. Copyright Paul GASNER 1

Laborator 6. Integrarea ecuaţiilor diferenţiale

MULTIMEA NUMERELOR REALE

Programarea Calculatoarelor

Geometrie computationala 2. Preliminarii geometrice

Circuite cu diode în conducţie permanentă

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

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

Proiectarea filtrelor prin metoda pierderilor de inserţie

Subiecte Clasa a V-a

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

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

Capitolul 2 - HIDROCARBURI 2.3.ALCHINE

Functii Breviar teoretic 8 ianuarie ianuarie 2011

prin egalizarea histogramei

Transcript:

Declaraţii de variabile, tipuri, funcţii 2 noiembrie 2004

Declaraţii de variabile, tipuri, funcţii 2 Puţinǎ teorie sintaxa: regulile gramaticale care descriu un limbaj un şir de simboluri (text) face parte din limbaj? (e bine format?) semantica: înţelesul (semnificaţia) unui obiect din limbaj rezultǎ din semnificaţia fiecǎrui element de program în parte determinǎ rezultatul execuţiei programului Definim sintaxa elementelor de limbaj folosind anumite notaţii: ::= pentru definiţie pentru alternative etc. Convenţie: cursiv pentru simboluri neterminale (definite la rândul lor) tipǎrit pentru simboluri terminale (elemente lexicale) instructiune while ::= while ( condiţie ) instrucţiune BNF (Backus-Naur Form): notaţie formalǎ pt. gramatica unui limbaj

Declaraţii de variabile, tipuri, funcţii 3 Elemente lexicale Prima fazǎ de compilare: analiza lexicalǎ = separarea în atomi lexicali: unitǎţile elementare de limbaj care au o semnificaţie: cuvinte cheie: int, void, while, etc. identificatori: secvenţǎ de litere, cifre şi începând cu literǎ sau folosiţi pt. nume de variabile, funcţii, tipuri, etichete, etc. ATENŢIE! În C se face distincţie între majuscule şi minuscule!!! Lungimea semnificativǎ a identificatorilor: 31 (externi)/63 (interni) (porţiunea suplimentarǎ poate fi ignoratǎ de unele compilatoare!) constante: 123, 3.14, \0, "salut!\n" etc. semne de punctuaţie operatori: + - = ++ && etc. separatori: { } ( ) ; etc. Spaţiile: necesare doar unde trebuie separaţi doi atomi lexicali alǎturaţi ex. void main, nu voidmain; nu floatx=3.14; nesemnificative în rest. Indentaţi programele pt. citire uşoarǎ! (automat în editoarele bune)

Declaraţii de variabile, tipuri, funcţii 4 Structura programului: declaraţii şi definiţii Un program C: compus din 1 unitǎţi de compilare (fişiere). Fiecare: un şir de declaraţii (de tipuri, variabile, funcţii) sau definiţii de funcţii. translation-unit ::= external-declaration translation-unit external-declaration external-definition ::= declaration function-definition O declaraţie specificǎ interpretarea şi atributele unui identificator (toate informaţiile necesare pentru a-l folosi) pentru o variabilǎ, numele şi tipul pentru o funcţie, numele, tipul, şi tipul parametrilor O definiţie e o declaraţie care specificǎ complet identificatorul respectiv pentru o variabilǎ, în plus, are ca efect alocarea memoriei pentru o funcţie, include corpul funcţiei Un identificator nu poate fi folosit înainte de a fi declarat. e necesarǎ o declaraţie, dacǎ obiectul e folosit înainte de definiţie ex. printf e declaratǎ în stdio.h şi definitǎ într-o bibliotecǎ standard

Declaraţii de variabile, tipuri, funcţii 5 Declaraţii: forma generalǎ Întâlnite pânǎ acum: float x; int a, b = 1; char t[20]; Dar se pot declara deodatǎ şi mai multe obiecte cu acelaşi tip de bazǎ: Ex. int i = 1, n, tab[20], f(double, int); declarǎ un întreg iniţializat cu 1, alt intreg neiniţializat, un tablou de 20 de întregi, şi o funcţie întreagǎ cu doi parametri (double şi int) Sintaxa cu tipul de bazǎ în faţǎ e similarǎ cu folosirea în expresii: tab[ceva] este un int f(ceva1, ceva2) este un int declaratie ::= specificatori tip lista-decl-init ; lista-decl-init ::= declarator-init lista-decl-init, declarator-init declarator-init ::= declarator declarator ::= identificator declarator = iniţializator declarator [ expresie ] pt. tablouri declarator ( parametri ) pt. funcţii * declarator pt. pointeri

Declaraţii de variabile, tipuri, funcţii 6 Domeniul de vizibilitate al identificatorilor Pt. orice identificator, compilatorul trebuie sǎ-i decidǎ semnificaţia Identificatorii obişnuiţi: variabile, tipuri, funcţii, constante enumerare au un spaţiu de nume comun (NU: variabilǎ şi funcţie cu acelaşi nume) Q1: Un identificator poate fi folosit într-un punct de program? R: Domeniul de vizibilitate (al unei declaraţii / al unui identificator) domeniu de vizibilitate la nivel de fişier (file scope) pentru identificatori declaraţi în afara oricǎrui bloc (oricǎrei funcţii) din punctul de declaraţie pânǎ la sfârşitul fişierului compilat domeniu de vizibilitate la nivel de bloc (block scope) pentru identificatori declaraţi într-un bloc { } (corp de funcţie, instrucţiune compusǎ) şi pentru parametrii unei funcţii din punctul de declaraţie pânǎ la acolada } care închide blocul Un identificator poate fi redeclarat într-un bloc interior şi îsi recapǎtǎ vechea semnificaţie când blocul ia sfârşit.

Declaraţii de variabile, tipuri, funcţii 7 Domeniu de vizibilitate: Exemplu int m, n, p; float x, y, z; /* m1, n1, p1, x1, y1, z1 */ int f(int n, int x) { /* n2, x2: alt n, alt x */ int i; float y = 1; /* i1, y2 */ m = p; p = n; /* m1 = p1; p1 = n2; */ for (i = 0; i < 10; ++i) { float x = i*i; /* x3 = i1 * i1; */ z += x; /* z1 += x3; */ } return z += x + y; /* z1 += x2 + y2 */ } void main(void) { int i=0, m=3, x=2; /* i2, m2, x4 */ z = f(m, x); /* z1 = f(m2, x4); */ x = f(i, y); /* x4 = f(i2, y1); */ }

Declaraţii de variabile, tipuri, funcţii 8 Variabile globale şi locale Dacǎ în declaraţia de variabile nu apar alţi specificatori înainte de tip: Variabile globale = o variabilǎ declaratǎ in afara oricǎrei funcţii are spaţiu de memorie alocat pe întreaga execuţie a programului e iniţializatǎ o singurǎ datǎ (cu valoarea datǎ explicit în declaraţie, sau implicit cu zero) e vizibilǎ în întreg textul programului începând cu declaraţia ei Variabile locale (interne) = o variabilǎ declaratǎ în interiorul unui bloc (inclusiv de funcţie) existǎ doar atât timp cât programul executǎ blocul respectiv sunt iniţializate cu valoarea datǎ la orice intrare în blocul respectiv (sau au o valoare nedefinitǎ dacǎ declaraţia nu specificǎ iniţializare) sunt vizibile doar în interiorul blocului respectiv

Declaraţii de variabile, tipuri, funcţii 9 Legǎtura dintre identificatori (linkage) Q2: Douǎ declaraţii ale unui identificator se referǎ la aceeaşi entitate? R: Tipul de legǎturǎ (linkage) al unui identificator (obiect/funcţie) extern: toate declaraţiile identificatorului din toate fişierele care compun un program se referǎ la acelaşi obiect sau funcţie pentru declaraţiile la nivel de fişier fǎrǎ specificator de memorare sau declaraţia cu specificatorul extern a unui identificator care nu a fost deja declarat cu tipul de legǎturǎ intern intern: toate declaraţiile identificatorului din fişierul curent se referǎ la acelaşi obiect sau funcţie; nu se propagǎ în exteriorul fişierului pt. declaraţiile la nivel de fişier cu specificatorul de memorare static fǎrǎ legǎturi (no linkage): fiecare declaraţie denotǎ o entitate unicǎ pentru declaraţiile la nivel de bloc fǎrǎ specificatorul extern

Declaraţii de variabile, tipuri, funcţii 10 Durata de memorare a obiectelor Q3: Ce timp de viaţǎ/duratǎ de memorare are un obiect în program? R: 3 feluri diferite: static, automatic şi alocat (discutat ulterior) Pe întreaga duratǎ de viaţǎ, un obiect are o adresǎ constantǎ şi îşi pǎstreazǎ ultima valoare memoratǎ. Duratǎ de memorare staticǎ: pentru obiecte declarate cu tipul de legǎturǎ extern sau intern, sau declarate cu specificatorul de memorare static timp de viaţǎ: întreaga execuţie a programului. obiectul e iniţializat o singurǎ datǎ, înainte de lansarea în execuţie. Duratǎ de memorare automatǎ: pentru obiecte fǎrǎ legǎturǎ timp de viaţǎ: de la intrarea în blocul asociat pânǎ la încheierea sa la fiecare apel recursiv, se creazǎ o nouǎ instanţǎ a obiectului valoarea iniţialǎ: nedeterminatǎ; o eventualǎ iniţializare în declaraţie e repetatǎ de câte ori e atinsǎ

Declaraţii de variabile, tipuri, funcţii 11 Declaraţii de tablouri Exemple: char sir[20]; double mat[6][5]; Sintaxa: specificatori opt tip ident [ D1 ]... [ Dn ] iniţializare opt declarǎ un tablou n-dimensional de D1... Dn elemente de tip de fapt: tablou de D1 elem. care sunt tablouri de... Dn elem. de tip Atenţie: în C, numerotarea elementelor în tablou începe de la zero! În ANSI C, tablourile se declarǎ doar cu dimensiuni constante (pozitive) În C99, tablourile declarate local pot avea dimensiuni evaluate la rulare void f(int n) { char s[n + 3]; /* prelucreazǎ s */ } Un tablou fǎrǎ dimensiune datǎ, neiniţializat (int a[];) are 1 element! Şiruri de caractere: caz particular de tablouri de char în memorie, sfârşitul unui şir e indicat de caracterul special \0 (nul) Atenţie: toate funcţiile care lucreazǎ cu şiruri depind de acest lucru! (dar convenţia nu are legǎturǎ cu aspectul în text, de ex. la citire) constante şir: cu ghilimele duble ("test"), terminate implicit cu \0

Declaraţii de variabile, tipuri, funcţii 12 Iniţializarea variabilele cu duratǎ de memorare staticǎ sunt iniţializate înainte de execuţie: implicit cu zero; explicit pot fi iniţializate doar cu constante variabilele cu duratǎ automatǎ pot fi iniţializate cu expresii arbitrare (ori de câte ori iniţializarea e atinsǎ la rulare) Pentru variabilele de tip tablou, iniţializatorii se scriu între acolade nivelele de acolade indicǎ sub-obiectele iniţializate int m[2][3] = { { 1, 0, 0 }, { 0, 1, 0 } }; dacǎ nu, iniţializatorii se folosesc pe rând, în ordinea indicilor int c[2][2][2] = { { 1, 1, 1 }, { { 1, 0 }, 1 } }; pt. iniţializator mai mic ca dimensiunea, restul nu e iniţializat explicit (vezi c[0][1][1], c[1][1][1]); când iniţializatorul e mai mare, restul se ignorǎ char msg[4] = "test"; ca şi char msg[4] = { t, e, s, t }; dacǎ dimensiunea nu e datǎ explicit, se deduce din iniţializator char msg[] = "test"; ca şi char msg[5] = { t, e, s, t, \0 }; când se specificǎ elementul de iniţializat, se continuǎ apoi în ordine: int t[10] = { 1, 2, 3, [8] = 2, 1 }; /* t[3]-t[7] nespecificate */

Declaraţii de variabile, tipuri, funcţii 13 Definiţii de constante şi tipuri Definiţii de tip: typedef declaraţie typedef unsigned long size t; typedef unsigned char byte; sintaxa: ca şi declaraţia de variabile, prefixatǎ cu typedef dacǎ în declaraţie, identificatorul ar fi o variabilǎ de un anumit tip, atunci typedef declaraţie defineşte identificatorul ca numele acelui tip Ex: în int mat3x5[3][5]; mat3x5 ar fi o matrice de 3x5 întregi. typedef int mat3x5[3][5]; /* mat3x5 e tipul tablou de 3x5 int */ mat3x5 A, B; /* A, B sunt variabile tablou de 3x5 int */ Declaraţii de constante cu calificatorul de tip const: const int LEN = 10; folosit pt. declararea de constante; constuie eroare modificarea lor nu se permite folosirea de operatori de atribuire pt. obiecte const (compilatorul e liber de exemplu sǎ le aloce în memorie read-only)

Declaraţii de variabile, tipuri, funcţii 14 Declaraţii şi definiţii de funcţii Declaraţia: prototipul (antetul) funcţiei: tip, nume, tipul parametrilor decl-fct ::= tip nume-fct ( lista-decl-param ) ; lista-decl-param ::= void decl-param,..., decl-param decl-param ::= tip tip nume-param int abs(int n); int getchar(void); double pow(double, double); tipul returnat nu poate fi tablou; poate fi void (nimic) numele parametrilor nu e relevant în declaraţie şi poate lipsi o funcţie poate fi declaratǎ repetat, cu declaraţii compatibile numǎr variabil de parametri dacǎ lista se terminǎ în... (v. ulterior) declaraţia doar cu () nu specificǎ parametrii şi e perimatǎ specificatorul inline e o indicaţie de optimizare pentru vitezǎ; se rezumǎ la fişierul curent; depinde de implementare (vezi standard)

Declaraţii de variabile, tipuri, funcţii 15 Definiţii de funcţii Sintaxa: definiţie-funcţie ::= antet-funcţie bloc blocul conţine declaraţii şi instrucţiuni (corpul funcţiei) parametrii specificaţi şi prin nume (vizibilitate în corpul funcţiei) Transferul parametrilor în C se face prin valoare expresiile date ca argumente în apelul de funcţie sunt evaluate şi atribuite parametrilor formali (cu eventuale conversii ca la atribuire) ordinea de evaluarea a argumentelor nu e specificatǎ dispunerea în memorie a argumentelor (pe stivǎ) nu e specificatǎ se executǎ corpul funcţiei; se revine la instrucţiunea de dupǎ apel

Declaraţii de variabile, tipuri, funcţii 16 Transmiterea parametrilor: exemple int a = 1, b = 2, m = 3; // primul a, m: a1, m1 int f (int a, int p, int n) // alt a: a2 { a = 2; // a2 = 2 m = 5; n = 0; // m1 = 5 } void main(void) { int m = 4, n = 5, p = 6; // alt m: m2 f (b+2, n, p); // f(4, 5,6); /* a = 1, m1 = 5, m2 = 4 */ }

Declaraţii de variabile, tipuri, funcţii 17 Funcţii matematice standard (declarate în math.h) Funcţii de conversie double fabs(double x); valoarea absolutǎ a lui x double floor(double x); partea întreagǎ x a lui x, ca double double ceil(double x); cel mai mic întreg x nu mai mic de x double trunc(double x); truncheazǎ argumentul la întreg, înspre 0 Funcţii de rotunjire (Obs: direcţia de rotunjire poate fi controlatǎ cu fgetround() şi fsetround() din fenv.h, detalii în standard) double nearbyint(double x); rotunjesc în direcţia curentǎ cu/ double rint(double x) /fǎrǎ excepţie de argument inexact (implementarea/tratarea excepţiilor e definitǎ în standard, v. fenv.h) double round(double x): rotunjeşte jumǎtǎţile în direcţia opusǎ lui zero long int lrint(double x); long int lround(double x); ca şi rint(), round() dar rezultat întreg; nedefinit în caz de depǎşire Funcţiile din math.h au variante cu sufixele f şi l cu argumente şi rezultate float sau long double. Exemple: float fabsf(float); long double fabsl(long double);

Declaraţii de variabile, tipuri, funcţii 18 Funcţii standard din math.h (cont.) Funcţii de exponenţiere şi logaritmice double exp(double x); returneazǎ e x double exp2(double x); returneazǎ 2 x double log(double x); returneazǎ logaritmul natural ln x double log10(double x); double log2(double x); log. în baza 10 şi 2 double pow(double x); returneazǎ x y double sqrt(double x); returneazǎ x Funcţii trigonometrice şi hiperbolice acos, asin, atan, cos, sin, tan, acosh, asinh, atanh, cosh, sinh, tanh (valori unghiulare în radiani; inversele returneazǎ valori principale) double atan2(double y, double x); returneazǎ arctg(y/x) în intervalul [ π, π], determinǎ cadranul dupǎ semnele ambelor argumente