Functii void fara parametri


Functia este un concept important in matematica si 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.

Declaratia unei functii are se face prin precizarea prototipului functiei:
 

 antet;
 Prototipul implicit este:
 
int nume_functie(void);

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

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.
 

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

void salut(void); /* prototipuri */
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.
 

#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 */


Carmen Holotescu
martie 2000