Sunteți pe pagina 1din 22

SUBIECTE ATESTAT INFORMATIC

PROGRAMARE
INTENSIV INFORMATIC
Subiectul nr.1
Fiierul numr.in conine pe prima linie un numr natural n, format din cel mult 8 cifre iar
cel puin o cifr este impar.
Se consider subprogramele:
S1 cu doi parametri, a i b, prin intermediul crora primete dou numere naturale
formate fiecare din cel mult 8 cifre; subprogramul determin modificarea coninutului
celor doi parametri a i b prin eliminarea cifrei unitilor numrului coninut de parametrul
a, i mutarea ei la sfritul numrului coninut de parametrul b, returnnd prin intermediul
parametrilor a i b noile numere obinute. De exemplu, pentru valorile 21134 i 61 ale
parametrilor a i b, n urma executrii subprogramului S1 valorile returnate prin
intermediul parametrilor vor fi 2113 i 614.
S2 cu un singur parametru, k, prin intermediul cruia primete un numr natural ( k>1);
subprogramul returneaz numrul natural obinut prin eliminarea fiecrei cifre pare din
numrul k. De exemplu, pentru k=12345, subprogramul S2 va returna 135, iar pentru
k=177 subprogramul S2 va returna 177.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care s citeasc din fiierul numr.in
numrul n, iar apoi, folosind apeluri utile ale subprogramelor S1 i S2, s afieze pe ecran
mesajul DA dac numrul citit este un palindrom format doar din cifre impare. n caz contrar,
va afia mesajul NU.
Exemple:

Dac fiierul numr.in are coninutul alturat, programul va afia


pe ecran mesajul NU.

83109327

Dac fiierul numr.in are coninutul alturat, programul va afia


pe ecran mesajul DA.

3571753

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("numar.in");
void S1(long a, long &b)
{
int k;
k=a%10;

b=b*10+k;
}
int S2(int k)
{
int m=0;
while(k>0)
{
if(k%2==0)
k=k/10;
else
{
m=m*10+k%10;
k=k/10;
}
}
k=0;
while(m>0)
{
k=k*10+m%10;
m=m/10;
}
if(k%10==0) k=k/10;
return k;
}
int main()
{
long a;long b=0;
f>>a;
int k;
long m=a;
while(m>0)
{
S1(m,b);
m=m/10;
}

if(a==b)
if (S2(a)==a) cout<<"DA";
else cout<<"NU";
else cout<<"NU";
}
Subiectul nr.2
n fiierul date.in se gsesc pe o singur linie, separate prin cte un spaiu, mai multe
numere naturale din intervalul nchis [10,106-1], reprezentnd un ir de numere naturale.
Se consider subprogramele:

S1 cu un singur parametru, k, prin intermediul cruia primete un numr natural nenul cu


cel mult 6 cifre, k>9; subprogramul returneaz numrul obinut prin eliminarea ultimei
cifre a valorii parametrului k;
Exemplu. Pentru k=12345 subprogramul returneaz valoarea 1234.

S2 cu un singur parametru, k, prin intermediul cruia primete un numr natural nenul cu


cel mult 6 cifre, k>9; subprogramul returneaz valoarea 1 dac valoarea parametrului k
este un numr prim, altfel returneaz valoarea 0.

Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care citete irul de numere din fiierul
date.in i nlocuiete fiecare numr x din ir cu cel mai mare prefix numr prim al lui su.
Dac nu exist un astfel de prefix, numrul x va fi nlocuit n ir cu valoarea 0. Numerele din
irul obinut se vor afia pe ecran, pe prima linie, separate prin cte un spaiu. Se vor folosi
apeluri utile ale subprogramelor S1 i S2 pentru determinarea prefixelor numere prime.
Exemplu. Dac fiierul date.in are coninutul
alturat, programul va afia numerele urmtoare:
1373 0 22349 2

#include <iostream>
#include <fstream>
using namespace std;
int s1 (long k)
{
return k/10;
}
int s2 (long k)
{
int m=1;
for (int i=2; i<k/2; i++)

13736 12345 22349 226

if(k%i==0)
{
m=0;
break;
}
return m;
}
ifstream f("date.in");
int main()
{
long v[100], n;
int i=0;
while(f>>v[i])
{
i++;
}
n=i;
for(i=0;i<=n;i++)
{
while (v[i]>0)
{
if (s2(v[i])==1) { cout<< v[i]<<" "; break;}
else
v[i]=s1(v[i]);
}
}
}
Subiectul nr.3
n fiierul date.in se gsesc pe o singur linie, separate prin cte un spaiu, mai multe
numere naturale din intervalul nchis [10,106-1].
Se consider subprogramele:

S1 cu un singur parametru, k, prin intermediul cruia primete un numr natural nenul cu


cel mult 6 cifre (k>9); subprogramul returneaz cea mai mare cifr a valorii parametrului
k;
Exemplu. Pentru k=125353 subprogramul returneaz valoarea 5.

S2 cu doi parametri, k i c. Prin intermediul parametrului k primete un numr natural


nenul cu cel mult 6 cifre, k>9, iar prin parametrul c primete o cifr. Subprogramul
determin eliminarea tuturor apariiilor cifrei c n numrul k i returneaz numrul rezultat.
Dac numrul k nu conine cifra c atunci subprogramul va returna valoarea lui k
nemodificat.
Exemplu. Pentru k=125353 i cifra c=3 subprogramul returneaz valoarea 1255, iar
pentru cifra c=7 subprogramul returneaz valoarea 125353.

Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care s determine pentru fiecare numr x,
citit din fiierul date.in, cel mai mare numr natural care se poate construi din cifrele
distincte ale acestuia, folosind apeluri utile ale subprogramelor S1 i S2. Numerele construite
se vor afia pe ecran, n linie, separate prin cte un spaiu, n ordinea n care au fost construite.
Exemplu. Dac fiierul date.inare coninutul
alturat, programul va afia numerele urmtoare:
7631 54321 9432 2

#include <iostream>
#include <fstream>
using namespace std;
int S1(int k)
{
int m=0;
while (k>0)
{
if(k%10>m) m=k%10;
k=k/10;
}
return m;
}
int S2(int k, int c)
{
int n=0,j=0;
while (k>0)
{
if(k%10!=c) n=n*10+k%10;
k=k/10;
}
while (n>0)
{
j=j*10+n%10;
n=n/10;
}
return j;
}
ifstream f("date.in");
int main ()
{
int v[100],n,i=0,k,m=0;
while(f>>v[i])
{
i++;
}
n=i;
for(i=0;i<n;i++)
{

13736 12345 22349 222

while(v[i]>0)
{
k=S1(v[i]);
m=m*10+k;
v[i]=S2(v[i],k);
}
cout<<m<<" ";
m=0;
}
Subiectul nr. 4

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 4
cifre, separate prin cte un spaiu.
Se consider subprogramele:
S1 cu un singur parametru, k, prin intermediul cruia primete un numr natural nenul,
1<k<10000; subprogramul returneaz cel mai mare numr natural ptrat perfect mai mic
sau egal cu k;
S2 cu trei parametri, care primete prin intermediul parametrilor:
p i q , dou numere naturale (1p<q100);
v,un tablou unidimensional format din cel mult 100 componente, cu indicii de la
1, ce memoreaz numere naturale, cu cel mult 4 cifre fiecare.
Subprogramul determin ordonarea cresctoare doar a secvenei din vector format din
valorile componentelor v[p], v[p+1], v[p+2],,v[q], restul componentelor tabloului
nemodificndu-se, apoi returneaz tabloul ordonat prin intermediul aceluiai parametru.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care s citeasc din fiierul date.in
numrul n i cele n numere naturale, iar apoi, folosind apeluri utile ale subprogramelor S1 i
S2, s determine i s afieze pe prima linie a ecranului toate numerele ptrate perfecte care
se afl pe a doua linie a fiierului date.in, n ordinea cresctoare a valorilor lor, separate
prin cte un spaiu. Dac nu exist astfel de numere se va afia mesajul NU.
Exemplu. Dac fiierul date.inare coninutul alturat,
programul va afia pe ecran numerele urmtoare:
9 49 121
#include <iostream>
#include <fstream>
using namespace std;
int S1(int k)
{
for(int j=k;j>=4;j--)
for(int i=2; i<=k/2; i++)
if(i*i==j) return j;
}
void S2(int p, int q, int v[100])

8
12 121 9 3 28 3 49 24

{
int m,gasit;
do
{
gasit=0;
for( int i=p; i<=q; i++)
if (v[i]>v[i+1])
{
m=v[i];
v[i]=v[i+1];
v[i+1]=m;
gasit=1;
}
} while (gasit);
}
ifstream f("date.in");
int main()
{
int v[100],i,j=0,m,a[100],n;
f>>n;
for (i=0; i<n; i++)
{
f>>v[i];
if(v[i]==S1(v[i]))
{
a[j]=v[i];
j++;
}
}
m=j ;
if(m==0) cout<<"NU";
else
{
S2(0,m,a);
for (int i=0; i<m; i++)
cout<<a[i]<<" ";
}
}
Subiectul nr.5

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 6
cifre, separate prin cte un spaiu.
Se consider subprogramele:
S1 cu un singur parametru, k, prin intermediul cruia primete un numr natural nenul,
1<k<10000; subprogramul returneaz suma cifrelor numrului primit prin parametrul k;
S2 cu trei parametri, care primete prin intermediul parametrilor:
n,un numr natural (1n100);
p,un numr natural (1p<n);
v,un tablou unidimensional format din cel mult 100 elemente, cu indicii de la 1,
ce memoreaz numere naturale, cu cel mult 6 cifre fiecare.
Subprogramul determin modificarea coninutului tabloului prin rearanjarea elementelor
tabloului situate pe poziiile p,p+1,p+2,...,n, cresctor dup suma cifrelor fiecrui
element, ca n exemplu.
Exemplu.
Pentru
n=8,
p=4
i
tabloul
cu
elementele
v=(12,121,9,3,28,3,49,24), dup apelul subprogramului S2 coninutul tabloului
poate fi: v=(12,121,9,3,3,24,28,49) deoarece sumele cifrelor elementelor sunt, n
aceast ordine: 3,4,9,3,3,6,10,13.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care s citeasc din fiierul date.in numrul
n i cele n numere naturale, iar apoi, folosind apeluri utile ale subprogramelor S1 i S2,
aranjeaz cele n numere citite n ordinea cresctoare a sumei cifrelor fiecruia, apoi le
afieaz pe ecran, n linie, separate prin cte un spaiu.
Exemplu. Dac fiierul date.inare coninutul alturat,
programul poate afia pe ecran numerele astfel:

8
12 121 9 3 28 3 49 24

12 3 3 121 24 9 28 49

Subiectul nr.6

Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 4
cifre, reprezentnd un ir s de numere. Numerele din fiier sunt separate prin cte un spaiu.
Se consider subprogramele:
S1 cu doi parametri, x i y, prin intermediul crora primete dou numere naturale nenule.
Subprogramul returneaz cea mai mare valoare dintre valorile primite prin intermediul
parametrilor x i y;
S2 cu patru parametri, care primete prin intermediul parametrilor:
v,un tablou unidimensional format din cel mult 100 componente, cu indicii de la
1, ce memoreaz numere naturale cu cel mult 4 cifre fiecare;
n, numrul de elemente ale tabloului;
k, un numr natural kn;
x, un numr natural de cel mult patru cifre.
Subprogramul insereaz n tabloul v valoarea coninut de parametru x pe poziia k din
tablou, i apoi, returneaz tabloul modificat prin intermediul aceluiai parametru i numrul
modificat de elemente prin intermediul parametrului n.

Cerine:
a Scriei definiia complet a subprogramului S1;
b Scriei definiia complet a subprogramului S2;
c S se scrie un program Pascal/C/C++ care citete din fiierul date.in numrul n
i irul s de numere, iar apoi, folosind apeluri utile ale subprogramelor S1 i S2, modific
irul insernd dup fiecare numr s[p] din ir un numr reprezentnd cea mai mare valoare
dintre cele situate n ir pe poziiile 1,2,...,p (1pn). Numerele din irul modificat se vor afia
n fiierul date.out, n prima linie, separate prin cte un spaiu.
Exemplu. Dac fiierul date.inare coninutul alturat, programul va
afia n date.out numerele urmtoare:

4
10 2 14 9

10 10 2 10 14 14 9 14

Subiectul nr.7
Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 4
cifre, separate prin cte un spaiu.
Se consider subprogramele:

S1 cu patru parametri (v,n,m,poz), care primete prin intermediul parametrilor:


v,un tablou unidimensional format din cel mult 100 componente, cu indicii de la
1, ce memoreaz numere naturale cu cel mult 4 cifre fiecare;
n, numrul de elemente ale tabloului;
Subprogramul furnizeaz prin parametrul m valoarea elementului maxim din tablou i prin
parametrul poz poziia primei apariii a valorii maxime memorate de elementele tabloului.

S2 cu doi parametri, care primete prin intermediul parametrilor:


v,un tablou unidimensional format din cel mult 100 componente, cu indicii de la
1, ce memoreaz numere naturale cu cel mult 4 cifre fiecare;
n numrul de elemente ale tabloului;
Subprogramul permut circular la stnga cu o poziie elementele tabloului v i furnizeaz
tabloul modificat prin intermediul aceluiai parametru. De exemplu, dac tabloul are
coninutul v=(1,2,3,4,5), atunci dup apelul subprogramului va avea coninutul
v=(2,3,4,5,1).
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++ care citete din fiierul date.in numrul n i
cele n numere naturale n tabloul unidimensional v, iar apoi, folosind apeluri utile ale
subprogramelor S1 i S2, permut circular la stnga valorile din tabloul v astfel nct pe
ultima poziie s fie situat valoarea maxim memorat n tablou. Valorile tabloului se vor
afia n fiierul date.out
Exemplu. Dac fiierul date.in are coninutul alturat, 8
3 10 40 70 25 70 60 6
programul va afia pe ecran numerele urmtoare:

25 70 60 6 3 10 40 70

Subiectul nr.8
Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(1n100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 4
cifre, separate prin cte un spaiu.
Se consider subprogramele:

S1 cu trei parametri, care primete prin intermediul parametrilor:


n, un numr natural nenul (n100);
i, un numr natural (1in);
v, un tablou unidimensional format cu n componente, ce memoreaz numere
naturale, cu cel mult 4 cifre fiecare.
Subprogramul determin eliminarea din tabloul v a elementului v[i], actualiznd
valoarea parametrului n.Tabloul modificat este furnizat tot prin parametrul v.
S2 cu un singur parametru k, prin intermediul cruia primete un numr natural, k>1;
subprogramul returneaz o valoare natural reprezentnd cel mai mic divizor prim al
numrului k.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++ care s citeasc din fiierul date.in numrul
n i cele n numere naturale, iar apoi, folosind apeluri utile ale subprogramelor S1 i S2, s
elimine din irul aflat pe a doua linie, un numr minim de elemente, astfel nct s nu existe
dou numere prime aflate pe poziii consecutive. irul obinut va fi afiat pe ecran, pe o linie,
numerele din ir separate prin cte un spaiu.
Exemplu. Dac fiierul date.in are coninutul alturat, 10
o soluie posibil este :
12 6 3 2 5 9 7 8 13 17
12 6 3 9 7 8 13
Subiectul nr.9
Fiierul date.in conine cel mult 100 de numere naturale, fiecare numr fiind format din cel
mult patru cifre, numerele fiind scrise pe o singur linie, separate prin cte un spaiu.
Se consider subprogramele:

S1 cu un singur parametru, x, prin intermediul cruia primete un numr natural nenul


format din cel mult patru cifre i care returneaz valoarea 1 dac valoarea parametrului x
este un numr prim i 0 n caz contrar.
S2 cu doi parametri, care primete prin intermediul parametrilor:
- n, un numr natural, 0<n100;
- v,un ir de n numere naturale, fiecare numr avnd cel mult patru cifre.

10

Subprogramul furnizeaz prin parametrul v irul ordonat cresctor.


Cerine:
a) Scriei definiia complet a subprogramului S1.
b) Scriei definiia complet a subprogramului S2.
c) Scriei un program Pascal/C/C++, care citete din fiierul date.in toate numerele
i, folosind apeluri utile ale subprogramelor S1 i S2, scrie n fiierul date.out, pe o singur
linie, separate printr-un spaiu, dou numere naturale reprezentnd cel mai mic numr,
respectiv cel mai mare numr prim din fiierul date.in. Dac niciun numr din fiierul
date.in nu este numr prim, atunci pe prima linie a fiierului date.out se va scrie mesajul
NU EXISTA.
Exemplu. Dac fiierul date.in are coninutul alturat, 3 5 7 13 56 778 99
atunci fiierul date.out va avea urmtorul coninut:
3 13

Subiectul nr.10
Fiierul date.in conine pe prima linie un numr natural nenul n, (1n30), iar pe
urmtoarele n linii cte n numere ntregi, cu cel mult patru cifre fiecare, separate prin cte un
spaiu, reprezentnd elementele unei matrice cu n linii i n coloane.
Se consider subprogramele:

S1, cu doi parametri:


- a, un tablou bidimensional cu cel mult 30 de linii i cel mult 30 de coloane, ce
memoreaza numere ntregi;
- n, numrul efectiv de linii i coloane ale matricei a.
Subprogramul S1 citete din fiierul date.in i furnizeaz, prin intermediul parametrilor
si, elementele unei matrice precum i numrul de linii i coloane.
S2, cu doi parametri, care primete prin intermediul parametrilor:
- a, un tablou bidimensional cu cel mult 30 de linii i cel mult 30 de coloane
- L, indicele unei linii din matricea a.
Subprogramul S2 returneaz suma elementelor aflate pe diagonala paralel cu
diagonala secundar care pornete cu primul element al liniei L.

Cerine:
a) Scriei definiia complet a subprogramului S1.
b) Scriei definiia complet a subprogramului S2.
c) Scriei un program Pascal/C/C++ care, folosind apeluri utile ale subprogramelor S1
i S2, citete datele din fiierul date.in i scrie pe ecran, cea mai mare sum care se poate
obine adunnd elementele aflate pe una dintre diagonalele paralele cu diagonala
secundar, situate deasupra acestei diagonale secundare.
4
Exemplu. Dac fiierul date.in are coninutul alturat, programul va 12
scrie pe ecran valoarea: 36.
27
Dintre: 12; 27+9; 1+4+8, cea mai mare sum este dat de 27+9=36. 1
9
Diagonala secundar conine numerele 9,2,1,2

11

9
4
2
5

8
1
3
8

2
4
7
2

Subiectul nr.11
Fiierul date.in conine pe prima linie dou numere naturale nenule m i n
(1m30,1n30), separate printr-un spaiu.
Se consider subprogramele:
S1, cu trei parametri, care primete prin intermediul parametrilor:
A, un tablou bidimensional cu cel mult 30 de linii i cel mult 30 de coloane, cu elemente
numere ntregi formate din cel mult patru cifre.
- m, numrul efectiv de linii ale matricei A, 1m30;
- n, numrul efectiv de coloane ale matricei A, 1n30.
Subprogramul S1 citete din fiierul date.in numerele m i n, iniializeaz fiecare
element al tabloului A cu valoarea -1 i furnizeaz prin intermediul parametrilor si
numrul de linii i respectiv coloane, precum i elementele tabloului bidimensional;

S2,cu patru parametri, care primete prin intermediul parametrilor:


- A, un tablou bidimensional cu cel mult 30 de linii i cel mult 30 de coloane, cu
elemente de tip ntreg;
- m, numrul efectiv de linii ale matricei A, 1m30;
- n, numrul efectiv de coloane ale matricei A, 1n30.
- x, un numr ntreg format din cel mult 4 cifre;
- i i j dou numere naturale reprezentnd indicii liniei i coloanei unui element
Aij din matricea A.
Subprogramul modific valorile elementelor vecine cu elementul Aij pe orizontal, pe
vertical i pe diagonal, care sunt egale cu -1 cu valoarea lui x+1.

Cerine:
a) Scriei definiia complet a subprogramului S1.
b) Scriei definiia complet a subprogramului S2.
c) Scriei un program principal Pascal/C/C++ care, folosind apeluri utile ale
subprogramelor S1 i S2, citete datele din fiierul date.in, construiete o matrice A cu n
linii i m coloane care are elementul A11 egal cu valoarea 0 i restul elementelor ca n
exemplu. Matricea construit se va scrie n fiierul date.out cte o linie a matricei pe cte
o linie a fiierului, numerele de pe fiecare linie fiind separate prin cte un spaiu.
Exemplu. Dac fiierul date.in are coninutul alturat, programul va 7
scrie n fiierul date.out:
0
1
2
3
4
5
6

1
1
2
3
4
5
6

2
2
2
3
4
5
6

3
3
3
3
4
5
6

4
4
4
4
4
5
6

5
5
5
5
5
5
6

6
6
6
6
6
6
6

7
7
7
7
7
7
7

12

Subiectul nr.12
Fiierul date.in conine pe prima linie dou numere naturale nenule m i n (1m30,
1n30), iar pe urmtoarele m linii cte n numere ntregi, cu cel mult 4 cifre fiecare,
separate prin cte un spaiu, reprezentnd elementele unei matrice A cu m linii i n coloane.

Se consider subprogramele:
S1, cu parametrii:
- A, o matrice cu cel mult 30 de linii i cel mult 30 de coloane, i elemente numere
ntregi formate din cel mult 4 cifre fiecare;
- m, un numr natural reprezentnd numrul efectiv de linii ale matricei A, 1m30;
- n, un numr natural reprezentnd numrul efectiv de coloane ale matricei A,
1n30.
Subprogramul S1 determin citirea i memorarea numerelor din prima linie a fiierului
date.in n parametrii m i n, apoi cele mxn numere reprezentnd elementele matricei
A. Subprogramul va furniza valorile citite prin intermediul parametrilor.

S2, care primete prin intermediul parametrilor:


- A, o matrice cu cel mult 30 de linii i cel mult 30 de coloane, i elemente numere
ntregi formate din cel mult 4 cifre fiecare;
- n, un numr natural reprezentnd numrul efectiv de coloane ale matricei A,
1n30.
- k, un numr natural , 1<km
Subprogramul furnizeaz suma elementelor situate pe linia k n matricea A.
Cerine:
a) Scriei definiia complet a subprogramului S1.
b) Scriei definiia complet a subprogramului S2.
c) Scriei un program principal Pascal/C/C++ care, folosind apeluri utile ale
subprogramelor S1 i S2, citete matricea A din fiierul date.in, calculeaz pentru fiecare
linie a matricei suma elementelor corespunztoare i afieaz pe ecran indicele primei linii
din matrice de sum maxim, precum i valoarea acestei sume. Cele dou numere sunt
afiate pe aceeai linie, separate printr-un spaiu.
Exemplu.
Dac fiierul
date.in are coninutul alturat, 6 7
programul va scrie pe ecran: 4 39 (indicii liniilor de suma maxim 4 3 8
sunt: 4 i 6).
5 1 3
6 7 4
3 8 1
1 2 1
4 7 9

5
5
9
9
3
9

8
9
3
7
5
3

0
6
2
8
2
4

2
8
1
3
9
3

Subiectul nr.13
Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n,
(1n100) iar pe urmtoarele n linii sunt scrise cte n numere naturale, formate fiecare
din cel mult 4 cifre, separate prin cte un spaiu.
Se consider subprogramele:
S1 cu trei parametri, care primete prin intermediul parametrilor:
a,un tablou bidimensional format din cel mult 30 de linii i cel mult 30 de coloane
cu elemente numere ntregi;
n,(1n100) numrul efectiv de linii i de coloane ale matricei a;
max, un numr natural nenul.

13

Subprogramul furnizeaz prin intermediul parametrului max, elementul maxim de pe


diagonala principal a matricei a.

S2 cu doi parametri, care primete, prin intermediul parametrilor:


a,un tablou bidimensional format din cel mult 30 de linii i cel mult 30 de coloane
cu elemente numere ntregi;
n,numrul efectiv de linii i de coloane ale matricei a.
Subprogramul returneaz suma elementelor situate pe rama matricei, format din
elementele situate pe prima linie, prima coloan, ultima linie i ultima coloan a matricei.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program principal Pasca/C/C++ care, folosind apeluri utile ale
subprogramelor S1 i S2, s citeasc datele din fiierul date.in i care s scrie pe ecran,
pe linii separate, elementul maxim de pe diagonala principal i suma elementelor de pe
rama matricei.
4
Exemplu.
Dac fiierul
date.in are coninutul alturat, 0 2 4 6
programul va afia pe ecran numerele urmtoare:
1 3 5 7
6 4 2 8
Elementul maxim = 9
3 5 7 9
Suma = 58
Subiectul nr.14
Fiierul date.in conine pe prima linie un cuvnt format din cel mult 50 de caractere, doar
litere mici ale alfabetului englez.
Se consider subprogramele:

S1 care primeste prin intermediul singurului su parametru s un cuvnt i returneaz


numrul de consoane coninute de cuvntul s (se consider vocale literele:
a,e,i,o,u);

S2 care primeste prin intermediul singurului su parametrul s un cuvnt (format din cel
puin 2 litere) i returneaz cuvntul obinut prin dublarea fiecrei consoane din cuvntul s.
De exemplu, pentru cuvntul abac (primit prin intermediul parametrului s) subprogramul
returneaz cuvntul: abbacc.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care folosind apeluri utile ale subprogramelor S1
i S2, citete textul din fiierul date.in, determin numrul de consoane coninute de
cuvntul citit i scrie pe prima linie a fiierului date.out numrul determinat iar pe a doua
linie scrie cuvntul obinut prin dublarea fiecrei consoane din cuvntul s.
Exemplu.
Dac fiierul
date.in are coninutul
alturat, programul va scrie n fiierul date.out:
5
bbaccallaurreatt
Subiectul nr.15

14

bacalaureat

Fiierul date.in conine o singur linie pe care este scris un text de cel mult 250 de
caractere, care conine cel puin o cifr.
Se consider subprogramele:
S1 cu un singur parametru, care determin, n urma apelului, citirea textului din fiierul
date.in i returneaz prin intermediul parametrului s textul citit;
S2 cu doi parametri, care primete prin intermediul parametrilor:
c un caracter;
s un ir de caractere format din cel mult 250 de caractere.
Subprogramul returneaz valoarea 1 dac numrul de apariii ale caracterului c n irul
s este cel puin 1, altfel subrogramul va returna valoarea 0.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care, folosind apeluri utile ale subprogramelor S1
i S2, citete textul din fiierul date.in i afieaz pe ecran, pe o singur linie, separate
prin cte un spaiu, n ordine cresctoare, toate cifrele care se afl n textul citit.
Exemplu. Dac fiierul date.inare coninutul urmtor:
Vacanta mare
14.09.2015

incepe

in

16.06.2015

si

se

termin

pe

programul va afia pe ecran cifrele urmtoare: 0 1 2 4 5 6 9


Subiectul nr.16
Fiierul date.in conine pe prima linie un text format din cel mult 250 de caractere, scris pe
o singur linie. Cuvintele din text sunt separate prin cte un spaiu, iar fiecare cuvnt este
format din cel mult 20 caractere, doar literele mici ale alfabetului englez. Fiierul conine pe a
doua linie un cuvnt format din cel mult 20 de caractere doar literele mici ale alfabetului
englez.
Se consider subprogramele:
S1 care primete prin intermediul celor doi parametri t1 i t2 dou cuvinte formate
fiecare din cel puin dou caractere i returneaz valoarea 1 dac cuvntul primit prin
parametrul t1 reprezint un prefix pentru cuvntul primit prin parametrul t2, sau valoarea
0 n caz contrar;
S2 care primeste prin intermediul singurului su parametru t un cuvnt din text i
nlocuiete prima, respectiv ultima liter, cu litera mare corespunztoare i furnizeaz prin
intermediul parametrului t cuvntul obinut. De exemplu, pentru cuvntul intensitate
primit prin intermediul parametrului t, subprogramul returneaz cuvntul: IntensitatE.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care citete din fiierul date.in n variabila s
textul aflat pe prima linie i n variabila x cuvntul aflat pe cea de a doua linie din fiier i
folosind apeluri utile ale subprogramelor S1 i S2, modific textul memorat n variabila s prin
transformarea n liter mare a primei i ultimei litere din fiecare cuvnt dint text care are ca
prefix cuvntul x. Programul scrie noul text n fiierul date.out pe o singur linie.
Exemplu. Dac fiierul date.inare coninutul urmtor:
ambii copii amestecau ideile si amintirile de peste zi

15

am
programul va scrie n fiierul date.outtextul:
AmbiI copii AmestecaU ideile si AmintirilE de peste zi
Subiectul nr. 17
Fiierul date.in conine un text format din cel mult 250 de caractere, scris pe o singur
linie. Cuvintele din text sunt separate prin cte un spaiu, iar fiecare cuvnt este format din
cel mult 20 caractere, doar literele mici ale alfabetului englez.

Se consider subprogramele:
S1 care primeste prin intermediul singurului su parametru s un cuvnt i returneaz
numrul de vocale (a,e,i,o,u) coninute de cuvntul s;

S2 care primeste prin intermediul singurului su parametru s un cuvnt format din cel puin
2 litere i returneaz cuvntul obinut prin oglindirea acestuia. De exemplu, pentru
cuvntul abcd primit prin intermediul parametrului s, subprogramul returneaz cuvntul:
dcba.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care folosind apeluri utile ale subprogramelor S1
i S2, citete textul din fiierul date.in i l modific oglindind fiecare cuvnt din text care
conine exact trei vocale. Programul scrie noul text n fiierul date.out pe o singur linie.
Exemplu. Dac fiierul date.inare coninutul urmtor
ani are un creion si un caiet
programul va scrie n fiierul date.outurmtoarele:
ani are un noierc si un teiac
Subiectul nr.18
Fiierul date.in conine un text format din cel mult 255 de caractere, scris pe o singur linie.
Cuvintele din text sunt separate prin unul sau mai multe spaii, iar fiecare cuvnt este format
din cel mult 30 de caractere, doar litere mici ale alfabetului englez.
Se consider subprogramele:
S1 care primete prin intermediul singurului su parametru s, un ir de caractere format
din maximum 30 de caractere doar litere mici, i returneaz TRUE/1 dac irul s are
literele n ordine alfabetic sau FALSE/0 altfel;
S2 cu doi parametri s i i, care primete prin intermediul parametrilor:
- s un ir cu cel mult 30 de caractere;
- i un numr natural reprezentnd o poziie n ir.
Subprogramul modific irul s prin eliminarea caracterului situat pe pozitia i n acesta.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) S se scrie un program Pascal/C/C++, care citete textul din fiierul date.in i
apoi, folosind apeluri utile ale subprogramelor S1 i S2, modific fiecare cuvnt care are
literele n ordine alfabetic prin eliminarea caracterelor identice . Cuvintele astfel modificate

16

se vor scrie n fiierul date.out, cte unul pe linie, n ordinea apariiei lor n text. Cuvintele
care au toate literele distincte i n ordine alfabetic vor fi afiate nemodificate. Dac textul
nu conine niciun cuvnt cu proprietatea cerut, atunci n fiier se va scrie pe prima linie
mesajul NU EXIST.
Exemplu. Dac fiierul date.in are coninutul urmtor:
abc dar aaabcc este iar cccffiii
atunci programul va scrie in fisierul date.out:
abc
abc
cfi
Subiectul nr.19
Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural n
(n<100), iar pe fiecare din urmtoarele n linii este scris cte un cuvnt format din cel mult
20 de caractere, doar litere mici ale alfabetului englez.
Se consider subprogramele:
S1 care primete prin intermediul singurului su parametru s un cuvnt i verific dac
acesta este palindrom. Un cuvnt care poate fi citit de la stnga la dreapta i de la
dreapta la stnga fr s-i piard sensul, este palindrom, de exemplu: rar, potop.
S2 cu doi parametri s i t, care primete prin parametrul s un ir cu maximum 20 de
caractere, litere mici ale alfabetului englez. Subprogramul returneaz prin intermediul
parametrului t irul obinut din s prin nlocuirea fiecrei vocale cu caracterul *. Se
consider vocale literele: a, e, i, o, u.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program principal Pascal/C/C++ care, folosind apeluri utile ale
subprogramelor S1 i S2, citete numrul n i cele n cuvinte, apoi determin toate cuvintele
de tip palindrom i le modific nlocuind n acestea fiecare vocal cu caracterul * . Programul
afieaz pe ecran cuvintele modificate, n linie, separate prin cte un spaiu. Dac niciunul
dintre cele n cuvinte citite nu este de tip palindrom, atunci programul va afia pe ecran
mesajul NU EXISTA.
6
Exemplu. Dac fiierul date.inare coninutul alturat, cojoc
programul va afia pe ecran:
iarna
ana
c*j*c
primavara
*n*
elevele
*l*v*l*
toamna
Subiectul nr.20
Se consider declarrile urmtoare utilizate pentru a defini o list simplu nlnuit (tip stiv),
alocat dinamic:
type lista=^nod;
nod=record
nr:integer; urm:lista
end;

17

struct nod
{ int nr;
nod* urm;};

Cerine:
a) Scriei definiia complet a subprogramului S1 cu doi parametri care primete prin
intermediul parametrilor:
p adresa primului nod din lista definit mai sus;
k un numr natural cu cel mult nou cifre.
Subprogramul determin adugarea la nceputul listei, naintea nodului cu adresa p (primul),
a unui nou nod care s memoreze n cmpul nr numrul k. Subprogramul returneaz prin
intermediul parametrului p adresa primului nod din lista modificat prin adugare.
b) Scriei definiia complet a subprogramului S2 care primete prin intermediul singurului
parametru p adresa unui nod al listei definite i care returneaz numrul memorat n cmpul
nr al acestui nod.
c) Scriei un program Pascal/C/C++, care citete de la tastatur un numr natural n
(n<100) i un ir s format din n numere naturale, fiecare numr din ir avnd cel mult nou
cifre, iar apoi, folosind apeluri utile ale subprogramului S1, construiete o list simplu
nlnuit alocat dinamic ale crei noduri s memoreaz n cmpul nr toate numerele din
irul s (ncepnd de la poziia a doua) care au ca sufix primul numr din irul s. Programul,
folosind apeluri utile ale subprogramului S2, va scrie n fiierul date.out toate numerele
memorate n nodurile listei, pe o singur linie, separate prin cte un spaiu, n ordinea
invers apariiei lor n irul s. Dac irul s nu conine niciun numr cu sufixul cerut atunci
programul va scrie n fiier mesajul NU EXISTA.
Exemplu. Dac n=11 iar irul s este format din numerele:
15 24 8815 123 215 490 6 21 0 6 1015
atunci fiierul date.out va avea coninutul:
1015 215 8815
Subiectul nr.21
Se consider declarrile urmtoare utilizate pentru a defini o list simplu nlnuit alocat
dinamic:
type lista=^nod;
nod=record
nr:integer; urm:lista
end;
Cerine:

struct nod
{ int nr;
nod* urm;};

a) Scriei definiia complet a subprogramului S1 cu doi parametri care primete prin


intermediul parametrilor:
p adresa primului nod din lista definit;
k un numr natural cu cel mult nou cifre.
Subprogramul adaug un nod cu informaia k la sfritul listei. Subprogramul returneaz
prin intermediul parametrului p adresa primului nod din lista modificat dup adugare.
b) Scriei definiia complet a subprogramului S2 care primete prin intermediul singurului
parametru p adresa primului nod al listei definite i care returneaz valoarea din cmpul nr
al ultimului nod.

18

c) Scriei un program Pascal/C/C++, care citete de la tastatur un numr natural n nenul,


format din cel mult 9 cifre toate nenule, i construiete o list liniar simplu nlnuit cu toate
numerele obinute din numrul n prin eliminarea succesiv a ultimei cifre, apoi a ultimelor
dou cifre, .a.m.d. pn se obine un numr format dintr-o singur cifr folosind apeluri utile
ale subprogramului S1. Programul afieaz pe ecran valorile memorate de nodurile listei
create i, folosind apeluri utile ale subprogramului S2, va scrie n fiierul date.out valoarea
memorat de ultimul nod din list.
Exemplu. Dac n=23456 atunci pe ecran se va afia:
2345 234 23 2
n fiierul date.out se va scrie valoarea: 2
Subiectul nr.22
Se consider un graf neorientat G cu n vrfuri (nN, 2<n<30), dat prin matricea de
adiacen A. Vrfurile grafului sunt etichetate cu numerele distincte: 1,2,...,n.
Fiierul date.in conine n+1 linii. Pe prima linie a fiierului este scris numrul n de
vrfuri ale grafului G, iar pe fiecare dintre urmtoarele n linii, sunt scrise cte n valori
aparinnd mulimii {0,1}, separate prin cte un spaiu, reprezentnd valorile elementelor
matricei de adiacen A a grafului G.
Se consider subprogramele:
S1 cu doi parametri n i x, care determin, n urma apelului, citirea numerelor din fiierul
date.in i returneaz prin intermediul parametrilor:
- n numrul de vrfuri ale grafului G;
- x un tablou bidimensional cu n linii i n coloane care memoreaz valorile
elementelor matricei de adiacen A a grafului G;
S2 cu doi parametri n, i v, care primete prin intermediul parametrilor:
- n un numr natural nenul (2<n<30);
- v un tablou unidimensional cu n elemente care memoreaz numere ntregi.
Subprogramul afieaz pe ecran indicii tuturor elementelor nenule ale tabloului
unidimensional v.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care citete datele din fiierul date.in i de la
tastatur un numr natural k (1kn) i apoi, folosind apeluri utile ale subprogramelor S1 i
S2, determin i afieaz pe ecran lista de adiacena a nodului cu eticheta k. Etichetele din
lista de adiacen se vor afia pe o singur linie, separate prin cte un spaiu, n ordinea
descresctoare a valorilor lor. Dac lista este vid, atunci programul va afia valoarea 0.
Exemplu.
Dac k=2 iar fiierul date.inare coninutul alturat, atunci
programul va afia pe ecran etichetele urmtoare:
1 6 7

7
0
1
0
0
0
1
1

1
0
0
0
0
1
1

0
0
0
1
0
0
0

0
0
1
0
0
0
0

0
0
0
0
0
0
0

1
1
0
0
0
0
1

1
1
0
0
0
1
0

Subiectul nr.23
Se consider un graf orientat G cu n vrfuri (nN, 2<n<30) etichetate cu numerele
distincte: 1,2,...,n.

19

Fiierul date.in conine mai multe linii. Pe prima linie a fiierului este scris numrul natural n
reprezentnd numrul de vrfuri ale grafului G, iar pe urmtoarele linii, perechi de numere
naturale, separate prin cte un spaiu, reprezentnd cte un arc al grafului G.
Se consider subprogramele:
S1 cu doi parametri, care primete prin intermediul parametrilor:
- n,un numar natural reprezentnd numarul de vrfuri ale grafului G
- a, un tablou bidimensional ptratic cu n linii reprezentnd matricea de adiacen a
grafului G
Subprogramul determin, n urma apelului, citirea numerelor din fiierul graf.in i
returnarea prin intermediul parametrului n a numrului de vrfuri ale grafului G, iar prin
intermediul parametrului a returnarea matricei de adiacen a grafului G;
S2 cu doi parametri n i v, care primete prin intermediul parametrilor:
- n un numr natural nenul (2<n<30);
- v un tablou unidimensional cu n componente care memoreaz numere naturale.
Subprogramul returneaz numrul valorilor nenule din vector.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++, care, folosind apeluri utile ale subprogramelor S1
i S2, determin i afieaz pe ecran, pe prima linie, valoarea maxim a gradului extern iar,
pe a doua linie, etichetele nodurilor din graful G care au gradul extern maxim.
7
Exemplu. Dac fiierul graf.inare coninutul alturat, programul va 2 1
afia pe ecran:
2 3
3
2 4
2 4
3 4
7 3
4 5
4 6
4 7
Subiectul nr.24
Se consider un arbore cu rdcin i n vrfuri (nN, 2<n<100), dat prin vectorul de tai.
Vrfurile arborelui sunt etichetate cu numerele distincte: 1,2,...,n.
Fiierul date.in conine dou linii. Pe prima linie a fiierului este scris un numr natural
nenul n reprezentnd numrul de vrfuri ale arborelui dat, iar pe a doua linie sunt scrise n
numere naturale, separate prin cte un spaiu, reprezentnd valorile componentelor
vectorului de tai.
Se consider subprogramele:

S1 cu doi parametri n i t, care determin, n urma apelului, citirea numerelor din fiierul
date.in i returnarea prin intermediul parametrului n a numrului de vrfuri ale
arborelui din enun, iar prin intermediul parametrului t returnarea unui tablou
unidimensional cu n componente numere naturale reprezentnd vectorul de tai al
arborelui din enun;

S2 cu trei parametri n, t i k, care primete prin intermediul parametrilor:


n numrul de vrfuri ale arborelui din enun;
t vectorul de tai al arborelui din enun;
k un numr natural (1kn) reprezentnd eticheta unui vrf al arborelui din enun.

20

Subprogramul returneaz numrul tuturor fiilor (descendenilor direci) ai vrfului cu


eticheta k.
Cerine:
a) Scriei definiia complet a subprogramului S1;
b) Scriei definiia complet a subprogramului S2;
c) Scriei un program Pascal/C/C++ care s citeasc datele din fiierul date.in i de
la tastatur un numr natural m (0<m<n); programul va afia pe o linie a ecranului, separate
prin cte un spaiu, etichetelor tuturor vrfurilor arborelui care au cel pu in m fii, folosind
apeluri utile ale subprogramelor S1 i S2.
Exemplu.
Dac fiierul
date.in are
coninutul alturat iar m=2, programul va afia
pe ecran numerele urmtoare:

10
6 5 5 2 0 3 3 3 6 2

2 3 5 6
Subiectul nr.25
Fiierul date.in conine pe prima linie un numr natural n (n<10), iar pe fiecare din
urmtoarele n linii, separate prin cte un spaiu, cte dou numere naturale nenule (cu cel
mult 9 cifre fiecare) ce reprezint numrtorul i numitorul unei fracii algebrice.
Se consider declarrile urmtoare utilizate pentru a memora numrtorul i numitorul unei
fracii algebrice, n aceast ordine:
type fractie = record
a,b:integer;
end;

struct fractie
{ int a,b;
};

Cerine:
a) Scriei definiia complet a subprogramului S1 cu doi parametri, de tipul fracie definit
mai sus, prin intermediul crora primete dou fracii algebrice i care returneaz un rezultat
de tip fracie ce reprezint suma celor dou fracii primite prin parametri.
b) Scriei definiia complet a subprogramului S2 cu doi parametri a i b prin
intermediul crora primete dou numere naturale nenule (cu cel mult 9 cifre fiecare) i care
returneaz cel mai mare divizor comun al celor dou numere primite.
c) Scriei un program Pascal/C/C++, care citete din fiierul date.in, de pe prima
linie a acestuia, un numr natural n (n<10) i apoi cele n fracii. Prin apeluri utile ale
subprogramelor S1 i S2, programul va calcula o fracie algebric ireductibil reprezentnd
suma celor n fracii citite din fiier. Programul va afia pe ecran fracia sum determinat sub
forma numrtor / numitor, ca n exemplu.
Exemplu. Dac fiierul date.in are coninutul alturat,
programul va afia pe ecran:
91/12

21

6
1
1
2
6
4
8

5
4
3
2
5
3

Colectivul de autori:
prof. Carmen-Nicoleta Minc

- Colegiul Naional de Informatic Tudor Vianu

prof. Alina Gabriela Boca

- Colegiul Naional Ion Neculce

prof. Doina-Luminia Dru

- Liceul Teoretic Dante Alighieri

prof. Corina Elena Badea

- Liceul Teoretic Alexandru Ioan Cuza

prof. Corina-Elena Vin

- Colegiul Naional de Informatic Tudor Vianu

prof. Doina Mariana Dinc

- Colegiul Naional Octav Onicescu

Coordonator:
prof.tefania Penea inspector colar de specialitate Informatic i Tehnologia
Informatiei i a Comunicaiilor, Inspectoratul colar al Municipiului Bucureti

22

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