<<Pagina Materiale

 
 
Functii void fara parametri 
Definitia unei functii

Functia este un concept important in matematica si in programare. In limbajul C prelucrarile sunt organizate ca o ierarhie de apeluri de functii. Orice program trebuie sa contina cel putin o functie, functia main.

Functiile incapsuleaza prelucrari bine precizate si pot fi reutilizate in mai multe programe.

Pentru a putea fi utilizata intr-un program, o functie trebuie sa fie definita ( sau declarata ) si apelata.

Definitia unei functii are urmatoarea forma:
 

tip_rezultat_returnat nume_functie (lista_parametri_formali){  //antetul functiei
      definirea variabilelor locale
      prelucrari // instructiuni
} // intre { } corpul functiei

Functiile nu pot fi definite incuibat ( ca in Pascal ).

Daca functia nu returneaza nici un rezultat si nu primeste parametri, definitia va fi:
 

void nume_functie (void){  //antetul functiei
      definirea variabilelor locale
      prelucrari // instructiuni
} // intre { } corpul functiei

O functie void fara parametri poate prelucra variabilele globale si cele locale.

Daca mai multe functii void fara parametrii trebuie sa aiba acces la aceleasi date, acestea trebuie sa fie variabile globale.

Declaratia unei functii se face prin precizarea prototipului functiei:
 

 antet;
 Prototipul implicit este:
 
int nume_functie(void);
Sus
Apelul unei functii:

 
nume_functie(lista_parametri_actuali) /* poate apare ca operand intr-o expresie, daca functia returneaza un rezultat */

La apelul unei functii, se executa corpul sau, dupa care se revine in functia apelanta, la instructiunea urmatoare apelului.
O functie poate fi apelata, daca in fata apelului exista definitia sau cel putin declaratia functiei.

In cazul functiilor void fara parametri, apelul se face prin:
 

 nume_functie(); //instructiune expresie

Observatii:

De ce discutam acum despre functii, si doar despre cele void fara parametrii?

Pentru a intelege functiile cu parametrii este necesar sa avem notiunea pointerilor - dar pana acolo mai avem putin.

Vom incepe insa sa discutam despre tablouri, structuri de date derivate, cu multiple aplicatii. 

Programele vor creste in complexitate. 

Asa incat in dezvoltarea lor, vom aplica tehnica Top Down sau Stepwise Refinement:

  • problema se descompune in subprobleme, in pasi
  • fiecare subproblema va fi implementata ca o functie
  • apelurile functiilor de catre main, va insemna executia pe rand a pasilor.
Mai jos apar doua variante de scriere a programelor. Daca functia main e prezenta la inceputul programului, dupa prototipurile functiilor apelate, ea da o imagine a prelucrarilor realizate de program.
 
prototipuri
definitia functiei main
definitii functii
definitii functii
definitia functiei main

Sus

Exemple

1.Sa se tipareasca pe ecran un mesaj de inceput si unul de sfarsit, separate de 15 linii de '*'. Fiecare linie va fi tiparita de o functie void fara parametri. Sa se observe ca fiecare functie incapsuleaza un subpas din rezolvarea problemei.
 

#include <stdio.h>
#include <conio.h>

// prototipuri - nu e obligatoriu sa apara in ordinea apelurilor
void salut(void);
void terminare(void);
void linii(void);

void main(void){
   clrscr();
   salut();
   linii();
   terminare();
} // main 

void salut(void){
   puts("Buna ziua!");
} // salut 

void linie(void){  // tipareste o linie de *
   int i,nr_car=50;char car='*';
   for(i=1;i<=nr_car;i++)
      putchar(car);
   putchar('\n');
} // linie 

void linii(void){ // apeleaza linie de nr_linii ori
   int i,nr_linii=15;
   for(i=1;i<=nr_linii;i++)
     linie();
} // linii 

void terminare(void){
   puts("La revedere!");
   getche();
} // terminare 

2.Sa se calculeze si sa se afiseze valoarea expresiei (a-m)n/(n-a)m, a,m,n fiind cititi de la tastatura, astfel incat intregii m,n sa fie pozitivi, iar realul a diferit de n. Citirea, calculul si afisarea vor fi concepute ca functii void fara parametri.
 

#include <stdio.h>

float a,expr; int m,n; // variabile globale 

void citire(void); // citeste cu validare a,m,n 
void prelucrare(void); // calculeaza expr 
void tiparire(void); // afiseaza expr 

void main(void){
   citire();
   prelucrare();
   tiparire();
} // main 

void citire(void){
   while(printf("m,n(>=0):"),scanf("%d%d",&m,&n),m<0||n<0);
   while(printf("a(!=%d):",n),scanf("%f",&a),a==n);
} // citire 

void tiparire(void){
   printf("(%f-%d)^%d/(%d-%f)^%d=%f\n",a,m,n,n,a,m,expr);
} // tiparire 

void prelucrare(void){
   int i; float numarator,numitor;
   for(i=numarator=1;i<=n;i++)numarator*=a-m;
   for(i=numitor=1;i<=m;i++)numitor*=n-a;
   expr=numarator/numitor;
} // prelucrare 

3.Sa se defineasca functia calcul, void fara parametri, care calculeaza si afiseaza valoarea expresiei xm+n/(x+m+n)m-n, x, m, n fiind variabile globale. Folosind functia calcul sa se scrie programul care afiseaza valoarea expresiei de mai sus pentru x luand toate valorile intregilor dintre n si m, inclusiv. Intregii m,n se citesc de la tastatura, astfel incat sa fie pozitivi si m>n.

Sus
<<Pagina Materiale


Copyright © 2001-2002. Carmen Holotescu
All rights reserved. Published by Timsoft