Funcții și variabile în C și C++

Curs
9.6/10 (7 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 11 în total
Cuvinte : 4348
Mărime: 29.22KB (arhivat)
Publicat de: Theodor Marginean
Puncte necesare: 0

Extras din curs

In cazul în care apelul functiei precede definitia, trebuie dat, la începutul textului sursa, un prototip al functiei, care sa anunte ca definitia functiei va urma si sa furnizeze tipul rezultatului returnat de functie si tipul parametrilor, pentru a permite compilatorului sa faca verificarile necesare.

Prototipul unei functii are un format asemanator antetului functiei si serveste pentru a informa compilatorul asupra:

• tipului valorii furnizate de functie;

• existenta si tipurile parametrilor functiei

Spre deosebire de un antet de functie, un prototip se termina prin ;

tip nume( lista tipurilor parametrilor formali);

Din prototip intereseaza numai tipurile parametrilor, nu si numele acestora, motiv pentru care aceste nume pot fi omise.

void f(void); /*functie fara parametri care nu intoarce nici un rezultat*/

int g(int x, long y[], double z);

int g(int, long[], double); /*aici s-au omis numele parametrilor*/

Dintre toate functiile prezente într-un program C prima functie lansata în executie este main(), independent de pozitia pe care o ocupa în program.

Apelul unei functii g(), lansat din alta functie f() reprezinta un transfer al controlului din functia f(), din punctul în care a fost lansat apelul, în functia g(). Dupa terminarea functiei g() sau la întâlnirea instructiunii return se revine în functia f() în punctul care urmeaza apelului g(). Pentru continuarea calculelor în f(), la revenirea din g() este necesara salvarea starii variabilelor (contextului) din f() în momentul transferului controlului. La revenire în f(), contextul memorat a lui f() va fi refacut.

O functie apelata poate, la rândul ei, sa apeleze alta functie; nu exista nici o limitare privind numarul de apeluri înlantuite.

3. Comunicarea între functii prin variabile externe.

Efecte laterale ale functiilor.

Comunicarea între functii se poate face prin variabile externe tuturor functiilor; acestea îsi pot prelua date si pot depune rezultate în variabile externe. În exemplul cu simplificarea fractiei vom folosi variabilele externe a, b si c . Functia cmmdc() calculeaza divizorul comun maxim dintre a si b si depune rezultatul în c. Întrucât nu transmite date prin lista de parametri si nu întoarce vreun rezultat, functia va avea prototipul void cmmdc():

#include <stdio.h>

unsigned long a, b, c; // variabile externe

// definirea functiei cmmdc()

void main(void)

{ scanf(“%lu%lu”, &a, &b);

printf(“%lu / %lu = “, a, b);

cmmdc();

a/=c;

b/=c;

printf(“%lu / %lun”, a, b);

}

Definitia functiei cmmdc()din Exemplul 11, este:

void cmmdc()

{ unsigned long r;

do {

r=a%b;

a=b;

b=r;

} while (r);

c=a;

}

Daca se executa acest program, se constata un rezultat ciudat, si anume, orice fractie, prin simplificare ar fi adusa la forma 1/0 ! Explicatia consta în faptul ca functia cmmdc() prezinta efecte laterale, si anume modifica valorile variabilelor externe a, b si c; la iesirea din functie a==c si b==0, ceeace explica rezultatul.

Asadar, un efect lateral (sau secundar),reprezinta modificarea de catre functie a unor variabile externe.

În multe situatii aceste efecte sunt nedorite, duc la aparitia unor erori greu de localizat, facând programele neclare, greu de urmarit, cu rezultate dependente de ordinea în care se aplica functiile care prezinta efecte secundare. Astfel într-o expresie în care termenii sunt apeluri de functii, comutarea a doi termeni ar putea conduce la rezultate diferite!

Vom corecta rezultatul, limitând efectele laterale prin interzicerea modificarii variabilelor externe a si b, ceea ce presupune modificarea unor copii ale lor în functia cmmdc()sau din programul de apelare

void cmmdc(void)

{ unsigned long r, ca, cb;

ca=a;

cb=b;

do{

r=ca%cb;

ca=cb;

cb=r;

} while (r);

c=ca;

Singurul efect lateral permis în acest caz – modificarea lui c asigura transmiterea rezultatului catre functia apelanta.

Solutia mai naturala si mai putin expusa erorilor se obtine realizând comunicatia între functia cmmdc() si functia main() nu prin variabile externe, ci prin parametri, folosind o functie care întoarce ca rezultat cmmdc.

Transmiterea parametrilor prin valoare, mecanism specific limbajului C, asigura pastrarea intacta a parametrilor actuali x si y, desi parametrii formali corespunzatori: u si v se modifica! Parametrii actuali x si y sunt copiati în variabilele u si v, astfel încât se modifica copiile lor nu si x si y.

In fisierul sursa functiile pot fi definite în orice ordine.Mai mult, programul se poate întinde în mai multe fisiere sursa. Definirea unei functii nu poate fi totusi partajata în mai multe fisiere.

O functie poate fi apelata într-un punct al fisierului sursa, daca în prealabil a fost definita în acelasi fisier sursa, sau a fost anuntata.

Preview document

Funcții și variabile în C și C++ - Pagina 1
Funcții și variabile în C și C++ - Pagina 2
Funcții și variabile în C și C++ - Pagina 3
Funcții și variabile în C și C++ - Pagina 4
Funcții și variabile în C și C++ - Pagina 5
Funcții și variabile în C și C++ - Pagina 6
Funcții și variabile în C și C++ - Pagina 7
Funcții și variabile în C și C++ - Pagina 8
Funcții și variabile în C și C++ - Pagina 9
Funcții și variabile în C și C++ - Pagina 10
Funcții și variabile în C și C++ - Pagina 11

Conținut arhivă zip

  • Functii si variabile in C si C++.doc

Alții au mai descărcat și

AutoCad

APERTURE - controleazã mãrimea cursorului selector, caracteristic modului object snap. ARC - traseazã un arc de cerc de orice dimensiune. A -...

Biblioteca de Șabloane Standard

Biblioteca de Sabloane Standard (STL) asigura o abstractizare standardizata a datelor prin intermediul containerelor si o abstractizare procedurala...

Clase Derivate

1. Clase derivate. Prin mostenire, atributele unei clase de baza sunt transmise unor clase derivate. Derivarea permite definirea unor clase noi,...

Clase în Java

Clase pentru miniaplicatii Miniaplicatiile constituie extensii ale unei clase deja existente java.applet.Applet. Structura clasei unui applet...

Clase

1. Programare procedurala –Programare orientata pe obiecte. Limbajul C, ca si Pascal, utilizeaza modelul programarii structurate procedurale, care...

Comunicații internet

2.1. Stilurile caracterelor {n sfirsit pagina dvs. contine ceva, chiar daca este vorba numai de un nume. Vom analiza in continuare elementele de...

Crearea unei aplicații independente în Java

Toate aplicatiile Java contin o metoda main(), spre deosebire de miniaplicatii. class FirstApp { public static void main( String argsst) {...

Curs Excel

Deplasarea prin foi Deplasarea dintr-o foaie in alta se face cu clic cu mouse-ul pe eticheta foii dorite. Deplasarea prin celule Va puteti...

Te-ar putea interesa și

Formula lui Taylor și aplicații

Introducere Una din notiunile fundamentale ale analizei matematice si în fond a în- tregii stiinte, este cea de derivata, atribuita lui G....

Matematici Aplicate în Economie

Matematica True/False Indicate whether the sentence or statement is true or false. ____ 1. Fie vectorii b1 = (2, 4, 5), b2 = (-1, 1, 0), b3 =...

Electronica Digitală

CAPITOLUL 1 Elemente de algebra booleeana Algebra Boole a fost conceputa de catre matematicianul englez George Boole (1815 ¸ 1864) ca o metoda...

Matematici aplicate în economie-Univ din Oradea 2007

INTRODUCERE Matematica se foloseşte în economie de la începutul secolului al XIX-lea. Matematica a adus rigurozitate şi precizie în analiza...

Matematici Economice

CAPITOLUL 1. ALGEBRA LINEARA 1.1. Metoda Gauss-Jordan pentru rezolvarea sistemelor de ecuatii algebrice lineare Metoda lui Gauss (metoda...

Analiză matematică

1. Relaţii. Definiţie. Proprietăţi generale Se consideră cunoscute noţiunile de: mulţime, clasă, operaţii cu mulţimi şi logică matematică....

Circuite Logice Programabile

I. Generalităţi şi criterii de performanţă ale circuitelor digitale În proiectele tradiţionale erau folosite componente analogice care au un preţ...

Analiza matematică și ecuații diferențiale

Capitolul 1 ELEMENTE DE TEORIA SPAT IILOR METRICE 1.1 Introducere 1.1.1 Elemente de teoria teoria multimilor Notiunea de multime este o...

Ai nevoie de altceva?