Documente Academic
Documente Profesional
Documente Cultură
Scopul lucrrii este de a prezenta una dintre armele cele mai puternice ale programrii
procedurale, anume aceea a utilizrii, alturi de funciile predefinite din biblioteci, a funciilor
definite de ctre utilizator.
Se exerseaz comparativ transmiterea parametrilor prin valoare i prin referin.
Aplicaiile din exemple i din problemele propuse spre rezolvare fac apel la
variabilele locale i globale
n faa numelui funciei se indic tipul ei, iar dup numele funciei urmeaz lista
de parametri descrii nuntrul parantezelor rotunde.
Corpul funciei (compus din operatori) este amplasat dup descrierea parametrilor,
ntre acolade.
Sintaxa descrierii unei funcii:
unde
tip_parametru nume_parametru;
Dac funcia conine mai muli parametri, ei vor fi descrii mpreun ntre parantezele
rotunde dup numele funciei, desprii prin virgul
- Dac funcia folosete parametri, ea trebuie s indice numele unic i tipul fiecrui
parametru.
- Cnd programul apeleaz funcia, compilatorul atribuie valoarea parametrilor de la stnga la
dreapta
- Valorile transmise din program n funcie, trebuie s coincid ca numr, loc i tip cu
parametrii din funcie.
3. Prototipul funciei.
nainte de apelul unei funcii, compilatorul C++ trebuie s cunoasc tipul valorii
returnate, cantitatea i tipul parametrilor folosii de funcie.
Exist ns situaii cnd unele funcii n program snt apelate reciproc. n aceste cazuri,
este posibil situaia cnd o funcie va fi apelat naintea descrierii sale.
n acest caz, se folosesc prototipuri ale funciilor. Prototipul unei funcii este amplasat la
nceputul programului i conine informaia despre tipul valorii returnate, cantitatea i tipul
parametrilor folosii de funcie.
Odat declarat prototipul unei funcii, nainte de a fi nceput corpul programului,
descrierea funciei poate fi fcut dup acolada de nchidere a programului principal.
unde:
Principiile de declarare i folosire a unei variabile locale oricrei funcii sunt identice
cu principiile de declarare i utilizare a unei variabile declarate n corpul funciei
principalemain( );
O variabil declarat n corpul funciei main() este i ea local acestei funcii.
n general, tot ceea ce este valabil pentru a fost spus despre variabilele declarate n funcia
main( ) - tipurile, numele, principiile de utilizare .a.- rmne valabil i pentru o
variabil local, din orice alt funcie.
5. Variabile globale
Numim variabil global o variabil pentru care numele i valoarea sunt cunoscute pe
parcursul ntregului program, orice funcie din acest program.
Pentru a crea o variabil global, se folosete declararea ei la nceputul programului,
n afara oricrei funcii. Orice funcie (inclusiv funcia main), care va urma dup aceast
declarare, poate folosi aceast variabil global.
# include<>
# include<>
# include<>
tip_vg nume_vg;
unde tip_vg este tipul variabilei globale, iar nume_vg numele variabilei globale.
#include <conio.h>
#include <iostream.h>
#include <math.h>
// Varianta 1
/*
//Varianta 2
*/
void main(){
int x,y,z;
cout<<"Introduceti pe x : "; cin>>x;
cout<<"Introduceti pe y : "; cin>>y;
cout<<"Introduceti pe z : "; cin>>z;
cout<<"Rezultatul aplicarii lui f1 : "<<f1(x,y,z);
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
cout<<"z="<<z<<endl;
// Varianta 1
/*
//Varianta 2
cout<<"Rezultatul aplicarii lui f2 : "<<f2(&x,&y,&z);
*/
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
cout<<"z="<<z<<endl;
getch();
}
#include <conio.h>
#include <iostream.h>
#include <string.h>
C. Din vectorul v[] se construiete vectorul w[], care conine pe poziia i valoarea 1,
dac v[i] este prim i valoarea 0, n caz contrar
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <math.h>
void main(){
clrscr();
unsigned long int v[100];
int n, i, w[100];
cout<<"n=? "; cin>>n;
for(i=1; i<=n; i++){
cout<<"v["<<i<<"]=? ";
cin>>v[i];
}
for(i=1; i<=n; i++) cout<<v[i]<<" ";
cout<<endl;
for(i=1; i<=n; i++) w[i]=prim(v[i]);
for(i=1; i<=n; i++) cout<<w[i]<<" ";
getch();
}
D. Cmmdc al tuturor elementelor unui vector
#include <conio.h>
#include <iostream.h>
unsigned long int cmmdc(unsigned long int a, unsigned long int b){
if(a==b) return a;
while(a!=b) if(a<b) b=b-a;
else a=a-b;
return a;
}
void main() {
clrscr();
unsigned long int v[100], div;
int n, i;
cout<<"n=? "; cin>>n;
for(i=1; i<=n; i++){
cout<<"v["<<i<<"]=? "; cin>>v[i];
}
div=cmmdc(v[1],v[2]);
for(i=3; i<=n; i++)
div=cmmdc(div,v[i]);
cout<<div;
getch();
}
Se pune problema gsirii unei rdcini unice a unei ecuaii de forma f(x) = 0, ntr-un
interval (a,b) dat. Se garanteaz (din considerente externe, care nu au importan n
rezolvarea problemei) c n intervalul dat rdcina exist i este unic. Fr aceast
presupunere, algorimul prezentat nu este valabil.
Se poate observa c, n aceste condiii, semnul funciei f(x) este diferit n punctul a, de
cel al funciei n punctul b (graficul funciei taie axa x o singur dat) => f(a)f(b) < 0.
Atunci, mprind intervalul (a,b) n dou pri egale, obinem un punct m = (a+b)/2,
iar graficul funciei va tia axa x, fie n punctul m (caz n care algoritmul s-a ncheiat), fie n
intervalul (a,m) dac f(a)f(m) < 0, fie n intervalul (m,b) dac f(m)f(b) < 0.
Continum procesul pn cnd obinem o precizie dorit (|f(x)| < ) unde este o
valoare introdus de la tastatur.
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main(){
clrscr();
float a, b, mijloc, epsi, i=0;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"epsi=";cin>>epsi;
mijloc=(a+b)/2;
cout<<"punctul initial "<<mijloc<<" f(mijloc)=
"<<f(mijloc)<<endl;
while(fabs(f(mijloc))>epsi){
i++;
if(f(a)*f(mijloc)<0) b=mijloc; else a=mijloc;
mijloc=(a+b)/2;
cout<<"iteratia "<<i<<" mijloc="<<mijloc<<"
f(mijloc)="<<f(mijloc)<<endl;
}
cout<<"radacina este "<<mijloc;
getch();
}
#include <iostream.h>
#include <conio.h>
/* Semnificatia variabilelor:
for (i=1;i<=m;i++){
for (j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
};
cout<<endl;
for (i=1;i<=m;i++) {
for (j=1;j<=n;j++) ajut[j]=a[i][j];
maxmin(ajut,n,mxln[i],mnln[i]);
cout<<"linia "<<i<<" : "<<"max="<<mxln[i]<<"
min="<<mnln[i]<<endl;
}
cout<<endl;
maxmin(mxln,m,mxmxln,mnmxln);
cout<<"Maximumul din maximele pe linii este "<<mxmxln<<endl;
cout<<"Minimumul din maximele pe linii este "<<mnmxln<<endl;
maxmin(mnln,m,mxmnln,mnmnln);
cout<<"Maximumul din minimele pe linii este "<<mxmnln<<endl;
cout<<"Minimumul din minimele pe linii este "<<mnmnln<<endl;
cout<<endl<<"Pentru continuare, apasati orice tasta!";
getch();
cout<<endl<<endl;
for (j=1;j<=n;j++) {
for (i=1;i<=m;i++) ajut[i]=a[i][j];
maxmin(ajut,m,mxcl[j],mncl[j]);
cout<<"coloana "<<j<<" : "<<"max="<<mxcl[j]<<"
min="<<mncl[j]<<endl;
}
cout<<endl;
maxmin(mxcl,n,mxmxcl,mnmxcl);
cout<<"Maximumul din maximele pe coloane este "<<mxmxcl<<endl;
cout<<"Minimumul din maximele pe coloane este "<<mnmxcl<<endl;
maxmin(mncl,n,mxmncl,mnmncl);
cout<<"Maximumul din minimele pe coloane este "<<mxmncl<<endl;
cout<<"Minimumul din minimele pe coloane este "<<mnmncl<<endl;
getch();
}
7.4 TEME DE LABORATOR
3. Subprogramul aparcifra are doi parametri: numar un numr ntreg lung; cifra
un numr ntreg de o singur cifr. Programul returneaz numrul de apariii ale
cifrei cifra n numrul numar.
Programul principal citeste de la tastatur un numr n, care reprezint numrul de
elemente ale unui vector v, ale crui elemente se vor citi de la tastatur, i o cifr
c. Cu ajutorul subprogramului aparcifra, elementele vectorului v se vor nlocui
fiecare cu numrul de apariii ale cifrei c n respectivul element. Vectorul nou
format se va tipri pe monitor.
6. Subprogramul elimincifra are doi parametri: numar un numr ntreg lung; cifra
un numr ntreg de o singur cifr. Subprogramul returneaz numrul primit, din
care s-au eliminat toate apariiile cifrei cifra.
Programul principal citeste de la tastatur un numr n, care reprezint numrul de
elemente ale unui vector v, ale crui elemente se vor citi de la tastatur. Programul
va nlocui fiecare element din vectorul v cu numrul obinut prin eliminarea
tuturor cifrelor impare din numr; vectorul nou format se va tipri pe monitor.