Documente Academic
Documente Profesional
Documente Cultură
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:
83109327
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:
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++)
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:
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++)
{
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:
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:
10
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:
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;
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.
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
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
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;};
18
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;
20
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
Coordonator:
prof.tefania Penea inspector colar de specialitate Informatic i Tehnologia
Informatiei i a Comunicaiilor, Inspectoratul colar al Municipiului Bucureti
22