+ All Categories
Home > Engineering > Lecture4 - PC

Lecture4 - PC

Date post: 15-Apr-2017
Category:
Upload: adrian-runceanu
View: 182 times
Download: 0 times
Share this document with a friend
114
Programarea calculatoarelor #4 Adrian Runceanu www.runceanu.ro/adrian 2016 C++ Structura unui program C++. Baze de numeratie
Transcript
Page 1: Lecture4 - PC

Programarea calculatoarelor

#4

Adrian Runceanuwww.runceanu.ro/adrian

2016

C++Structura unui program C++. Baze de numeratie

Page 2: Lecture4 - PC

[email protected]

Curs 4

02.12.2016 Programarea calculatoarelor 2

Page 3: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 3

Page 4: Lecture4 - PC

[email protected]

4.1. Preprocesare

02.12.2016 Programarea calculatoarelor 4

Schematic, parcursul unui program sursa scris înC++, până la executarea lui este următorul:

program sursa iniţial ( extensia .CPP )preprocesareprogram sursă ( extensia .CPP )compilare

program obiect ( extensia .OBJ )

editarea de legături (linkeditare)

program executabil ( extensia .EXE )

Page 5: Lecture4 - PC

[email protected]

4.1. Preprocesare

În C++, după construirea unui program sursă, se pot evalua anumite valori dacă se utilizeazăpreprocesorul.

Activitatea preprocesorului se împarte în:

a) includere de fişiere standard / utilizatorb) definire constante simbolicec) definire macro-uri(macroinstructiuni)d) compilare condiţionată

02.12.2016 Programarea calculatoarelor 5

Page 6: Lecture4 - PC

[email protected]

4.1. Preprocesare

a) Includerea de fişiere standard/utilizatorse face pentru a putea:

utiliza funcţiile predefinite ale limbajului C++ carese afla în fişiere standard numite header-e (auextensia .h)

sau pentru a putea utiliza funcţii proprii aflate înfişiere utilizator

02.12.2016 Programarea calculatoarelor 6

Page 7: Lecture4 - PC

[email protected]

4.1. Preprocesare

Astfel, pentru a putea utiliza funcţiilestandard de intrare / ieşire cin / cout, trebuiescris la începutul unui program C++:

#include <iostream.h> - fişier standardIar pentru a utiliza fişiere utilizator:#include “nume fisier” – fişier utilizatorObservaţie: Includerea fişierelor se execută numai pe timpul

compilării

02.12.2016 Programarea calculatoarelor 7

Page 8: Lecture4 - PC

[email protected]

4.1. Preprocesare

b) Definire constante simbolice

Pentru a mări portabilitatea programelorC++, se pot folosi constante.

O constantă este un nume pe carecompilatorul C++ îl asociază unei valori care nuse modifică.

Pentru aceasta se utilizează directiva #define.

02.12.2016 Programarea calculatoarelor 8

Page 9: Lecture4 - PC

[email protected]

4.1. Preprocesare

• Asociază numelui nume_constanta textuldenumit text care se poate prelungi pe mai linii.

• Aceasta substituţie a numelui este valabilă în totfişierul până la întâlnirea unei directive decompilare #undef nume.

02.12.2016 Programarea calculatoarelor 9

#define nume_constanta text

Page 10: Lecture4 - PC

[email protected]

4.1. Preprocesare

Exemplu:#define NRLINII 30#define NRCOLOANE 20#define DIMENSIUNE NRLINII*NRCOLOANEint t[NRLINII][NRCOLOANE];double a[DIMENSIUNE];

Ce va întâlni compilatorul după preprocesor?int t[30][20];double a[30*20];

Observaţie: nu se vor face calculele pentru că este vorbadoar de informatie la nivel de text

02.12.2016 Programarea calculatoarelor 10

Page 11: Lecture4 - PC

[email protected]

4.1. Preprocesare

Dacă se vor utiliza macroinstrucţiuni sau constantesimbolice în programele C++, atunci acestea trebuie săaibă nume sugestive şi scrise cu litere mari pentru aputea ajuta programatorii care citesc codul sursă săfacă diferenţa uşor între constante şi variabile.

Exemplu: Putem defini următoarele constante:#define TRUE 1#define FALSE 0#define PI 3.1415#define PROGRAMATOR “Pop Ion”

02.12.2016 Programarea calculatoarelor 11

Page 12: Lecture4 - PC

[email protected]

4.1. Preprocesare

c) Definirea de macroinstrucţiuniUn macrou (o macroinstrucţiune) este o

definiţie în care funcţionează reguli de subtituţie de text.

Apelul macroului se face astfel:

02.12.2016 Programarea calculatoarelor 12

#define nume(param_form1, param_form2, . . . ,param_formn) text

nume(param_actual1, param_actual2,…,param_actualn)

Page 13: Lecture4 - PC

[email protected]

4.1. PreprocesareUnde:

• nume reprezintă numele macroului

• param_form1, param_form2, . . . , param_formn

parametrii formali ai macroului

• iar text este textul în care se vor face înlocuirile

• iar param_actual1, param_actual2, . . . , param_actualn sunt parametrii cu care se apelează macroul în funcţia principală

02.12.2016 Programarea calculatoarelor 13

Page 14: Lecture4 - PC

[email protected]

4.1. Preprocesare

Funcţionarea macroului este următoarea:1. în textul dat se înlocuiesc parametrii formali cu

parametrii actuali2. iar apoi textul obţinut va substitui apelul

macroului.Exemplu:#define MAX(a, b) ( (a) < (b) ? (b) : (a) )#define MIN(a, b) ( (a) > (b) ? (b) : (a) )#define SGN(x) ((x) > 0 ? 1 : ( (x) == 0 ? 0 : (-1)))

02.12.2016 Programarea calculatoarelor 14

Page 15: Lecture4 - PC

[email protected]

4.1. Preprocesare

Am definit câteva macrouri care pot fi utileîn multe programe C++, şi anume:

• MAX şi MIN determină maximul, respectivminimul a două numere de orice tip

• iar SGN determină signatura unui număr dat

02.12.2016 Programarea calculatoarelor 15

Page 16: Lecture4 - PC

[email protected]

4.1. Preprocesare

Următorulprogram C++ va folosiaceste douămacro-uri:

02.12.2016 Programarea calculatoarelor 16

#include<iostream.h>

#define MAX(a, b) ( (a) < (b) ? (b) : (a) )

#define MIN(a, b) ( (a) > (b) ? (b) : (a) )

int main(void)

{

cout<<“Maximul valorilor 10.0 si 25.0 este “ <<MAX(10.0, 25.0)<<endl;

cout<<“Minimul valorilor 3.4 si 3.1 este ” <<MIN(3.4, 3.1)<<endl;

}

a, b parametriformali

parametri actuali

Page 17: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 17

Page 18: Lecture4 - PC

[email protected]

4.2. Structura unui program C++

/*-- nume.cpp -- comentariu iniţial --*/

#include <iostream.h>#include <math.h>. . . . /*-- alte directive include --*/

[ declaraţii şi definiţii globale ]

int main(void){

[ declaraţii locale ]

< instrucţiuni >}

02.12.2016 Programarea calculatoarelor 18

optional

Page 19: Lecture4 - PC

[email protected]

4.2. Structura unui program C++

02.12.2016 Programarea calculatoarelor 19

Page 20: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 20

Page 21: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

Baza de numeraţie 2 (sistemul BINAR)Ca în orice bază de numeraţie, cifrele folosite în

reprezentarea numerelor sunt cuprinse în intervalul:[0, baza-1]

Rezultă că în baza 2 avem o reprezentare anumerelor folosind doar cifrele 0 şi 1.

Fiecare dintre cifrele semnificative ale unei baze denumeraţie poartă denumirea de digit.

În baza 2 deoarece sunt doar doi digiţi posibiliaceştia au preluat denumirea de binary digit (bit).

De aici provenienţa cuvântului bit.02.12.2016 Programarea calculatoarelor 21

Page 22: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

În baza 10 aceste cifre sunt 0...9.Alte baze de numeraţie folosite în legătură cu sistemul binar sunt: 4, 8 (octal) şi 16 (hexazecimal).

Pentru baza 16 cifrele de reprezentare sunt:0 . . 9 şi A . . F

S-a convenit folosirea primelor litere ale alfabetului, cu semnificaţia:

A ţine locul lui 10B lui 11C lui 12D lui 13E lui 14F lui 15

02.12.2016 Programarea calculatoarelor 22

Page 23: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

În calculatoarele actuale baza de numeraţieeste 2.

Au existat încercări de creare a unorcalculatoare în bază 10, dar nu s-au putut ridicala performanţele calculatoarelor binare.

S-a păstrat astfel sistemul binar ca standardpentru calculatoarele digitale.

02.12.2016 Programarea calculatoarelor 23

Page 24: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

Să luăm un exemplu de număr în baza 2:0110 1101

Ce înseamnă acesta? Cum poate fi interpretat astfel încât să poată

fi înţeles de către noi (adică tradus în baza 10)?La aceste întrebări se răspunde plecând de la

regula de reprezentare în orice bază de numeraţie (poziţională): fiecărei poziţii în număr îi corespunde o putere a acelei baze de numeraţie.

02.12.2016 Programarea calculatoarelor 24

Page 25: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

Astfel:

primei poziţii din dreapta îi corespunde puterea 0 a lui 2,

următoarei poziţii îi corespunde puterea 1 a lui 2,

iar ultimei poziţii (prima din stânga) îi corespunde puterea

7 a lui 2.

Atunci putem genera valoarea acestui număr în baza

10 - plecând de la dreapta spre stânga - astfel:

1*20 + 0*21 + 1*22 + 1*23 + 0*24 + 1*25 + 1*26 + 0*27 =

= 1 + 4 + 8 + 32 + 64 = 10910

02.12.2016 Programarea calculatoarelor 25

Page 26: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

La fel procedăm cu un număr în baza 10 când dorimsă-i aflăm valoarea.

Dar, în baza 10 interpretăm natural şi aproapeinstantaneu orice număr, care ne sugerează şi oputernică semnificaţie "cantitativă" (adică mărimeaacelui număr).

Exemplu:57810 = 8*100 + 7*101 + 5*102 = 8 + 70 + 500

Ştim imediat că avem de-a face cu 'cinci suteşaptezeci şi opt' şi că acesta se situează cam lajumătatea intervalului [0-1000].

02.12.2016 Programarea calculatoarelor 26

Page 27: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

Notații:

Bitul se notează cu b.Combinaţia de 8 biţi succesivi se numeşte Byte

(octet) şi este reprezentat prin litera B

02.12.2016 Programarea calculatoarelor 27

Page 28: Lecture4 - PC

[email protected]

4.3. Baze de numeraţie

Într-un număr în baza 2 sunt importante douăpoziţii:Prima din dreapta - care poartă denumirea de LeastSignificant bit (LSb)Prima din stânga - care poartă denumirea de MostSignificant bit (MSb)

Poziţia MSb are de obicei rolul de semn alnumărului:

0 are semnificaţia de plus1 are semnificaţia de minus

02.12.2016 Programarea calculatoarelor 28

Page 29: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 29

Page 30: Lecture4 - PC

[email protected]

4.4.1. Conversia din baza 2 în baza 8 şi invers

Ştim că sistemele de numeraţie octal (baza8) şi hexazecimal (baza 16) au particularitateade a folosi ca bază un număr (8 sau 16) carerezultă din ridicarea la puterea a 3-a sau a 4-a acifrei 2, astfel între cele trei sisteme denumeraţie se pot stabili compatibilităţi directe.

02.12.2016 Programarea calculatoarelor 30

Page 31: Lecture4 - PC

4.4.1. Conversia din baza 2 în baza 8 şi invers

Astfel, conversia octal-binar şi binar-octalporneşte de la faptul că orice cifră octală se poate reprezenta prin 3 cifre binare:

0 = 000 4 = 100

1 = 001 5 = 101

2 = 010 6 = 110

3 = 011 7 = 111

02.12.2016 Programarea calculatoarelor 31

Page 32: Lecture4 - PC

[email protected]

4.4.1. Conversia din baza 2 în baza 8 şi invers

Dacă se consideră un număr octal, pentruconversia în binar se va scrie fiecare cifră octalăprin 3 cifre binare.

Exemplu :(3 4 7, 5)8 = (011 100 111, 101 )2

02.12.2016 Programarea calculatoarelor 32

Page 33: Lecture4 - PC

[email protected]

4.4.1. Conversia din baza 2 în baza 8 şi invers

Dacă se consideră un număr binar, pentruconversia în octal se vor grupa câte 3 cifre binare pornind de la poziţia virgulei spre stângapentru partea întreagă, respectiv dreaptapentru partea fracţionară, găsindcorespondentul în octal.

Exemplu:( 001 110 011 101 , 101 100 )2 = (1635,54)8

1 6 3 5 5 4

02.12.2016 Programarea calculatoarelor 33

Page 34: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 34

Page 35: Lecture4 - PC

4.4.2. Conversia din baza 2 în baza 16 şi invers

La fel se poate proceda şi în cazul conversieibinar - hexazecimal, orice cifra hexazecimalăputându-se reprezenta prin patru cifre binare:

0 = 0000 4 = 0100 8 = 1000 C = 1100

1 = 0001 5 = 0101 9 = 1001 D = 1101

2 = 0010 6 = 0110 A = 1010 E = 1110

3 = 0011 7 = 0111 B = 1011 F = 1111

02.12.2016 Programarea calculatoarelor 35

Page 36: Lecture4 - PC

[email protected]

4.4.2. Conversia din baza 2 în baza 16 şi invers

Exemple:

( 5 A F 4, 3 E)16 = (0101 1010 1111 0100, 0011 1110)2

02.12.2016 Programarea calculatoarelor 36

Page 37: Lecture4 - PC

[email protected]

4.4.2. Conversia din baza 2 în baza 16 şi invers

( 10 0110 1011 1100, 0011 1101 11 )2 = ( 26BC,3DC )16

2 6 B C 3 D C

02.12.2016 Programarea calculatoarelor 37

Page 38: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 38

Page 39: Lecture4 - PC

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

a) Operaţii aritmetice în binar:

Unde ‘*’ semnifică un împrumut de la poziţia imediaturmătoare a descăzutului, care pentru poziţia curentă înseamnă 2(deci se interpretează 2 - 1 = 1).

adunare înmulţire scădere

0 + 0 = 0 0 0 = 0 0 – 0 = 0

0 + 1 = 1 0 1 = 0 1 – 0 = 1

1 + 0 = 1 1 0 = 0 1 – 1 = 0

1 + 1 = 10 1 1 = 1 0 – 1 = 1*

02.12.2016 Programarea calculatoarelor 39

Page 40: Lecture4 - PC

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

Exemple de operaţii în binar:

11101101,101 + 1011010,001

1000101,110 - 111010,011

101000111,110

1011,011

110,11

10,11

11011 11011 00000 11011

10010,1001

02.12.2016 Programarea calculatoarelor 40

Page 41: Lecture4 - PC

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

b) Operaţii aritmetice în octal:

+ 0 1 2 3 4 5 6 7

0 0 1 2 3 4 5 6 7 1 1 2 3 4 5 6 7 10 2 2 3 4 5 6 7 10 11 3 3 4 5 6 7 10 11 12 4 4 5 6 7 10 11 12 13 5 5 6 7 10 11 12 13 14 6 6 7 10 11 12 13 14 15 7 7 10 11 12 13 14 15 16

0 1 2 3 4 5 6 7

0 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 7 2 0 2 4 6 10 12 14 16 3 0 3 6 11 14 17 22 25 4 0 4 10 14 20 24 30 34 5 0 5 12 17 24 31 36 43 6 0 6 14 22 30 36 44 52 7 0 7 16 25 34 43 52 61

02.12.2016 Programarea calculatoarelor 41

Page 42: Lecture4 - PC

[email protected]

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

Exemple de operaţii în octal:Se ţine seama de următoarele reguli:

• La adunare şi înmulţire rezultatul va fi constituit dinrestul împărţirii sumei sau produsului la bază, câtulconstituind transportul pentru poziţia următoare

• La scădere, un împrumut de la poziţia următoare anumărului înseamnă adunarea la descăzutul poziţieicurente, a bazei de numeraţie

02.12.2016 Programarea calculatoarelor 42

Page 43: Lecture4 - PC

[email protected]

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

1475,367+ 562,51

34022,56 – 1234,25

2260,077

32566,31

357,26

3,7

321332 131602

1637,352

02.12.2016 Programarea calculatoarelor 43

Page 44: Lecture4 - PC

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

c) Operaţii aritmetice în hexazecimal:

+ 0 1 2 3 4 5 6 7 8 9 A B C D E F

0 0 1 2 3 4 5 6 7 8 9 A B C D E F

1 1 2 3 4 5 6 7 8 9 A B C D E F 10

2 2 3 4 5 6 7 8 9 A B C D E F 10 11

3 3 4 5 6 7 8 9 A B C D E F 10 11 12

4 4 5 6 7 8 9 A B C D E F 10 11 12 13

5 5 6 7 8 9 A B C D E F 10 11 12 13 14

6 6 7 8 9 A B C D E F 10 11 12 13 14 15

7 7 8 9 A B C D E F 10 11 12 13 14 15 16

8 8 9 A B C D E F 10 11 12 13 14 15 16 17

9 9 A B C D E F 10 11 12 13 14 15 16 17 18

A A B C D E F 10 11 12 13 14 15 16 17 18 19

B B C D E F 10 11 12 13 14 15 16 17 18 19 1A

C C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B

D D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C

E E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D

F F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E

02.12.2016 Programarea calculatoarelor 44

Page 45: Lecture4 - PC

[email protected]

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

0 1 2 3 4 5 6 7 8 9 A B C D E F

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 0 1 2 3 4 5 6 7 8 9 A B C D E F

2 0 2 4 6 8 A C E 10 12 14 16 18 1A 1C 1E

3 0 3 6 9 C F 12 15 18 1B 1E 21 24 27 2A 2D

4 0 4 8 C 10 14 18 1C 20 24 28 2C 30 34 38 3C

5 0 5 A F 14 19 1E 23 28 2D 32 37 3C 41 46 4B

6 0 6 C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A

7 0 7 E 15 1C 23 2A 31 38 3F 46 4D 54 5B 62 69

8 0 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78

9 0 9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87

A 0 A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96

B 0 B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5

C 0 C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4

D 0 D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3

E 0 E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4 D2

F 0 F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1

02.12.2016 Programarea calculatoarelor 45

Page 46: Lecture4 - PC

4.4.3. Operaţii aritmetice în binar, octal, hexazecimal

Exemple de operaţii în hexazecimal:

AF59C + D8E2

F000 – 1

BCE7E

EFFF

5DA2

B8

2ED10 405F6

434C70

02.12.2016 Programarea calculatoarelor 46

Page 47: Lecture4 - PC

[email protected]

4. Structura unui program C/C++

4.1. Preprocesare4.2. Structura unui program C++4.3. Baze de numeraţie4.4. Conversia din baza 2 în bazele 8 şi 16 şi invers

4.4.1. Conversia din baza 2 în baza 8 şi invers4.4.2. Conversia din baza 2 în baza 16 şi invers4.4.3. Operaţii aritmetice în binar, octal,

hexazecimal4.5. Probleme propuse spre rezolvare

02.12.2016 Programarea calculatoarelor 47

Page 48: Lecture4 - PC

[email protected]

4.5. Probleme propuse spre rezolvare:

1. Să se convertească din sistemul binar în sistemul octal numerele reprezentate prin:

(101,101)2 = ?8

(111000111,101)2 = ?8

(10110,1101)2 = ?8

2. Să se convertească din sistemul binar în sistemulhexazecimal numerele reprezentate prin:

(110010,11011)2 = ?16

(111000111,101)2 = ?16

(10111111101)2 = ?16

02.12.2016 Programarea calculatoarelor 48

Page 49: Lecture4 - PC

[email protected]

4.5. Probleme propuse spre rezolvare:

3. Să se convertească din sistemul octal în sistemulbinar numerele reprezentate prin:

(173,236)8 = ?2

(153)8 = ?2

4. Să se convertească din sistemul hexazecimal însistemul binar numerele reprezentate prin:

(43,AC)16 = ?2

(1C8,B)16 = ?2

02.12.2016 Programarea calculatoarelor 49

Page 50: Lecture4 - PC

[email protected]

4.5. Probleme rezolvate

1) Se introduce un număr natural cu maxim 9 cifre. Să se

determine şi să se afişeze numărul de cifre, cea mai mare

cifră, cea mai mică cifră şi suma tuturor cifrelor acestui

număr.

Exemplu:

02.12.2016 Programarea calculatoarelor 50

Date de intrare: 24356103

Date de ieşire:

Numarul de cifre 8

Cea mai mare cifra 6

Cea mai mica cifra 0

Suma cifrelor 24

Page 51: Lecture4 - PC

[email protected]

#include<iostream.h>int main(){

long int n;int nr_cifre=0;int min=100;int max=-100;int suma=0;int cifra;cout<<"Dati numarul

(maxim 9 cifre) ";cin>>n;

02.12.2016 Programarea calculatoarelor 51

while(n!=0)

{

cifra=n%10;

nr_cifre++;

if(cif>max) max=cifra;

if(cif<min) min=cifra;

suma=suma+cifra;

n=n/10;

}

cout<<"\n numarul de cifre"<<nr_cifre;

cout<<"\n cea mai mare cifra "<<max;

cout<<"\n cea mai mica cifra "<<min;

cout<<"\n suma cifrelor "<<suma;

}

Page 52: Lecture4 - PC

[email protected]

02.12.2016 Programarea calculatoarelor 52

Page 53: Lecture4 - PC

[email protected]

4.5. Probleme rezolvate

2) Dat un număr intreg demaxim 9 cifre, să seafişeze numărul de apariţiial fiecărei cifre.

02.12.2016 Programarea calculatoarelor 53

Exemplu:

Date de intrare 364901211 Date de ieşire:0 apare de 1 ori1 apare de 3 ori2 apare de 1 ori3 apare de 1 ori4 apare de 1 ori5 apare de 0 ori6 apare de 1 ori7 apare de 0 ori8 apare de 0 ori9 apare de 1 ori

Page 54: Lecture4 - PC

[email protected]

#include<iostream.h>int main(){

long int n;int n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;n0=n1=n2=n3=n4=n5=n6=n7=n8=n9=0;cout<<"Dati numarul (cu maxim9 cifre) = "; cin>>n;while(n!=0) {

switch(n%10){case 0: n0++;break;case 1: n1++;break;case 2: n2++;break;case 3: n3++;break;case 4: n4++;break;case 5: n5++;break;case 6: n6++;break;case 7: n7++;break;case 8: n8++;break;case 9: n9++;break;

}n=n/10;}02.12.2016 Programarea calculatoarelor 54

cout<<"\n 0 apare de "<<n0<<" ori";

cout<<"\n 1 apare de "<<n1<<" ori";

cout<<"\n 2 apare de "<<n2<<" ori";

cout<<"\n 3 apare de "<<n3<<" ori";

cout<<"\n 4 apare de "<<n4<<" ori";

cout<<"\n 5 apare de "<<n5<<" ori";

cout<<"\n 6 apare de "<<n6<<" ori";

cout<<"\n 7 apare de "<<n7<<" ori";

cout<<"\n 8 apare de "<<n8<<" ori";

cout<<"\n 9 apare de "<<n9<<" ori";

}

Page 55: Lecture4 - PC

[email protected]

02.12.2016 Programarea calculatoarelor 55

Page 56: Lecture4 - PC

[email protected]

4. Tablouri

4.1. Generalități. Clasificare4.2. Tablouri unidimensionale (vectori)4.3. Tablouri bidimensionale (matrici)4.4. Tablouri multidimensionale

02.12.2016 Programarea calculatoarelor 56

Page 57: Lecture4 - PC

[email protected]

4.1. Generalitati. Clasificare

Numim tablou o colecţie de date de acelaşitip, în care elementele sunt ordonate, iaraccesul la fiecare element are loc prin indice.

În funcţie de numărul indicilor avem mai multe tipuri de tablouri:

1. Tablouri unidimensionale (cu un singur indice)2. Tablouri bidimensionale (cu doi indici)3. Tablouri multidimensionale (cu mai mulţi

indici)

02.12.2016 Programarea calculatoarelor 57

Page 58: Lecture4 - PC

[email protected]

4. Tablouri

4.1. Generalități. Clasificare4.2. Tablouri unidimensionale (vectori)4.3. Tablouri bidimensionale (matrici)4.4. Tablouri multidimensionale

02.12.2016 Programarea calculatoarelor 58

Page 59: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

• Tablourile unidimensionale funcţionează ca unvector şi se pot declara astfel:

• Se observă că este obligatorie folosireaparantezelor drepte care să încadrezedimensiunea maximă pe care o alege utilizatorulpentru acel tablou unidimensional.

02.12.2016 Programarea calculatoarelor 59

tip nume_tablou[dimensiune_maximă];

Page 60: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Exemplu: Declarări de tablouri unidimensionale:

02.12.2016 Programarea calculatoarelor 60

int a[25]; // declararea unui tablou unidimensional cu maxim 25 de

// elemente, fiecare de tip întreg

float x[30]; // declararea unui tablou unidimensional cu maxim 30 de

// elemente, fiecare de tip real simplă precizie

char s[40]; // declararea unui tablou unidimensional cu maxim 40 de

// elemente, fiecare de tip caracter

Page 61: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

• Compilatorul C++ alocă un spaţiu de memorieegal cu numărul maxim de elemente aletabloului, rezervând bineînţeles octeţi în funcţiede tipul de bază al fiecărui tablou.

• Accesul la fiecare element al tabloului se faceprin numele acestuia urmat între paranteze, deindicele său (adică poziţia pe care o ocupă întablou).

• În limbajul C++, indicii tablourilor începnumărătoarea de la valoarea 0.

02.12.2016 Programarea calculatoarelor 61

Page 62: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Exemplu: Modalităţi de acces la elementele ce pot fi

memorate în tablourile unidimensionaledeclarate anterior:

02.12.2016 Programarea calculatoarelor 62

a[0] – reprezintă elementul aflat pe prima poziţie în tabloua[24] - reprezintă elementul aflat pe ultima poziţie în tablou

x[i] - reprezintă elementul aflat pe poziţia i în tablou, unde i poateavea valori între 0 şi 29.

Page 63: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Iniţializarea elementelor unui tablou se poateface total sau parţial la declararea lor:

int b[5] = {1, 2, 3, 4, 5};Astfel:• elementul b[0] are valoarea 1 • elementul b[1] are valoarea 2 • elementul b[2] are valoarea 3 • elementul b[3] are valoarea 4 • elementul b[4] are valoarea 5

02.12.2016 Programarea calculatoarelor 63

Page 64: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Problema 1:Se consideră n numere reale. Se cere să se

determine valoarea minimă şi valoarea maximă.Exemplu:

02.12.2016 Programarea calculatoarelor 64

Date de intrare:n=5 si x={10, -2, 34, -198, 4}Date de ieşire:minim=-198, maxim=34

Page 65: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

02.12.2016 Programarea calculatoarelor 65

#include<iostream.h>

int main(void)

{

int i, n;

float x[50], min, max;

cout<<"Dati numarul de elemente ale tabloului ";

cin>>n;

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

{

cout<<"x["<<i+1<<"]= ";

cin>>x[i];

}

Citirea elementelor si memorarea lor in

vectorul x

Citirea numarului de elemente ce vor fi

prelucrate in vector - n

Page 66: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

min = x[0]; max = x[0];for( i=1; i<n; i++ )

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

else if( max < x[i] )

max = x[i];

cout<<"\nMinimul este "<<min;cout<<"\nMaximul este "<<max;

}

02.12.2016 Programarea calculatoarelor 66

Determinarea minimului

Determinarea maximului

Page 67: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Executia programului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 67

Page 68: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Problema 2:Se consideră n numere întregi.

Se cere să se verifice dacă ele sunt sau nu înordine crescătoare, afișând câte un mesajcorespunzător.

Exemplu:

02.12.2016 Programarea calculatoarelor 68

Date de intrare:n=5 si x={1, 2, 17, 25, 43}Date de ieşire:Elemente vectorului sunt in ordine crescatoare

Page 69: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)#include<iostream.h>int main(void){

int i, n, verif=1;int x[50];cout<<"Dati numarul de elemente ale tabloului X "; cin>>n;for(i=0; i<n; i++){

cout<<"x["<<i+1<<"]= ";cin>>x[i];

}02.12.2016 Programarea calculatoarelor 69

Citirea numarului de elemente ce vor fi

prelucrate in vector - n

Citirea elementelor si memorarea lor in

vectorul x

Page 70: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

for(i=0; i<=n-2; i++)if( x[i] > x[i+1] ) verif=0;

if( verif == 1 ) cout<<"Numerele din tablou sunt in ordine CRESCATOARE";else cout<<"Numerele din tablou NU sunt in ordineCRESCATOARE";

}

02.12.2016 Programarea calculatoarelor 70

Verificarea proprietatii cerute

in enunt

Page 71: Lecture4 - PC

[email protected]

4.2. Tablouri unidimensionale (vectori)

Executia programului pe doua serii de date de test:

02.12.2016 Programarea calculatoarelor 71

Page 72: Lecture4 - PC

[email protected]

4. Tablouri

4.1. Generalităţi. Clasificare4.2. Tablouri unidimensionale (vectori)4.3. Tablouri bidimensionale (matrici)4.4. Tablouri multidimensionale

02.12.2016 Programarea calculatoarelor 72

Page 73: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

• Tablourile bidimensionale funcţionează ca omatrice şi se pot declara astfel:

• La fel ca şi în cazul tablourilor unidimensionale,şi în cazul tablourilor bidimensionale, ladeclarare, se trece dimensiunea maximă a liniilor(dim_linie) şi dimensiunea maximă a coloanelor(dim_coloana).

02.12.2016 Programarea calculatoarelor 73

tip nume_tablou[dim_linie][dim_coloana];

Page 74: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Exemplu: Declarări de tablouri bidimensionale:

02.12.2016 Programarea calculatoarelor 74

int a[10][10]; // declararea unui tablou bidimensional cu maxim 100 de

// elemente (10*10), fiecare de tip întreg

float x[5][5]; // declararea unui tablou bidimensional cu maxim 25 de

// elemente(5*5), fiecare de tip real simplă precizie

char s[20][10]; // declararea unui tablou bidimensional cu maxim 200 de

// elemente(20*10), fiecare de tip caracter

Page 75: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

• Compilatorul C++ alocă un spaţiu de memorieegal cu numărul de linii înmulţit cu numărul decoloane ale tabloului, rezervând bineînţelesocteţi în funcţie de tipul de bază al fiecăruitablou.

• Accesul la fiecare element al tabloului se faceprin numele acestuia urmat între paranteze, deindicele liniei şi indicele coloanei (adică poziţiape care o ocupă în tablou).

02.12.2016 Programarea calculatoarelor 75

Page 76: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Exemplu: Modalităţi de acces la elementele ce pot fi

memorate în tablourile bidimensionale declarateanterior:

02.12.2016 Programarea calculatoarelor 76

a[0][0] – reprezintă elementul aflat pe linia 0 coloana 0a[9][9] - reprezintă elementul aflat pe linia 9 coloana 9

x[i][j] - reprezintă elementul aflat pe linia i, coloana j înmatrice, unde i şi j pot avea valori între 0 şi 4.

Page 77: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Iniţializarea elementelor unui tablou se poateface total sau parţial la declararea lor:

int b[2][3]={ {1, 2, 3}, {4, 5, 6} };Astfel:• elementul b[0][0] are valoarea 1• elementul b[0][1] are valoarea 2• elementul b[0][2] are valoarea 3• elementul b[1][0] are valoarea 4• elementul b[1][1] are valoarea 5• elementul b[1][2] are valoarea 6

02.12.2016 Programarea calculatoarelor 77

Page 78: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Problema 1:Se consideră o matrice A cu nm numere

întregi. Se cere să se obţină transpusa sa.Exemplu:

02.12.2016 Programarea calculatoarelor 78

Date de intrare:n=3, m=4 si matricea A:1 2 3 45 6 7 89 10 11 12

Date de ieşire:Matricea transpusa B:n=4 si m=31 5 92 6 103 7 114 8 12

Page 79: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)#include<iostream.h>int main(void){

int a[10][10], b[10][10];int n, m, i, j;cout<<"Dati dimensiunile matricei A \n";cout<<"Dati numarul de linii n = "; cin>>n;cout<<"Dati numarul de coloane m = "; cin>>m;for(i=0; i<n; i++)for(j=0; j<m; j++){

cout<<"a["<<i+1<<", "<<j+1<<"] = ";cin>>a[i][j];

}

02.12.2016 Programarea calculatoarelor 79

Citirea numarului de linii – n si de coloane - m ale matricei

Citirea elementelor si memorarea lor in

matricea a

Page 80: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei A sunt : \n";for(i=0; i<n; i++){

for(j=0; j<m; j++) cout<<a[i][j]<<" ";cout<<"\n";

}

02.12.2016 Programarea calculatoarelor 80

Afisarea elementelor din matricea a

Page 81: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

for(i=0; i<n; i++)for(j=0; j<m; j++)

b[j][i] = a[i][j];

cout<<"Elementele matricei transpuse sunt \n";for(i=0; i<m; i++){

for(j=0; j<n; j++) cout<<b[i][j]<<" ";cout<< "\n";

}}02.12.2016 Programarea calculatoarelor 81

Construirea matricei transpuse prin

transformarea liniilor in coloane si invers

Page 82: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Executia programului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 82

Page 83: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Problema 2:Se consideră două tablouri

bidimensionale (matrici) A şi B cu nmnumere întregi.

Se cere să se calculeze matricea suma:C = A + B.

02.12.2016 Programarea calculatoarelor 83

Page 84: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

#include<iostream.h>

int main(void)

{

int Matrice1 [10][10], Matrice2 [10][10], Matricesuma[10][10];int i, j, n, m;cout<<"Dati dimensiunile primei matrici \n";cout<<"Dati numarul de linii n = "; cin>>n;cout<<"Dati numarul de coloane m = "; cin>>m;

for(i=0; i<n; i++){

for(j=0; j<m; j++){

cout<<"Matrice1["<<i+1<<", "<<j+1<<"] = ";

cin>>Matrice1[i][j];

}

}02.12.2016 Programarea calculatoarelor 84

Citirea numarului de linii – n si de coloane - m ale matricei

Citirea elemente

lor si memorarea lor in prima

matrice

Page 85: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

cout<<"Elementele primei matrici sunt : \n";

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

{

for(j=0; j<m; j++) cout<<Matrice1[i][j]<<" ";

cout<<"\n";

}

02.12.2016 Programarea calculatoarelor 85

Afisarea elementelor din prima matrice

Page 86: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

for(i=0; i<n; i++){

for(j=0; j<m; j++){

cout<<"Matrice2["<<i<<", "<<j<<"] = ";

cin>>Matrice2[i][j];

}

}

cout<<"Elementele celei de-a doua matrice sunt : \n";

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

{

for(j=0; j<m; j++) cout<<Matrice2[i][j]<<" ";

cout<<"\n";

}

02.12.2016 Programarea calculatoarelor 86

Page 87: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

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

for(j=0; j<m; j++)

Matricesuma[i][j]=Matrice1[i][j]+Matrice2[i][j];

cout<<"Elementele matricii suma sunt : \n";

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

{

for(j=0; j<m; j++) cout<<Matricesuma[i][j]<<" ";

cout<<"\n";

}

}02.12.2016 Programarea calculatoarelor 87

Construirea matricei suma prin adunarea

valorilor pe linie si pecoloana

Page 88: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Executiaprogramului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 88

Page 89: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Problema 3:

Se consideră două tablouribidimensionale (matrici) A şi B cu nm,respectiv mp numere întregi.

Se cere să se calculeze matricea produs:C = A * B.

02.12.2016 Programarea calculatoarelor 89

Page 90: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Exemplu:

02.12.2016 Programarea calculatoarelor 90

Date de intrare:n=2, m=3 si matricea a:1 2 34 5 6 m=3, p=4 si matricea b:1 2 3 45 6 7 89 10 11 12

Date de iesire:n=2 si p=3 si matriceaprodus c:

38 44 50 5683 98 113 128

Page 91: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)#include<iostream.h>int main(void){

int a[10][10], b[10][10], c[10][10];int n, m, i, j, k, p;cout<<"Dati dimensiunile matricei A \n";cout<<"Dati numarul de linii n = "; cin>>n;cout<<"Dati numarul de coloane m = "; cin>>m;for(i=0; i<n; i++)for(j=0; j<m; j++){

cout<<"a["<<i+1<<", "<<j+1<<"] = ";cin>>a[i][j];

}

02.12.2016 Programarea calculatoarelor 91

Citirea numarului de linii – n si de coloane - m ale matricei

Citirea elementelor si memorarea lor in

matricea a

Page 92: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei A sunt : \n";for(i=0; i<n; i++){

for(j=0; j<m; j++) cout<<a[i][j]<<" ";cout<< "\n";

}

02.12.2016 Programarea calculatoarelor 92

Afisarea elementelor din matricea a

Page 93: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)cout<<"Dati dimensiunile matricei B \n";cout<<"Dati numarul de linii m = "; cin>>m;cout<<"Dati numarul de coloane p = "; cin>>p;for(i=0; i<m; i++)for(j=0; j<p; j++){

cout<< "b["<<i<<", "<<j<<"] = ";cin>>b[i][j];

}cout<<"Elementele matricei B sunt : \n";for(i=0; i<m; i++){for(j=0; j<p; j++) cout<<b[i][j]<<" ";cout<<"\n";

}

02.12.2016 Programarea calculatoarelor 93

Citirea elementelor si

memorarea lor in matricea b

Page 94: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

• Conditie: Numarul de coloane din prima matrice trebuie sa fie egal cu numarul de liniidin a doua matrice.

02.12.2016 Programarea calculatoarelor 94

Prima matrice2 x 4

A doua matrice4 x 3

Trebuie sa fie acelasi numar

Matricea rezultat

Page 95: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)for(i=0; i<n; i++)

for(j=0; j<p; j++)

{

c[i][j] = 0;

for(k=0; k<m; k++)

c[i][j] = c[i][j] + a[i][k] * b[k][j];

}

02.12.2016 Programarea calculatoarelor 95

Calculul elementelor

matricei produs c

Page 96: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

cout<<"Elementele matricei produs C sunt : \n";

for(i=0; i<n; i++) {

for(j=0; j<p; j++) cout<<c[i][j]<<" ";

cout<<"\n";

}

}

02.12.2016 Programarea calculatoarelor 96

Page 97: Lecture4 - PC

[email protected]

4.3. Tablouri bidimensionale (matrici)

Executiaprogramului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 97

Page 98: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

Enunt:

Se considera un numar natural n. Se cere sa seformeze un vector cu cifrele numarului.Exemplu:

02.12.2016 Programarea calculatoarelor 98

Date de intrare:Pentru valoarea: n = 23416789Date de iesire:Se obtine vectorul cu elementele:9 8 7 6 1 4 3 2

Page 99: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

#include<iostream.h>

int main(void){

// declaram variabilele pe care le vom utiliza in program

int x[30];long int n, i, m;cout<<"Dati numarul natural n = "; cin>>n;

02.12.2016 Programarea calculatoarelor 99

Page 100: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

i = 0;while(n != 0){

x[i] = n % 10;i++;n = n / 10;

}m = i-1;cout<<"\nVectorul cu cifrele numarului este \n";for(i = 0; i < m; i++){

cout.width(3); cout<<x[i];}

}02.12.2016 Programarea calculatoarelor 100

Page 101: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

Executia programului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 101

Page 102: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

Enunt: Reuniunea a doua multimiSa se scrie un program care sa calculeze

reuniunea a doua multimi de cate n, respectiv mnumere intregi memorate cu ajutorul vectorilor.Exemplu:

02.12.2016 Programarea calculatoarelor 102

Date de intrare:n = 5, a = {1, 2, 5, 7, 12} sim = 4, b = {2, 4, 8, 12}Date de iesire:se obtine: k=7, c={1, 2, 5, 7, 12, 4, 8}

Page 103: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

#include<iostream.h>int main(void){

int a[100], b[100], c[100], n, m, i, j, k, ok;cout<<"Dati cardinalul multimii A - n = "; cin>>n;cout<<"Dati elementele multimii A \n";for(i = 0; i < n; i++){

cout<<"a["<<i+1<<"] = ";cin>>a[i];

}

02.12.2016 Programarea calculatoarelor 103

Page 104: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

cout<<"Dati cardinalul multimii B - m = "; cin>>m;cout<<"Dati elementele multimii B \n";for(i = 0; i < m; i++){

cout<<"b["<<i+1<<"] = ";cin>>b[i];

}// copiem elementele din multimea A in multimea C

for(i = 0; i < n; i++) c[i]=a[i]; k = n;

02.12.2016 Programarea calculatoarelor 104

Page 105: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

for(j = 0; j < m; j++){ok = 1; // variabila care verifica daca un element apartine sau

un multimii Afor(i = 0; i <n ;i++)

if(b[j] == a[i]) // daca elementul din multimea B apartine si multimii A atunci nu-l adaugam in multimea reuniune - C

ok = 0;if(ok == 1){

k++;c[k] = b[j];

}}

02.12.2016 Programarea calculatoarelor 105

Page 106: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

cout<<"\nElementele multimii reuniune sunt : \n";for(i = 0; i < k; i++){

cout.width(9);cout<<c[i];

}}

02.12.2016 Programarea calculatoarelor 106

Page 107: Lecture4 - PC

[email protected]

Probleme rezolvate – tablouri unidimensionale

Executia programului pe o serie de date de test:

02.12.2016 Programarea calculatoarelor 107

Page 108: Lecture4 - PC

[email protected]

Probleme propuse spre rezolvate – tablouriunidimensionale

1. Intersectia a doua multimiSa se scrie un program care sa calculeze

intersectia a doua multimi de cate n, respectiv mnumere intregi memorate cu ajutorul vectorilor.Exemplu:

02.12.2016 Programarea calculatoarelor 108

Date de intrare:n = 5 a = {1, 2, 5, 7, 12} sim = 4 b = {2, 4, 8, 12}Date de iesire:se obtine: k = 2 d = {2, 12}

Page 109: Lecture4 - PC

[email protected]

Probleme propuse spre rezolvate – tablouriunidimensionale

2. Diferența a două mulțimiSa se scrie un program care sa calculeze

diferenta a doua multimi de cate n, respectiv mnumere intregi memorate cu ajutorul vectorilor.Exemplu:

02.12.2016 Programarea calculatoarelor 109

Date de intrare:n = 5 a = {1, 2, 5, 7, 12} sim = 4 b = {2, 4, 8, 12}Date de iesire:se obtine: k = 3 e = {1, 5, 7}

Page 110: Lecture4 - PC

[email protected]

Probleme propuse spre rezolvate – tablouriunidimensionale

3. Se dă un şir de n numere naturale. Să se afişezepe două randuri, pe primul rand cele pare şi pe al doilea cele impare.

Exemplu:

02.12.2016 Programarea calculatoarelor 110

Date de intrare:Pentru n = 10 si elementele 4 3 2 5 6 8 9 0 1 5 Date de iesire:4 2 6 8 03 5 9 1 5

Page 111: Lecture4 - PC

[email protected]

Probleme propuse spre rezolvate – tablouriunidimensionale

4. Sa se scrie un program care sa introducă nnumere intr-un vector şi să citeasccă un număr d.Să se afişeze acele numere din şirul dat care suntdivizibile cu d.

Exemplu:

02.12.2016 Programarea calculatoarelor 111

Date de intrare:n=5 si valorile: 5 7 10 23 15, d=5 Date de iesire:5 10 15

Page 112: Lecture4 - PC

[email protected]

Probleme propuse spre rezolvate – tablouriunidimensionale

5. Se introduc temperaturile măsurate in n zile. Săse scrie un program care să afişeze media temperaturilor negative şi media celor pozitive.

Exemplu:

02.12.2016 Programarea calculatoarelor 112

Date de intrare:n = 5 si temperaturile: 23 24 23 25 22 Date de iesire:23.40

Page 113: Lecture4 - PC

[email protected]

Pentru alte informații teoretice și aplicative legatede acest capitol se recomandă următoarele referințebibliografice:1. Adrian Runceanu, Mihaela Runceanu, Noțiuni deprogramare în limbajul C++, Editura AcademicaBrâncuși, Târgu-Jiu, 2012 (www.utgjiu.ro/editura)2. Adrian Runceanu, Programarea şi utilizareacalculatoarelor, Editura Academica Brâncuși, Târgu-Jiu,2003 (www.utgjiu.ro/editura)3. Octavian Dogaru, C++ - teorie şi practică, volumul I,Editura Mirton, Timişoara, 2004 (www.utgjiu.ro/editura)

02.12.2016 Programarea calculatoarelor 113

Page 114: Lecture4 - PC

[email protected]

“First, solve the problem. Then, write the code.”

- John Johnson

02.12.2016 Programarea Calculatoarelor - curs 114


Recommended