Programarea şi utilizarea...

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

Transcript of Programarea şi utilizarea...

Page 1: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

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 calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

Curs 16

03.01.2014 Programarea calculatoarelor 2

Page 3: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

Capitolul 11.Tipuri definite de utilizator

11.1. Structuri 11.2. Uniuni 11.3. Probleme rezolvate 11.4. Probleme propuse spre rezolvare

03.01.2014 Programarea calculatoarelor 3

Page 4: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

Problema 1 Să se creeze o structură care să rețină partea reală și partea imaginară a unui număr complex, iar apoi să se creeze câte o funcție pentru următoarele operații cu numere complexe: 1. adunare 2. scădere 3. înmulțire 4. conjugarea unui număr complex 5. calculul modulului unui număr complex 03.01.2014 Programarea calculatoarelor 4

Page 5: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

#include <iostream.h> #include <math.h> typedef struct { double re; // re = partea reala a numarului

double im; // im = partea imaginara a numarului

} complex;

03.01.2014 Programarea calculatoarelor 5

Page 6: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// prototipurile functiilor pe care le definim dupa functia principala

complex adunare(complex a, complex b); complex scadere(complex a, complex b); complex inmultire(complex a, complex b); complex conjugat(complex a); double modul(complex a); int main() { complex x, y, z; // x,y,z sunt de tip COMPLEX

int optiune; // variabila folosita pentru a alege varianta dorita

double w; // variabila pentru calculul modulului unui nr. complex

char raspuns; // variabila folosita pentru continuarea introducerii datelor

de intrare

03.01.2014 Programarea calculatoarelor 6

Page 7: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

do{

cout<<" Introduceti partea reala a numarului X : " ;

cin>>x.re;

cout<<" Introduceti partea imaginara a numarului X : ";

cin>>x.im;

cout<<" Introduceti partea reala a numarului Y : ";

cin>>y.re;

cout<<" Introduceti partea imaginara a numarului Y : ";

cin>>y.im;

cout<<" \n Doriti sa continuati ( D / N ) : "<<endl;

cin>>raspuns;

}while(raspuns=='d' || raspuns=='D');

03.01.2014 Programarea calculatoarelor 7

Page 8: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

while(1) { cout<<" Operatia :\n"; cout<<" 1 : Adunarea a doua numere complexe \n"; cout<<" 2 : Scaderea a doua numere complexe \n"; cout<<" 3 : Inmultirea a doua numere complexe \n"; cout<<" 4 : Conjugatul unui numar complex \n"; cout<<" 5 : Modulul unui numar complex \n"; cout<<" 6,7,8,... : EXIT\n"; cin>>optiune;

03.01.2014 Programarea calculatoarelor 8

Page 9: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

switch (optiune) { case 1 : z=adunare(x,y); cout<<"Adunare z = "<<z.re<<" + "<<z.im<<"*i"<<endl; break; case 2 : z=scadere(x,y); cout<<"Scadere z = "<<z.re<<" + "<<z.im<<" *i"<<endl; break;

03.01.2014 Programarea calculatoarelor 9

Page 10: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate case 3 : z=inmultire(x,y); cout<<"Inmultirea lui x cu y este z = "<<z.re<<" + "<<z.im<<" *i\n"; break; case 4 : z=conjugat(x); cout<<"Conjugatul lui x este z = "<<z.re<<" +"<<z.im<<"*i\n"; break; case 5 : w=modul(x); cout<<"Modulul lui x este w = "<<w<<endl; break; default : exit(0); } // sfarsit instr. switch } // sfarsit structura while } // sfarsit functia main

03.01.2014 Programarea calculatoarelor 10

Page 11: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// functia pentru adunarea a doua numere complexe

complex adunare(complex a, complex b) { complex rezultat; rezultat.re = a.re + b.re; rezultat.im = a.im + b.im; return rezultat; }

03.01.2014 Programarea calculatoarelor 11

Page 12: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// functia pentru scaderea a doua numere complexe

complex scadere(complex a, complex b) { complex rezultat; rezultat.re = a.re - b.re; rezultat.im = a.im - b.im; return rezultat; }

03.01.2014 Programarea calculatoarelor 12

Page 13: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// functia pentru inmultirea a doua numere complexe

complex inmultire(complex a, complex b) { complex rezultat; rezultat.re = a.re * b.re - a.im * b.im; rezultat.im = a.re * b.im + a.im * b.re; return rezultat; }

03.01.2014 Programarea calculatoarelor 13

Page 14: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// functia pentru aflarea conjugatului unui numar complex

complex conjugat(complex a) { complex rezultat; rezultat.re = a.re; rezultat.im = -a.im; return rezultat; }

03.01.2014 Programarea calculatoarelor 14

Page 15: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

// functia pentru calculul modului unui numar complex

double modul(complex a) { double rez; rez = sqrt(a.re * a.re + a.im * a.im); return rez; }

03.01.2014 Programarea calculatoarelor 15

Page 16: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate Rezultatul executiei programului:

03.01.2014 Programarea calculatoarelor 16

Page 17: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate Problema 2 Să se descompună un număr in factori primi memorând rezultatul sub forma unui vector de structuri. Fiecare element va cuprinde două câmpuri: 1. unul care conține factorul prim 2. și unul care conține puterea la care apare acesta în

descompunere Exemplu:

03.01.2014 Programarea calculatoarelor 17

Date de intrare: m = 28

Date de iesire: descompunerea in factori primi: 22

71

Page 18: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

#include<iostream.h> struct factor { long f; int p; } x[20]; long m; int n, i;

03.01.2014 Programarea calculatoarelor 18

Page 19: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

int main() { cout<<"Introduceti numarul: "; cin>>m; long a=2; while( m != 1 ) { int q=0; //puterea la care apare a in descompunerea

numarului m

03.01.2014 Programarea calculatoarelor 19

Page 20: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

while( m%a == 0 ) { m = m/a; q++; } if( q != 0 ) { n++; x[n].f = a; x[n].p = q; }

03.01.2014 Programarea calculatoarelor 20

Page 21: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

if( a == 2 ) a = 3; else a+=2; } // sfarsit structura while(m!=1)

cout<<"Descompunerea in factori primi: \n"; for(i=1; i<=n; i++) cout<<x[i].f<<"^"<<x[i].p<<endl; }

03.01.2014 Programarea calculatoarelor 21

Page 22: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

03.01.2014 Programarea calculatoarelor 22

Rezultatul executiei programului:

Page 23: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

Problema 3

Se dau două puncte oarecare din plan A1(x1,y1) și A2(x2,y2) prin coordonatele lor reale.

Să se calculeze distanța dintre cele două puncte utilizând pentru aceasta o funcție adecvat definită căreia i se transmit coordonatele celor două puncte, considerându-se o structură de tip punct corespunzător definită. 03.01.2014 Programarea calculatoarelor 23

Page 24: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

#include <iostream.h>

#include <math.h>

float distanta(float x1, float y1, float x2, float y2)

{

return ( sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ));

}

03.01.2014 Programarea calculatoarelor 24

Page 25: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

typedef struct punct

{

float x;

float y;

};

int main(void)

{

punct a1,a2;

float distanta_ab;

03.01.2014 Programarea calculatoarelor 25

Page 26: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

cout<<"\n abcisa punctului A1: "; cin>>a1.x;

cout<<"\n ordonata punctului A1: "; cin>>a1.y;

cout<<"\n abcisa punctului A2: "; cin>>a2.x;

cout<<"\n ordonata punctului A2: "; cin>>a2.y;

//apelarea si transmiterea functiei distanta a coordonatelor punctelor

distanta_ab=distanta(a1.x,a1.y,a2.x,a2.y);

cout<<"\n distanta dintre punctele A si B = "<<distanta_ab;

}

03.01.2014 Programarea calculatoarelor 26

Page 27: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

03.01.2014 Programarea calculatoarelor 27

Rezultatul executiei programului:

Page 28: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

Problema 4 - Suma și simplificarea a două fracții

Se citesc de la tastatură numitorii și numărătorii (numere întregi de maxim 9 cifre) a două fracții.

Să se scrie un program care simplifică suma celor două fracții și afișează pe ecran numitorul și numărătorul fracției rezultate.

03.01.2014 Programarea calculatoarelor 28

Date de intrare: Numarator 1 Numitor 2 Numarator 1 Numitor 3

Date de iesire: Fractia suma simplificata: 5 6

Page 29: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

# include <iostream.h>

struct fractie

{

long int numitor, numarator;

};

fractie f1, f2, suma;

03.01.2014 Programarea calculatoarelor 29

Page 30: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate // calculul cmmdc folosind algoritmul lui Euclid prin împărțiri repetate

long int cmmdc(long int x, long int y) { long int r; r = x % y; while( r != 0) { x = y; y = r; r = x % y; } return y; }

03.01.2014 Programarea calculatoarelor 30

Page 31: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

int main()

{

cout<<"Dati elementele primei fractii\n";

cout<<"numaratorul = "; cin>>f1.numarator;

cout<<"numitorul = "; cin>>f1.numitor;

cout<<"Dati elementele celei de-a doua fractii\n";

cout<<"numaratorul = "; cin>>f2.numarator;

cout<<"numitorul = "; cin>>f2.numitor;

03.01.2014 Programarea calculatoarelor 31

Page 32: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate suma.numarator = f1.numarator*f2.numitor + f2.numarator*f1.numitor;

suma.numitor = f1.numitor*f2.numitor;

long int d = cmmdc(suma.numarator, suma.numitor);

suma.numarator = suma.numarator / d;

suma.numitor = suma.numitor / d;

cout << suma.numarator << " / " << suma.numitor;

} 03.01.2014 Programarea calculatoarelor 32

Page 33: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

03.01.2014 Programarea calculatoarelor 33

Rezultatul executiei programului:

Page 34: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

Problema 5

Pentru evidența produselor dintr-un depozit, se definește o structură cu următoarele informații:

• codul

• denumirea

• prețul produsului

Citiți informațiile a n produse și afisati produsele cu noile prețuri (valoarea prețului este 7 dacă codul produsului este mai mic decât 500 și 11 în caz contrar).

Afișați produsele cu cel mai mare preț după scumpire.

03.01.2014 Programarea calculatoarelor 34

Page 35: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

#include<iostream.h>

typedef struct produse

{

int cod, pret;

char den[20];

};

produse a[20];

int n,i,c,p;

03.01.2014 Programarea calculatoarelor 35

Page 36: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

void citire()

{

cout<<"Dati numarul de produse "; cin>>n;

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

{

cout<<"codul produsului "; cin>>a[i].cod;

cout<<"pretul produsului "; cin>>a[i].pret;

cout<<"denumirea produsului "; cin>>a[i].den;

}

}

03.01.2014 Programarea calculatoarelor 36

Page 37: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate void rezolvare() { for(i=1;i<=n;i++) if(a[i].cod<500) a[i].pret=7; else a[i].pret=11; for(i=1;i<=n;i++) cout<<"pretul "<<a[i].den<<" este "<<a[i].pret<<"\n"; cout<<endl; for(i=1;i<=n;i++) if(a[i].pret==11) cout<<a[i].den<<"\n"; }

03.01.2014 Programarea calculatoarelor 37

Page 38: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

int main()

{

citire();

rezolvare();

}

03.01.2014 Programarea calculatoarelor 38

Page 39: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.3. Probleme rezolvate

03.01.2014 Programarea calculatoarelor 39

Rezultatul executiei programului:

Page 40: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

Capitolul 11.Tipuri definite de utilizator

11.1. Structuri 11.2. Uniuni 11.3. Probleme rezolvate 11.4. Probleme propuse spre rezolvare

03.01.2014 Programarea calculatoarelor 40

Page 41: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.4. Probleme propuse spre rezolvare

1. Fie declaraţia:

struct lista

{

int nr;

float nota;

};

Să se scrie o funcţie care să aibă ca parametru un tablou cu maximum 100 de elemente de tip lista şi să returneze ca rezultat valoarea câmpului nr asociată celei mai mari valori a câmpului nota din tablou. 03.01.2014 Programarea calculatoarelor 41

Page 42: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.4. Probleme propuse spre rezolvare

2. Se consideră un tablou de elemente ce conţin informaţii despre activitatea de producţie a mai multor firme. Fiecare element memorează următoarele informaţii: • codul numeric al firmei • codul numeric al produsului • cantitatea produsă Să se scrie o funcţie care, folosind ca parametri tabloul şi o valoare numerică x, furnizează ca rezultat numărul de firme care produc cea mai mare cantitate de produse al căror cod numeric este x. 03.01.2014 Programarea calculatoarelor 42

Page 43: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

11.4. Probleme propuse spre rezolvare

3. Definiţi un tip structură convenabil pentru descrierea unei figuri geometrice plane.

De exemplu, structura va conţine denumirea formei figurii geometrice şi:

- pentru un cerc: raza

- pentru un dreptunghi: dimensiunile celor două laturi

Scrieţi apoi o funcţie care să aibă ca rezultat aria unei figuri geometrice date şi folosiţi-o într-un program.

03.01.2014 Programarea calculatoarelor 43

Page 44: Programarea şi utilizarea calculatoarelorrunceanu.ro/adrian/wp-content/cursuri/S1progr2013/curs16-PC.pdf · pentru descrierea unei figuri geometrice plane. De exemplu, structura

Întrebări?

03.01.2014 Programarea calculatoarelor 44