68
Programarea calculatoarelor Universitatea Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Lect.dr. Adrian Runceanu

Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

  • Upload
    others

  • View
    117

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Programarea calculatoarelor

Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie

Departamentul de Automatică, Energie şi Mediu

Lect.dr. Adrian Runceanu

Page 2: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Curs 13

01.12.2013 Programarea calculatoarelor 2

Page 3: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Capitolul 9. Funcții

9.8. Probleme rezolvate cu ajutorul funcţiilor

9.8.1. Funcţii definite de utilizator

9.8.2. Funcţii de tip void

9.9. Probleme propuse spre rezolvare

01.12.2013 Programarea calculatoarelor 3

Page 4: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.8.2. Funcţii de tip void

Problema 1:

Enunţ: Să se scrie o funcţie care să rezolve o

ecuaţie de gradul II, unde coeficienţii ecuaţiei sunt daţi ca parametri.

Funcţia principală va citi coeficienţii a două ecuaţii şi va afişa soluţiile pentru fiecare ecuaţie în parte.

01.12.2013 Programarea calculatoarelor 4

Page 5: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> #include <math.h> void ecuatie(float a, float b, float c) { float delta, x1, x2; delta = b * b – 4 *a* c; if( delta < 0 ) cout<<"ecuatia are solutii complexe"; else if( delta == 0 ) { cout<<"ecuatia are doua radacini egale\n"; x1 = x2 = -b / ( 2 * a ); cout<<"x1= "<<x1<<"\n"; cout<<"x2= "<<x2<<"\n"; }

01.12.2013 Programarea calculatoarelor 5

Page 6: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

else

{

x1 = ( -b + sqrt(delta) ) / ( 2 * a );

x2 = ( -b - sqrt(delta) ) / ( 2 * a );

cout<<"ecuatia are urmatoarele radacini: \n";

cout<<"x1= "<<x1<<"\n";

cout<<"x2= "<<x2<<"\n";

}

return;

}

01.12.2013 Programarea calculatoarelor 6

Page 7: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main() { int a1, b1, c1, a2, b2, c2; cout<<"Dati coeficientii primei ecuatii \n"; cout<<"Dati coeficientul a1 "; cin>>a1; cout<<"Dati coeficientul b1 "; cin>>b1; cout<<"Dati coeficientul c1 "; cin>>c1; ecuatie(a1, b1, c1); cout<<"\n"; cout<<"Dati coeficientii celei de-a doua ecuatie \n"; cout<<"Dati coeficientul a2 "; cin>>a2; cout<<"Dati coeficientul b2 "; cin>>b2; cout<<"Dati coeficientul c2 "; cin>>c2; ecuatie(a2, b2, c2); }

01.12.2013 Programarea calculatoarelor 7

Instructiune de apel

Instructiune de apel

Page 8: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.8.2. Funcţii de tip void

01.12.2013 Programarea calculatoarelor 8

Page 9: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 2: Enunţ:

Se consideră un vector x cu n numere întregi. Să se verifice dacă x reprezintă o mulţime.

Se vor construi:

– funcţie care să citească vectorul de la tastatură

– o funcţie care să afişeze vectorul

– şi a treia funcţie care să tipărească mesajul “Vectorul dat reprezinta o multime” sau “Vectorul dat NU reprezinta o multime”, în caz contrar.

01.12.2013 Programarea calculatoarelor 9

9.8.2. Funcţii de tip void

Page 10: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h>

int x[100], n;

void citire(int x[100], int n)

{

int i;

cout<<"Dati elem. vectorului \n";

for(i=1; i<=n; i++)

cin>>x[i];

return;

}

01.12.2013 Programarea calculatoarelor 10

Functia nu returneaza nici o valoare

Page 11: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void multime(int x[100],int n) { int i, j, verific = 1; for(i = 1; i < n; i++) for(j = i + 1; j <= n; j++) if( x[i] == x[j] ) verific = 0; if( verific == 1 ) cout<<"Vectorul reprezinta o multime"; else cout<<"vectorul NU reprezinta o multime"; return; }

01.12.2013 Programarea calculatoarelor 11

Fiecare element x[i] (i=1,2,…,n-1) este verificat

cu toate celelalte elemente x[j], cu j=i+1,…,n

Page 12: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void afisare(int x[100],int n)

{

int i;

cout<<"Vectorul este \n";

for(i=1; i<=n; i++)

cout<<x[i]<<" ";

cout<<"\n";

return;

}

01.12.2013 Programarea calculatoarelor 12

Page 13: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main()

{

cout<<"Dati n = ";

cin>>n;

citire(x,n);

afisare(x,n);

multime(x,n);

}

01.12.2013 Programarea calculatoarelor 13

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 14: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

01.12.2013 Programarea calculatoarelor 14

9.8.2. Funcţii de tip void

Page 15: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 3: Enunţ: Se consideră un număr natural în baza 10. Se

cere să se scrie câte o funcţie care să afişeze reprezentarea numărului dat în bazele 2 şi 8.

Exemplu:

01.12.2013 Programarea calculatoarelor 15

9.8.2. Funcţii de tip void

Pentru n=2510:

reprezentarea numărului în baza 2 este 110012

reprezentarea numărului în baza 8 este 318

Page 16: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h>

int n;

void baza_2(int n)

{

int i=1, j, x[30], cifre;

while(n != 0)

{

x[i] = n % 2;

n = n / 2;

i++;

}

01.12.2013 Programarea calculatoarelor 16

Se rețin resturile împărțirii numărului la 2

Page 17: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

cifre = i-1;

cout<<"Reprezentarea numarului in baza 2 este:";

for(i = cifre; i >= 1; i--) cout<<x[i];

cout<<"\n";

return;

}

01.12.2013 Programarea calculatoarelor 17

9.8.2. Funcţii de tip void

Page 18: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void baza_8(int n) { int i=1, j, x[30], cifre; while(n != 0) { x[i] = n % 8; n = n / 8; i++; }

01.12.2013 Programarea calculatoarelor 18

9.8.2. Funcţii de tip void

Se rețin resturile împărțirii numărului la 8

Page 19: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

cifre = i-1;

cout<<"Reprezentarea numarului in baza 8 este: ";

for(i=cifre; i>=1; i--)

cout<<x[i];

cout<<"\n";

return;

}

01.12.2013 Programarea calculatoarelor 19

9.8.2. Funcţii de tip void

Page 20: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main()

{

cout<<"Dati n = ";

cin>>n;

baza_2(n);

baza_8(n);

}

01.12.2013 Programarea calculatoarelor 20

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 21: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

01.12.2013 Programarea calculatoarelor 21

9.8.2. Funcţii de tip void

Page 22: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 4: Enunţ: Se consideră un număr natural n. Se cere să

se scrie câte o funcţie, pentru următoarele cerinţe: Să se afişeze toate numerele prime mai mici

sau egale cu n Să se afişeze toate numerele perfecte mai

mici sau egale cu n Să se afişeze toate numerele pătrate

perfecte mai mici sau egale cu n 01.12.2013 Programarea calculatoarelor 22

9.8.2. Funcţii de tip void

Page 23: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> #include <math.h> int n; void numere_prime(int n) { int i, j, prim; cout<<"Numerele prime mai mici sau egale decat "<<n<<"

sunt \n"; for(i=2; i<=n; i++) { prim = 1; for(j=2; j<=i/2; j++) if( i % j == 0 ) prim=0; if(prim==1) cout<<i<<" "; } return; }

01.12.2013 Programarea calculatoarelor 23

Page 24: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void numere_perfecte(int n)

{

int i, j, suma;

cout<<"Numerele perfecte mai mici sau egale decat "<<n<<" sunt \n";

for(i=6; i<=n; i++)

{

suma = 0;

for(j=1; j<=i/2; j++)

if( i%j == 0 ) suma = suma + j;

if( suma == i ) cout<<i<<" ";

}

return;

} 01.12.2013 Programarea calculatoarelor 24

Page 25: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void numere_patrate_perfecte(int n)

{

int i;

cout<<"Numerele patrate perfecte mai mici sau egale decat "<<n<<" sunt \n";

for(i=1; i<=n; i++)

if( sqrt(i) == floor( sqrt(i) ) ) cout<<i<<" ";

return;

}

01.12.2013 Programarea calculatoarelor 25

9.8.2. Funcţii de tip void

Page 26: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main() { cout<<"Dati n = "; cin>>n; numere_prime(n); cout<<"\n"; numere_perfecte(n); cout<<"\n"; numere_patrate_perfecte(n); } 01.12.2013 Programarea calculatoarelor 26

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 27: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

01.12.2013 Programarea calculatoarelor 27

9.8.2. Funcţii de tip void

Page 28: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 5:

Enunţ:

Scrieţi o funcţie care să aibă ca rezultat valoarea minimă existentă într-un tablou de numere intregi.

01.12.2013 Programarea calculatoarelor 28

9.8.2. Funcţii de tip void

Page 29: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h>

int x[100], n;

int minim(int x[100], int n)

{

int i, min;

min = x[1];

for(i=2; i<=n; i++)

if( x[i] < min ) min = x[i];

return min;

}

01.12.2013 Programarea calculatoarelor 29

Page 30: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main() { cout<<"Dati numarul de elemente n = "; cin>>n; for(i=1; i<=n; i++) cin>>x[i]; cout<<"Minimul este: "<<minim(x,n)<<"\n"; }

01.12.2013 Programarea calculatoarelor 30

9.8.2. Funcţii de tip void

Page 31: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

01.12.2013 Programarea calculatoarelor 31

9.8.2. Funcţii de tip void

Page 32: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 6:

Enunţ:

Pentru un număr natural n dat, se cere:

să se determine toţi divizorii pozitivi

să se calculeze numărul divizorilor

să se calculeze suma divizorilor

să se calculeze produsul divizorilor numărului n

01.12.2013 Programarea calculatoarelor 32

9.8.2. Funcţii de tip void

Page 33: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> int n; // functie care afiseaza toti divizorii proprii ai numarului n

void divizori(int n) { int i; for(i=1; i<=n; i++) if( n % i == 0 ) cout<<i<<" "; return; }

01.12.2013 Programarea calculatoarelor 33

Page 34: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

// functie care calculeaza numarul de divizori ai numarului n

int nr_divizori(int n)

{

int i, nr = 0;

for(i=1; i<=n; i++)

if( n % i == 0 ) nr++;

return nr;

}

01.12.2013 Programarea calculatoarelor 34

Page 35: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

// functie care calculeaza suma divizorilor numarului n

int suma_divizori(int n) { int i, s = 0; for(i=1; i<=n; i++) if( n % i == 0 ) s = s + i; return s; }

01.12.2013 Programarea calculatoarelor 35

Page 36: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

// functie care calculeaza produsul divizorilor numarului n

int produs_divizori(int n) { int i, p = 1; for(i=1; i<=n; i++) if( n % i == 0 ) p = p * i; return p; }

01.12.2013 Programarea calculatoarelor 36

Page 37: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main() { cout<<"Dati n = "; cin>>n; cout<<"\nDivizorii numarului "<<n<<" sunt: "; divizori(n); cout<<"\nNumarul de divizori ai numarului "

<<n<<" = "<<nr_divizori(n)<<"\n"; cout<<"\nSuma divizorilor numarului "<<n<<" =

"<<suma_divizori(n)<<"\n"; cout<<"\nProdusul divizorilor numarului " <<n<<"

= "<<produs_divizori(n)<<"\n"; }

01.12.2013 Programarea calculatoarelor 37

Page 38: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

01.12.2013 Programarea calculatoarelor 38

9.8.2. Funcţii de tip void

Page 39: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 7:

Enunţ:

Să se scrie câte o funcţie fără tip care să efectueze:

Citirea unei matrice pătratice

Suma elementelor din matrice aflate pe diagonala principală şi produsul celorlalte elemente

Afişarea elementelor din matrice

01.12.2013 Programarea calculatoarelor 39

9.8.2. Funcţii de tip void

Page 40: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> int a[50][50],n; void citire_matrice(void) { int i,j; cout<<"Dati dimensiunile matricei \n"; cout<<"Dati numarul de linii si de coloane n = "; cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } return; } 01.12.2013 Programarea calculatoarelor 40

Page 41: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void scriere_matrice(void) { int i, j; cout<<"Elementele matricei A sunt: \n"; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { cout.width(4); cout<<a[i][j]; } cout<<"\n"; } return; }

01.12.2013 Programarea calculatoarelor 41

Page 42: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void suma_produs(void) { int suma=0, produs=1, i, j; for(i=1; i<=n; i++) for(j=1; j<=n; j++) if( i == j ) suma = suma + a[i][j]; else produs = produs * a[i][j]; cout<<"Suma elementelor de pe diagonala principala este "<<suma<<"\n"; cout<<"Produsul celorlalte elementelor este "<<produs<<"\n"; return; }

01.12.2013 Programarea calculatoarelor 42

Page 43: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main(void) { citire_matrice(); scriere_matrice(); suma_produs(); }

01.12.2013 Programarea calculatoarelor 43

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 44: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.8.2. Funcţii de tip void

01.12.2013 Programarea calculatoarelor 44

Page 45: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 8:

Enunţ:

Fiind dat un tablou bidimensional cu n linii şi n coloane, afişaţi cea mai mare componentă şi poziţiile pe care le ocupă.

Exemplu:

Date de intrare:

n = 2

si matricea:

4 7

5 7 01.12.2013 Programarea calculatoarelor 45

9.8.2. Funcţii de tip void

Date de ieşire: max = 7 se afla pe pozitiile 1 2 si 2 2

Page 46: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> int a[50][50],n; void citire_matrice(void) { int i,j; cout<<"Dati dimensiunile matricei \n"; cout<<"Dati numarul de linii si de coloane n = "; cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } return; } 01.12.2013 Programarea calculatoarelor 46

Page 47: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void scriere_matrice(void) { int i,j; cout<<"Elementele matricei A sunt: \n"; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { cout.width(4); cout<<a[i][j]; } cout<<"\n"; } return; }

01.12.2013 Programarea calculatoarelor 47

Page 48: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void elemente_maxime(void)

{

int max=-1000,i,j;

for(i=1; i<=n; i++)

for(j=1; j<=n; j++)

if( max < a[i][j] ) max=a[i][j];

cout<<"Maximul din matrice este "<<max<<"\n";

for(i=1; i<=n; i++)

for(j=1; j<=n; j++)

if( max == a[i][j] )

cout<<"linia "<<i<<" si coloana "<<j<<"\n";

return;

}

01.12.2013 Programarea calculatoarelor 48

Page 49: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main(void) { citire_matrice(); scriere_matrice(); elemente_maxime(); }

01.12.2013 Programarea calculatoarelor 49

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 50: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.8.2. Funcţii de tip void

01.12.2013 Programarea calculatoarelor 50

Page 51: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Problema 9:

Enunţ: Se citeste o matrice patratica de dimensiune n cu

elemente numere intregi. Se cere:

Sa se afiseze numerele prime de pe diagonala principala

Sa se formeze un vector cu elementele matricei parcurse in ordine pe coloane

Exemplu:

Date de intrare: n = 3 si matricea:

1 2 3

4 5 6

7 8 9 01.12.2013 Programarea calculatoarelor 51

9.8.2. Funcţii de tip void

Date de ieşire: Numere prime de pe diagonala principala: 5 Parcurgerea matricii pe coloane: 1 4 7 2 5 8 3 6 9

Page 52: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

#include <iostream.h> int a[50][50],n; void citire_matrice(void) { int i,j; cout<<"Dati dimensiunile matricei \n"; cout<<"Dati numarul de linii si de coloane n = "; cin>>n; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cout<<"a["<<i<<","<<j<<"]= "; cin>>a[i][j]; } return; } 01.12.2013 Programarea calculatoarelor 52

Page 53: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void scriere_matrice(void) { int i,j; cout<<"Elementele matricei A sunt: \n"; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { cout.width(4); cout<<a[i][j]; } cout<<"\n"; } return; }

01.12.2013 Programarea calculatoarelor 53

Page 54: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int prim(int x)

{

int ok=1;

for(int i=2;i<=x/2;i++)

if(x%i==0) ok=0;

if(ok==1 && x>=2) return 1;

else return 0;

}

01.12.2013 Programarea calculatoarelor 54

Page 55: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void diagonala(void)

{

cout<<"elementele prime de pe diagonala principala\n";

for(int i=1;i<=n;i++)

if(prim(a[i][i])==1) cout<<a[i][i]<<" ";

cout<<"\n";

return;

}

01.12.2013 Programarea calculatoarelor 55

Page 56: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

void vector(void) { int b[200], i, j; cout<<"parcurgerea matricii pe coloane\n"; int nr=0; for(j=1;j<=n;j++) for (i=1;i<=n;i++) b[++nr]=a[i][j]; for(i=1;i<=nr;i++) cout<<b[i]<<" "; cout<<"\n"; return; } 01.12.2013 Programarea calculatoarelor 56

Parcurgerea pe coloane

Formarea vectorului

Page 57: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

int main() { citire_matrice(); scriere_matrice(); diagonala(); vector(); }

01.12.2013 Programarea calculatoarelor 57

9.8.2. Funcţii de tip void

Instructiuni de apel

Page 58: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.8.2. Funcţii de tip void

01.12.2013 Programarea calculatoarelor 58

Page 59: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Capitolul 9. Funcții

9.8. Probleme rezolvate cu ajutorul funcţiilor

9.8.1. Funcţii definite de utilizator

9.8.2. Funcţii de tip void

9.9. Probleme propuse spre rezolvare

01.12.2013 Programarea calculatoarelor 59

Page 60: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

1. Se da un vector v cu n elemente numere intregi. Sa se scrie un program care sa calculeze: a) Suma elementelor din vectorul v b) Numarul componentelor impare din vectorul v c) Elementul maxim din vectorul v Exemplu: Date de intrare: n = 9 v = {2, 9, 15, 6, 3, 12, 66, 8, 5}

01.12.2013 Programarea calculatoarelor 60

Date de iesire: a) 126 b) 4 c) 66

Page 61: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

2. Se dau n numere intregi. Sa se scrie un program care sa gaseasca numarul mai mic sau egal decat n, care sa aiba cei mai multi divizori. Se va folosi o functie care calculeaza numarul de divizori ai unui numar. Exemplu: Date de intrare: n = 100

01.12.2013 Programarea calculatoarelor 61

Date de iesire: 60 (are 12 divizori)

Page 62: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

3. Se da un numar natural n. Sa se scrie un program care sa stabileasca raportul dintre numarul divizorilor pari si numarul divizorilor impari ai numarului n. Exemplu: Date de intrare: n = 246

01.12.2013 Programarea calculatoarelor 62

Date de iesire: 1 (4 divizori pari si 4 divizori impari)

Page 63: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

4. Pentru o matrice formată din n linii şi m coloane (1< n, m < 10) să se scrie un program care afişează liniile conţinând k elemente nule (0 < k <= m). Se va afişa un mesaj în situaţia în care nici o linie nu conţine exact k elemente nule. Exemplu:

01.12.2013 Programarea calculatoarelor 63

Date de iesire: Linia 2

Date de intrare: n=2, m=4, k=2 1 0 2 3 0 3 0 5

Page 64: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

5. Se dă o matrice pătratică de dimensiune n*n precizată, scrieţi un program care stabileşte dacă:

matricea este simetrică faţă de diagonala principală

matricea este inferior triunghiulară, adică toate elementele situate deasupra diagonalei principale sunt nule

Exemplu:

01.12.2013 Programarea calculatoarelor 64

Date de iesire: Matricea este simetrica

Date de intrare: n=4 1 11 22 33 11 1 44 55 22 44 1 66 33 55 66 1

Page 65: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

6. Scrieţi o funcţie care să stabilească dacă un număr dat n conţine în reprezentarea sa zecimală o anumită cifră precizată, notată, de exemplu, c.

Se va utiliza apoi această funcţie pentru a afişa toţi întregii cu valori cuprinse între 1 şi p (p citit de la tastatură) pentru care numărul, pătratul şi cubul reprezentării sale conţin aceeaşi cifră.

01.12.2013 Programarea calculatoarelor 65

Page 66: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

9.9. Probleme propuse spre rezolvare

Exemplu:

01.12.2013 Programarea calculatoarelor 66

Date de iesire: 5 (valorile 5, 25=52, 125=53 contin cifra 5)

Date de intrare: c=5 p=200

Page 67: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Pentru alte informații teoretice și practice

legate de acest capitol se recomandă capitolul 4 –

FUNCȚII din cartea Noțiuni de programare în

limbajul C++, Adrian Runceanu, Mihaela Runceanu,

Editura Academica Brâncuși, Târgu-Jiu, 2012

(www.utgjiu.ro/editura) aflată la biblioteca Facultății

de Inginerie.

01.12.2013 Programarea calculatoarelor 67

Page 68: Programarea şi utilizarea calculatoarelor€¦ · Programarea calculatoarelor Universitatea “Constatin Brâncuşi” din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică,

Întrebări?

01.12.2013 Programarea calculatoarelor 68