Sunteți pe pagina 1din 8

Portofoliu Informatică

Subprograme
Suport teoretic

1. Noţiunea de subprogram

Definiţie: Un subprogram (funcţie) reprezintă un ansamblu de


instrucţiuni (de declarare, executabile) scrise în vederea executării unei
anumite prelucrări, ansamblu identificat printr-un nume şi implementat
separat (în exteriorul oricărei alte funcţii).

Subprogramele sunt unităţi de program care:


• au un algoritm propriu
• pot fi proiectate independent
• pot fi scrise independent
• pot fi compilate independent
• nu se pot executa independent ci numai în cadrul unui program
(apel)

2. Clasificarea subprogramelor

-subprograme standard
-subprograme definite de utilizator
-subprograme apelate ca instructiuni procedurale
-subprograme apelate ca operanzi

3. Structura unui subprogram C++

În limbajul C/C++ se utilizează declaraţii şi definiţii de funcţii.


Declaraţia conţine antetul funcţiei şi informează compilatorul asupra
tipului, numelui funcţiei şi a listei parametrilor formali (în care se poate
indica tipul parametrilor formali şi numele acestora). Declaraţiile de
funcţii se numesc prototipuri, şi sunt constituite din antetul funcţiei.

tip_returnat nume_funcţie (lista tipuri parametri formali); //prototip

Definiţia conţine antetul funcţiei şi corpul acesteia. Nu este admisă


definirea unei funcţii în corpul altei funcţii.

tip_returnat nume_funcţie (lista parametrilor formali) //antet


{
Instrucțiune compusă; //corpul funcției
}
Subprograme de tip int:
1. Subprogramul minDivPrim are un singur parametru, n, prin care primeşte un număr
natural. Subprogramul returnează cel mai mic număr natural care are aceiași divizori
primi ca n. Scrieţi definiţia completă a subprogramului. (sursa: pbinfo)
Rezolvare:

int minDivPrim(int n)
{
int p=1,i=2;
if(n%i == 0){
while(n%i==0)
n/=i;
p*=i;}
i= 3;
while(n!=1){
if(n%i == 0){
while(n%i==0)
n/=i;
p*=i;}
i+=2;}
return p;
}

2. Să se scrie o funcție C++, cu un parametru, n, care returnează cel mai apropiat


număr de n care este factorialul unei valori. (sursa: pbinfo)
Rezolvare:
int det(int n)
{
int i,fact=1;
for(i=1;fact<n;i++){
fact*=i;
}
i--;
if(fact-n < n-fact/i)
return fact;
else return fact/i;}
3. Scrieți definiția completă a unui subprogram C++ nr_prim care primește prin
singurul său parametru, n, un număr natural cu cel mult 9 cifre și returnează cel mai
mic număr prim, strict mai mare decât n. (sursa: pbinfo)
Rezolvare:
int nr_prim(int n){
int i,j,nr = n+1;
for(i=2;i*i<=nr;i++){
if(nr%i == 0){
nr++;
i = 1;
}
}
return nr;
}

4. Să se scrie o funcție C++ care să returneze pentru un număr natural n transmis ca


parametru numărul de cifre zero de la finalul lui n! = 1•2•...•n. (sursa: pbinfo)
Rezolvare:
int cifre(int n)
{
int p=1,i,k=0;
for(i=1;i<=n;i++)
p=p*i;
while(x%10==0){
k++;
x=x/10;
}
return k;
}
5. Subprogramul NrPrime are un singur parametru, n, prin care primeşte un număr
natural (n∈[0,109]). Subprogramul returnează numărul de cifre prime ale lui n. (sursa:
pbinfo)
Rezolvare:
Int NrPrime(int n)
{
    int k=0, cif;
    while(n>0)
  {
        cif=n%10;
        n/=10;
        if(cif==2 || cif==3 || cif==5 || cif==7)
                   k++;
  }
  return k;
}

Subprograme de tip void:

1. Să se scrie o funcție C++ care să determine suma divizorilor unui număr natural
transmis ca parametru. Funcția întoarce rezultatul prin intermediul unui parametru de
ieşire. (sursa: pbinfo)
Rezolvare:
void sum_div(int n,int &s)
{int i;
s=0;
for (i=1; i*i<n; i++)
if(n%i==0)
s=s+i+n/i;
if(i*i==n)
s+=i;
}

2. Scrieți definiția completă a funcției C++ afisare care primește doi parametri a și b și


afișează pe ecran, în ordine crescătoare, numerele naturale pare cuprinse între a și b,
inclusiv acestea. (sursa: pbinfo)
Rezolvare:
void afisare(int a,int b)
{if(a>=b)
{int aux=a;
a=b;
b=aux;
}
if(a%2==0)
for(int i=a;i<=b;i+=2)
cout<<i<<" ";
else
for(int i=a+1;i<=b;i+=2)
cout<<i<<" ";
}
3. Să se scrie o funcție C++ care, pentru un număr natural n transmis ca parametru,
determină și întoarce prin intermediul unor parametrii de ieșire cel mai mare număr
prim mai mic decât n și cel mai mic număr prim mai mare decât n. (sursa: pbinfo)
Rezolvare:
void sub(int n, int &mic, int &mare)
{
int nr = n+1;
while(prim(nr) == 0)
nr++;
mare = nr;
nr = n-1;
while(prim(nr) == 0)
nr--;
mic = nr;
}
4. Scrieți definiția completă a funcției C++ sub care primește doi parametri n și k și
determină afișarea pe ecran, în ordine descrescătoare, a primelor n numere naturale
nenule divizibile cu k. (sursa: pbinfo)
Rezolvare:
void sub(int n,int k)
{int i;
for(i=n;i>=1;i--)
cout<<k*i<<" ";
}
5. Scrieți definiția completă a funcției C++ afisare care primește doi parametri a și b și
afișează pe ecran, în ordine crescătoare, numerele naturale pare cuprinse între a și b,
inclusiv acestea. (sursa: pbinfo)
Rezolvare:
void afisare(int a, int b)
{
if (a>b){
int aux=a;
a=b;
b=aux;
}
if (a%2==1)
a++;
for (int i=a; i<=b; i+=2)
  cout << i << " ";
}

S-ar putea să vă placă și