Documente Academic
Documente Profesional
Documente Cultură
Seminar 1
Arhitectura și funcționarea
calculatorului
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
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/
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)
Programe
Calculator
Rezultate
electronic
Date
Calculatorul contine:
- unitate centrală de prelucrare (procesor) – UCP
- unitate de memorie interna (aici se inregistreaza datele (D) si programele (Pr))
Memorie
externa
Instructiuni
Date
Date Date
Unitate
Memorie interna Rezultate Unitate de OUT
de IN Instructiuni
Instructiuni
Date
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
Unitate centrala
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)
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)
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)
=> unui octet i se poate schimba continutul, DAR adresa ii ramane mereu
aceeasi.
octet … 170 171 172 173 174 175 176 177 178 179 180 181 182 ... 17
• Adresă absolută =?
Adresa = numărul asociat fizic fiecărui octet din memoria internă
170 171 172 173 174 175 176 177 178 179 180 181 182
b)
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)
20
IV. Sisteme de numeratie
21
Sisteme de numeratie
Sistemul de numeraţie =?
22
Sisteme de numerație
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
23
Operatii aritmetice (OA)
+ 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)
+ 0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
25
Operatii aritmetice (OA)
26
Operatii aritmetice (OA)
27
Operatii aritmetice (OA)
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)
mogos.radu@gmail.com
33
Succes in noul an universitar !
34
Bazele programarii
calculatoarelor
Seminar 2
Sisteme de numeratie. Conversia bazei
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)
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
2. exemple
Sa se reprezinte nr 75 din b10 in bazele 2,8,16
8
Conversia bazei de numeratie
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).
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
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)
14
Conversia bazei de numeratie
Exemple:
Nr subunitare – convertiti in b10 numarul 0,10111 (din b2) ?
15
Conversia bazei de numeratie
Exemple:
Nr real – convertiti in b10 numarul 1001011, 10111 (din b2)
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
0
1
2
3
4
5
6
7
20
Conversia bazei de numeratie
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
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
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)
26
II. Bazele logice ale calculatoarelor (II)
27
II. Bazele logice ale calculatoarelor (III)
28
Tema
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
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
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;
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
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.
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
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).
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;
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
19
Bazele programarii
calculatoarelor
Seminar 4
Vectori
(partea I-a)
2022
Cuprins
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:
Exemplu de declarare:
INTREG a(10);
REAL b(20);
CARACTER c(5);
4
Vector – aspecte teoretice Schema logica - ?
Start
i=0
Pseudocod
Da
INTREG i, n; i<n
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.
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).
PSEUDOCOD SL Citeste n
INTREG i, n; i=0
REAL v(100),s;
Da
i<=n-1
Nu
DO-FOR i = 0,n-1,1 //vi, vf, vr i= i +1
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
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
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
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;
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
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;
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;
/*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 - ?
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;
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
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.
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
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;
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
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
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;
10
Problema 1c – enunt (TEMA)
Sa se scrie programul pentru sortarea elementelor unui vector de
dimensiune n.
c) sortarea prin insertie (TEMA)
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).
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.
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);
i=1;
WHILE ((i<n-1) && (x[i] = = (x[i-1] + x[i+1])/2)) DO i=i+1;
ENDWHILE;
}
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
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;
29
Spor la învățat!
30
Bazele programarii
calculatoarelor
Seminar 6
Algoritmi – vectori part. III
2022
Cuprins
II. Probleme
2
I. Simulare proba practica
3
I. Simulare proba practica
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.
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).
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
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;
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:
Indicatie:
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
}
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
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.
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)
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;
35