Sunteți pe pagina 1din 44

I.

Motivatie:

Rezolvarea problemelor cu vectori necesit
anumite cunotine despre folosirea tablourilor
unidimensionale, la fel ca i majoritatea concursurilor i
olimpiadelor colare. Acestea propun in mare parte
probleme informatice ce implic folosirea vectorilor, motiv
pentru care am ales aceast tem.
Voi susine atestatul la inforatic , iar tema aleas
imi va consolida cunotinele despre vectori si m va ajuta si
in viitoarea cariera.
Page
1
II.Introducere
1.Tabloul:
Pentru a pastra in memoria calculatorului diverse informatii se folosesc variabile. Daca
informatiile pe care vrem sa le pastram se pot reprezenta prin numere intregi atunci folosim
variabile de tipul int, daca se pot reprezenta prin numere reale atunci folosim variabile de tipul
float, etc.
Spre exemplu pentru a calcula suma a trei numere reale, vom declara patru variabile
de tip float: trei variabile vor memora cele trei numere, iar a patra variabila va memora suma
lor.
Putem avea situatii cand avem nevoie de un numar mare de variabile, sau de un numar
de variabile care nu este cunoscut dinainte. Spre exemplu daca vrem sa facem calcule asupra a
100 de numere, este incomod sa declaram 100 variabile.
Sau daca trebuie sa facem calculi asupra a N numere, unde N este introdus de la
tastatura, atunci nici macar nu stim cate variabile s declaram.
n asemenea situatii putem folosi tablouri. !n tablou reprezinta un sir de mai multe
variabile de acelasi tip, grupate sub un acelasi nume. "ablourile sunt compuse din elemente.
#iecare element al unui tablou poate fi considerat ca fiind o variabila independenta, de acelasi
tip ca $i tabloul.
"ablourile au o dimensiune, care reprezint numarul de elemente din tablou.
"ablourile se declar specificand tipul de date, numele si dimensiunea. Spre exemplu o
declarare de forma: int a%100&'
nseamn ca declaram un tablou de 100 de elemente de tip int. (lementele tabloului se
acceseaza specificand numele tabloului si indicele dorit.
Numerotarea indicilor incepe de la 0. Primul element al tabloului de mai sus va fi a%0&,
al doilea va fi a%1&, iar ultimul va fi a%))&. n general prelucrearea tablourilor se face prin
instructiuni repetitive: for, *+ile sau do...*+ile.
2.TABLOURI UNIDIMENSIONALE
!neori este necesara prelucrarea unui set de valori de acelasi tip,asezate intr,o anumita
ordine.- astfel de structura se numeste sir,iar valorile respective se numesc elementele sirului.
.imba/ul 011 ofera posibilitatea de a memora toate elementele sirului intr,o singura
variabila indexata,in care elementele sunt dispuse intr,o anumita ordine,ocupand locatii de
memorie succesive,binedeterminate.- astfel de variabila se numeste tablou unidimensional
sau vector.
Page
2
!n tablou2arra34 este o structura formata dintr,un numr fixat de componente de
acela$i tip, numit tip de baza. Numrul de componente este determinat de numrul de valori
ale indicilor, care sunt obligatoriu tipuri ordinale. Pozi5ia unui element se mai nume$te si
indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului.
#ie 6n
i
781,9,..., n
i
: multimea primelor n
i
numere naturale. #ie ;76n
1
< 6n
9
< =..< 6n
>
produsul cartezian a k astfel de multimi.
Se numeste tablou o functie f:; ", unde " este o multime oarecare. Numarul k este
dimensiunea tabloului. Daca k71 tabloul se mai numeste si vector.?ectorul are n
1
componente. Daca k79 tabloul se mai numeste si matrice. ;atricea are n
1
x n
9
elemente.
(xemple : 1. ?ector cu @ componente numere naturale
?7 21,A,B,9,C=.4
6ici k71' n
1
7@, TN, elementele vectorului sunt !
1
71, !
9
7A, =.,!
@
7C
9. ?ector cu n componente numere reale
D72z
1
,z
9
,z
A
,==,z
n
4, z
i
" E, i F 81,9,==,n:
6ici k71,n
1
7n,T7R
Atent#e$ #recvent se confunda numarul componentelor cu dimensiunea tabloului. De
exemplu, despre un vector cu n componente se poate spune ca este de dimensiune n 2cand, de
fapt, toti vectorii au dimensiunea 14.
Gn esen5 un tablou este o list de variabile de acela$i tip. !n tablou de caractere poarta
numele de sir. 6ccesul la un element al tabloului se face cu a/utorul unui indice sau mai a
mul5i indici. Sirurile, tablouri unidimensionale de caractere cu un caracter special, caracterul
null 2HI0J4."ablourile ocup Kn memorie loca5ii contigue. "ablourile pot avea una sau mai
multe dimensiuni.
"ablourile unidimensionale sunt tablouri cu un singur indice 2vectori4. Dac tabloul
con5ine n elemente, indicii elementelor au valori Kntregi din intervalul %&' n(1). #orma
general de declarare a unui tablou unidimensional este:
tip nume_tablou [dimensiune];
unde: , tip , declar tipul de baz al tabloului, care este tipul fiecrui element al tabloului'
Page
3
, dimensiune L specific numrul de elemente ale tabloului'
, numeMtablou , este numele dat tabloului.
Numim tablou o colec5ie 2grup, mul5ime ordonat4 de date, de acela$i tip, situate Kntr,o
zon de memorie continu 2elementele tabloului se afl la adrese succesive4. Gn func5ie de
numrul indicilor utiliza5i pentru a referi elementele tabloului, putem KntNlni tablouri
unidimensionale 2vectorii4 sau multidimensionale 2matricile sunt tablouri bidimensionale4.
0a $i variabilele simple, variabilele tablou trebuie declarate Knainte de utilizare..a
KntNlnirea declara5iei unei variabile tablou, compilatorul aloc o zon de memorie continu
2dat de produsul dintre dimensiunea maxim $i numrul de octe5i corespunztor tipului
tabloului4 pentru pstrarea valorilor elementelor sale. Numele tabloului poate fi utilizat Kn
diferite expresii $i valoarea lui este c+iar adresa de Knceput a zonei de memorie care i,a fost
alocat. !n element al unui tablou poate fi utilizat ca orice alt variabil 2Kn exemplul
urmtor, atribuirea de valori elementelor tabloului vector4. Se pot efectua opera5ii asupra
fiecrui element al tabloului, nu asupra Kntregului tablou. .imba/ul 0 nu controleaz limitele
unui tablou. 6stfel se poate dep$i ambele OmarginiP ale unui tablou, se poate scrie valoarea
unui element de tablou Kn locul altor variabile sau peste instruc5iunile ma$ina ale programului.
De aceast problem este rspunztor cel care scrie programul $i nu compilatorul 0.
De exemplu:
#nt x%10&,i'
*or 2i 7 0' i Q 710' i 114
x %i& 7 i'
determin + s dep$easc limitele.

!n element de tablou poate s apar oriunde pot apare variabile simple sau constante,
Kn general Kn cadrul expresiilor. Gn 0 nu este posibil s copiem direct elementele unui tablou Kn
alt tablou, printr,o instruc5iune de atribuire de forma:
#nt x%@&, 3%@&'
Page
4
.. . . . . . . . . .
3 1 x' RS nu este posibil SR
37x' RS nu este admisSR

Pentru a realiza acest lucru este necesar s copiem fiecare element Kn mod explicit,
adica:
#nt x %@&, 3%@&, i' R
, , , , , , , , , Rsau
*or 2i 7 0' i Q @' 11i4 R *or 2i 71' i QB' i114
3%i& 7 x%i&' R 3%i,1& 7 x%i,1&'
- variabila de tip tablou retine o colectie de elemente, toate avand acelasi tip
2numit tip de baza4 si fiind asezate intr,o anumita ordine.
,.O-erat## .-ec#*#ce
1.Acce.ul la un ele/ent
6ccesul la un element se face prin intermediul indicilor, care arata numarul de ordine
in cadrul colectiei. Spre exemplu, a%>& este element din vectorul a care se afla pe pozitia k.
Prima pozitie este 0, iar ultima este dimensiunea,1.
2.Atr#bu#r#
Se pot face atribuiri intre elementele aceluiasi tablou. Se pot face atribuiri intre
elementele a doua tablouri cu acelasi tip de baza. Se pot face atribuiri intre elementele unui
tablou sau variabile si avand tipul identic cu tipul de baza al tabloului. Nu se pot face atribuiri
intre 9 tablouri, global.
,.0#t#rea ele/entelor unu# tablou
Se citesc n elemente 2maxim 1004 de tip intreg.
Page
5
int a[100], n;
cout<<n=;cin>>n;
for(int i=0;i<n;i++){
cout<<a[<<i<<]=;
cin>>a[i];
}


1.2enerarea ele/entelor aleator
Se foloseste generatorul de numere aleatoare care e descris in stdlib.+. Pornirea
generatorului se face cu randomize24' (xtragerea numerelor se face cu functia random2max4'
aceasta ofera un numar intreg cuprins intre & si /a+#/(1.

3.A*#.area tabloulu#
1.DE0LARAREA 4E0TORILOR IN 055
!n vector trebuie declarat,la fel ca orice variabila,in sectiunea de declaratii a
programului.n declaratia unui vector trebuie sa apara:identificatorul vectorului si
tipul elementelor.
Modul de declarare:
QtipT QnumeMtablouT%n1&%%n9&,=%n&&'
Page
6
int a[100], n;
cout<<n=;cin>>n;
for(int i=0;i<n;i++){
cout<<a[<<i<<]=;
cin>>a[i];
}
for (int i=0;i<n;i++)
cout<<a[i]<< ;
unde:
,tip reprezint tipul elementelor tabloului'
, n1, n9,...,n sunt numere Kntregi sau expresii constante Kntregi 2a cror valoare
este evaluat la compilare4, reprezentNnd limitele superioare 2valorile maxime
posibile4 ale indicilor tabloului.
Gn limba/ul 0, cazul parametrilor tablou constituie o excep5ie de la regula transferului
parametrilor prin valoare: o variabil tablou are ca valoare adresa de Knceput a tabloului 2este
un pointer constant4.
Gn cazul unei func5ii care prelucreaz elementele unui tablou unidimensional 2vector4, Kn
lista declara5iilor parametrilor formali vor apare tipul $i numele vectorului 2pentru care se
poate omite specificarea numrului maxim de elemente ale acestuia4 $i numrul de elemente
cu care se lucreaz:
QtipMvalMretTQnumeMfunctieT2QtipMtabTQnumeMtabT%&,int QnrMelemT4'
QtipMvalMretTQnumeMfunctieT2QtipMtabTSQnumeMtabT,int QnrMelemT4'
6pelul func5ei creia i se transmite ca parametru un vector este:
QnumeMfunctieT2QnumeMtabT, QnrMelemT4'
E+e/-le:
.!"emplul nr.
#nt vect%90&'RR declararea tabloului vect, de maximum 90 de elemente, de tipul int.
RR Se rezerv 90Ssizeof2int4790 S 9 7 C0 octe5i
#.!"emplul nr. #
double p,U,tab%10&'
RR declararea variabilelor simple p, U $i a vectorului tab, de maximum 10 elemente, tip double
$.!"emplul nr. $
Page
7
Vdefine ;6<10
c6ar tabc%;6<&' RSdeclararea tabloului tabc, de maximum ;6< 2104 elemente de tip c+arSR
%.!"emplul nr. %
double matrice%9&%A&' RR declararea tabloului matrice 2bidimensional4,
RR maximum 9 linii $i maximum A coloane, tip double
&.!"emplul nr. & ' (eclararea tabloului vector
(xemplul @.1 : int !%100&
!%&) !%1) ==============.. !%78) !%77)
6m declarat un vector cu 100 de componente de tip intreg. 6dresarea unei componente
se face prin indice, care se trece intre paranteze drepte. 6tentieW 0omponentele au indicii intre
0 si )). 6ceasta regula este valabila in general. De exemplu daca dorim sa adresam
componenta a 9,a scriem !%1&.
(xemplul @.9 : *loat a%3&)' b%3&) 'am declarat 9 vectori, a si b care au componente de tip
*loat.
b%&) b%1) ============== b%18) b%17)
.imba/ul 09055 nu ne permite sa declaram o variabila tablou cu numar variabil de
componente. De multe ori nu stim cate componente vor fi necesare pentru o anumita rulara a
programului. -rice problema in care se lucreaza cu variabile de tip tablou si in care se cere
prelucrarea unui numar 2care nu se cunoaste de la inceput4 de componente , constituie un
exemplu in acest sens.
deea este sa rezervam un numar maxim de componente L atat cat este necesar pentru
rulare atunci cand n este maxim. .a fiecare rulare a programului se cere numarul de
componente. De cele mai multe ori o parte dintre ele raman neutilizate.
Page

E+e/-lul 3.1. Sa analizam programul urmator.6cesta citeste si tipareste variabila din


exemplul @.1. nitial, se citeste n 2numarul componentelor4. Dupa aceasta se citesc , pe rand,
toate componentele. Sa presupunem ca s,a citit n7A. 6poi se citesc A numere intregi, cate unul
pentru fiecare componenta, si anume B,A,C. citirea s,a facut cu a/utorul instructiunii *or, unde
variabila de ciclare reprezinta c+iar indicele componentei care se citeste 2# ia valori intre 0 si 9
4. n final, se tipareste continutul componentelor citite. Eestul componentelor vor retine
valoarea initiala2reziduala pentru ca aceasta nu este cunoscuta 4.
VincludeQiostream.+T
using namespace std'
int main24 8
int v%100& , n, i'
coutQQPnumar de componente O'
cinTTn'
for 2i70'iQn'i114 8
coutQQP v%OQQi11QQJ&7P '
:
for 2i70'iQn'i114
coutQQv%i&QQendl'
return 0' :

Ob.er!at#e$ Nu sunt premise atriburi de forma b7a 2unde a si b sunt tablouri4. n acest caz
atribuirea se face pe componente.
n memorie, tablourile sunt memorate pe linii. 6ceasta inseamna ca la inceput este
memorata prima linie, apoi a doua s.a.m.d.
III. AL2ORITMI :UNDAMETALI 0ARE LU0REA;A
0U 4E0TORI
1.Ma+#/
Se citeste un vector cu n componente numere intregi. Se cere sa se afiseze cel mai
mare numar intreg gasit. !"emplu: n1 si se citesc valorile 2'(1','3. Se va afisa 3.
- variabila 2/a+4 va prelua continutul primei componente. Pe rand, continutul
acesteia va fi comparat cu numerele intregi retinute de componentele 2','...'n. n cazul in care
se gaseste un numar mai mare decat cel retinut de variabila /a+, aceasta va retine acel numar.
ata situatia initiala:
Page
!
" 2 #4 3
5
$a% 2
" 2 #4 3
5
$a% 2
(1<2 2continutul variabilei /a+4. Se trece mai departe:


n final, valoarea gasita este @.
)ro*ramul +,,
2.M #n# /
Se citeste un vector cu n componente numere intregi. Se cere sa se afiseze cel mai mic
numar intreg gasit.
!"emplu: n1 si se citesc valorile 2'(1','3. Se va afisa (1.
- variabila 2/#n4 va prelua continutul primei componente. Pe rand, continutul acesteia
va fi comparat cu numerele intregi retinute de componentele 2','...'n. n cazul in care se
gaseste un numar mai mic decat cel retinut de variabila /#n, aceasta va retine acel numar. ata
situatia initiala:
Page
10
Vinclude Qfstream.+T
#nt main24 8
fstream f,g'
#nt v%2&&,n,i,max'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTv%i&' :
max7v%1&'
*or2i71'iQ7n'i114 8
#* 2v%i&Tmax4 max7v%i&'
:
gQQX?aloarea maxima este XQQmax'
f.close24'
g.close24' :
" 2 #4 3
5
$in 2
" 2 #4 3
5
$in #4
(1<2 2continutul variabilei /#n4.?ariabila /#n va retine (1 Se trece mai departe:

n final, valoarea gasita este ,C.
)ro*ramul +,,
Vinclude Qfstream.+T
#nt main24 8
fstream f,g'
#nt v%2&&,n,i,min'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTv%i&'
:
min7v%1&'
*or2i71'iQ7n'i114 8
#* 2minTv%i&4 min7v%i&'
:

gQQX?aloarea minima este XQQmax'
f.close24'
g.close24'
:

Page
11
,.Ele/ente d#.t#nct e
Se citeste n si o variabila de tip arra3 cu n componente numere intregi. Sa se decida
daca numerele citite sunt distincte 2nu exista doua numere egale4.
Pentru a rezolva problema trebuie testate toate perec+ile de numere intregi. 0um
putem face aceastaY deea este urmatoarea:
,se compara valoarea retinuta de prima componenta cu valorile retinute de
componentele de la 9 la n'
,se compara valoarea retinuta de a doua componenta cu valorile retinute de
componentele de la A la n'
,se compara valoarea retinuta de componenta n,1 cu valoarea retinuta de
componenta n'
Daca in urma comparatiilor nu se gasesc doua valori egale, rezulta ca numerele citite
sunt distincte, altfel acestea nu sunt distincte.
!"emplu: se citesc n= si valorile 1','2'1','3.
- variabila # retine indicele primei componente supusa comparatiei si o alta variabila /
retine indicele celei de,a doua componente.
0and # ia valoarea 1, > va lua, pe rand, valorile 2','....n.
0and # ia valoarea 2, > va lua, pe rand, valorile ,'1'...n.
0and # ia valoarea n(1, > va lua valoarea n.
n concluzie, pentru fiecare # intre 1 si n(1, > va lua valorile cuprinse intre #51 si n
2aceasta /ustifica existenta celor doua cicluri for4. !nei variabile XlogiceX ?a.#t, cu valoarea
initiala &, i se atribuie valoarea 1 daca sunt gasite doua valori egale. "estul se termina fie cand
au fost comparate toate valorile, fie cand au fost gasite doua valori egale. ?edeti modul in care
am scris conditiile de continuare ale celor doua cicluri for. (ste un exemplu care
Page
12
demonstreaza flexibiliatea limba/ului 011. n final, se tipareste raspunsul in functie de
valoarea retinuta de variabila gasit.
)ro*ramul +,,
1.Te.tul de a-artenenta
Page
13
Vinclude Qfstream.+T
#nt main 24 8
fstream f,g'
#nt n,v%10&,i,/,o>70'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTv%i&' :
*or2i71'iQ7n ZZ Wo>'i114 8
*or2/7i11'/Q7n ZZ Wo>'/114
#*2v%i&77v%/&4
o>71' :
#*2o>7714
gQQX(lementele nu sunt distincteWX'
el.e
gQQX(lementele sunt distincteWX'
f.close24'
g.close24' :
Se citeste o multime 6 de numere intregi. Se citeste un numar intreg e. Sa se
decida daca e apartine lui 6.
Pentru rezolvare, procedam intr,un mod clasic. - variabila gasit va retine,
initial, valoarea 0. 6poi se testeaza fiecare element al multimii 6 daca este sau nu egal cu
numarul retinut de e. n caz de egalitate variabila gasit va retine 1. .a sfarsit, se va raspunsul
in functie de continutul variabilei gasit
)ro*ramul +,,
3.D#*erenta a doua /ult#/#
Se citesc doua multimi A si B. Se cere sa se afiseze multimea 0A(B.0unoastem
modul in care se defineste diferenta a doua multimi:
0A(B
: [ 8 B x A x
adica elemente care apartin multimii A si nu apartin multimii B.
De aici rezulta algoritmul : pentru fiecare element al multimii A, se face testul daca
apartine sau nu multimii B. n caz de neapartenenta, aceasta este adaugat unei multimi 0,
Page
14
Vinclude Qfstream.+T
#nt main 24 8
fstream f,g'
#nt mult%)&,n,e,i,gasit'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTmult%i&' :
fTTe'
gasit70'
*or2i71'iQ7n'i114
#*2mult%i&77e4
gasit71'
#* 2gasit7714
gQQX(lementul apartine multimiiWX'
else
gQQX(lementul nu apartine multimiiWX'
:
initial vide. - variabila k 2 cu valoarea initiala &4 retine indicele compontei din 0 care va
memora urmatorul element ce se adauga multimii diferenta. n final, se tipareste 0.
)ro*ramul +,,
Vinclude Qfstream.+T
#nt main 24 8
fstream f,g'
#nt multa%)&,multb%)&,multc%)&,n,m,i,/,>,gasit'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTmulta%i&' :
fTTm'
*or2i71'iQ7m'i114 8
fTTmultb%i&' :
>70'
*or2i71'iQ7n'i114 8
gasit70'
*or2/71'/Q7m ZZ Wgasit'/114
#*2multa%i&77multb%/&4
gasit71'
#*2Wgasit4 multc%>11&7multa%i&' :
gQQX6,\XQQX 7X'
*or2i70'iQ>'i114
gQQmultc%i&QQX X'
f.close24'
g.close24'
:
=.Reun#unea a doua /ult#/#
Se citesc doua multimi de numere intregi A si B. Se cere sa se afiseze multimea
0AUB.Pentru rezolvare, se rezerva trei variabile de tip tablou cu componente care retin
numere intregi 2A'B'04. Dupa citirea celor doua multimi A si B, se listeaza multimea B, apoi
A(B. De fapt, aplicam formula:
Page
15
0AUBBU@A(BA.
)ro*ramul +,,
Vinclude Qfstream.+T
#nt main 24 8
fstream f,g'
#nt multa%)&,multb%)&,multc%)&,n,m,i,/,>,gasit'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTmulta%i&' :
fTTm'
*or2i71'iQ7m'i114 8
fTTmultb%i&' :
>70'
*or2i71'iQ7n'i114 8
gasit70'
*or2/71'/Q7m ZZWgasit'/114
#*2multa%i&77multb%/&4
gasit71'
#*2Wgasit4 multc%>11&7multa%i&' :

gQQX6 reunit cu \XQQendl'
*or2i71'iQ7m'i114
gQQmultb%i&QQX X'
*or2i70'iQ>'i114
gQQmultc%i&QQX X'
f.close24'
g.close24'
:
Page
16
B.Inter.ect#a a doua /ult#/#
Se citesc doua multimi de numere intregi A si B. Se cere sa se afiseze multimea
0ACB.Se cunoaste definitia intersectiei a doua multimi:
0ACB
: [ 8 B x A x
Pornind de la definitie, se deduce imediat algoritmul: pentru fiecare element al
multimii A se face testul de apartenenta la multimea B, iar in caz afirmativ , este adaugat la o
multime 0, initial vida.
)ro*ramul +,,
Vinclude Qfstream.+T
!o#d main 24 8
fstream f,g'

#nt multa%)&,multb%)&, multc%)&,n,m,i,/,>,gasit'

f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'

fTTn'

*or2i71'iQ7n'i114 8
fTTmultb%i&' :
>70'
*or2i71'iQ7n'i114 8
gasit70'

*or2/71'/Q7m ZZ Wgasit'/114
#*2multa%i&77multb%/&4
gasit71'

#*2gasit4 multc%>11&7multa%i&' :

gQQX6 intersectat cu \XQQendl'
Page
17
fTTmulta%i&' :
fTTm'
*or2i71'iQ7m'i114 8
*or2i70'iQ>'i114
gQQmultc%i&QQX X'
f.close24'
g.close24'
:
8.Drodu.ul carteE#an d#ntre doua /ult#/#
#ie multimile AF1'2'....'nG si BF1'2'...'/G 2/ si n se citesc4. Se cere sa se afiseze
multimea 0A+B.
0unoastem relatia : 0A+BF@+'HAI+AI+BG
(xemplu: AF1'2G, BF1'2',G, 0A+BF@1'1A' @1'2A' @1',A' @2'1A' @2'2A' @2',AG.
Daca urmarim cu atentie, observam ca trebuie afisate toate perec+ile de numere @+'HA cu +
F1'....nG si HF1'...'/G.
6ceasta se realizeaza foarte usor cu cicluri *or imbricate.
Vinclude Qiostream.+T
!o#d main24 8
#nt n,m,i,/'
coutQQXnumarul de elemente al multimii 6 X'
cinTTn'
coutQQXnumarul de elemente al multimii \ X'
cinTTm'
*or2i71'iQn'i114
*or2/71'/Qm'/114
coutQQiQQX XQQ/QQendl'
:
Dupa cum observati, am rezolvat problema pentru un caz particular 2multimea A este
formata din numerele naturale cuprinse intre 1 si n, iar multimea B este formata din numerele
naturale cuprinse intre 1 si /4.Dar, in cazul generalY
Page
1
De exemplu, in cazul in care A este o multime formata din n caractere iar B
este o multime formata din / caractere. Problema este interesanta, se poate aplica si pentru
alti algoritmi, si admite o rezolvare neasteptat de simpla. n primul rand, se citesc elementele
celor doua multimi.
!"emplu : A@a'bA si B@c'd'eA. ;ultimea A are 9 elemente, iar multimea B are A. Eezolvam
problema ca in cazul anterior, pentru multimile F1'2G si F1'2',G. Diferenta este ca la afisare, in
loc sa afisam perec+ea 2i,/4, afisam perec+ea 26%i&,\%/&4. 6stfel, in loc sa afisam 21,14, afisam
26%1&, \%1&4.
)ro*ramul +,,
Vinclude Qfstream.+T
#nt main 24 8
fstream f,g'
#nt n,m,i,/,multa%)&,multb%)&'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
*or2i71'iQ7n'i114 8
fTTmulta%i&' :
fTTm'
*or2i71'iQ7m'i114 8
fTTmultb%i&' :
gQQXProdusul cartezian dintre 6 si \XQQendl'
gQQX8X'
*or2i71'iQ7n'i114 8
*or2/71'/Q7m'/114
gQQX2XQQmulta%i&QQX,XQQmultb%/&QQX4,X' :
gQQX:X'
f.close24'
g.close24'
:
Page
1!
I4.Metode de .ortare
Se citesc n numere intregi. Se cere ca acestea sa fie scrise in ordine crescatoare
2descrescatoare4.
!"emplu: Se citeste n1 si se citesc numerele: ,' 1' =' 2. Numerele vor fi afisate in
ordinea 1'2','= 2crescatoare4 sau =','2'1 2descrescatoare4.
-peratia prin care se aran/eaza cele n numere in ordine crescatoare 2descrescatoare4 se
numeste sortare. Pentru a sorta cele n valori, acestea se citesc intr,o variabila de tip tablou.
Sortarea propriu,zisa se face in cadrul acestei variabile. Se cunosc o multime de algoritmi de
sortare. 6cestia au fost elaborati in timp.
nainte de a trece la prezentarea lor, raspundem la intrebarea: care este natura valorilor
care se pot sortaY Easpunsul este simplu: orice valoare care apartine unui tip asupra caruia pot
actiona operatori relationali2Q, T, Q7, T74. Prin urmare:
,?alorile care apartin unuia dintre tipurile intregi pot fi sortate'
,?alorile apartinan unuia din tipurile reale pot fi sortate'
n continuare, prezentam cativa algoritmi de sortare. Pentru exemplificare se
considera ca se citesc n numere intregi care trebuie sortate crescator. #iecare din programe ,
poate fi modificat cu usurinta pentru sortarea altor valori permise. ?om presupune ca se citesc
1 valori ,'1'1'2'
1 .Sortarea -r#n .electarea /#n#/ulu# @ ma"imului A e.te:
,se determina minimul dintre valorile retinute, incepand cu prima pozitie'
,minimul este trecut in prima pozitie, prin intersc+imbarea continuturilor dintre
componenta de indice 1 si componenta care il memoreaza'
,se determina minimul dintre valorile retinute, incepand cu a doua pozitie'
,minimul este trecut in pozitia 9, prin intersc+imbarea continuturilor dintre
componenta de indice 9 si componenta care il memoreaza'
,se determina minimul dintre valorile retinute, incepand cu a treia pozitie'
Page
20
& 3 1 4
2

&[1] &[2] &[3]
&[4]
& 1 3 4
2

&[1] &[2] &[3]
&[4]
& 1 2 3
4

&[1] &[2] &[3]
&[4]
& 1 2 4
3

&[1] &[2] &[3] &[4]
,minimul este trecut in pozitia A, prin intersc+imbarea continuturilor dintre componenta de
indice A si componenta care il memoreaza'
,se determina minimul dintre valorile retinute, incepand cu penultima pozitie'
,minimul este trecut in penultima pozitie, prin intersc+imbarea continuturilor dintre
componenta de indice n,1 si componenta care il memoreaza.
!"emplu. 0ontinutul variabilei care retine numerele citite este:
;inimul este 1 si se gaseste in pozitia 9 . Se inverseaza continuturile componentelor 1
si 9.
Se determina minimul dintre valorile retinute in componentele de la 9 la C. 6cesta este
9 si este retinut de componenta C. Se inverseaza continutul componentelor 9 si C.
Se determina minimul dintre valorile retinute in componentele de la A la C. 6cesta este
A si este retinut de componenta C. Se inverseaza continutul componentelor A si C.
Page
21
& 1 2 3
4

&[1] &[2] &[3]
&[4]
& 3 1 4
2
&[1] &[2] &[3]
&[4]
6cum valorile se pot afisa. (vident, precedeul a fost repetat de n,1 ori. n cazul in care
se cere sortarea descrescatoare, la fiecare pas se calculeaza maximul.
)ro*ramul +,,
Vinclude Qfstream.+T
#nt main24
8
fstream f,g'
#nt a%)&,n,i,/,>,man,min'
f.open2Xvector.inX,ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'

*or2i70'iQn'i114 8
fTTa%i&' :
*or2i70'iQn,1'i114 8
min7a%i&' >7i'
*or2/7i11'/Qn'/114
#*2a%/&Qmin4 8
min7a%/&'
>7/' :
man7a%>&'
a%>&7a%i&'
a%i&7man' :
*or2i70'iQn'i114
gQQa%i&QQX X'
f.close24'
g.close24'
:

2. Sortarea -r#n #nter.c6#/bare .
Page
22
& 3 1 4
2
&[1] &[2] &[3]
&[4]
& 1 3 4
2
&[1] &[2] &[3]
&[4]
& 1 3 2
4
&[1] &[2] &[3]
&[4]
& 1 2 3
4
&[1] &[2] &[3]
&[4]
6lgoritmul este urmatorul:
,se parcurge variabila inversand continuturile componentelor alaturate care nu sunt
in ordine crescatoare 2descrescatoare4'
,......................
,procedeul se repeta pana cand are loc o parcurge in care nu se fac inversari'
#ie situatia initiala:
Se efectueaza prima parcurgere.Se inverseaza valorile retinute de componentele 1 si 9.
?alorile retinute de componentele 9 si A nu se inverseaza. n sc+imb, se inverseaza
valorile retinute de componentele A si C.
ntrucat au avut loc inversari se reparcurge vectorul. Se inverseaza valorile retinute de
componentele 9 si A.
6lte inversari nu se fac. ntrucat in actuala parcurgere au fost facute inversiuni, se
reparcurge vectorul, de data aceasta inutil si algoritmul se inc+eie.
Page
23
)ro*ramul +,,

,. Sortarea -r#n #n.ert#e
0u a/utorul variabilei citite A 2vector4 se aran/eaza valorile intr,un al vector B in
ordine crescatoare. Pentru aceasta se procedeaza astfel:
, \%1&76%1&'
Page
24
Vinclude Qfstream.+T
#nt main24
8
fstream f,g'
#nt a%)&,n,i,/,>,man,gasit'

f.open2Xvector.inX, ios::in4'

g.open2Xvector.outX, ios::out4'

fTTn'

*or2i70'iQn'i114
8
fTTa%i&' :

do
8
gasit70'
*or2i70'iQn,1'i114
#* 2a%i&Ta%i11&4 8
man7a%i&'
a%i&7a%i11&'
a%i11&7man'
gasit71' : :
J6#le 2gasit4'
*or2i70'iQn'i114
gQQa%i&QQX X'
f.close24'
g.close24' :
' 1 3
'[1] '[2] '[3]
'[4]
& 3 1 4
2
&[1] &[2] &[3]
&[4]
& 3 1 4
2
&[1] &[2]
&[3] &[4]
&[3] &[1] &[2]
&[3] &[4]
' 1 3 4
'[1] '[2]
'[3] '[4]
'[1] '[2] '[3]
'[4]
& 3 1 4
2
&[1] &[2] &[3]
&[4]
&[1] &[2] &[3]
&[4]
' 3
'[1] '[2] '[3]
'[4]
, fiecare din valorile retinute de componentele de la 9 la n 2 in ordinea indicilor4 se insereaza
intre valorile ordonate de/a ale vectorului \.
Pentru realizarea inserarii unei valori, se parcurge vectorul \ de la dreapta la stanga
pana cand se gaseste o componenta care retine o valoare mai mare 2mica4 decat cea care se
insereaza sau pana cand a fost parcurs intreg vectorul.
ncepand cu valoarea retinuta de componenta care va fi ocupata de valoarea inserata,
toate valorile retinute se deplaseaza catre dreapta cu o pozitie. #ie situatia initiala 2in care am
pus \%1&76%1&4:
?aloarea 1 trebuie inserata inaintea valorii A. Pentru aceasta, A se deplaseaza la dreapta cu o
pozitie si pe pozitia sa se insereaza valoarea 1.
?aloarea C trebuie inserata dupa A. Pentru aceasta nu este necesar sa efectuam nici o
deplasare.
Page
25
& 3 1 4
2
&[1] &[2]
&[3] &[4]
&[3] &[1] &[2]
&[3] &[4]
' 1 3 4
'[1] '[2]
'[3] '[4]
'[1] '[2] '[3]
'[4]
' 1 2 3
4
'[1] '[2] '[3]
'[4]
'[1] '[2] '[3]
'[4]
& 3 1 4
2
&[1] &[2] &[3]
&[4]
&[1] &[2] &[3]
&[4]

?aloarea 9 se insereaza pe pozitia ocupata de valoarea A. Pentru aceasta, valorile A si C se
deplaseaza la dreapta cu cate o pozitie.
6cum vectorul \ retine valorile sortate. Putem sa le afisam.
)ro*ramul +,,
Vinclude Qfstream.+T
int main24 8
fstream f,g'
int a%)&,b%)&,n,i,/,>'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
for2i70'iQn'i114 8
fTTa%i&' :
b%0&7a%0&'
for2i71'iQn'i114 8
/7i,1'
*+ile 2/T70 ZZ a%i&Qb%/&4
/,,'
for2>7i,1'>T7/11'>,,4
b%>11&7b%>&'
b%/11&7a%i&' :
for2i70'iQn'i114
gQQb%i&QQX X'
f.close24'
g.close24' :
Page
26
& 3 5
6 1
i=1
&[1] &[2] &[3]
&[4]
' 1 4

(=1
'[1] '[2] '[3]

)
*=1
)[1] )[2] )[3] )[4]
)[5] )[6] )[7]
1.Intercla.are
Se citesc / numere intregi sortate crescator 2descrescator4. De asemenea, se citesc alte
n numere intregi sortate crescator 2descrescator4.
Se cere sa se afiseze cele /5n valori in ordine crescatoare 2descrecatoare4.
Pentru rezolvarea problemei, exista un algoritm clasic, cel de interclasare,
foarte performant. Sa presupunem ca cele doua siruri de numere sortate se memoreaza in doua
variabile de tip vector A si B. Numerele sortate vor fi memorate intr,o alta variabila de tip
vector 2numita 04. .a fiecare pas se alege un numar care va fi memorat in 0 2cel care
urmeaza a fi adaugat in ordinea ceruta4.
;odul de alegere rezulta din exemplul urmator. Sa presupunem ca /1, n, si ca au
fost citite valorile:
Page
27
& 3 5 6
12
i=1
&[1] &[2]
&[3] &[4]
' 1 4

(=2
'[1] '[2]
'[3]
) 1
*=2
)[1] )[2] )[3] )[4]
)[5] )[6] )[7]
& 3 5
6 12
i=2
&[1] &[2]
&[3] &[4]
' 1 4

(=2
'[1] '[2]
'[3]
) 1 3
*=3
)[1] )[2] )[3] )[4]
)[5] )[6] )[7]
?ariabila # retine indicele componentei din A care va fi comparata la pasul urmator.
?ariabila > retine indicele componentei din B care va fi comaparata la pasul urmator. ?ariabila
k retine indicele componentei din 0 care va memora urmatorul numar.nitial, se compara
numarul retinut de A%1) cu cel retinut de B%1). (ste mai mic cel retinut de B%1).6cesta este
trecut in 0, > va retine 2, # ramane nemodificat, iar k va retine 2.
Se compara numarul retinut de A%1) cu cel retinut de B%2). (ste mai mic cel retinut de
A%1).6cesta este trecut in 0, > va ramane nemodificat, # retine 2, iar k retine ,.
Page
2
Se compara A%2) cu B%2). (ste mai mic B%2). 0%,) retine 1, > devine ,, k devine 1. Se
compara A%2) cu B%,). (ste mai mic A%2). 0%1) retine 3, k devine 3, iar # devine ,.
6lgoritmul continua in acest mod pana cand numerele retinute de una din variabilele A sau B
sunt copiate in 0. n continuare, se copiaza in 0 numerele neanalizate.
)ro*ramul +,,
Vinclude Qfstream.+T
int main24 8
fstream f,g'
int a%100&,b%100&,c%900&,m,n,i,/,>'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTm'
for2i70'iQm'i114 8
fTTa%i&' :
fTTn'
for2i70'iQn'i114 8
fTTb%i&' :
i7/7>70'
*+ile2iQm ZZ /Qn4
if2a%i&Qb%/&4
c%>11&7a%i11&'
else
c%>11&7b%/11&'
if 2iQm4
for2/7i'/Qm'/114
c%>11&7a%/&'
else
for2i7/'iQn'i114
c%>11&7b%i&'
for2i70'iQ>'i114
gQQc%i&QQX X'
f.close24'
g.close24' :
3.0autarea b#nara
Se citesc n numere intregi sortate crescator. De asemenea se citeste un numar intreg
nr. Sa se decida daca nr se gaseste in sirul celor n numere citite.
Si aceasta problema poate fi rezolvata intr,un mod elementar. Nu avem decat sa
comparam, pa rand nr cu toate numerele citite. 6sa este, dar exista un algoritm mai rapid.
Page
2!
& 3 5 6
12
&[1] &[2] &[3]
&[4]
*=2
+i=1 +,=4
6cesta este algoritmul de cautare binara si tine cont de faptul ca numerele citite sunt sortate
crecator. deea de la care se porneste este simpla: cautarea se efectueaza intre numerele
retinute de componente de indice retinute de doua variabile l# si l. 2initial l#1 si l.n4.
#iind date l# si l. procedam astfel:
,se calculeaza indicele componentei din mi/loc, in cazul in care n este impar, sau a uneia din
cele doua plasate in mi/loc, in cazul in care n este par 2k@l#5l.A d#! 24'
, apar trei posibilitati:
,valoarea retinuta de componenta de indice calculat este egala cu nr 2caz in care cautarea
se termina cu succes4'
,valoarea retinuta de componenta de indice calculat este mai mica decat nr 2caz in care
numarul va fi cautat intre componentele de indice l#k51 si l.'
,valoarea retinuta de componenta de indice calculat este mai mare decat nr 2caz in care
numarul va fi cautat intre componentele de indice l# si l.k(14.
0autarea se termina cand numarul a fost identificat sau cand l#Kl. 2cautare fara
succes4.
E+e/-lu.
Se citesc numerele de mai /os si nr12. nitial, l#1, l.1. 6vem k@#51A d#! 22.
6%9&7@Q197nr.
Deci l#k51,' l.1, k@l#5l.A d#! 2,.
0autarea se face intre componentele de indice ,'1, iar comparatia se face intre nr si
A%,).
Page
30
Vinclude Qfstream.+T
void main24 8
fstream f,g'
int a%100&,n,i,li,ls,>,nr,gasit'
f.open2Xvector.inX, ios::in4'
g.open2Xvector.outX, ios::out4'
fTTn'
for2i70'iQn'i114 8
fTTa%i&' :
fTTnr'
li70'
ls7n,1'
gasit70'
do 8
>72li1ls4R9'
if2a%>&77nr4 8
gQQXNumarul a fost gasit pe pozitia
XQQ>11' gasit71':
else
if 2a%>&Qnr4 li7>11'
else ls7>,1' :
*+ile 2liQ7ls ZZ Wgasit4'
if 2liTls4
gQQXNumarul nu a fost gasitWX'
f.close24'
g.close24' :
)ro*ramul +,,
V.)robleme
)roblema
#iind dat un vector v cu n componente numere intregi, sa se afiseze elementele pare din
vector aflate pe pozitii divizibile cu trei.
(xemplu : pentru n7B si numerele 1C, 9], AB, 19A, @C, C] se va afisa AB,C]
VincludeQiostream.+T
using namespace std'
int main24 8
int n,v%@0&,i'
coutQQXn7X'
cinTTn'
for2i71'iQ7n'i114 8
ccoutQQXv%XQQiQQX&7X'
cinTTv%i&' :
for2i7A'iQ7n'i7i1A4
if2v%i&^97704
coutQQv%i&QQX X'
return 0'
:
)roblema #
Page
31
Scrieti un program care sa determine cate elemente ale unui vector cu n componente
numere naturale, sunt prime cu un numar x , unde n si x sunt doua numere naturale citite de la
tastatura.
(xemplu: n710 si x79 numerele 9A,1B,_0,),@,_,9],91,B,1) se va afisa B
VincludeQiostream.+T
using namespace std'
int cmmdc2int x,int 34 8
*+ile2xW734 8
if2xT34
x7x,3'
else
373,x' :
return x' :
int main24 8
int n,x,i,v%A0&,>'
coutQQXn7X'
cinTTn'
coutQQXx7X'
cinTTx'
>70'
for2i71'iQ7n'i114 8
coutQQXv%XQQiQQX&7X'
cinTTv%i&'
if2cmmdc2x,v%i&47714
>11'
:
coutQQ>'
return 0'
:
)roblema $
Sa se calculeze media aritmetica a numerelor negative si media armonica a elementelor
strict positive dintr,un vector de numere intregi. (xemplu: n7@ si vectorul v72 1,,@,0,,],B4 se
vor obtine m
a
7,B,@ si m
+
7 0,9]@
VincludeQiostream.+T
using namespace std'
float m1,m9'
int >1,>9'
void citire2int v%10&,int Zn4 8
for2int i71'iQ7n'i114 8
coutQQXv%XQQiQQX&7X'
cinTTv%i&' : :
int main248
int v%10&,n'
coutQQXn7X'
cinTTn'
citire2v,n4'
for2int i71'iQ7n'i114
if2v%i&Q04 8
m17m11v%i&'
>111' :
else
if2v%i&T04 8
m97m912float41Rv%i&'
>911' :
m17m1R>1'
m97m9R>9'
coutQQXmedia aritmetica esteXQQm1QQendl'
coutQQXmedia armonica esteXQQm9QQendl'
return 0' :
Page
32
)roblema %
Scrie5i programul 0R011 care cite$te de la tastatura un numr natural n 2nQ1004 si un sir cu
n numere Kntregi din intervalul %100 ')))& ' programul construie$te un sir de numere rezultat
prin Knlocuirea fiecrui numr din $irul citit cu numrul ob5inut prin intersc+imbarea cifrei
unitatilor cu cifra sutelor. Numerele din noul sir se vor afi$a pe ecran separate printr,un singur
spa5iu. De exemplu , pentru n7A si $irul 19A , )0C , @00 , se afi$eaz A91 , C0) , @
VincludeQiostream.+T
int main24 8
int n,i,o,v%90&,c'
coutQQXn7X'
cinTTn'
for2i71'iQ7n'i114 8
coutQQXv%XQQiQQX&7X'
cinTTv%i&' :
for2i71'iQ7n'i1148
o70'
c7v%i&^10'
o7oS101c'
v%i&7v%i&R10'
c7v%i&^10'
o7oS101c'
v%i&7v%i&R10'
o7oS101v%i&'
v%i&7o'
coutQQv%i&QQendl' :
return 0'
:
)roblema &
Se considera un vector cu n 21Q nQ1004 componente numere naturale. Sa se determine
componentele vectorului cu cei mai mul5i divizori. Se va folosi un subprogram pentru citirea
vectorului si unul pentru calculul numrului de divizori ai unui numr.
VincludeQiostream.+T
using namespace std'
int n, a%100&'
void citire 24 8
int i'
for2i71'iQ7n'i114
cinTTa%i&' :
int div2int x4 8
int i, nr70'
for2i79'iQ7x'i114
if2x^i7704
nr11'
return nr' :
int main24 8
int i,max70'
coutQQXn7X'
cinTTn'
citire24'
for2i71'iQ7n'i114
if2div2a%i&4Tmax4
max7div2a%i&4'
for2i71'iQ7n'i114
if2div2a%i&477max4
coutQQ a%i&QQX X'
return 0'
:
Page
33
)roblema -
Se consider un $ir de n numere Kntregi. S se verifice dac o valoare x, citit de la
tastatur, apare sau nu Kn vector. Gn caz c se afl printre valorile din vector se va preciza $i Kn
ce pozi5ie apare. Gn caz contrar se va afi$a mesa/ul N!.
VincludeQiostream.+T
using namespace std'
int main24 8
int n, v%100&, i, x, p70'
coutQQXn7X' cinTTn'
coutQQXx7X' cinTTx'
for2i71'iQ7n'i1148
cinTTv%i&'
if2v%i&77x4p7i' :
if2p7704
coutQQXnuX'
else
coutQQ X?aloarea XQQ xQQ X apare
in pozitia XQQ p'
return 0' :
VI.)robleme celebre
)roblema : +ifru secret
"otul a Knceput Kn anul 1B)], cNnd la \astilia a fost Kntemni5at un tNnr necunoscut cu
fa5a acoperit cu o masc de fier, prizonier al guvernului francez. Necunoscutul era c+iar
fratele lui .udovic al <?,lea $i, pe deasupra, pasionat de informaticW
Gntr,o depe$ adresat de rege ctre \azeries, .udovic al <?,lea a scris pe mai multe
rNnduri, numere Kntregi nenule, cu cel mult dou cifre. Din fiecare rNnd, \azeries trebuia s
determine secven5a de elemente alturate avNnd produsul elementelor maxim. 0ifrul secret era
cel mai mic numr natural care se poate forma din toate cifrele numerelor din secven5ele
determinate de pe fiecare rNnd Kn parte.
Dac \azeries nu reu$ea s gseasc cifrul, ar fi fost Kntemni5at. De aceea el a apelat la
a/utorul -mului cu ;asc de #ierW -mul cu ;asca de #ier ar fi putut fi eliberat dac ar fi
gsit 0ifrul al lui .udovic al <?,lea. 6/uta5i,l pe -mul cu ;asca de #ier s gseasc 0ifrul
secret al lui .udovic al <?,lea.
Datele de #ntrare
Se citesc din fi$ierul text 0#*ru.#n Kn urmtorul format:
Pe fiecare linie a fi$ierului sunt scrise n51 numere astfel :
primul numr de pe fiecare linie # reprezint numrul de elemente care se vor
citi de pe linia #L
urmtoarele n numere de pe linia # sunt Kntregi nenuli cu cel mult dou cifre.
Datele de #eM#re
Page
34
Pe prima linie a fi$ierului text Ba.t#l#a.out se scrie un singur numr reprezentNnd cel mai
mic numr natural care se poate forma din toate cifrele numerelor din secven5ele determinate
de pe fiecare rNnd Kn parte.
Re.tr#cN## M# -rec#EOr#:
Pe fiecare linie din fi$ierul de intrare sunt scrise cel mult 91 numere Kntregi nenule,
cuprinse Kntre ,)) $i )).
#i$ierul de intrare are cel mult @0000 linii.
#iecare linie con5ine cel pu5in un numr natural nenul.
(xemplu:
0ifru.in \astilia.out (xplicatii
, 2 , 33
3 1 (11 (1 (11 2
11122,33
De pe prima linie a fi$ierului de
intrare se cite$te numrul
n, . 6poi se citesc pe rNnd A
numere Kntregi : 9 ' A $i @@.
Secven5a de elemente alturate
avNnd produsul elementelor
maxim este format din toate
cele A numere citite.
De pe cea de a doua linie a
fi$ierului de intrare se cite$te
numrul n3 . 6poi se citesc pe
rNnd @ numere Kntregi : 1 ' ,11'
,1' ,11 $i 9. Secven5a de
elemente alturate avNnd
produsul elementelor maxim
este format din numerele
,1' ,11 $i 9.
0el mai mic numr natural care
se poate forma cu cifrele
numerelor din cele dou
secven5e determinate din cele
dou linii ale fi$ierului de
intrare este numrul
11199A@@
VincludeQiostreamT
VincludeQconio.+T
VincludeQfstream.+T
using namespace std'
long long
n,i,a%1000000&,maxx,s,t1,t9,/,prod,cif%1000&'
int main24 8
ifstream f2Xbastilia.inX4'
ofstream g2Xbastilia.outX4'
:
:
:
RRcoutQQmaxx'
RRcoutQQXt17XQQt1QQXt97XQQt9QQendl'
RRcate cifre de fiecare fel contine secventa
for2i7t1'iQ7t9'i114
8
if2a%i&Q04
Page
35
fTTn'
do 8
for2i71'iQ7n'i114 8
fTTa%i&'
RRcoutQQa%i&QQX X'
:
RRcautam secventa cu produsul cel mai mare
maxx70'
prod71'
for2i71'iQ7n'i114
8
prod7a%i&'
for2/7i11'/Q7n'/114
8
prodS7a%/&'
if2prodTmaxx48
maxx7prod'
RRretin si secventa
t17i'
t97/'
a%i&7,a%i&'
*+ile2a%i&4
8
cif%a%i&^10&11'
a%i&7a%i&R10'
:
:
:*+ile2fTTn4'
RS
for2i70'iQ7)'i114
coutQQcif%i&QQX X'
SR
for2i70'iQ7)'i114
if2cif%i&4
for2/71'/Q7cif%i&'/114
gQQi'
return 0'
:
)roblema #: +od
.a o banc se afl n seifuri, ale cror coduri de acces secrete sunt numere naturale 2s
notm cu s7s
1
, s
9
, ..., s
n.
$irul codurilor de acces4. Datorit producerii unui incident, au fost
fcute publice ni$te coduri asemntoare cu codurile secrete 2s notm cu c7 c
1
, c
9
,.., c
p
$irul
codurilor asemntoare4. Din motive de cre$tere a securit5ii seifurilor, se decide modificarea
codurilor s
1
, s
9
, ..., s
n
, utilizNnd codurile c
1
, c
9
, ..., c
p
, Kn modul urmtor.
Pentru fiecare cod s
i
se stabile$te un cod din $irul c
>
denumit cod a.oc#at, astfel:
L codul s
i
se poate asocia cu codul c
>
dac cel pu5in /umtate dintre cifrele lui s
i
sunt
con5inute de c
>
, Kn cazul Kn care numrul de cifre al codului s
i
este par $i cel pu5in /umtate
11 din cifrele lui s
i
sunt con5inute de c
>
, Kn cazul Kn care numrul de cifre ale codului s
i
este impar'
L dac pentru un cod s
i
exist mai multe coduri ce pot fi asociate cu el din $irul c, se va
alege codul care con5ine cel mai mare numr de cifre comune cu s
i
'
L dac exist mai multe coduri c
>
care au acela$i numr maxim de cifre comune cu codul s
i
,
se va alege primul dintre ele 2cel cu indicele cel mai mic4.
0odul s
i
se transform Kntr,un nou numr natural t
i
, ob5inut astfel:
L
se elimin din s
i
toate cifrele comune cu c
>
ales'
L
se formeaz cel mai mare numr cu toate cifrele rmase dup eliminare $i acesta va fi t
i
'
dac t
i
ob5inut este mai mic decNt 19AC@, se adun cu numrul 19AC@.
0er#nNO
Page
36
Scrie5i un program care determin $irul de coduri t
1
, t
9
, ..., t
n
, ob5inut prin transformarea
codurilor ini5iale s
1
, s
9
, ..., s
n ,
pe baza $irului c
1
, c
9
, ..., c
p.
(ate de intrare
#i$ierul de intrare cod.#n con5ine pe prima linie numerele n $i p separate printr,un spa5iu, pe a
doua linie n numere ce reprezint codurile din $irul s $i pe a treia linie p numere ce reprezint
codurile din $irul c.
(ate de ieire
#i$ierul de ie$ire cod.out con5ine pe o singur linie $irul de numere t
1
t
9
... t
n
separate Kntre ele
prin cNte un spa5iu.
Restricii i precizri
1 Q n, p 100
0odurile din $irul s sunt distincte Kntre ele $i fiecare cod con5ine cel pu5in @ cifre distincte.
19AC@ s
i
, c
>
9 100 000 000, 1 i n,1 > p
(xemple
cod.in cod.out
4 5
134925 32960 18542 195633
305285 3067583 20375 29785 213198
12399 12441 12386 12436
VincludeQiostreamT
VincludeQconio.+T
VincludeQfstreamT
VincludeQtime.+T
using namespace std'
ifstream f2Xcod.inX4'
ofstream g2Xcod.outX4'
long int s,si%10&,c/%10&,nr'
int n,p,t0,t,ind,cif%10&,i,/,v%10&,>'
cloc>Mt t1,t9'
int main24
8
t17cloc>24'
fTTnTTp'
RRcitesc numerele in vectori
for2i71'iQ7n'i114
fTTsi%i&'
for2/71'/Q7p'/114
fTTc/%/&'
f.close24'
for2i71'iQ7n'i114
8
s7si%i&'
RRce cifre are s
8
if2cif%nr^10&W70 ZZ v%nr^10&7704
8
t11'
RRca sa nu mai iau in considerare acea cifra
v%nr^10&71'
:
nr7nrR10'
:
RRcoutQQXt7XQQtQQendl'
if2tTt04
8
t07t'
ind7/'
:
:
RRcoutQQind'
RRexit204'
RRelimin cifrele comune dintre si si c/
nr7c/%ind&'
RRcoutQQind'
*+ile2nr4
8
RRelimin cifrele comune din si
Page
37
for2t70'tQ7)'t114
8
cif%t&70'
v%t&70'
:
*+ile2s4
8
cif%s^10&11'
s7sR10'
:
RRce cifre are fiecare c/
t070'
t70'
for2/71'/Q7p'/114
8
nr7c/%/&'
t70'
for2>70'>Q7)'>114
v%>&70'
t70'
*+ile2nr4
cif%nr^10&70'
nr7nrR10'
:
s70'
RRscriu nr crescator
for2t7)'tT70't,,4
if2cif%t&4
s7sS101t'
if2sQ19AC@4
s7s119AC@'
RRcoutQQsQQX X'
gQQsQQX X'
:
g.close24'
t97cloc>24'
coutQQXIn;etoda a durat XQQ2t9,t14QQX batai
de ceas intern ,,T aproximativ XQQ2float42t9,
t14R2float40.`M"0`QQX secunde WInInX'
return 0'
:
)roblema $ : Venit
0ristian este un tNnr Kntreprinztor care de5ine o firm de distribu5ie produse de
papetrie. 6 +otrNt s ofere promo5ii la unele produse pe o perioad de n zile. Dorind s vad
dac aceste promo5ii sunt benefice firmei el s,a gNndit s,$i noteze Kntr,un /urnal la sfNr$itul
fiecrei zile profitul sau pierderea pe ziua respectiv. 6/uta5i,l pe 0ristian s afle care a fost
profitul maxim ob5inut Kntr,un numr de zile consecutive, precum $i care,ar fi cea mai mic
pierdere Kn cazul Kn care nu a ob5inut nicio zi profit.
Date de #ntrare.
#i$ierul text ?(N".N con5ine pe prima linie un numr natural n, reprezentNnd numrul
de zile ale promo5iei. Pe fiecare din urmtoarele n linii ale fi$ierului se afl profitul2numr
Kntreg pozitivQA04 sau pierderea2numr Kntreg negativT,A04.
Date de #eM#re.
#i$ierul text ?(N".-!" va con5ine profitul maxim, respectiv cea mai mic pierdere.
E+e/-le.
?(N".N ?(N".-!"
Page
3
6
-1
4
2
-3
2
-1
5
-4
-1
-2
-3
-6
6 -1

Re.tr#cN##. A0 1 n
Vinclude Qfstream.+T
int main24 8
int a%100&,i,n,s70,max70,>70,maxneg7,A1'
ifstream f2Xvenit.inX4'
ofstream g2Xvenit.outX4'
fTTn'
for2i71'iQ7n'i114 fTTa%i&'
for2i71'iQ7n'i114
if2a%i&T04 s7s1a%i&'
else 8
if 2maxQs4 8max7s's70'
:
>11'
if2maxnegQa%i&4 maxneg7a%i&'
:
if 2maxQs4
max7s'
if 2>77n4
gQQmaxneg'
else
gQQmax'
return 0'
:
)roblema c. ' +autarea binara
Page
3!
privatevoid button/+lic01object sender,
!ventAr*s e2
8
n 7 int.Parse2text\ox1."ext4'
ls 7 n'
for 2i 7 1' i Q7 n' i114
8
string name1 7 XcasetaMX 1 i."oString2X00X4'
txt1%i& 7 ne*"ext\ox24'
txt1%i&.Name 7 name1'
txt1%i&..ocation 7 ne*Point2i S B0, B04'
txt1%i&.Size 7 ne*Size2B0, C04'
panel1.0ontrols.6dd2txt1%i&4'
string name9 7 XpozitiaMX 1 i."oString2X00X4'
txt9%i& 7 ne*"ext\ox24'
txt9%i&.Name 7 name9'
txt9%i&..ocation 7 ne*Point2i S B0, ]04'
txt9%i&.Size 7 ne*Size2B0, C04'
txt9%i&."ext 7 i."oString24'
txt9%i&.(nabled 7 false'
panel1.0ontrols.6dd2txt9%i&4'
:
labelA.?isible 7 true'
label@.?isible 7 true'
labelB.?isible 7 true'
button9.?isible 7 true'
a%i& 7 a%i& , a%i 1 1&'
a%i 1 1& 7 a%i& 1 a%i 1 1&'
a%i& 7 a%i 1 1& , a%i&'
gasit 7 1'
:
: *+ile 2gasit 77 14'
for 2i 7 1' i Q7 n' i114
8
txt1%i&."ext 7 a%i&."oString24'
:
;essage\ox.S+o*2X?ectorul a fost sortat
crescator WX, X;essageX4'
buttonA.(nabled 7 false'
panel9.?isible 7 true'
:
private void button%/+lic01object sender,
!ventAr*s e2
8
nr7int.Parse2text\ox9."ext4'
buttonB.?isible7true'
gasit 7 0'
buttonC.(nabled 7 false'
text\ox1.(nabled 7 false'
button1.(nabled 7 false'
:
privatevoid button#/+lic01object sender,
!ventAr*s e2
8
for 2int i 7 1' i Q7 n' i114
8
a%i& 7 int.Parse2txt1%i&."ext4'
txt1%i&.(nabled 7 false'
:
buttonA.?isible 7 true'
button9.(nabled 7 false'
:
privatevoid button$/+lic01object sender,
!ventAr*s e2
8
RRsorteaza crescator
do
8
gasit 7 0'
for 2i 7 1' i Q7 n , 1' i114
if 2a%i& T a%i 1 1&4
8
panelA.?isible 7 true'
> 7 2li 1 ls4 R 9'
txt9%li&."ext 7 Xli7X 1 li'
txt9%ls&."ext 7 Xls7X 1 ls'
if2> 77 ls ZZ >77li4
txt9%>&."ext 7Xli7ls7>7X 1 >'
else
if2>77ls4
txt9%>&."ext 7 Xls7>7X 1 >'
else
if 2>77li4
txt9%>&."ext 7 Xli7>7X 1 >'
else
txt9%>&."ext 7 X>7X 1 >'
txt1%>&.\ac>0olor 7 0olor.Eed'
it11'
cev 7 ric+"ext\ox1."ext'
ric+"ext\ox1."ext 7 cev 1 X.a iteratia X 1 it
1 X avem li7X 1 li 1 X ls7X 1 ls 1 X si >7X 1 >
1 XInX '
if 2a%>& 77 nr4
8
;essage\ox.S+o*2X(lementul a fost gasit la
Page
40
text\ox9.(nabled 7 false'
:
privatevoid button&/+lic01object sender,
!ventAr*s e2
8
if 2li T ls4
8
if 2gasit 77 04
8
;essage\ox.S+o*2X(lementul nu a fost gasit
WX, X;essageX4'
cev 7 ric+"ext\ox1."ext'
ric+"ext\ox1."ext 7 cev 1 X(lementul nu a
fost gasitWX'
:
buttonB.(nabled 7 false'
button@.?isible 7 true'
:
else
8
if 2>W704
8
txt9%lii&."ext 7 lii."oString24'
txt9%lss&."ext 7 lss."oString24'
txt9%>&."ext 7 >."oString24'
txt1%>&.\ac>0olor 7 0olor.a+ite'
:
private void button-/+lic01object sender,
!ventAr*s e2
8
ric+"ext\ox1."ext 7 XX'
panelA.?isible 7 false'
button@.?isible 7 false'
panel9.?isible 7 false'
text\ox9."ext 7 XX'
text\ox9.(nabled 7 true'
buttonB.?isible 7 false'
buttonB.(nabled 7 true'
buttonC.(nabled 7 true'
buttonA.(nabled 7 true'
buttonA.?isible 7 false'
button9.(nabled 7 true'
button9.?isible 7 false'
for 2i 7 1' i Q7 n' i114
8
txt1%i&.Dispose24'
pozitia X 1 > 1 X WX, X;essageX4'
cev 7 ric+"ext\ox1."ext'
ric+"ext\ox1."ext 7 cev 1 X(lementul a fost
gasit la pozitia X 1 > 1 X WX'
buttonB.(nabled 7 false'
button@.?isible 7 true'
:
else
8
if 2nr T a%>&4
8
lii 7 li'
lss 7 ls'
li 7 > 1 1'
:
else
8
lii 7 li'
lss 7 ls'
ls 7 > , 1'
:
:
:
:
txt9%i&.Dispose24'
a%i& 7 0'
:
labelB.?isible 7 false'
label@.?isible 7 false'
labelA.?isible 7 false'
button1.(nabled 7 true'
text\ox1.(nabled 7 true'
text\ox1."ext 7 XX'
n 7 0'
li 7 1'
ls 7 n'
gasit 7 0'
lii 7 0'
lss 7 0'
cev 7 XX'
nr 7 0'
> 7 0'
:
Page
41
Page
42
+oncluzie:
In concluzie, in limbajul +,, am ales tema 34ablouri
unidimensionale5 deoarece fa de celelalte lecii studiate la
orele de informatic vectorii mi'au atras cel mai mult atenia
i mi s'au prut cei mai interesani.
(e asemenea am vrut s 6mi aprofundez
cunotinele despre toria vectorilor pentru e"amenul de
7acalaureat.
Page
43
7iblio*rafie
In*or/at#ca. Manual -entru cla.a a IP(a
Autor : Tudor Sor#n
In*or/at#ca. Manual -entru cla.a a P(a
Autor @#A: Mar#nel Serban' E/anuela 0erc6eE
In*or/at#ca. Manual -entru cla.a a PI(a
Autor@#A: Mar#ana M#lo.e.cu
JJJ.c..utt.ro
6tt-:QQJJJ.ace.tu#a.#.roQroQ#nde+.6t/
Page
44

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