Sunteți pe pagina 1din 173

Bazele programării calculatoarelor

Seminar 1
Arhitectura și funcționarea
calculatorului

Lect. univ. dr. Radu Mogoș

2022
1
Cuprins

Aspecte administrative
Arhitectura calculatoarelor de tip von
Neuman
Structura si utilizarea memoriei
Sisteme de numeratie

2
I. Aspecte administrative

3
Contact si platforma

Lect. univ. dr. Radu Mogoş


 mogos.radu@gmail.com

Materiale suport seminar


 online.ase.ro

4
Forma de evaluare
 Forma de evaluare - verificare

 Proba practică 1:
 se susține numai în timpul activității didactice – la seminar (nu se reface în sesiunea de restanțe)
 verificarea cunoștințelor cu privire la realizarea și reprezentarea algoritmilor
 ponderea din nota finală este de 20%
 se sustine in seminarul 7, timp de 30 minute

 Proba practică 2:
 se susține numai în timpul activității didactice – la seminar (nu se reface în sesiunea de restanțe)
 dezvoltarea și apelul subprogramelor în limbajul ANSI C (pe calculator)
 ponderea din nota finală este de 30%
 se sustine in seminarul 13, timp de 40 minute

 Lucrare de control:
 ponderea din nota finală este de 50%
5
Obiectivele disciplinei
 Obiectivul principal:
 noțiuni de bază în teoria programării;
 metodele de analiză a problemelor în vederea rezolvării lor cu calculatorul;
 logica elaborării algoritmilor structurați și modularizați;
 realizarea programelor și subprogramelor în limbajul ANSI C.

 Obiective specifice:
 analiza și explicarea comportamentului programelor simple ce implică
construcțiile fundamentale din programare;
 modificarea și dezvoltarea programelor care folosesc structuri iterative,
condiționale, funcții, algoritmi pentru rezolvarea unor probleme simple;
 proiectarea, implementarea, testarea și depanarea unui program care
folosește construcțiile fundamentale specifice programării – calcule de bază,
operații de intrare/ieșire simple, structuri condiționale și iterative, definirea de
funcții;
 alegerea construcțiilor condiționale și repetitive adecvate pentru
implementarea unei sarcini de programare date;
 aplicarea tehnicilor de structurare a programelor pentru a descompune
programul în entități mai mici.

6
Conținutul disciplinei
 Detalii – a se vedea fișa disciplinei: https://fisadisciplina.ase.ro/Selectieprogram.aspx

 Curs:
 Algoritmi. Scheme logice structurate
 Organizarea și reprezentarea internă a datelor
 Etapele rezolvării problemelor cu calculatorul
 Elementele de bază ale limbajului C
 Tipurile de date din limbajul C
 Operații de intrare/ieșire cu tastatura/monitorul în limbajul C
 Expresii în limbajul C
 Realizarea structurilor fundamentale de control în limbajul C
 Tipuri dinamice de date – Pointeri în limbajul C
 Realizarea subprogramelor în limbajul C
 Seminar:
 structura și funcționarea calculatorului; bazele aritmetice și logice ale calculatoarelor;
 exerciții și probleme diverse;
 exerciții și probleme cu vectori;
 exerciții și probleme cu matrice;
 exerciții cu masive alocate dinamic;
 subprograme cu masive alocate static;
 subprograme cu masive alocate dinamic.
7
Bibliografie
 Bazele programarii calculatoarelor. Suport de curs/
Bazele programarii calculatoarelor. Suport de
seminar – set două cărți, Bogdan Ghilic-Micu,
Marian Stoica et. al, editura ASE, 2013, ISBN 978-
606-505-758-6, https://www.editura.ase.ro/Bazele-
programarii-calculatoarelor-Suport-de-seminar/

• Algoritmi şi scheme logice cu exemplificare în C, Bogdan


Ghilic-Micu, Marinela Mircea, Marian Stoica, editura ASE, 2017,
ISBN 978-606-34-0208-1
Software-uri:
Microsoft Visual Studio (2012, 2013, etc.)
NetBeans
CodeBlocks
8
Dev C/C++
Compilator C online: https://www.onlinegdb.com/online_c_compiler
Introducere
Sistemele electronice de calcul (SEC) – ?
SEC - ansambluri de echipamente (hardware si software) intercorelate ce
asigura introducerea, prelucrarea si extragerea automata a datelor potrivit
cerintelor utilizatorilor.

a) Componenta hardware (fizica) – ?


- totalit. echipamentelor fizice precum si blocurile, circuitele electrice si
dispozitivele electromecanice.

b) Componenta software (logica) - ?


- programe ce asigura conducerea, supravegherea si controlul activitatilor
sistemului
- un rol aparte il are sistemul de operare (SO)
 ans. de programe ce controleaza dinamic toate activit. sistemului de
calcul
 programele ce apartin SO sunt permanent rezidente in memoria
interna/externa a calculatorului
 gestioneaza resursele

Resursele calculatorului: ?
 fizice (mem. interna, procesoare, dispozitive periferice)
 logice (programe) 9

 informationale (date).
II. Arhitectura calculatoarelor de tip von Neuman

10
I. Arhitectura calculatoarelor de tip von Neuman (1)

A.Metoda cutiei negre


- o forma a bordarii sistemice utilizate in cibernetica
- permite divizarea sistemului in subsisteme ce pot fi studiate mai usor

Programe
Calculator
Rezultate
electronic
Date

Fig. 1 Calculatorul – cutie neagra

Calculatorul contine:
- unitate centrală de prelucrare (procesor) – UCP
- unitate de memorie interna (aici se inregistreaza datele (D) si programele (Pr))

D si Pr – introduse/extrase in/din memoria interna folosind unitati de IN/OUT (Fig.


11 2)
I. Arhitectura calculatoarelor de tip von Neuman (2)

Memorie
externa

Instructiuni
Date

Date Date
Unitate
Memorie interna Rezultate Unitate de OUT
de IN Instructiuni
Instructiuni

UCP alc. din:


Date

Date

- unitate de comanda si control (UCC)


- unitate aritmetico – logica (UAL)
UCP
12
Fig. 2 Componente de baza ale calculatorului
I. Arhitectura calculatoarelor de tip von Neuman (3)

Memorie
externa

Date

Date
Date
Unitate Memorie Unitate
Rezultate
de IN operativa RAM de OUT
Instructiuni

Ins
tru

te
Dat

Da
c

comenzi
tiun
i

comenzi

comenzi UCC ROM UCP UAL

comenzi

Unitate centrala

Fig. 3 Structura de principiu a unui calculator electronic


13
I. Arhitectura calculatoarelor de tip von Neuman (4)

UCC
 examineaza programul curent instructiune cu instructiune
 coordoneaza (supervizeaza) toate operatiile efectuate
 prelucreaza instructiuni => comenzi catre toate celelalte componente ale calculatorului

UAL
 executa operatiile logice si aritmetice asupra datelor.
 prelucreaza date si ofera tot date (rezultate)
 Instructiunile contin :
 codul operatiei care se executa
 adresele operanzilor (datelor asupra carora se executa prelucrarea)

Orice lant de cifre (date) ajuns in:


 - UAL e tratat ca data
 - UCC e tratat ca instructiune.

UCC:
 tb. sa cunoasca adresele instructiunilor pentru a fi evitata tratarea instructiunilor ca date si invers
(adresele datelor sunt precizate in instructiuni)
 are un contor de adrese care memoreaza adresa instructiunii ce urmeaza a fi incarcata din
memorie.

14
III. Structura si utilizarea memoriei

15
II. Structura si utilizarea memoriei (1)

Memoria= ?
 succesiune de elemente fizice (biti)

 Ce stari are 1 bit (binary digit – cifra binara) ?


 Un bit are 2 stari – fals (0) / adevarat (1), materializat electric printr-o tensiune joasa (0) /
inalta (1).

 datele sunt reprezentate in calculator prin combinatii de 0 si 1 => succesiune de biti

8 biti consecutivi = ?
8 biti consecutivi = 1 octet (byte)

Octetul - ?
 cea mai mica unitate adresabila in memoria centrala
 numerotati crescator, incepand cu 0
 fiecare octet are asociata o adresa absoluta (nr. asociat fizic fiecarui octet din mem.
interna)
 adresele octetilor cresc cu o unitate de la unul la altul

16
II. Structura si utilizarea memoriei (2)

Memoria centrala e alcatuita din:


 dintr-un nr. de pozitii binare (fiecare pozitie poate memora 0 sau 1) –
stare modificabila prin program
 circuite fizice selectionate prin program ce permit accesul la octetii de
memorie (modificarea circuitelor nu se poate face prin program)

=> unui octet i se poate schimba continutul, DAR adresa ii ramane mereu
aceeasi.

Pentru a accesa continutul unui anumit octet de memorie trebuie sa i se


precizeze adresa.
Zona B
Zona A de Zona C
0 1 2
de memorie memorie de memorie
i-1 i i+1 n-1 n

octet … 170 171 172 173 174 175 176 177 178 179 180 181 182 ... 17

Fig. 5 Reprezentare grafica a memoriei


II. Structura si utilizarea memoriei (3)

• Adresă absolută =?
Adresa = numărul asociat fizic fiecărui octet din memoria internă

 Reprezentarea grafică a memoriei


0 1 2 ... i-1 i i+1 ... n-1
... ...
a) octet
zona de zona de zona de
memorie A memorie B memorie C

170 171 172 173 174 175 176 177 178 179 180 181 182
b)

• Zone de memorie • A (170(8);3)


Zona de memorie = un grup de octeți consecutivi • B (174(8);2)
• C (177(8);5) 18
II. Structura si utilizarea memoriei (3)

Zona de memorie (zm):


 grup de octeti consecutivi
 identificata prin adresa si lungimea ei
 adresa unei zm este adresa celui mai din stanga octet (adresa stanga)
 lungimea unei zm – nr octetilor din zona respectiva
 continutul unei zm – dat de continutul octetilor care o compun
 tipuri - zm nestandard – fara restrictii de lungime si adresa
- zm standard – pp o anumita lungime (2,4,8), adresa multiplu
de lungime.

Ex: zona de memorie A din Fig. 5:


• are adresa 170(8) si lungimea 3
• identificata prin cuplul (170(8);3)

Zona B
Zona A de Zona C
de memorie memorie de memorie

… 170 171 172 173 174 175 176 177 178 179 180 181 182 ... 19
II. Structura si utilizarea memoriei (4)

Lungimea cuvantului de memorie:


 pt. microcalculatoarele PC, cuvantul are lungimea de 2 octeti si adresa multiplu
de 2 (în general, este egală cu lungimea unei instrucţiuni)
 ponderile cifrelor cresc de la dreapta la stanga, numerotarea lor corespunde
puterilor crescatoare ale bazei de numeratie
 pt un cuvant
 prima cifra din dreapta reprezinta ponderea 2 la puterea 0
 prima cifra din stanga reprezinta ponderea 2 la puterea 15

Pentru un cuvant cu lungimea de 2 octeti:


 bitii 0...7 – octetul inferior (cel mai putin semnificativ)
 bitii 8...15 – octetul superior (cel mai semnificativ)

20
IV. Sisteme de numeratie

21
Sisteme de numeratie

 Sistemul de numeraţie =?

Definire = o mulțime finită de simboluri, numite cifre, împreună cu o mulțime


finită de reguli care se folosesc pentru reprezentarea unui număr.

• Bază a unui sistem de numeraţie =?

Definire = numărul simbolurilor distincte folosite pentru reprezentarea în acel sistem

22
Sisteme de numerație

Denumirea sistemului Baza Alfabetul sistemului

Binar 2 0,1
Octal 8 0,1,2,3,4,5,6,7
Hexazecimal 16
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

• Conversia bazei de numeraţie =?


Definire = operația de trecere a unui număr dintr-un sistem de numerație cu
baza b1 în numărul echivalent dintr-un alt sistem de numerație, cu baza b2.

23
Operatii aritmetice (OA)

OA in sistemul binar

+ 0 1 * 0 1
0 ? ? 0 ? ?
1 ? ? 1 ? ?

+ 0 1 * 0 1
0 0 1 0 0 0
1 1 10 1 0 1

24
Operatii aritmetice (OA)

OA in sistemul octal

+ 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7

25
Operatii aritmetice (OA)

OA in sistemul 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

26
Operatii aritmetice (OA)

OA in sistemul octal


* 0 1 2 3 4 5 6 7
0
1
2
3 ??
4
5 ??
6
7

27
Operatii aritmetice (OA)

OA in sistemul octal


* 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

28
Operatii aritmetice (OA)
 OA in sistemul hexazecimal (de completat)
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
0

1 ??

5
6
7

E
29
F ?? ??
Operatii aritmetice (OA)
 OA in sistemul 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 30
Operatii aritmetice (OA)
Exercitii baza 16
7*6 = ?
9*C = ?
D*9 = ?
D*D = ?
F*E = ?
D*E = ?

31
Operatii aritmetice (OA)
Exercitii baza 16
7*6 = 2A (42 = 16+16 +10 = 2A)
9*C = 6C
D*9 = 75
D*D = A9
F*E = D2
D*E = B6

32
Test (verificare cunostinte)

Scrieti programele care rezolva


urmatoarele probleme:
1. y = 6*x, x<0
 x +1, x>=0

2. Sortare vector prin metoda selectiei


3. Suma elemente matrice

mogos.radu@gmail.com
33
Succes in noul an universitar !

34
Bazele programarii
calculatoarelor

Seminar 2
Sisteme de numeratie. Conversia bazei

Lect. univ. dr. Radu Mogos

2022
Cuprins

Sisteme de numeratie
Conversia bazei
Exercitii

2
I. Sistemele de numeratie (SN)

 SN - ?
 SN - multime finita de simboluri (cifre) + o multime finita de
reguli folosite pentru reprezentarea unui numar.

 tipuri
pozitionale (de exp. sistemul arab)
nepozitionale (de exp. sistemul roman)

3
Sisteme de numeratie pozitionale (SNP) (I)
 Baza unui SNP pp :
 nr-ul simbolurilor distincte folosite pentru reprezentarea in acel sistem
 de obicei se fol. baza 10 (scriere zecimala sau sistem zecimal)
 exprimarea unui nr. intreg intr-un SN cu baza oarecare b (b apartine lui N*) are 2
forme:
 forma explicita (detaliata)

 forma implicita (simplificata)

 - nr. N reprezentat in baza b are n+1 cifre (ranguri) – unde se numeste


cifra cea mai semnificativa (ccms);
 - de regula, coeficientii egali cu 0 si situati in stanga primei cifre
semnificative nu se scriu (ccms este diferita de 0);
 - la calculatoare – daca se precizeaza nr. rangurilor folosite pentru
expunerea nr-ului, atunci trebuie scrise si zerourile care preced prima cifra
semnificativa

 Ex: 4 ranguri si exprimare explicita a nr. 1:



4
Sisteme de numeratie pozitionale (SNP) (II)

 Reprezentare numar real exprimat in baza b:

•Exemple reprezentari de numere R(b): 73,14 (B10) ?

•Sisteme de numeratie (0 in B2 pe cati biti se reprezinta ? Dar in B8 si B16)


Sistem Baza Alfabet al sistemului
numeratie
Binar 2 0,1
Octal 8 0,1,2,3,4,5,6,7
Hexazecimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
5
Conversia bazei de numeratie

6
Conversia bazei de numeratie
 a) nr. intreg din b10 in bazele 2, 8,16
 b) nr. subunitar din b10 in bazele 2, 8,16
 c) nr. real din b10 in bazele 2, 8,16
 d) nr. real din bazele 2, 8,16 in baza 10
 e) nr. real din baza 2 intr-o baza puterea a lui 2
 f) nr real dintr-o baza puterea a lui 2 in baza 2

7
Conversia bazei de numeratie

a) nr. intreg din b10 in b2,8,16


 1. algoritm
 - se imparte nr. intreg N1 prin baza b => se obtine câtul Q1 si restul r0
 - se imparte Q1 prin baza b => Q2 si r1
 - se continua operatia pana cand Qn=0
 Obs: resturile asezate in ordine inversa a aparitiei lor sunt cifrele nr-ului
de convertit din zecimal in baza b (r0 fiind cifra cea mai putin semnificativa)

 2. exemple
 Sa se reprezinte nr 75 din b10 in bazele 2,8,16

8
Conversia bazei de numeratie

Exemplu: Sa se reprezinte nr 75 in bazele 2, 8,16

 Baza 2:  Baza 8:  Baza 16:


 75 : 2 = 37 rest 1  75 : 8 = 9 rest 3  75 : 16 = 4 rest 11 (11=B)
 4 : 16 = 0 rest 4
 37 : 2 = 18 rest 1  9 : 8 = 1 rest 1
R: 75(10)  4B(16)
 18 : 2 = 9 rest 0  1 : 8 = 0 rest 1
 9 : 2 = 4 rest 1 R: 75(10)  113(8)

 4 : 2 = 2 rest 0
 2 : 2 = 1 rest 0
 1 : 2 = 0 rest 1
R: 75(10)  1001011( 2)

De cati biti e nevoie pentru a reprezenta in B16 pe: R:


- 4B - 4B – 8 biti
- 411 – 12 biti
9
- 411
Conversia bazei de numeratie
b) nr. subunitar din b10 in bazele 2,8,16
 1. algoritm
 - se inmulteste nr. zecimal subunitar dat (Ns) cu baza b => partea
fractionara F1 si cifra
 - se inmulteste partea fractionara F1 cu baza b => partea fractionara
F2 si cifra
 - se continua aceasta operatie pana cand Fm este egal cu 0 sau
pana cand se obtine un nr. de cifre apropiat de precizia cu care
se doreste sa se reprezinte partea fractionara a nr-ului.

 2.exemplu
 Sa se reprezinte 0,73 din baza 10 in baza 2, 8, 16 (se vor realiza 5
iteratii).
10
Conversia bazei de numeratie
Exemplu: Sa se reprezinte 0,73 din baza 10 in baza 2, 8, 16 (se vor realiza 5
iteratii).

Baza 2 Baza 8 Baza 16


0,73 x 2 = 1,46 0,73 x 8 = 5,84 0,73 x 16 = 11,68
0,46 x 2 = 0,92 0,84 x 8 = 6,72 0,68 x 16 = 10,88
0,92 x 2 = 1,84 0,72 x 8 = 5,76 0,88 x 16 = 14,08
0,84 x 2 = 1,68 0,76 x 8 = 6,08 0,08 x 16 = 1,28
0,68 x 2 = 1,36 0,08 x 8 = 0,64 0,28 x 16 = 4,48
... ... ...
R: 0,73(10)  0,10111( 2) R: 0,73(10)  0,56560(8) R: 0,73(10)  0, BAE14(16)

11
Conversia bazei de numeratie
c) nr. real (R ) din b10 in b2, 8, 16
 se reduce la reprezentarea unui nr intreg (Ni) si a unui nr subunitar
(Ns) avand in vedere egalitatea R=Ni+Ns

 Exemplu
Scrieti numarul 75,73 din baza 10 in b2,8,16

Pe baza rezultatelor de pana acum:

75,73(10)  1001011,10111( 2)  113,56560(8)  4B, BAE14(16)

12
Conversia bazei de numeratie
d) nr. real din b2, 8, 16 in b10
- pentru aceasta conversie se foloseste ponderarea cu puterile
bazei b.

Exemple
1. Nr intregi – convertiti in b10 numerele 1001011 (din B2), 113 (din
B8) si 4B (B16)
2. Nr subunitare – convertiti in b10 numarul 0,10111 (din b2)
3. Nr real – convertiti in b10 numarul 1001011, 10111 (din b2)

13
Conversia bazei de numeratie
Exemple:
 Nr intregi – convertiti in b10 numerele:
 1001011 (B2) ?
 113 (B8) ?
 4B (B16) ?

1001011( 2)  26 *1  25 * 0  24 * 0  23 *1  22 * 0  21 *1  20 *1  75(10)

113(8)  82 *1  81 *1  80 * 3  64  8  3  75(10)

4 B(16)  161 * 4  160 * B(11)  64  11  75(10)

14
Conversia bazei de numeratie

Exemple:
Nr subunitare – convertiti in b10 numarul 0,10111 (din b2) ?

0,10111( 2)  21 *1  22 * 0  23 *1  24 *1  25 *1  0,71875(10)

De ce nu s-a obtinut tot numarul 0,73 ?


R: au fost facute doar 5 iteratii si de aceea s-a obtinut doar 0,71785 (in b10)

15
Conversia bazei de numeratie

Exemple:
Nr real – convertiti in b10 numarul 1001011, 10111 (din b2)

1001011, 10111 (din b2) = ? b(10)

1001011,10111( 2)  2 6 *1  2 5 * 0  2 4 * 0  2 3 *1  2 2 * 0  21 *1  2 0 *1 
 2 1 *1  2  2 * 0  2 3 *1  2  4 *1  2 5 *1  75,71875 (10)

16
Conversia bazei de numeratie
e) nr. real din b2 intr-o baza puterea a lui 2
 se constituie grupe de p cifre binare spre stanga si dreapta virgulei
 fiecare cifra se inlocuieste apoi cu cifra echivalenta in baza b

Exemple
 1. din binar in octal (p=3)

1001011,10111(b2) = ? (b8)

Gr. 2 – 001
001( 2)  2 2 * 0  21 * 0  20 *1  1
Conversia bazei de numeratie (VII)
 2. din binar in hexazecimal p=4

1001011,10111(b2) = ? (b16)

Gr.2 – 1011

1011( 2)  23 *1  22 * 0  21 *1  20 *1  11( B)

18
Conversia bazei de numeratie
f) nr. real dintr-o baza puterea a lui 2 in b2
 - se exprimă in baza 2 pe p cifre binare, in stanga si in dreapta
virgulei, toate cifrele numarului in baza b.
Exemplu
1. din octal in binar => se exprima pe 3 cifre in binar
737,474 (b8) = ? (b2)

7 in b8 = 111 in b2
etc........

19
Conversia bazei de numeratie

Simbol B8 Bit 2 Bit 1 Bit 0


(2 la puterea 2) (2 la puterea 1) (2 la puterea 0)

0
1
2
3
4
5
6
7

20
Conversia bazei de numeratie

Simbol B8 Bit 2 Bit 1 Bit 0


(2 la puterea 2) (2 la puterea 1) (2 la puterea 0)

0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

21
Conversia bazei de numeratie
2. din hexazecimal in binar => se exprima pe 4 cifre in binar

A2F,7E3 (b16) = ? (b2)

A = 10
10 : 2 = 5 rest 0
5 : 2 = 2 rest 1
2 : 2 = 1 rest 0
1 : 2 = 0 rest 1
 A (b16) = 1010 (b2)

22
Conversia bazei de numeratie
Simbol B16 Bit 3 Bit 2 Bit 1 Bit 0
(2 la puterea 3) (2 la puterea 2) (2 la puterea 1) (2 la puterea 0)

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
23
F
Conversia bazei de numeratie
Simbol B16 Bit 3 Bit 2 Bit 1 Bit 0
(2 la puterea 3) (2 la puterea 2) (2 la puterea 1) (2 la puterea 0)

0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
A 1 0 1 0
B 1 0 1 1
C 1 1 0 0
D 1 1 0 1
E 1 1 1 0
24
F 1 1 1 1
Exercitii
Realizati urmatoarele conversii:
 a) nr intreg 87(b10) in B2, B8 si B16
 b) nr subunitar 0,42 (b10) in B2, B8 si B16 (6 iteratii)
 c) nr real 87,42 (B10) in B2, B8,B16

 d) pentru:
 numarul intreg obtinut la punctul a) realizati conversia din B2 in B10
 numarul subunitar obtinut la b) realizati conversia din B2 in B10

 e) fie numarul 10001110110,1000110 in B2. Realizati conversia


acestuia in bazele B8 si B16

 f) fie numerele:
 4525,621 (B8)
 F14B4,6729C in B16 (R: 11110001010010110100,01100111001010011100 (b2))
realizati conversia acestora in B2
25
II. Bazele logice ale calculatoarelor (I)

Algebra logicii (Boole) opereaza cu propozitii.


Unei propozitii i se asociaza:
 valoarea 1 daca este adevarata
 valoarea 0 daca este falsa.

26
II. Bazele logice ale calculatoarelor (II)

27
II. Bazele logice ale calculatoarelor (III)

28
Tema

Reprezentarea interna a datelor (vezi


cartea pentru suportul de curs)
reprezentarea in virgula fixa
reprezentarea in virgula mobila

29
Bazele programarii
calculatoarelor

Seminar 3
Algoritmi – scheme logice si pseudocod

2022
Cuprins

Aspecte teoretice
Scheme logice
Pseudocod
Exemple si exercitii

2
A. Aspecte teoretice (1)
1. Algoritm - ?
Algoritm - multime ordonata si finita de reguli care descriu o succesiune
finita de operatii necesare rezolvarii unei probleme

2. Caracteristicile unui algoritm - ?


 generalitate
 conceput pentru o clasa generala de probleme
 claritate (determinare)
 prevede modul de solutionare a tuturor situatiilor ce pot aparea in
rezolvarea problemei fara ambiguitati.
 finitudinea
 algoritmul trebuie sa se termine intr-un numar finit de pasi

3
A. Aspecte teoretice (2)
3.Forme de reprezentare a algoritmilor:
a) scheme logice (nestructurate si
structurate)
b) pseudocoduri
c) in cuvinte pe pasi (analitic)
d) arbori
A. Aspecte teoretice (3)
3.1 Reprezentarea algoritmilor prin scheme logice (SL)
 Definitie SL: ?
 reprezentare grafica a algoritmului, formată din blocuri si segmente (arce) orientate, blocurile
marcand operatiile ce trebuie efectuate, iar arcele indica relatia de succesiune a operatiilor.

Tipuri de blocuri
e) blocul de atribuire - marcheaza
a) blocul START - START atribuirile si presupune evaluarea
marcheaza inceputul unei expresii e si inscrierea
schemei logice (atribuirea) rezultatului in locatia de atribuire
memorie corespunzatoare unei
variabile v:
b) blocul STOP - - notatii: v =e, v <- e, e -> v, v :=e.
marcheaza sfarsitul
schemei logice STOP

f) blocul de ramificare (selectie) -


c) Blocul de citire -
marcheaza etapele de decizie:
contine lista variabilelor READ - > cand conditia este verificata, se da nu
ce constituie datele lista variabile
urmeaza ramura marcata cu “da” conditie
initiale ale problemei
- > in caz contrar cea marcata cu
(CITESTE, READ,...)
“nu”
d) Blocul de scriere - marcheaza
datele de iesire: contine WRITE
lista variabile
variabilele ce reprezinta
rezultatele finale
(TIPARESTE, WRITE, ...)
A. Aspecte teoretice (4)
3.2 Reprezentarea algoritmilor prin pseudocod

Pseudocod (metalimbaj) - ?
– text coerent, construit pe baza unor reguli (foloseste simboluri si propozitii din matematica)
- mai multe variante

Varianta propusa:
- cuvinte cheie (de ex. WHILE-DO, IF-THEN-ELSE)
- si instructiuni: declaratii (instr. neexecutabile) si instr. efective (executabile).

Exemple:
/*declaratii*/ /*instr. de atribuire: v – variabila, e – expresie, ambele
INTREG a,b,c; de acelasi tip*/
REAL vector[20]; v=e;
INTREG matrice [10][15]; v:=e;

/*instr. de citire: READ (lista_de_variabile) */ /*instr. de ramificare: IF-THEN-ELSE, IF-THEN,


READ (A,B); CASE-OF*/
READ (xi);
/*instr.repetitive: WHILE-DO, DO-UNTIL, DO-FOR*/
/*instr. de scriere: WRITE (lista_de_variabile) */
WRITE (A,B);
WRITE (“VECTORUL ESTE=”);
WRITE (xi);
A. Aspecte teoretice (5)
4. Descriere structuri fundamentale

a) strucura secventiala S1 c) structura CASE-OF


s1;
s2; S2
/*caz general*/
i
CASE OF i i=1
i=1: S1 i=2
i=2: S2
b) structuri alternative ………. S1 S2 Sn S

i=n: Sn
b.1 IF-THEN-ELSE
nu
C
da ELSE: S
IF C THEN S1 ENDCASE;
S2 S1
ELSE S2
ENDIF;

/*caz particular*/
CASE OF i i
i=1: S1
b.2 IF-THEN nu da i=2: S2
C
IF C THEN S1 ………. S1 S2 ….. S n-1 Sn
ENDIF; S1 i=n: Sn
ENDCASE;
A. Aspecte teoretice (6)
d) structuri repetitive
- cu numarator – DO-FOR
- conditionata anterior – WHILE-DO - conditionata posterior – DO-UNTIL (v,vi,r,vf, s), cu v –
WHILE C DO S DO S UNTIL C variabila contor, vi, vf, vr –
ENDWHILE; ENDDO; expresii cu rol de valoare
initiala, finala si ratie.
DO-FOR v=vi, vf, vr
S
S ENDDO;

da v=vi
C
nu
C
S
da
nu v<=vf

da
S

nu

v=v+vr
B. Exemple si exercitii
Cerinta
Pentru exercitiile de mai jos realizati algoritmul folosind reprezentarea prin:
- schema logica
- pseudocod.

1. Calcul expresie
2. Calculati:
- media aritmetica ((a+b)/2)),
- media geometrica (√a*b),
- media armonica ((2ab/(a+b))
3. Rezolvarea ecuatiei de gradul I
4. Functie acolada
5. Maxim dintre 3 numere
6. Aria unui triunghi folosind formula lui Heron
7. Realizarea la cerere a unei operatii (+,-,*,/) (folosind CASE-OF)
8. Determinati salariul saptamanal platit de o firma unui angajat

OBS: A se consulta si lista cu probleme orientative ce va fi postata pe site.


B. Exemple si exercitii

1. Calculati expresia: e  a  b  a  b


 unde a si b sunt numere reale.

Rezolvare
 Schema logica Pseudocod:

START REAL a,b,e;
READ (a,b);
à a, b Read a,b e=(a+b)*(a-b);
WRITE (e);
e=(a+b)*(a-b)
STOP.

ße Write e

STOP
B. Exemple si exercitii
 2. Calculati media aritmetica, media geometrica si media armonica pentru
doua numere reale a si b.
SL Start
Pseudocod
REAL a,b, Ma, Mg, Marm;
READ (a,b);
Read a,b Ma = (a+b)/2;
WRITE (Ma);
Ma= (a+b)/2
IF ((a*b)>0) THEN
{
Write Ma Mg = sqrt (a*b);
WRITE (Mg);
Nu Da }
a*b>0 ELSE
Mg= sqrt(a*b) WRITE (“Mg nu se poate calcula”);
Write “Mg nu se END_IF;
poate calcula” IF ((a+b)<> 0) THEN
Write Mg
{
Marm = 2*a*b/(a+b);
WRITE (Marm);
Nu Da
a+b<>0 }
ELSE
Marm= 2*a*b/(a+b)
WRITE (“Marm nu se poate calcula”);
Write “Marm nu se
poate calcula” END_IF;
Write Marm STOP.

!!! Atentie la cazurile particulare (ex: a*b>=0 si a+b !=0


STOP
B. Exemple si exercitii
3. Scrieti algoritmul care sa rezolve ecuatia de gradul I
Forma - ? a*x+b=0, a, b reale

Start  PSEUDOCOD
SL
Read a,b
 REAL a,b,x;
 READ (a,b);
Nu Da
a!=0  IF (a!=0)
 THEN { x=-b/a;
Nu Da  WRITE (x);
x = - b/a  }
b == 0
 ELSE
Write x  IF (b==0)
Write “Ecuatia nu are Write “Solutia este
solutie, ec. imposibila” orice nr. real, ecuatie  THEN WRITE (“Ecuatie nedeterminata”);
nedeterminata”
 ELSE WRITE (“Ecuatie imposibila”);
 ENDIF;
 ENDIF;

 STOP.
STOP
B. Exemple si exercitii
 4. Functie acolada
Fie functia: f:R-> R, x real.
f(x) = 6*x, x<0
3*x*x, x>=0;
Pseudocod
SL Start
REAL x,f;
Read x
READ (x);
Nu Da
x >= 0
IF (x<0) THEN { f = 6*x;
WRITE (f);
f = 6*x f = 3*x*x
}
ELSE { f = 3*x*x;
Write f Write f WRITE (f);
}
ENDIF;

STOP.
Stop
B. Exemple si exercitii
5. Determinati maximul dintre 3 numere reale.

 PSEUDOCOD
 REAL a,b,c; START
 READ (a,b,c);
 IF (a>=b) THEN
 IF (a>=c) THEN WRITE (“Max este a”, a) à a, b, c

 ELSE WRITE (“Max este c”, c) NU DA
 ENDIF; a≥b
 NU NU
DA DA
 b≥c a≥c
 ELSE
 IF (b>=c) THEN WRITE (“Max este b”, b) max=c max=b max=c max=a

 ELSE WRITE (“Max este c”, c)

 ENDIF;
ß max
 ENDIF;
 STOP.
STOP
B. Exemple si exercitii
6. Calculati aria unui triunghi folosind formula lui Heron.

SL
 PSEUDOCOD
Start
 INTREG a,b,c;
 REAL p, Aria; READ a,b,c

 READ (a,b,c);
p=(a+b+c)/2

 p=(a+b+c)/2;
 Aria = sqrt (p*(p-a)*(p-b)*(p-c)); Aria = sqrt (p*(p-a)*(p-b)*(p-c))

 WRITE
WRITE (p,Aria);
 (“Semiperimetrul=“, p, ”Aria este=“, Aria);

 STOP.
STOP
B. Exemple si exercitii
7. Scrieti algoritmul care realizeaza la cerere o operatie (+,-,*,/) pentru
doua numere reale a si b
i

PSUDOCOD - ? SL - ?
i=1
i=2

S1 S2 Sn S

REAL a,b,r; Start


CARACTER op;
READ (a, b, op); READ a, b, op

CASE-OF op + /
op= “+” : r=a+b op
op = “-” : r=a-b
op = “*” : r=a*b - *
op = “/” : r=a/b r = a+b r = a-b r = a*b r = a/b
ENDCASE;
WRITE (r);
STOP.
WRITE r
Ce ar trebui adaugat pentru ca algoritmul sa
acopere toate cazurile ?
Tema - In vederea realizarii impartirii, modificati Stop
programul adaugand conditia b!=0. Daca b=0 se va da
un mesaj de avertizare utilizatorului.
B. Exemple si exercitii

8. Calculati salariul net saptamanal al unui angajat (nr. ore de lucru normale 40).

Se cunosc: Trebuie determinate:


- plata pe ora (brut) -> valori intermediare
- nr_de_ore_lucrate (in total pe saptamana) - nr_ore_in_plus (ore suplimentare)
- sal_brut
-> valoare ceruta in cerinta
- sal_net

Indicatii:
- se determina nr de ore suplimentare (daca este cazul)
- se calculeaza salariul brut tinand cont de numarul de ore de lucru normale si
suplimentare (daca este cazul)
- se calculeaza salariul net
B. Exemple si exercitii
8. Calculati salariul net saptamanal al unui angajat (nr. ore de lucru normale 40).

Start
PSEUDOCOD SL - ?
REAL plata_pe_ora, Sal_brut, Sal_net;
READ plata_pe_ora, nr_ore_lucrate
INTREG nr_ore_lucrate, nr_ore_in_plus = 0;

READ (plata_pe_ora, nr_ore_lucrate);


Da
nr_ore_lucrate > 40
//determinare nr ore suplimentare
IF (nr_ore_lucrate > 40) THEN (nr_ore_in_plus =
Nu nr_ore_lucrate - 40)
THEN (nr_ore_in_plus = nr_ore_lucrate - 40)
ENDIF;

//determinare salariu brut Sal_brut = 40 * plata_pe_ora +


Sal_brut = 40 * plata_pe_ora + nr_ore_in_plus * plata_pe_ora * 2;

nr_ore_in_plus * plata_pe_ora * 2;
Sal_net = 0,58*Sal_brut;
//determinare salariu net
Sal_net = 0,58*Sal_brut;
WRITE sal_net

WRITE (Sal_net);
STOP. Stop
Probleme

Rezolvati problemele din fisierul cu


probleme aferent seminarului 3

19
Bazele programarii
calculatoarelor
Seminar 4
Vectori
(partea I-a)

Lect. univ. Radu Mogos

2022
Cuprins

Aspecte teoretice vectori


Exercitii si probleme

2
Vector – aspecte teoretice
 Vectorul (masiv unidimensional) – ?
 R: colecţie de date de acelaşi tip, memorate într-o zonă de
memorie contiguă, reunite sub un nume comun.
 Exemplu: intreg v(6); //sau intreg v[6];

Valori
elemente 4 10 12 3 100 50

Pozitii 0 1 2 3 4 5

Valoare element

v[0] = 4
Denumire variabila
de tip vector
3
Pozitie element
Vector – aspecte teoretice
 Declararea unei variabile de tip vector:

tip_dată nume (nr_elemente);


//sau tip_dată nume [nr_elemente]; in C

unde nr_elemente - constantă întreagă ce specifică numărul de elemente ale


vectorului;

 Exemplu de declarare:
 INTREG a(10);
 REAL b(20);
 CARACTER c(5);

4
Vector – aspecte teoretice Schema logica - ?
Start

Citire si afisare vector Citeste n

i=0

Pseudocod
Da

 INTREG i, n; i<n

 REAL v(100); READ v(i)

 READ (n);

Nu
i= i +1

i=0
 DO-FOR i = 0,n-1,1 //vi, vf, vr
 READ (v(i)); Da
 ENDDO; i<n

WRITE v(i)

Nu
i = i+1
 DO-FOR i = 0,n-1,1
 WRITE (v(i));
 ENDDO; STOP

5
 STOP.
Probleme

6
Probleme
1. Scrieti programul care calculeaza suma elementelor unui vector. Elementele sunt
reale si se introduc de la tastatura.

2. Sa se scrie programul pentru calculul sumei elementelor de rang impar ale unui
vector de dimensiune n.

3. Sa se scrie programul pentru calculul sumei elementelor strict pozitive ale unui
vector de dimensiune n.

4. Scrieti programul care determina prima aparitie a unei valori date intr-un vector
neordonat, de dimensiune n.

5. Scrieti programul care face interschimbarea elementelor egal departate de capetele


unui vector si afisarea vectorului obtinut.

6. Sa se scrie programul care calculeaza produsul scalar dintre 2 vectori de


dimensiune n

7. Sa se scrie programul care calculeaza produsul vectorial dintre 2 vectori de


dimensiune n

8. Sa se scrie un program pentru determinarea elementului maxim dintr-un vector de


dimensiune n si memorarea tuturor aparitiilor sale.

7
Problema 1 - enunt
Scrieti programul care calculeaza suma elementelor unui vector. Elementele sunt
reale si se introduc de la tastatura.
Indicatii:
 X= (x1,x2,...,xn). // se pleaca de la pozitia 1
 Suma elementelor: S = x1 + x2 + ... + xn =

 Algoritm:
 S0=0;
 ....
 S1 = S0 + x1 = 0 + x1 = x1;
 S2 = S1 +x2 = x1 +x2;
 .......
 Sn=Sn-1 +xn = x1 +x2 +... +xn;
 S=Sn.
 S0....Sn nu ne intereseaza, insumarea se va realiza in aceeasi locatie de memorie, cu adresa
simbolica S. Aici se vor depune sumele partiale (se va cumula cate un element).

 S = 0; //se refoloseste variabila S


 .....
 S = S + x1 = 0+x1 = x1;
 S = S +x2 = x1 +x2;
 .....
 S = S + xn = x1 +x2 +.... +xn;

 Algoritmul recursiv poate folosi 2 formule:


 - formula de start: S = 0;
 - formula recursiva: S = S + x(i), i=1,n.
 Elementele vectorului sunt reale si se introduc de la tastatura.
Problema 1 - rezolvare Start

PSEUDOCOD SL Citeste n

 INTREG i, n; i=0

 REAL v(100),s;
Da
i<=n-1

 READ (n); Citeste v(i)

Nu
 DO-FOR i = 0,n-1,1 //vi, vf, vr i= i +1

 READ (v(i)); s=0

 ENDDO; i=0

 s = 0; Da
i<=n-1
 DO-FOR i = 0,n-1,1 s = s +v(i)

 s = s + v(i);

Nu
i = i+1
 ENDDO; Tipareste s

 WRITE (s);
STOP
 STOP
Problema 2 - enunt
Sa se scrie programul pentru calculul sumei elementelor de rang
impar ale unui vector de dimensiune n.

 Indicatie:
 X = (x0,x1...,xn-1) //se pleaca de la pozitia 0
 S = x1 + x3 + x5 +….

 Exemplu:
 vector x=(3,2,6,4,10) // v(0)=3
 S= x(1) +x(3) = 2 + 4 = 6

 Sugestii pentru solutie?

 a) se parcurge vectorul cu indicele pornind de la valoarea initiala 1 si crescand cu


pasul 2. Se foloseste WHILE - DO.

 b) se parcurge vectorul cu indicele pornind de la valoarea initiala 1 si crescand cu


pasul 2. Se foloseste DO-FOR

 TEMA - c) se parcurge vectorul intergral si se selecteza elementele de rang impar


(pozitie impara), testand indicele prin verificarea restului impartirii lui i la 2 (i%2).

 OBS: / - pentru cat, % - pentru restul


START
Problema 2 – rezolvare a)
READ n
Pseudocod SL

 REAL v(100),s ; i=0


 INTREG n,i;
Da
da
i<n
 READ (n); C

S
READ v(i);
 DO-FOR i=0,n-1,1 nu

 READ (v(i));
Nu
 ENDDO; i=i+1
WHILE-DO
WHILE C DO S
 s = 0; ENDWHILE;
s=0

 i = 1; i=1
 WHILE (i<n)
 DO { s = s + v(i);
Da
 i = i + 2; i<n
 } s=s+v(i)
 ENDWHILE; Nu

WRITE s i=i+2
 WRITE (“Suma este:”, s);
 STOP
STOP
START

Problema 2 – rezolvare b)
READ n

Pseudocod SL
i=0
 REAL v(100),s ;
 INTREG n,i; Da
i<n

 READ (n); READ v(i)

 DO-FOR i=0,n-1,1 Nu
 READ (v(i)); i=i+1

 ENDDO; s=0

i=1
 s = 0;
 DO-FOR i = 1,n-1,2 Da
 s = s + v(i) i<n

 ENDDO; s = s + v(i)

Nu
 WRITE (“Suma este:”, s);
 STOP WRITE s
i=i+2

STOP
Problema 3 - enunt

Sa se scrie programul pentru calculul sumei elementelor strict pozitive ale


unui vector de dimensiune n.

Indicatii:
 X= (x0,x1,...,xn-1).
 Suma elementelor: S = x(i), daca x(i)>0, i=0,n-1,

 Algoritm:
 S = 0; // initializare suma
 .....
 Daca x0>0, atunci S = S + x0;
 Daca x1>0, atunci S = S +x1;
 .....
 Daca xn-1>0, atunci S = S + xn-1;

 Daca S>0 afiseaza S
 Altfel afiseaza “ Nu exista elemente pozitive”
Problema 3 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 REAL v(100),s ;
 INTREG n,i;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (v(i));
 ENDDO;

 s = 0;
 DO-FOR i = 0,n-1,1
 IF (v(i) >0) THEN s = s + v(i);
 ENDIF;
 ENDDO;

 IF (s>0) THEN WRITE (“Suma este:”, s)


 ELSE WRITE (“Vectorul nu are elemente pozitive”)
 ENDIF;

 STOP
Problema 4 - enunt
Scrieti programul care determina prima aparitie a - instr. conditionata anterior
unei valori date intr-un vector neordonat, de WHILE C DO S
ENDWHILE;
dimensiune n.

Indicatie:
 vectorul se parcurge secvential de la primul
element, cu ajutorul instructiunii WHILE – DO,
da
C

pana cand:
S
 - se regaseste valoarea cautata nu

 sau
 - pana la ultimul element, caz in care
valoarea cautata nu se afla in vector, afisandu-
se un mesaj corespunzator

Se poate utiliza si instructiunea DO-FOR ?


Care este mai eficienta in acest caz ?
Problema 4 - rezolvare
PSEUDOCOD
SCHEMA LOGICA - ?
 REAL v(100), a ; /*a – val. cautata*/
 INTREG n,i;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (v(i));
 ENDDO;

 READ (a);

 i = 0;
 WHILE ((i<n) && (v[i] != a))
 DO i=i+1; /* && = Si */
 ENDWHILE;

 IF (i == n) THEN WRITE (“Val. cautata nu exista in vector”)


 ELSE WRITE (“ Prima aparitie a lui „a‟ e pe pozitia:”, i)
 ENDIF;

 STOP
Problema 5 - enunt
Scrieti programul care face interschimbarea elementelor egal departate
de capetele unui vector si afisarea vectorului obtinut.
Exemplu:
Indicatie:
n=6
i=0,n/2-1,1
v = [4,10,12,3,10,50]
aux=x[i];
x[i]=x[n-i-1];
Se interschimba valorile de pe pozitiile:
0 cu 5 x[n-i-1]=aux;
1 cu 4
2 cu 3

0 1 2 3 4 5

4 10 12 3 100 50

Rezultat 50 100 3 12 10 4
Problema 5 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 INTREG x(50), i, aux, n;
 READ (n);

 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO;

 /*interschimbare elemente vector*/


 DO-FOR i=0,(n/2)-1,1
 {
 aux = x(i);
 x(i) = x(n-i-1);
 x(n-i-1) = aux;
 }
 ENDDO;

 /*afisare vector*/
 DO-FOR i=0,n-1,1
 WRITE (x(i));
 ENDDO;

 STOP.
Problema 6 - enunt
Sa se scrie programul care calculeaza produsul scalar dintre 2 vectori
de dimensiune n

Exemplu:
 x=(1,2,3)
 y=(4,5,6)
 ps= 1*4 + 2*5 + 3*6 => rezultatul este un singur element

Indicatie:
 X=(x1,x2,x3)
 Y=(y1,y2,y3)
 ps = x1*y1 + x2*y2 + x3*y3 => 1 element
Problema 6 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?

 REAL x(100), y(100), ps;


 INTREG i,n;

 READ (n);

 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO;
Ce caz nu e tratat ?
R: cel al dimensiunilor diferite pentru vectori
 DO-FOR i=0,n-1,1
 READ (y(i));
 ENDDO;

 ps=0;
 DO-FOR i=0,n-1,1
 ps = ps + x(i) * y(i)
 ENDDO;

 WRITE (ps);
 STOP
Problema 7 - enunt
Sa se scrie programul care calculeaza produsul vectorial dintre 2 vectori de
dimensiune n.

Exemplu:
 x=(1,2,3)
 y=(4,5,6)
 pv= (1*4, 2*5, 3*6) => rezultatul este un vector

Indicatie:
 X=(x1,x2,x3)
 Y=(y1,y2,y3)
 Z=(x1*y1, x2*y2, x3*y3) – vector cu 3 elemente
Problema 7 - rezolvare
PSEUDOCOD SCHEMA LOGICA - ?
 REAL x(100), y(100), z(100);
 INTREG i,n;

 READ (n);
 DO-FOR i=0,n-1,1
 READ (x(i));
 ENDDO; Ce caz nu e tratat ?
R: cel al dimensiunilor diferite pentru vectori
 DO-FOR i=0,n-1,1
 READ (y(i));
 ENDDO;

 DO-FOR i=0,n-1,1
 z(i) = x(i) * y(i)
 ENDDO;

 DO-FOR i=0,n-1,1
 WRITE (z(i));
 ENDDO;

 STOP
Problema 8 - enunt
Sa se scrie un program pentru determinarea elementului maxim dintr-un vector de
dimensiune n si memorarea tuturor aparitiilor sale.

Exemplu:
IN: 0 1 2 3 4 5
n=6
x = (7,3,7,2,7,7) 7 3 7 2 7 7

OUT:
max = 7 Rezultat • max = 7
poz= (0,2,4,5) • vectorul de pozitii poz
0 1 2 3
0 2 4 5

Indicatii:
 se determina maximul din vector
 se construieste vectorul poz cu pozitiile maximului
Problema 8 - rezolvare
REAL x(100), max; //determinare maxim
INTREG poz(100), n,i,k; max = x(0);
DO-FOR i = 1, n-1, 1
READ (n); IF (x(i) > max) THEN max =x(i);
ENDIF;
ENDDO;
DO-FOR i=0,n-1,1
READ (v(i)); //construire vector cu pozitiile pe care se afla maximul
ENDDO; k = 0;
DO-FOR i=0,n-1,1
IF (x(i) = = max) THEN {
poz[k] = i;
k = k+1;
}
ENDIF;
ENDDO;

WRITE(“Maximul este:”, max, “pe pozitiile”);


DO-FOR i=0,k-1,1
WRITE (poz(i));
ENDDO;
STOP.
TEMA

Se vor rezolva problemele din fisierul cu


exercitii si probleme aferent seminarului 4

25
Bazele programarii
calculatoarelor

Seminar 5
Algoritmi – vectori part. II

2022
Probleme
1. Sa se scrie programul pentru sortarea elementelor unui vector de dimensiune n.
a) sortarea prin interschimbare (metoda bulelor)
b) sortarea prin selectie
c) sortarea prin insertie

2. Sa se scrie programul care verifica daca elementele unui vector formeaza o progresie
aritmetica

3. Fie un vector cu numere reale, de dimensiune n. Scrieti programul care insereaza


intre doua valori consecutive ale vectorului media aritmetica a acestora.

4. Scrieti programul pentru determinarea c.m.m.d.c (cel mai mare divizor comun) dintr-
un sir (vector) de numere naturale nenule.

5. Scrieti programul care determina amplitudinea unui sir de numere memorate intr-un
vector de numere reale.

6. Sa se calculeze produsul numerelor perfecte dintr-un vector cu m elemente numere


intregi.

7. Se da un vector de 100 de elemente reale. Sa se scrie programul care transforma


vectorul in multime, eliminand dublurile (operatie de compactare).

2
Problema 1a - enunt
Sa se scrie programul pentru sortarea elementelor unui
vector de dimensiune n.
a) sortarea prin interschimbare (metoda bulelor)
( WHILE (C) DO S....ENDWHILE;)

Indicatie: Exemplu:
- se compara doua cate doua elemente consecutive ale Introduceti dimensiunea
vectorului, interschimbadu-le in cazul neindeplinirii vectorului, n=3
criteriului de ordonare. x[0]=3
- dupa o parcurgere intergrala a vectorului, procesul se x[1]=2
reia incepand cu primul element. x[2]=1
- elementele cu valoare mica sunt impinse catre inceputul 3.00 2.00 1.00 (prima forma)
vectorului 1.00 2.00 3.00 (ultima forma)
Vectorul sortat este:
- procesul se opreste cand la o parcurgere a vectorului nu
1.00 2.00 3.00
s-a produs nicio interschimare, situatie indicata de
valoarea variabilei p.

3
Problema 1a - enunt
Sa se scrie programul pentru sortarea elementelor unui
vector de dimensiune n.

Exemplu:
Introduceti dimensiunea
vectorului, n=3
v[0]=3
v[1]=2
v[2]=1

012 0 1 2  pozitii (i)


3 2 1 => 2 3 1
2 3 1 => 2 1 3

2 1 3 => 1 2 3
1 2 3 => 1 2 3

1 2 3 => 1 2 3
1 2 3 => 1 2 3 STOP 4
Problema 1a – iteratii
 Date de intrare  III. se reintra in while (p=1 ? DA)
 n=3  p=0
 v[0]=3  i=0 -> v[0]=1 > v[1]=2 NU => nu se mai intra pe ramura de
 v[1]=2  THEN si valorile raman:
 v[2]=1  v[0]=1
  v[1]=2
 Iteratii:  forma vector: 1 2 3
 p=1  i=1 -> v[1]=2 > v[2]=3 NU => nu se mai intra pe ramura de
  THEN si valorile raman:
 I. se intra in while (p=1 ? DA)  v[1]=2
 p=0  v[2]=3
 i=0 -> v[0]=3 > v[1]=2 DA => v[0]=2  forma vector: 1 2 3
 v[1]=3  i=2 -> se iese din DO-FOR
 p=1 
 forma vector: 2 3 1  IV. se reintra in WHILE (p=1 NU) => se iese din WHILE
 i=1 -> v[1]=3 > v[2]=1 DA => v[1]=1 
v[2]=3  Se afiseaza vectorul.
p=1
forma vector: 2 1 3
 i=2 -> se iese din DO-FOR

 II. se reintra in while (p=1 ? DA)
 p=0
 i=0 -> v[0]=2 > v[1]=1 DA => v[0]=1
 v[1]=2
 p=1
 forma vector: 1 2 3
i=1 -> v[1]=2 > v[2]=3 NU => nu se mai intra pe ramura de
THEN si valorile raman:
 v[1]=2
 v[2]=3
 forma vector: 1 2 3
 i=2 -> se iese din DO-FOR 5


Problema 1a – rezolvare I
INTREG n,i,p;
REAL x[100], aux;
WRITE("Introduceti dimensiunea vectorului, n=");
READ (n); WHILE (C)
DO-FOR i=0,n-1,1 DO S....
READx(i); ENDWHILE;
ENDDO;

p=1;
WHILE (p==1) DO
{ p=0;
da
DO-FOR i=0,n-2,1 C
IF (x[i]>x[i+1])
THEN { S
aux=x[i];
nu
x[i]=x[i+1];
x[i+1]=aux;
p=1;
}
ENDIF;
ENDDO;
}
ENDWHILE;

WRITE("Vectorul sortat este:");


DO-FOR i=0,n-1,1
WRITE (x(i)); 6
ENDDO;
STOP.
Problema 1b - enunt
1. Sa se scrie programul pentru sortarea elementelor
unui vector de dimensiune n.
b) sortarea prin selectie (cu doua DO-FOR)

Indicatie:
- metoda consta in determinarea elementului minim din vector si aducerea lui
pe prima pozitie, dupa care se determina minimul din vectorul ramas si
aducerea lui pe a doua pozitie,etc.
- minimul se poate detecta comparand un element al vectorului cu toate care il
succed, interschimbandu-le in cazul neindeplinirii criteriului de ordonare
(aceasta metoda poate avea la randul ei mai multe variante).

Exemplu
Introduceti dimensiunea vectorului, n=3
x[0]=3
x[1]=2
x[2]=1

Rezultat:
v[0]= 1
v[1]= 2 7
v[2]= 3
Problema 1b - enunt
1. Sa se scrie programul pentru sortarea elementelor
unui vector de dimensiune n.
Exemplu:
Introduceti dimensiunea
vectorului, n=3
v[0]=3
v[1]=2
v[2]=1

012 0 1 2  pozitii (i)


3 2 1 => 2 3 1
2 3 1 => 1 3 2

1 3 2 => 1 2 3 STOP

8
Problema 1b – iteratii
 Date de intrare  i=1
 n=3  j=2 => v[1] =3 > v[2]=2 DA => se interschimba
 v[0]=3  elementele
 v[1]=2  v[1]=2
 v[2]=1  v[2]=3
  forma vector: 1 2 3
 Iteratii  j=3 se iese din al doilea DO-FOR
 
 i=0 
 j=1 => v[0]=3 > v[1]=2 DA => se interschimba  i=2 - se iese din primul DO-FOR
 elementele
 v[0]=2  se afiseaza vectorul
 v[1]=3
 forma vector: 2 3 1

 j=2 => v[0]=2 > v[2]=1 DA => se interschimba


 elementele
 v[0]=1
 v[2]=2
 forma vector: 1 3 2
 j=3 se iese din al doilea DO-FOR

9
Problema 1b – rezolvare II
INTREG n,i,j;
REAL x[100], aux;
SCRIE ("Introduceti dimensiunea vectorului, n=");
CITESTE(n);
DO-FOR i=0,n-1,1
CITESTE x(i);
ENDDO;

DO-FOR i= 0, n-2, 1
DO-FOR j= i+1, n-1, 1
IF (x[i]>x[j])
THEN { aux = x[i];
x[i] = x[j];
x[j] = aux;
}
ENDIF;
END-DO;
ENDDO;

SCRIE ("Vectorul sortat este:");


DO-FOR i=0,n-1,1
SCRIE (x(i));
ENDDO;
STOP.

10
Problema 1c – enunt (TEMA)
Sa se scrie programul pentru sortarea elementelor unui vector de
dimensiune n.
c) sortarea prin insertie (TEMA)

- se porneste de la ipoteza ca la pasul i elementele predecesoare


lui x(i) sunt ordonate.

- se determina pozitia j in care valoarea lui x(i )se incadreaza


conform criteriului de ordonare.

- elementul x(i) va fi inserat in acea pozitie, dupa toate celelalte


elemente ale vectorului, incepand cu pozitia j si pana la sfarsit,
gliseaza cu o pozitie la dreapta.

- se reduce astfel numarul de insterschimbari deoarece in cazul in


care un element x(i) este mai mare decat precedentul, acesta se
considera ordonat.
11
Problema 1c – enunt (TEMA)
Exemplu:
n=7
i: 0123456
v[i]: 1 2 6 7 8 3 9

Etape: ?

i: 0123456
v[i]: 1 2 6 7 8 3 9

12
Problema 1c – rezolvare III
 - se citesc: lungimea vectorului si elementele acestuia (i=0,n-1,1) Exemplu:
 n=7
 Do-For i = 1, n-1, 1 i: 0123456
 v[i]: 1 2 6 7 8 5 9
 IF (v[i-1] > v[i]) THEN
Etape: ?
 { j = 0;
 WHILE ((j <= i-1) && (v[j] < v[i])) i: 0123456
 DO (j = j+1); v[i]: 1 2 6 7 8 3 9
 END-WHILE;

 aux = v[i];

 DO-FOR k = i-1, j, -1
 v[k+1] = v[k];
 END-DO;

 v[j] = aux;
 }
 END-IF;
 END-DO;

 - afisare rezultat (vector sortat, (i=0,n-1,1)) 13
Problema 2 - enunt
Sa se scrie programul care verifica daca elementele unui vector
formeaza o progresie aritmetica (folosind WHILE - DO)
Indicatie:
Fie X= (x1,x2,...xn).

Elementele vectorului pot forma o progresia aritmetica daca:


n>2 si x(i) = (x(i-1)+x(i+1))/2, i=2,n-1

Solutie:
- pentru verificarea cerintei putem verifica faptul ca un element este egal cu
media aritmetica a elementului din stanga si din dreapa lui (nr elemente din
vector >=3).

- vectorul este parcurs pana la penultimul element sau pana la un element care
nu indeplineste conditia.

- daca s-a ajuns cu parcurgerea pana la penultimul, elementele vectorului sunt in


progresie aritmetica
14
Problema 2 – exemplu
 Exemplu 1
 Introduceti dimensiunea vectorului, n=4
 x[0]=1
 x[1]=2
 x[2]=3
 x[3]=4
 Elementele sunt in progresie aritmetica

 Exemplu 2
 Introduceti dimensiunea vectorului, n=4
 x[0]=1
 x[1]=2
 x[2]=3
 x[3]=5
 Elementele nu formeaza o progresie aritmetica

15
Problema 2 – rezolvare
INTREG n,i;
REAL x[100];
SCRIE ("Introduceti dimensiunea vectorului, n=");
CITESTE (n);

IF (n<3) THEN SCRIE (“Vectorul are mai putin de trei elemente”)


ELSE { DO-FOR i=0,n-1,1
CITESTE x(i);
ENDDO;

i=1;
WHILE ((i<n-1) && (x[i] = = (x[i-1] + x[i+1])/2)) DO i=i+1;
ENDWHILE;

IF (i = = n-1) THEN SCRIE ("Elementele sunt in progresie aritmetica");


ELSE SCRIE ("Elementele nu formeaza o progresie
aritmetica");
ENDIF;

}
ENDIF;
STOP
16
Problema 3 - enunt
Fie un vector cu numere reale, de dimensiune n. Scrieti programul
care insereaza intre doua valori consecutive ale vectorului
media aritmetica a acestora.

Indicatie:
 se parcurge vectorul pana la penultimul
 se deplaseaza toate valorile spre dreapta cu o pozitie si se insereaza
media aritmetica.
 dupa fiecare inserare se incrementeaza indicele cu 2 pentru a nu insera si
media dintre medie si element.

Exemplu
Introduceti dimensiunea vectorului, n=3
x[0]=1
x[1]=2
x[2]=3
Vectorul actualizat cu media este:
1.00 1.50 2.00 2.50 3.00 17
Problema 3 - rezolvare
 INTREG n,i,j,k;
 // k-dimens. vector dupa adaugare medii
 REAL x[100];

 CITESTE(n);

 DO-FOR i=0,n-1,1
 CITESTE x(i);
 ENDDO;

 k=n;
 i=0;
 WHILE (i<k-1)
 DO {
 DO-FOR ( j=k, j>i+1, j=j-1 )
 x[j] =x[j-1];
 END-DO;

 x[j] = (x[i]+x[i+1])/2;
 i=i+2;
 k=k+1;
 }
 ENDWHILE;
 SCRIE ("Vectorul nou este:");
 DO-FOR i=0,k-1,1
 SCRIE (x(i));
 ENDDO; 18
 STOP.
Problema 3 – rezolvare numerica
 Exemplu
k=3 (k=n)  Introduceti dimensiunea vectorului, n=3
 x[0]=1
i=0  x[1]=2
 x[2]=3
 Vectorul actualizat cu media este:
While (i<k-1) DO ...  1.00 1.50 2.00 2.50 3.00
0<2 -> j=3 -> x[3] = x[2] = 3
j=2 -> x[2] = x[1] = 2
j=1 -> j>i+1 (1>1) cond.nu este indeplinita => se iese din for
-> x[1] = (x[0]+x[1])/2 = (1+2)/2=1.5
-> i=i + 2 = 0 +2= 2
-> k = k +1 = 3 +1 = 4
k=4
i=2
2<3 -> j=4 -> x[4] = x[3] = 3
j=3 -> j>i+1 (3>3) cond. nu este indeplinita => se iese din for
-> x[3] -> (x[2]+x[3])/2 = (2+3)/2=2.5
-> i = i +2 = 2 + 2 = 4
-> k = k +1 = 4 +1
k=5
i=4
4<4 – cond. nu este indeplinita, se iese din WHILE 19

Se afiseaza vectorul creat.


Problema 4 - enunt
Scrieti programul pentru determinarea c.m.m.d.c (cel mai mare
divizor comun) dintr-un sir (vector) de numere naturale nenule.
Indicatie:
- Fie sirul X=(x1,x2,...,xn). Pentru determinarea cmmdc al sirului X se
foloste proprietatea acestuia de asociativitate :

CMMDC1 – cmmdc (x1,x2)


CMMDC2 = cmmdc (CMMDC1, x3)
....................
CMMDCn-1 = cmmdc (CMMDCn-2, xn)
..................
CMMDC = CMMDCn-1

- Procesul se opreste cand:


-> sirul de numere a fost epuizat, caz in care cmmdc a fost
determinat,
-> fie cand in urma unei impartiri restul este 1, caz in care
numerele sunt prime intre ele.
20
Problema 4 - rezolvare
INTREG d, imp, r, x[50],n,i; RULARE
CITESTE ( n); Introduceti dimensiunea sirului, n=2
DO-FOR i=0,n-1,1 x[0]=24
CITESTE (x(i)) ; x[1]=18
ENDDO;
i=1
d = x[0]; r=24%18=6 /* %- preia restul
r = 0; impartirii lui 24 la 18
i = 1; d=18
WHILE ((r!=1) && (i<n)) imp=6
DO { imp = x[i];
DO { r=18%6=0
r=d%imp; d=6
d=imp; imp=0
imp=r;
} i=2
UNTIL (r<=1);
ENDDO; CMMDC = 6
i=i+1;
}
ENDWHILE;

IF (r!=1) THEN SCRIE ("CMMDC =", d)


ELSE SCRIE ("Numerele sunt prime intre ele");
ENDIF;
STOP. 21
Problema 5 - enunt

 Scrieti programul care determina amplitudinea unui sir de


numere memorate intr-un vector de numere reale.

Indicatii:
Amplitudinea unui sir de numere se determina ca diferenta (in valoarea
absoluta) dintre maximul si minimul din sirul respectiv.

Exemplu
Introduceti dimensiunea sirului, n=3
x[0]=2
x[1]=1
x[2]=3
Amplitudinea este 2.00

22
Problema 5 - rezolvare
 INTREG n,i;
 REAL x[100], min, max;
 CITESTE ( n);
 DO-FOR i=0,n-1,1
 CITESTE (x(i)) ;
 ENDDO;

 //max=min=x(0);
 min = x[0];
 max = x[0];
 DO-FOR i= 1, n-1, 1
 IF (x[i]<min) THEN min = x[i];
 ELSE
 IF (x[i]>max) THEN max=x[i];
 ENDIF;
 ENDIF;
 ENDDO;
23
 SCRIE ("Amplitudinea este ", max-min);
 STOP.
Problema 6 - enunt
Sa se calculeze produsul numerelor perfecte dintr-un vector cu m
elemente numere intregi.

Indicatie:
 un numar este perfect daca se poate scrie ca suma a divizorilor sai
naturali, mai putin el insusi.

Exemple ?
 6=1+2+3
 28=1+2+4+7+14
 496=1+2+4+8+16+31+62+124+248
 8.128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064

24
Problema 6 – rezolvare numerica
 p=1 // produs Exemplu rulare
 nr=0 // nr. de numere perfecte Introduceti dimensiunea sirului, n=3
x[0]=6
 i = 0,2,1 x[1]=28
 i=0 x[2]=2
 { s=0 Produsul numerelor perfecte este 168.
 (j=1,6/2=3,1)
 j=1 daca 6 % 1 = 0 => s=s+1=1
 j=2 daca 6 % 2 = 0=> s= 1+2 = 3
 j=3 daca 6 % 3 = 0=> s=3+3 =6
 daca s = = x[0] (6= =6) atunci { p=1* 6 = 6
 nr = 0 + 1 = 1
 }
 i=1
 { s=0
 (j=1,28/2=14,1)
 j=1 daca 28 % 1 = 0 => .......
 ......
 j = 14 daca 28 % 14 = 0 => s = 14 + 14 = 28
 daca s = = x[1] (28 = = 28) atunci { p= 6*28 = 168
 nr = 1 + 1 = 2
 }
25
 i = 2 .........
Problema 6 – rezolvare
 INTREG n, i, j, x[100], s, p, nr;
 CITESTE ( n);
 DO-FOR i=0,n-1,1
 CITESTE (x(i)) ;
 ENDDO;
 p =1 //produs
 nr = 0 //nr. de numere perfecte
 DO-FOR i = 0,n-1,1 {
 s=0
 DO-FOR j= 1, x[i]/2, 1
 IF (x[i]%j ==0) THEN s=s+j;
 ENDIF;
 ENDDO;
 IF (s= =x[i]) THEN {
 p=p*x[i];
 nr=nr+1;
 }
 ENDIF;
 }
 ENDDO;
 IF (nr!=0) THEN SCRIE("Produsul numerelor perfecte este", p);
 ELSE SCRIE("Nu exista numere perfecte in sir.");
 ENDIF;
 STOP 26
Problema 7 - enunt
Se da un vector de 100 de elemente reale. Sa se scrie
programul care transforma vectorul in multime,
eliminand dublurile (operatie de compactare).

Indicatie:
 Se parcurge vectorul de la primul pana la ultimul element
si se compara elementul curent cu toate situate in
dreapta sa.
 Daca elementul mai este gasit se realizeaza deplasarea
valorilor cu o pozitie spre stanga si se decrementeaza
numarul total.

27
Problema 7 – rezolvare
 INTREG n,i,j,k,p;
 REALx[100];
 SCRIE ("Introduceti dimensiunea vectorului, n=");
 CITESTE(n);
 DO-FOR i=0,n-1,1
 CITESTE x(i);
 ENDDO;

 k=-1
 DO-FOR i=0,n-1,1
 DO-FOR j=i+1,n-1,1
 IF (x[i] == x[j]) THEN {
 DO-FOR k=j,n-2,1
 x[k]=x[k+1];
 ENDDO;
 n=n-1
 j=j-1
 }
 ENDIF;
 ENDDO;
 ENDDO;

 SCRIE ("Vectorul compactat este:");


 DO-FOR i=0,n-1,1
 SCRIE (x(i));
 ENDDO;
 STOP. 28
Problema 7 – rezolvare numerica
Introduceti dimensiunea vectorului, n=5 IV.valori inainte de modificarea pozitiei: j=3 si k=4
x[0]=1 x[0]= 1.00
x[1]=2 x[1]= 2.00
x[2]=1 x[2]= 2.00
x[3]=2 valori dupa schimbarea pozitiei: n=3, j=2, k=3.
x[4]=1
V.valori inainte de modificarea pozitiei: j=2 si k=3
I. fara schimbarea pozitiei j=1 si k=-1 si n=5 x[0]= 1.00
II. valori inainte de modificarea pozitiei: x[1]= 2.00
j=2, k=-1 valori dupa schimbarea pozitiei: n=2, j=1, k=2.
x[0]= 1.00
x[1]= 2.00 Rezultat:
x[2]= 2.00 Vectorul compactat este:
x[3]= 1.00 1.00 2.00
valori dupa schimbarea pozitiei: n=4, j=1, k=4.

III.fara schimbarea pozitiei: j=2 si k=4 si n=4

29
Spor la învățat!

30
Bazele programarii
calculatoarelor

Seminar 6
Algoritmi – vectori part. III

2022
Cuprins

I. Simulare proba practica

II. Probleme

2
I. Simulare proba practica

3
I. Simulare proba practica

1. Prezenta forum


2. Simulare test

4
II. Probleme

5
II. Probleme
1. Sa se verifice daca doua siruri de numere citite de la tastatura sunt sau nu unul
anagrama celuilalt.

2. La un concurs de patinaj se cunosc cele n note obtinute de un concurent. Sa se


calculeze punctajul lui, stiind ca la determinarea mediei nu se iau in calcul nota cea mai
mica si nota cea mai mare obtinute.

3. Sa se scrie programul care realizeaza compunerea a doua permutari.

4. Sa se scrie programul care verifica daca o permutare este permutare identica.

5. Sa se scrie programul care determina daca o permutare este transpozitie.

6. Sa se scrie programul care determina inversa unei permutari de gradul n.

7. Fie un vector care reprezinta varsta exprimata in ani a n persoane. Sa se determine


persoanele a caror varsta exprimata in luni formeaza un numar palindrom.

8. Sa se scrie programul care realizeaza operatia de reuniune a doua multimi date.

9. Sa se scrie programul care realizeaza operatia de intersectie dintre doua multimi


date.
10. Sa se scrie programul pentru realizarea interclasarii a doi vectori.
a) prin metoda cu doua etape
b) prin metoda cu o singura etapa 6
Problema 1- enunt
Sa se verifice daca doua siruri de numere citite de la
tastatura sunt sau nu unul anagrama celuilalt.
Exemplu: Exemplu:
a= (1,2,3,3,5) Introduceti dimensiunea primului sir: 5
b= (3,1,3,2,5) Introduceti elementele primului sir:
R: ? x[0]=1
R: da
x[1]=2
a= (5,4,2,4,3) x[2]=3
b= (5,4,3,3,2) x[3]=3
R: ? x[4]=5
R: nu (fiecare nr. nu apare de acelasi nr de ori) Introduceti dimensiunea celui de-al doilea
sir: 5
Indicatii: Introduceti elementele celui de-al doilea sir:
- se declara variabilele necesare y[0]=3
- se introduc de la tastatura lungimile si y[1]=1
elementele sirurilor y[2]=3
- se verifica lungimea fiecarui sir de numere (pt. n y[3]=2
!= m va fi ok=0)
- pt. ok=1se sorteaza fiecare sir de numere
y[4]=5
- se compara elementul a[i] cu b[i]. Cele doua siruri sunt anagrame.
- daca toate sunt egale, atunci se da un mesaj ca
cele doua siruri sunt anagrame, daca nu, se da
un mesaj corespunzator.
Problema 1 – rezolvare  ok=1;
 IF (n!=m) THEN ok=0;
 ELSE
INTREG n,m, i, j, ok;  { DO-FOR i=0, n-2, 1
REAL x[100], y[100], aux;  DO-FOR j = i+1, n-1, 1
 {
WRITE ("Introduceti dimensiunea primului sir:");  IF (x[i] > x[j]) THEN { aux = x[i];
READ (n);  x[i]=x[j];
WRITE ("Introduceti elementele primului sir:\n");  x[j]=aux;
DO-FOR i = 0,n-1,1  }
READ (x(i));  ENDIF;
ENDDO;  IF (y[i] > y[j]) THEN { aux = y[i];
 y[i]=y[j];
WRITE ("Introduceti dimensiunea celui de-al  y[j]=aux;
 }
doilea sir:");
 ENDIF;
READ (m);
 }
WRITE ("Introduceti elementele celui de-al  ENDDO;
doilea sir:\n");  ENDDO;
DO-FOR i = 0,m-1,1 
READ (y(i));  DO-FOR i=0, n-1, 1
ENDDO;  IF (x[i]!=y[i]) THEN ok=0;
 ENDIF;
 ENDDO;
In loc de DO_FOR,  }
se poate si cu WHILE_DO ?  ENDIF;
 IF (!ok) THEN SCRIE ("Cele doua siruri nu sunt
R: anagrame.");
i=0;  ELSE SCRIE ("Cele doua siruri sunt
while ((i<n) && (x[i]==y[i])) do i=i+1; anagrame.");
endwhile;  ENDIF;
if (i==n) then write (“sunt anagrame”)  STOP.
else write (“nu sunt anagrame”);
Problema 2 - enunt
La un concurs de patinaj se cunosc cele n note obtinute de un concurent. Sa
se calculeze punctajul lui, stiind ca la determinarea mediei nu se iau in
calcul nota cea mai mica si nota cea mai mare obtinute.
Indicatii:
- se citesc de la tastatura nr. de note si notele
- se initializeaza variabila total = 0.0, iar min si max cu primul element din vector
- vectorul asociat notelor obtinute de un concurent se parcurge secvential intr-o
structura DO-FOR de la primul la ultimul element si se determina elementul minim
si elementul maxim.
- se calculeaza punctajul lui ca raport intre suma notelor (care sunt diferite de nota
cea mai mica si nota cea mai mare) si numarul notelor. OBS. Se va folosi un
contor k pentru a se retine nr. de note ce va fi luat in calcul)

Exemplu: Rezultat:
Introduceti nr. de note: 5 Nota 1=7 //nu se va lua in considerare (minim)
Introduceti elementele sirului: Nota 2=8 //k=1
Nota 1=7 Nota 3=7 //nu se va lua in considerare (minim)
Nota 2=8 Nota 4=9 //k=2
Nota 3=7 Nota 5=10 //nu se va lua in considerare (maxim)
Nota 4=9 Punctajul este: 8.50 --- (8+9)/2 = 8.50
Nota 5=10
Problema 2 – rezolvare
 REAL note[10], total, media, min, max;
k=0;
 INTREG n,k,i;

DO-FOR i = 0, n -1, 1
 WRITE ("Introduceti nr. de note:");
IF ((note[i]!=max) && (note[i]!=min))
 READ (n);
THEN {
 WRITE ("Introduceti elementele sirului:\n");
total = total + note[i];
 DO-FOR i = 0, n-1, 1
k = k+1;
 READ (note(i));
}
 ENDDO;
ENDIF;

ENDDO;
 total = 0;
 min = note[0];
IF (k!=0) THEN {
 max = note[0];
media = total / k;

WRITE ("Punctajul este:", media);
 //se determina nota maxima si nota minima
}
 DO-FOR i= 1,n-1,1
ENDIF;
 { IF (note[i]>max) THEN max=note[i];
STOP.
 ENDIF;

 IF (note[i]<min) THEN min=note[i];
 ENDIF;
 }
 ENDDO;

Problema 3 - enunt
Sa se scrie programul care realizeaza compunerea a doua permutari

• Ce este o permutare ?
R: numărul de posibilități de rearanjare a unei liste ordonate de valori (sau obiecte).

• Exemplu de permutare pentru n=3 ?


R:
123
213
...

• Cate permutari vor fi pentru n=3?


R: 3! = 3*2*1 = 6

• Exemplu de reprezentare pentru o permutare cu n=5.

• Care este asemanarea dintre permutare si vector?


Problema 3 - enunt
Sa se scrie programul care realizeaza compunerea a doua permutari

Teorie:

Indicatii:
Fie a si b doi vectori in care se retin permutarile initiale si c vectorul care contine
permutarea compusa.
Obs: in limbajul C elementele sunt memorate in masive incepand de la pozitia 0,
iar elementele din cadrul permutarii incep de la 1.
Problema 3 - exemplu
Exemplu
 Introduceti gradul permutarilor:3
(a o b)(x) = a(b(x))
 Introduceti elementele primei permutari:
 a(1)=2
 a(2)=1
 a(3)=3

 Introduceti elementele celei de-a doua


permutari:
 b(1)=3
 b(2)=2
 b(3)=1

 Cat este rezultatul compunerii permutarilor ?


 R:
 1 2 3 -> pozitii
 3 1 2 -> valori
Problema 3 - rezolvare
 INTREG n, i, a[100], b[100], c[100]; • DO-FOR i = 0, n-1, 1
• c[i] = a[b[i]-1];

• ENDDO;
 WRITE ("Introduceti gradul permutarilor:"); •
 READ (n); • WRITE ("Rezultatul compunerii
 permutarilor este:\n");
 WRITE ("Introduceti elementele primei • DO-FOR i = 0,n-1, 1
permutari:\n"); • WRITE (i+1);
• ENDDO;
 DO-FOR i = 0, n-1, 1
• WRITE (“\n”);
 READ (a(i)); • DO-FOR i=0, n-1, 1
 ENDDO; • WRITE (c(i));
 • ENDDO;
 WRITE ("Introduceti elementele celei de-a doua
permutari:\n"); • STOP.
 DO-FOR i = 0, n-1, 1
 READ (b(i));
 ENDDO;

Problema 4 - enunt
Sa se scrie programul care verifica daca o permutare este permutare identica
(pseudocod si schema logica).

• Ce este o permutare identica ?

Exemple
Exemplu 1: Exemplu 2:
Introduceti gradul permutarii: 3 Introduceti gradul permutarii: 3
Introduceti elementele permutarii: Introduceti elementele permutarii:
a(1)=2 a(1)=1
a(2)=1 a(2)=2
a(3)=3 a(3)=3
Nu este permutare identica. Permutare identica.
1 2 3 1 2 3
2 1 3 1 2 3

Indicatii:
- se citesc gradul permutarii si elementele.
- se verifica intr-un DO-FOR dupa i daca fiecare valoare a lui a[i] este egala cu i+1. Daca in final (i = = n)
atunci permutarea este identica.
Problema 4 - rezolvare
 INTREG n,i, a[100];

 WRITE ("Introduceti gradul permutarii:");
 READ (n);
 WRITE ("Introduceti elementele permutarii:\n");
 DO-FOR i = 0, n-1, 1
 READ (a(i));
 ENDDO;

 DO-FOR (i = 0, i<n && a[i] = = i+1, 1)


 ENDDO;
 IF (i = = n) THEN SCRIE ("Permutare identica.\n");
 ELSE SCRIE ("Nu este permutare identica.\n");
 ENDIF;

 DO-FOR i = 0, n-1, 1
 WRITE (i+1);
 ENDDO;
 WRITE ("\n");
 DO-FOR i = 0, n-1, 1
 WRITE (a(i));
 ENDDO;
 STOP.
Problema 5 - enunt
Sa se scrie programul care determina daca o permutare este transpozitie.

Ce conditie trebuie sa ideplineasca o permutare pentru a fi o transpozitie?

 Exemplul 1: Exemplul 2:
 Introduceti gradul permutarii:3 Introduceti gradul permutarii:3
 Introduceti elementele permutarii: Introduceti elementele permutarii:
 a(1)=3 a(1)=1
 a(2)=2 a(2)=2
 a(3)=1 a(3)=3
 Permutarea este transpozitie: 3 Permutarea nu este transpozitie.
 1 2 3 1 2 3
 3 2 1 1 2 3
Problema 5 – indicatie si exemple
Indicatii:
 - se citesc gradul si elementele permutarii
 - intr-un DO-FOR se numara cate elemente sunt diferite fata de permutarea
identica.
 - in variabila dif se va retine cate elemente sunt diferite in raport cu pozitiile
pe care le au iar in variabila poz pe ce pozitie se afla tranzpozitia
 - daca dif este diferit de 2 atunci se da mesaj ca permutarea nu este
transpozitie, altfel se da mesajul ("Permutarea este transpozitie: ", poz);

Exemplul 2:
 Exemplul 1: Introduceti gradul permutarii:3
 Introduceti gradul permutarii:3 Introduceti elementele
 Introduceti elementele permutarii: permutarii:
 a(1)=3 a(1)=1
 a(2)=2 a(2)=2
 a(3)=1 a(3)=3
 Permutarea este transpozitie: 3 Permutarea nu este transpozitie.
 1 2 3 1 2 3
 3 2 1 1 2 3
Problema 5 – rezolvare
 INTREG n,i, a[100], dif, poz;
IF (dif != 2) THEN SCRIE ("Permutarea nu

este transpozitie.\n");
 WRITE ("Introduceti gradul
permutarii:"); ELSE SCRIE ("Permutarea este
 READ (n); transpozitie: ", poz);
 WRITE ("Introduceti elementele ENDIF;
permutarii:\n");
 DO-FOR i=0, n-1, 1
 READ (a(i)); DO-FOR i = 0, n-1, 1
 ENDDO; WRITE (i+1); //pozitii permutare
 ENDDO;
 dif=0; WRITE ("\n");
 DO-FOR i = 0, n-1, 1 DO-FOR i = 0, n-1,1
 IF (a[i] != i+1) THEN WRITE (a(i)); //valori permutare
 { dif = dif+1; ENDDO;
 poz = i+1; STOP.
 }
 ENDIF;
 ENDDO;


Problema 6 – enunt (tema)
Sa se scrie programul care determina inversa unei permutari de gradul n.

Indicatie:

Obs: in C elementele sunt memorate in masive incepand de la pozitia 0, iar


elementele din cadrul permutarii incep de la 1.
Problema 6 – exemple
 Exemplu
 Introduceti gradul permutarii:3
 Introduceti elementele permutarii:
 a(1)=2
 a(2)=3
 a(3)=1
 Elementele inversei permutarii ?
 1 2 3
 3 1 2
Problema 6 – rezolvare
 INTREG n,i, a[100], b[100];

 WRITE ("Introduceti gradul permutarii:");
 READ (n);
 WRITE ("Introduceti elementele permutarii:\n");
 DO-FOR i = 0, n-1,1
 READ (a(i));
 END-DO;

 DO-FOR i = 0, n-1, 1
 b[a[i]-1] = i+1;
 ENDDO;

 WRITE ("Elementele inversei permutarii:\n",i+1);
 DO-FOR i = 0, n-1,1
 WRITE (i+1);
 ENDDO;
 WRITE ("\n");
 DO-FOR i = 0, n-1, 1
 WRITE (b(i));
 ENDDO;
 STOP.
Problema 7 - enunt
Fie un vector care reprezinta varsta exprimata in ani a n persoane. Sa se
determine persoanele a caror varsta exprimata in luni formeaza un
numar palindrom.

Indicatie:

- un numar palindrom este acela egal cu valoarea sa privita in oglinda.

Alte exemple de tip text:


- cuvinte: calabalac, aerisirea, cojoc, etajate,
etalate, lupul, etc
- propozitii: Ele fac cafele, Ele ne seduc cu
desenele, etc.

Exemplu rulare
Introduceti dimensiunea sirului: 3
Introduceti elementele sirului (varsta in ani)
x[0]=21 //21*12 = 252 este palindrom
x[1]=37 //37*12 = 444 este palindrom
x[2]=35 //35*12 = 420 nu este palindrom
Persoanele a caror varsta exprimata in luni formeaza un palindrom sunt:
1
2
Problema 7 - rezolvare
 INTREG n,m,x[100], y[100],i, nr, inv,c; IF (nr)
 THEN { SCRIE ("Persoanele a caror varsta
 SCRIE ("Introduceti dimensiunea sirului");
exprimata in luni formeaza un palindrom sunt:\n");
 CITESTE (n);
DO-FOR i = 0,nr-1,1

 SCRIE ("Introduceti elementele sirului");
SCRIE (y[i]+1);
 DO-FOR i=0, n-1, 1 ENDDO;
 SCRIE (x(i)); }
 ENDDO; ELSE SCRIE ("Nu exista niciun palindrom");
 nr =0 ; ENDIF;
 DO-FOR i = 0, n-1, 1 STOP.
 { inv = 0;
 m = x[i]*12;
 WHILE (m) DO {
 inv = inv*10 + m%10;
 m = m/10;
 c = inv;
 }
 ENDWHILE;

 IF (c = = x[i] * 12) THEN { y[nr] = i;
 nr = nr+1;
 }
 ENDIF;
 }
 ENDDO;


nr=0;
Problema 7 - rezolvare i=0 //x[0]=21
inv=0
m=x[0]*12 = 252
 Exemplu rulare
while (m!=0) // aici m=252
 Introduceti dimensiunea sirului: 3 DO
 Introduceti elementele sirului (varsta in ani) {
 x[0]=21 //21*12 = 252 este palindrom inv = 0*10 + 252 % 10 = 2
 x[1]=37 //37*12 = 444 este palindrom m = 252/10 = 25 //cat - /
c=2
 x[2]=35 //35*12 = 420 nu este palindrom
}

 Persoanele a caror varsta exprimata in luni formeaza un //se reintra in while


palindrom sunt (pozitie in vector + 1): while (m!=0) //aici m=25
 1 DO
 2 {
inv = 2*10+25%10 = 20+5 = 25
m = 25/10 = 2
c = 25
}

//se reintra in while


while (m!=0) //aici m=2
DO
{
inv = 25*10 + 2%10 = 250 +2 = 252
m=2/10 = 0
c = 252

//se reintra in while


while (m!=0) //aici m=0 -> se iese din while

if (c==x[0]*12) //252 == 21*12


then {
y[0] = 0;
nr = 0 + 1;
}
i=1 ....
i=2 ....
i=3 – se iese din DO-FOR
Problema 8- enunt
Sa se scrie programul care realizeaza operatia de reuniune a doua
multimi date.
Operatia de reuniune presupune:
Exemplu
- parcugerea secventiala a multimilor
initiale Nr. de elemente ale primei
- si trecerea in multimea rezultat a multimi:3
elementelor care se regasesc in cele x[0]=3
doua multimi, fiecare luat o singura data. x[1]=2
x[2]=1
Indicatie:
Nr. de elemente ale celei
- se citesc dimensiunile pentru cele doua multimi de-a doua multimi:4
(m si n) y[0]=3
- se citesc multimile (x[i] si y[i]) y[1]=4
y[2]=5
- se copiaza in z[i] multimea x[i] y[3]=6
- se copiaza in z[p] elementele lui y[j] tinand cont
de conditia ca elementele copiate sa nu existe Reuniunea celor doua
deja in z[p] multimi este:
3.00 2.00 1.00 4.00 5.00
- se afiseaza rezultatul reuniunii z[p]. 6.00 26
Problema 8 – rezolvare
 INTREG n,m,p,i,j; DO-FOR j=0, n-1,1
 REAL x[80],y[50], z[130]; { i=0;
 WHILE ((i<p) && (y[j] != z[i] ))
 READ (m); // Nr. de elemente ale primei DO i=i+1;
multimi ENDWHILE;
 DO-FOR i=0,m-1,1
 READ (x[i]); IF (i==p) THEN { z[p] = y[j];
 ENDDO; p = p+1;
 }
 READ (n); // "Nr. de elemente ale celei ENDIF;
de-a doua multimi:");
 DO-FOR i=0,n-1,1 }
 READ (y[i]); ENDDO;
 ENDDO;
 WRITE ("Reuniunea celor doua multimi
 p=0; este:");
 DO-FOR i=0,m-1,1 DO-FOR i=0, p-1, 1
 { z[p]=x[i]; WRITE (z[i]);
 p = p+1; ENDDO;
 }
 ENDDO; STOP.

27
Problema 9 - enunt
Sa se scrie programul care realizeaza operatia de
intersectie dintre doua multimi date.
Prin intersectia a doua multimi se va obtine o multime cu elementele
comune multimilor initiale.
Daca intersectia este vida, atunci cardinalul multimii rezultat este 0
Exemplu

Indicatii: Nr. de elemente ale primei multimi:3


x[0]= 1
x[1]= 2
- se parcurge una din multimi intr-o x[2]= 3
structura repetitiva si se verifica existenta
fiecarui element in cealalta multime. Nr. de elemente ale celei de-a doua
multimi:4
- daca se gaseste elementul, acesta va fi y[0]= 3
copiat in multimea rezultat. y[1]= 4
y[2]= 5
y[3]= 6
Intersectia celor doua multimi este:
3.00 28
Problema 2 – rezolvare
 INTREG n,m,p,i,j; p=0;
 REAL x[80],y[50], z[50]; DO-FOR i = 0, m-1, 1
{ j=0;
WHILE ((j<n) && (x[i]!=y[j]))
 READ (m); // Nr. de elemente ale DO j=j+1;
primei multimi ENDWHILE;
 DO-FOR i=0,m-1,1 IF (j<n) THEN
 READ (x[i]); { z[p]= x[i];
 ENDDO; p = p+1;
 }
ENDIF;
 READ (n); // "Nr. de elemente ale }
celei de-a doua multimi:"); ENDDO;
 DO-FOR i=0,n-1,1
 READ (y[i]); IF (p>0) THEN
{ WRITE ("Intersectia celor doua multimi este:");
 ENDDO; DO-FOR i=0,p-1,1
WRITE (z[i]);
ENDDO;
}
ELSE WRITE ("Intersectia este
multimea vida!");
STOP. 29
Problema 10 - enunt
Sa se scrie programul pentru realizarea
interclasarii a doi vectori.
Prin interclasare se intelege procesul de obtinere pe baza a doua sau a mai
multor multimi ordonate, a unei multimi, ordonata dupa acelasi criteriu
(rezultatul va fi ordonat la fiecare moment de timp).
Exemplu
Introduceti dimensiunea vectorului I, m=3
Metode: x[0]=1
1) prin metoda in doua etape x[1]=2
x[2]=3
2) prin metoda cu o singura etapa
Introduceti dimensiunea vectorului II, n=4
y[0]=2
y[1]=3
y[2]=4
y[3]=5

Vectorul rezultat este: 30


1.00 2.00 2.00 3.00 3.00 4.00 5.00
Problema 10 –
indicatii metoda 1 (in doua etape)

Metoda presupune:
- compararea a doua elemente, cate unul din fiecare vector initial, cu
scrierea celui mai mic dintre ele in vectorul rezultat si trecerea la
urmatorul element al vectorului initial din care s-a preluat. Procesul de
comparare se incheie cand s-a epuizat unul din vectorii initiali.

- in continuare, elementele netransferate ale celuilalt vector initial se


copiaza in vectorul rezultat.

31
Problema 10 –
rezolvare metoda 1 (in doua etape)
 INTREG m,n,i,j,p; IF (i= =m)
 REAL x[100], y[200], z[300]; THEN
 READ (m); // dimensiunea vectorului I DO-FOR i = j, n-1, 1
 DO-FOR i = 0, m-1, 1 { z[p]=y[i];
 READ (x[i]); p=p+1;
 ENDDO; }
 READ (n); // dimensiunea vectorului II ENDDO;
 DO-FOR j = 0, n-1, 1 ELSE
 READ (y[j]); DO-FOR j= i, m-1, 1
 ENDDO; { z[p]=x[j];
 i=0; j=0; p=0;
p=p+1;
}
 WHILE ((i<m) && (j<n)) DO
ENDDO;
 IF (x[i]<y[j]) THEN { z[p]=x[i];
ENDIF;
 p=p+1;
 i=i+1;
WRITE ("Vectorul rezultat este:");
 } DO-FOR i= 0, p-1, 1
 ELSE { z[p]=y[j]; WRITE (z[i]);
 p=p+1; ENDDO;
 j=j+1; STOP.
 }
 ENDIF; 32
 ENDWHILE;
Problema 10 –
indicatii metoda 2 (cu o etapa)

Metoda pp. obţinerea vectorului rezultant într-un proces unic de comparare.

Pentru a continua procesul în cazul în care se epuizează unul din vectorii


iniţiali, ultimul element al acestuia va primi o valoare mai mare decât oricare din
valorile regăsite în vectorii iniţiali. Această valoare poartă denumirea de high-
value (HV) şi depinde de natura şi reprezentarea internă a vectorilor.

Comparările ulterioare cu HV vor forţa copierea în vectorul rezultant numai a


elementelor vectorului care nu s-a epuizat. Procesul se încheie când ambii
vectori iniţiali au fost parcurşi integral, deci elementele finale au valoarea HV.

Observaţie: Pentru a nu altera valoarea elementului final al fiecărui vector iniţial


se va rezerva o poziţie suplimentară la declararea masivelor.

33
Problema 3 – rezolvare metoda 2 (cu o etapa)
INTREG x[100], y[150], z[251];
INTREG m,n,i,j,k; i=1; j=1; k=0;
//INTREG hv=32000; WHILE ((x[i]!=hv) || (y[j]!=hv))
{
READ (m); // dimensiunea vectorului I k=k+1;
DO-FOR i = 1, m, 1 IF (x[i] < y[j]) THEN
READ (x[i]); { z[k]=x[i];
ENDDO;
i=i+1;
READ (n); // dimensiunea vectorului II
IF (i>m) THEN x[i]=hv;
DO-FOR j = 1, n, 1 ENDIF;
READ (y[j]); }
ENDDO; ELSE
{ z[k]=y[j];
hv= |x(m)| + |y(n)| + 1; j=j+1;
IF (j>n) THEN y[j]=hv;
ENDIF;
}
ENDIF;
}
ENDWHILE;

WRITE ("Vectorul rezultat este: \n");


DO-FOR i = 1, m+n, 1
WRITE (z[i]);
ENDDO;
STOP. 34
Succes la test !!

35

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