Documente Academic
Documente Profesional
Documente Cultură
5
Din fiierul de intrare date5.in se citesc de pe prima linie n,m,o,p,k , 5 numere naturale, apoi de pe a doua
linie, un ir de n numere naturale de maxim 9 cifre, de pe a treia linie un ir de m numere naturale de maxim 9
cifre, iar de pe a patra linie un ir de o numere naturale de maxim 9 cifre. (n[10,100]; m[10,100]; o[10,100];
p,k maxim 2 cifre) S se afieze att pe ecran, ct i n fiierul date5.out urmtoarele cerine:
I. Probleme de 4p (4p*5=20p)
I.1.
I.2.
I.3.
I.4.
I.5.
Suma numerelor din al doilea ir ce au ultima cifra mai mare ca prima cifr;
Produsul numerelor din al doilea ir, numere ce sunt mai mari dect ultima valoare a irului;
Produsul numerelor din al treilea ir, numere au exact 1 divizor propriu;
Care dintre irurile 2 sau 3 are suma elementelor impare i prime cea mai mica;
Suma numerelor pare divizibile cu k din primul ir;
Observaie :
Dup fiecare tergere sau inserare, se va afia irul rmas.
IV. Probleme de 10 ( oricare 3 sau chiar toate)
IV.1. S se afieze cea mai lung secven din al treilea ir, secven ce respect urmtoarele: numerele se
gsesc pe poziii consecutiv i sunt pare.
IV.2. S se afieze pentru cel de-al doilea ir , elementele ordonate descresctor .
IV.3. S construiasc un nou vector care s cuprind pentru fiecare element , produsul cifrelor din primul ir,
adic: z[i]=prod(a[i]);Apoi s se afieze vectorul construit.
IV.4. S se ordoneze crescresctor dup ultima cifr, toate elementele din primul ir. Apoi s se afieze irul
astfel obinut.
#include <cstdlib>
#include <iostream>
using namespace std;
int triangle(int num);
int main(int argc,char* argv[]){
int n;
cout<<"ENTER A NUMBER AND PRESS ENTER: ";
cin>>n;
cout<<"FUNCTION RETURNED"<<triangle(n);
system ("PAUSE");
return EXIT_SUCCESS;
}
//TRIANGLE NUMBER FUNCTION.
//RETURN 1+2+....+n
int triangle(int n) {
int i;
int sum=0;
for (i=1;i<=n;i++)
sum=sum+i;
return sum;
}
http://www.cplusplus.com/doc/tutorial/
http://www.learncpp.com/
Limbajul Pascal
Limbajul C/C++
a.
x*x-25<0
x*x-25<0
b.
25-x*x>=0
25-x*x>=0
c.
(5<=x)and(x<=-5)
(5<=x)&&(x<=-5)
d.
(x-5)*(x+5)>=0
(x-5)*(x+5)>=0
scrie z
a)
b)
Scriei toate numere naturale, distincte, fiecare avnd exact dou cifre, care pot fi citite pentru variabila n astfel nct s
se afieze valoarea 7.(4p.)
c)
Scriei n pseudocod un algoritm, echivalent cu cel dat, n care s se nlocuiasc structura ct timp...execut cu
o structur repetitiv de alt tip.(6p.)
d)
Stabilii care dintre urmtoarele grafuri cu 6 noduri, numerotate de la 1la6,date prin listele de adiacen reprezint un
graf neorientat conex, eulerian, dar care NU este hamiltonian. (4p.)
a. 1:2,4;
b. 1:2,3;
c. 1:2,3
d. 1:2,6;
2:1,3;
3:2,4,
5,6;
4:1,3;
5:3,6;
6:3,5;
2.
2:1,3;
3:1,2;
4:5;
5:4,6:
6:5:
;
2:1,3
;
3:1,2
;
4:;
5:6
6:5
2:1,3;
3:2,4;
4:3,5;
5:4,6;
6:1,5;
Cte grafuri orientate, distincte, cu 5 vrfuri se pot construi? Dou grafuri se consider distincte dac matricele lor de
adiacen sunt diferite.(4p.)
a. 5
b. 120
c. 210
d. 410
4.
n declararea urmtoare, cmpurile x i y ale nregistrrii pot memora coordonatele carteziene ale unui punct din planul xOy.
Scriei o expresie n limbajul Pascal | C/C++ care s aib valoarea true|1 dac i numai dac punctele memorate n
variabilele A i B sunt situate la egal distan fa de originea axelor de coordonate, O. (6p.)
Limbajul Pascal
Limbajul C/C++
type punct=record
x,y:real
end;
var A,B:punct;
struct punct
{
float x,y;
} A,B;
Prin nlimea unui arbore cu rdcin nelegem numrul de muchii ale celui mai lung lan format din noduri distincte care
are una dintre extremiti n rdcina arborelui.
Scriei care este rdcina i care este nlimea arborelui descris prin urmtorul vector "de tai": (0,1,1,1,4,4,6,7).
(6p.)
5.
S se construiasc o matrice cu n linii i m coloane care conine pe prima coloan, de sus n jos, toate numerele naturale de
la 1 la n, n ordine cresctoare, pe coloana a doua, de sus n jos, toate numerele naturale de la 2 la n+1, n ordine
cresctoare, pe a treia coloan, de sus n jos, toate numerele naturale de la 3 la n+2, n ordine cresctoare, pe a patra
coloan, de sus n jos, toate numerele naturale de la 4 la n+3, n ordine cresctoare i aa mai departe pn la coloana m.
Scriei programul care citete de la tastatur dou valori naturale n i m (2<n<25, 2<m<25), construiete matricea conform
cerinei i o afieaz pe ecran, pe linii, cu spaii ntre elementele de pe fiecare linie.
De exemplu, dac se citete de la tastatur n=3 i m=5, se va construi i se va afia pe ecran matricea:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
(10p.)
metoda
backtracking
se
genereaz
ordine
cresctoare
toate
numerele
naturale
de
cte
patru
cifre
mulimea A={1,2,3,4,5}, numere care nu conin pe poziii alturate cifre din mulimea {1,5}.Primele opt numere generate sunt
ordine: 1212, 1213, 1214, 1221,1222, 1223, 1224, 1225. Cte dintre numerele generate ncep cu cifra 2 i se termin cu cifra 5? (4p.
a. 9
b. 12
c. 15
d. 19
bajul Pascal
Limbajul C/C++
void ex(int x)
{ if(x>3) {
printf("%d",x%10);
/ cout<<x%10;
ex(x/10);
}
else printf("*");
/ cout<<"*";
}
criei toate valorile numere naturale pe care le poate avea o variabil n, astfel nct pentru apelul ex(n) s se afieze doar caracterul *. (3p
Scriei definiia complet a unui subprogram sub, cu patru parametri, care primete prin intermediul parametrilor:
a i b, dou cifre distincte (a<10, b<10, ab);
n, un numr natural nenul (0 < n < 100);
v, un tablou unidimensional care memoreaz un ir de n numere naturale, fiecare avnd cel mult nou cifre.
Subprogramul sub determin modificarea irului de numere primit prin parametrul v realiznd eliminarea tuturor numerelor care coni
scrierea lor cel puin o cifr a i nu conin nicio cifr b. De asemenea subprogramul va furniza prin intermediul parametrului n numru
numere din irul modificat, iar prin parametrul v tabloul modificat. Dac n irul primit nu exist niciun numr care s conin n scrierea
cifraa i s nu conin cifra b, atunci valorile parametrilor n i v nu se vor modifica.
Exemplu. Pentru valorile n=10, v=(3551, 149, 3798, 502, 75, 2515, 51, 151, 489, 653), a=5i b=2 ale parametrilor, n urma apel
subprogramului subva furniza prin parametrii indicai valorile n=5 i v=(149, 3798, 502, 2515, 489).
(10p.)
Fiierul text bac.in conine un ir s de cel mult un milion de naturale nenule, formate fiecare din cel mult 9 cifre, separate prin cte
spaiu.
a) Scriei un program care, utiliznd un algoritm eficient din punct de vedere al timpului de executare i al spaiului de memorie util
determin i afieaz pe ecran lungimea maxim a unei secvene din ir format doar din numere pare. O secven a unui ir const
elemente aflate pe poziii consecutive n irul considerat. (8p.)
Exemplu: dac fiierul bac.in are coninutul:
12 6 245 18 8 2 36 39 34 8 36 11 10 12 102 24 881
atunci, pe ecran se va afia numrul 4 reprezentnd lungimea maxim a unei secvene format doar din numere pare din irul dat.
b) Descriei n limbaj natural metoda utilizat i explicai n ce const eficiena ei. (2p.)
Salt la pagina
6
Valoarea 7 poate fi obinut din numere citite pentru n de forma 6x sau x6 cu x{1,3,5,7,9} cifr impar. Algoritmul va afia valoare
dac se citete pentru n orice valoare din mulimea {16, 36, 56, 76, 96, 61, 63, 65, 67, 69}.
Pentru precizarea valorilor 16,36,56,76,96,61,63,65,67,69 se acord 4p. Pentru identificarea valorilor corecte cu aduga
sau repetarea unora dintre valori se acord 3p. Pentru identificarea a cel puin 5 valori corecte se acord 2p., iar pentru identificare
cel puin dou valori corecte se acord 1p. n celelalte cazuri se acord 0p.
nlocuirea structurii ct
repet - pn cnd:
timp
ct
timp
Fr testarea iniial a valorii lui n (n>0), algoritmul obinut prin nlocuirea mecanic a structurii ct_timp cu structura repet... va a
pentru n=0 valoarea 1 spre deosebire de algoritmul din enun care afieaz valoarea 0 pentru n=0, deci cei doi algoritmi nu s
echivaleni.
Pentru alegerea unei structuri repetitive se acord 2p., pentru testarea iniial a valorii lui n se acord 2p., pentru testarea condiie
continuare sau oprire se acord 1p, iar pentru scrierea integral a restului algoritmului se mai acord 1p. - n total 6p.
Se testeaz capacitatea de a reprezenta pe hrtie algoritmul dat cu ajutorul unui limbaj de programare studiat. De i scrie
programelor pe hrtie este o activitate improprie la informatic, prin aceast cerin se valorific experienele anterioare
implementare i testare a programelor pe calculator, privind structura programelor, declararea variabilelor, sintaxa instruciun
programului, regulile de scriere a expresiilor, etc.
Pentru instruciunile corecte de declarare a variabilelor, de citire a datelor, de afiare a rezultatului i de decizie se acord cte
pentru instruciunea repetitiv se acord 3p., iar pentru cele 6 atribuiri se acord 2p. Pentru structura corect a programului se mai aco
1p., n total 10p.
Limbajul C/C++
a.
x<1000
x<1000
b.
c.
(-999<=x)and(x<=999)
(-999<=x)&&(x<=999)
d.
(-999<=x)and(x<=-100) or (100<=x)and(x<=999)
(-999<=x)&&(x<=-100) || (100<=x)&&(x<=999)
a)
b)
Scriei un set de date de intrare pentru care algoritmul, n urma executrii, va afia valoarea 1234. (4p.)
c)
Scriei n pseudocod un algoritm, echivalent cu cel dat, n care s se nlocuiasc structura ct timp t>9 execut... cu o
structur repetitiv de alt tip. (6p.)
d)
irul de date de intrare (fr valoarea 0 utilizat pentru ncheierea opera iei de citire) se mparte n secvene formate din numere
proprietatea c prima cifr a numrului curent este egal cu cifra unitilor numrului precedent, iar cifra unitilor numrului cu
este egal cu prima cifr a numrului urmtor. Astfel irul de date de intrare se imparte n trei secvene de acest tip cu lungimile 3,
12 23 34 592 13 39 91 1 0
Un
rspuns
posibil
poate
fi
setul
de
date
Pentru orice set de date de intrare corect se acord 4p.
c)
de
... presupune
intrare:
utilizarea
2
unei
structuri
repetitive repet
Pentru alegerea unei structuri repetitive se acord 2p., pentru testarea condiiei de continuare sau oprire se acord 2p, iar pe
scrierea integral a restului algoritmului se mai acord 2p. - n total 6p.
d)
Se testeaz capacitatea de a reprezenta pe hrtie algoritmul dat cu ajutorul unui limbaj de programare studiat. Dei scrie
programelor pe hrtie este o activitate improprie la informatic, prin aceast cerin se valorific experienele anterioare
implementare i testare a programelor pe calculator, privind structura programelor, declararea variabilelor, sintaxa instruciun
programului, regulile de scriere a expresiilor, etc.
Pentru instruciunile corecte de declarare a variabilelor, de citire a datelor, de afiare a rezultatului se acord cte 1p, pe
instruciunea de decizie decizie se acord 1p., pentru instruciunea repetitiv se acord 3p., iar pentru cele 6 atribuiri se acord
Pentru structura corect a programului se mai acord 1p., n total 10p.
b)
a)
Graf conex eulerian care nu este hamiltonian
Graf neconex
c)
Graf neconex
d)
Graf conex eulerian i hamiltonian
Pot fi concepute mai multe metode de obinere a matricei cerute. Metoda clasic ce completeaz coloanele matricei (numerotate
la 1 lam), respectiv liniile (numerotate de la 1 la n), n maniera descris, este:
Pentru declararea corect a matricei se acord 1p., pentru citirea lui n i m se mai acord 1p., pentru parcurgerea unei coloane sau lini
acord 1p., pentru completarea corect a unei coloane se acord 2p., pentru completarea corect a tuturor coloanelor se acord 2p.,
pentru afiarea matricei conform cerinei se acord 2p. n plus, pentru declararea variabilelor simple, structura i corectitudinea sintactic
programului se mai acord 1p. - n total 10p.
Numerele cerute sunt: 2125; 2135; 2145; 2225; 2235; 2245; 2325; 2335; 2345; 2425;2435; 2445; 2525; 25
2545. Sunt generate 15 numere cu proprietatea din enun.
Pentru rspunsul c) se acord 4p.
n desenul urmtor este prezentat mecanismul prin care se execut apelul ex(25436) al subprogramului recursiv ex. Se vor afia
ordine: 6345*, rspuns pentru care se acord 3p.
Se observ c la n urma executrii apelurilor ex(0), ex(1), ex(2) i ex(3) se va afia de fiecare dat caracterul *.
Pentru rspunsul 0,1,2,3 se acord 3p.
Prelucrarea oferit de subprogram verific existena celor dou cifre n scrierea fiecrui numr memorat n tablou. tergerea u
element care conine cifra a i nu conine cifra b se realizeaz prin deplasarea cu o poziie la stnga a tuturor elementelor situat
dreapta celui ce urmeaz a fi ters. Dup realizarea deplasrii, se micoreaz valoarea lui n cu 1.
Limbajul Pascal
Limbajul C/C++
Pentru antet corect se acord 3p. (Pentru respectarea structurii antetului (procedure/void) se acord 1p., pentru declararea corec
parametrilor de intare a i b nc 1p., pentru declararea corect a parametrilor n i v nc 1p.).
Pentru declararea variabilelor locale nc 1p., iar pentru respectarea structurii subprogramului i a sintaxei limbajului se acord nc 1
Pentru determinarea numrului de apariii ale cifrei a n scrierea unui numr din tabloului 1p. Pentru determinarea numrului de apa
ale cifrei b n scrierea unui numr din tabloului 1p. Pentru determinarea elementelor tabloului cu proprietatea cerut 1p. Pe
tergerea din tablou a tuturor elementelor ce memoreaz numerele cu proprietatea cerut 1p. Pentru corectitudinea global
programului 1p.
n total 10p.
Algoritmul de rezolvare propus citete, unul cte unul, numerele din fiier, analiznd paritatea fiecruia: ntlnirea unui numr pa
duce la "prelungirea" secvenei curente, iar ntlnirea unui numr impar va conduce la trecerea la o nou secven . La finele oric
secvene se analizeaz lungimea ei, n vederea memorrii lungimii maxime.
Eficiena algoritmului, ca timp de executare, const n faptul c parcurgem o singur dat irul. Deoarece numrul de valori din fi
(1000000) este dimensiunea care conteaz n problem, spunem c am obinut un algoritm liniar. Ca spaiu de memorie, solu
propus este eficient, deoarece utilizeaz doar variabile simple.
Pentru o descriere coerent a metodei se acord 1p., iar pentru justificarea eficienei, nc 1p. - n total 2p.
Limbajul Pascal
Limbajul C/C++
var f:text;
nr,lgmax,lg:longint;
#include
#include
Limbajul Pascal
Limbajul C/C++
begin
end.
assign(f,'bac.in');reset(f);
while not eof(f) do begin
read(f,nr);
if nr mod 2=0 then
inc(lg)
else begin
if lgmax<lg then
lgmax:=lg;
lg:=0
end;
end;
if lgmax<lg then
lgmax:=lg;
close(f);
write(lgmax)
Se acord 1p. pentru operaiile cu fiiere (declarare, nume corect i deschidere pentru citire), nc 1p. pentru citirea tuturor numer
din fiier, 1p. pentru un algoritm principial corect, nc 1p. pentru determinarea valorii cerute, 1p. pentru afiarea ei, 1p. pe
corectitudinea formal (declararea variabilelor, structura programului, sintaxa instruciunilor, etc.).
Se acord 1p. pentru alegerea unui algoritm eficient ca timp de executare (O(n)) i 1p. pentru utilizarea eficent a memoriei. n total
Salt la pagina
13
Din vectorul de referine ascendente deducem c rdcina arborelui este nodul 5 (tata[5]=0). Observm c tata[8]
tata[9]=7, tata[7]=2 tata[2]=5, deci ascendenii nodului 8.sunt nodurile 5,2,7,9.
Cercul C intersecteaz axa Ox dac distana de la centru cercului la axa Ox (=C.O.y) este mai mic sau egal cu raza cercului (C.R
O soluie se poate obine separnd cuvintele din text si verificnd apariia primului cuvnt ca sufix pentru restul cuvintelor din tex
caz afirmativ, aceste cuvinte vor fi eliminate. Se poate contrui un ir nou care s conin cuvintele ce vor rmne n text,
concatenarea acestora i inserarea caracterului * dup fiecare cuvnt.
O alt soluie se poate obine, dup separarea i eliminarea primului cuvnt din ir, prin determinarea tuturor apariiilor primului cuv
n irul rmas. n situaia n care caracterul * succede o astfel de apariie, atunci vom terge din ir cuvntul corespunztor apariiei.
Se pot utiliza funciilor predefinite pentru iruri de caractere specifice limbajului.
Pentru declararea corect a variabilelor se acord 1p. Pentru citirea irului se acord 1p. Pentru separararea primului cuvnt din tex
acord 1p. Pentru determinarea unui cuvnt din text care admite ca sufix primul cuvnt i pentru eliminarea lui se acord 2p.
Pentru eliminarea tuturor cuvintelor din ir cu proprietatea cerut se acord 2p. Pentru modificarea i afiarea irului n formatul ceru
acord 2p. Pentru corectitudinea global a programului se acord 1p - n total 10p.
Limbajul Pascal
Limbajul C/C++
int main()
{
Limbajul Pascal
Limbajul C/C++
begin
do
readln(s);
n:=pos('*',s);
p:=copy(s,1,n);
delete(s,1,n);
k:=pos(p,s);
while k>0 do begin
j:=k+n-1;
i:=k;
while (s[i] <> '*') and (i>0)
dec(i);
inc(i);
delete(s,i,j-i);
k:=pos(p,s);
end.
end;
s:='*'+s;
writeln(s)
}
Salt la pagina
14
Apelul recursiv f(x div 10)| f(x/10) pentru valorile x care au cifra unitilor mai mic ca 5, sugereaz c aceste cifre s
ignorate.
Cu
restul
cifrelor
se
contruiete
un
numr
care
are
prima
cifr
(prin apelul recursiv x mod 10 +f(x div 10) * 10 | x%10+f(x/10)).
Pentru ca rezultatul s fie 1 trebuie ca toate cifrele lui x s fie strict mai mici dect 5, iar cea mai mare valoare de 4 cifre cu to
cifrele pare este 4444.
Pentru rspunsul 4444 se acord 3p.
Prelucrarea oferit de subprogram determin poziia primei apariii a valorii minime din tablou, poziia ultimei apariii a valo
maxime n ir, apoi interschimb cele dou valori situate pe poziiile determinate. Tabloul rezultat este returnat prin interme
parametrului v al subprogamului.
Limbajul Pascal
Limbajul C/C++
Pentru antet corect se acord 2p. Pentru determinarea numrului minim din tabloul v se acord 1p, iar pentru determinarea poz
primei apariii a minimului se acord 2p. Pentru determinarea numrului maxim din tabloul v se acord 1p, iar pentru determina
poziiei ultimei apariii a maximului se acord 2p. Pentru interchimbarea celor dou numere determinate se acord 1p. Pe
corectitudinea global a programului 1p.
b)
Algoritmul de rezolvare propus determin suma cifrelor primului numr sx i apoi citete un numr din fiier, comparnd sum
cifrelor acestuia cu sx: n caz de egalitate se "prelungete" secvena curent, n caz contrar, se trece la o nou secven cu o no
sum sx curent. La finalul oricrei secvene se analizeaz lungimea ei, n vederea memorrii lungimii maxime.
Eficiena algoritmului, ca timp de executare, const n faptul c determinm valoarea cerut n timpul citirii datelor, deci parcurgem
singur dat irul de numere. Ca spaiu de memorie, soluia propus este eficient, deoarece utilizeaz doar variabile simple, f
folosirea unor structuri suplimentare de date.
Pentru o descriere coerent a metodei se acord 1p., iar pentru justificarea eficienei, nc 1p. - n total 2p.
Dei o implementare cu ajutorul unui subprogram ce calculeaz suma cifrelor unui numr natural era mult mai elegant, putem du
la extrem noiunea de eficien, spunnd c apelul unui subprogram necesit operaii n plus (gestiunea stivei la apel i la revenir
deci e mai bine s nu utilizm subprograme. n general, nu considerm c trebuie dus la absurd noiunea de eficien p
invocarea unor detalii tehnice de limbaj, ci ea trebuie s rmn la nivel algoritmic.
a)
Limbajul Pascal
Limbajul C/C++
var f:text;
nr,lgmax,lg,x,sx,snr:longint;
begin
assign(f,'bac.in');reset(f);
read(f,x);
lg:=1;
sx:=0;
while x>0 do begin
sx:=sx+x mod 10;
x:=x div 10
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bac.in");
int main()
{
int lgmax, lg, nr, sx=0, x, snr;
lg=1;
lgmax=0;
f>>x;
Limbajul Pascal
end.
Limbajul C/C++
end;
while not(eof(f)) do begin
read(f,nr);
snr:=0;
while nr>0 do begin
snr:=snr+nr mod 10;
nr:=nr div 10
end;
if snr=sx then inc(lg)
else begin
if lgmax<lg then lgmax:=lg;
lg:=1;
sx:=snr
end;
end;
if lgmax<lg then lgmax:=lg;
close(f);
write(lgmax)
}
while(x)
{ sx=sx+x%10; x=x/10; }
while(f>>nr)
{
snr=0;
while(nr)
{ snr+=nr%10; nr=nr/10; }
if (snr==sx) lg++;
else {
if(lgmax<lg) lgmax=lg
lg=1;
sx=snr;
}
}
if (lgmax<lg) lgmax=lg;
cout<<lgmax;
f.close();
return 0;
Se acord 1p. pentru operaiile cu fiiere (declarare, nume corect i deschidere pentru citire), nc 1p. pentru citirea tuturor numer
din fiier, 1p. pentru un algoritm principial corect, nc 1p. pentru determinarea valorii cerute, 1p. pentru afiarea ei, 1p. pe
corectitudinea formal (declararea variabilelor, structura programului, sintaxa instruciunilor, etc.).
Se acord 1p. pentru alegerea unui algoritm eficient ca timp de executare (O(n)) i 1p. pentru utilizarea eficent a memorie
total, 8p.
Se consider o stiv n care iniial au fost introduse, n aceast ordine, elementele cu valorile 1 i 2:
Se noteaz cu AD(x) operaia prin care se adaug elementul cu valoarea x n stiv i cu EL operaia prin care se elimin
un
element
din
stiv.
Cte
elemente
va
conine
stiva
n
urma
executrii
secvenei
de
operaii: AD(3);EL;EL;EL;AD(2);EL;AD(1)? (4p.)
a. 1
2.
b. 2
c. 3
d. 4
Cte grafuri orientate, distincte, cu 5 vrfuri se pot construi? Dou grafuri se consider distincte dac matricele lor de
adiacen sunt diferite.(4p.)
a. 5
b. 120
c. 210
d. 410
n declararea urmtoare, cmpurile x i y ale nregistrrii pot memora coordonatele carteziene ale unui punct din
planul xOy. Scriei o expresie n limbajul Pascal | C/C++ care s aib valoarea true|1 dac i numai dac punctul
memorat n variabila A este situat pe axa Ox, iar punctul memorat n variabila B este situat pe axa Oy. (6p.)
Limbajul Pascal
Limbajul C/C++
type punct=record
x,y:real
end;
var A,B:punct;
4.
struct punct
{ float x,y; } A,B;
Se consider un arbore cu rdcin reprezentat prin urmtorul vector "de tai": (0,1,1,1,4,4,6,7).
Scriei toate lanurile elementare distincte, de lungime maxim, care au extremitatea final n nodul 8. (6p.)
5.
Salt la pagina
19
Stiva conine iniial dou elemente si mai sunt adugate nc trei. n total au fost adugate n stiv cinci elemente. Sunt eliminate pa
elemente din coad. Astfel rmne un singur element n stiv.
Pentru precizarea rspunsului a) se acord 4p.
Fiecrui graf i corespunde o funcie
f:{(i,j)|ij, 1i,j5} -> {0,1,2,3}
care asociaz perechii de vrfuri distincte (i,j) valoarea:
Numrul grafurilor cu cte n vrfuri este egal cu numrul acestor funcii, adic
Pot fi concepute mai multe metode de obinere a matricei cerute. Metoda clasic ce completeaz coloanele matricei, cu liniile, respe
coloanele, numerotate de la 1 la n, respectiv de la 1 la m, n maniera descris, este:
Pentru declararea corect a matricei se acord 1p., pentru citirea lui n i m se mai acord 1p., pentru completarea corect a primei lini
acord 1p., pentru completarea corect a primei coloane se acord 1p., pentru completarea corect a celorlalte elemente se acord 3p.
pentru afiarea matricei conform cerinei se acord 2p. n plus, pentru declararea variabilelor simple, structura i corectitudinea sintactic
programului se mai acord 1p. - n total 10p.
Salt la pagina
17
Utiliznd metoda backtracking se genereaz n ordine cresctoare toate numerele naturale de cte cinci cifre din mulimea A={1,2,3,
numere n care suma primelor dou cifre este 5 .Primele numere generate sunt, n ordine: 14111, 14112, 14113, 14114, 14121, 1412
Cte dintre numerele generate ncep i se termin cu cifra 3? (4p.)
a. 4
b.8
c. 12
d. 16
Limbajul C/C++
void f(int x) {
if(x>9) {
printf("%d",x%10);/ cout<<x%10;
f(x/10)
printf("*"); / cout<<"*";
}
else cout<<"#";
}
end;
a) Scriei ce se va afia n urma apelului f(12345). (3p.)
b) Scriei toate valorile numere naturale pe care le poate avea o variabil n, astfel nct pentru apelul f(n) s se afieze d
caracterul #. (3p.)
Scriei definiia complet a unui subprogram sub, cu trei parametri, care primete prin intermediul parametrilor:
-
v, un tablou unidimensional care memoreaz un ir de n numere naturale, fiecare avnd cel mult patru cifre;
Subprogramul sub determin dublarea fiecrei apariii a valorii parametrului x n irul de numere primit prin parametrul v. De aseme
subprogramul va furniza prin intermediul parametrului n numrul de numere din irul modificat, iar prin parametrul v tabloul modificat. D
valoarea parametrului x nu apare n irul de numere atunci valorile parametrilor nu se vor modifica.
Exemplu. Pentru valorile n=10, v=(51, 19, 3, 52, 19, 215, 19, 19, 4, 65), x=19 ale parametrilor, n urma apelului, subprogramului sub
furniza prin parametrii indicai valorile n=14 i v=(51, 19, 19, 3, 52, 19, 19, 215, 19, 19, 19, 19, 4, 65).
(10p.)
Fiierul text BAC.TXT conine un ir s de cel mult un milion de numere naturale, formate fiecare din cel mult 9 cifre, separate prin cte
spaiu
a) Scriei un program C/C++ care citete numerele din fiier i determin, utiliznd un algoritm eficient din punct de vedere al memo
utilizate i al timpului de executare, lungimea secvenei obinute prin eliminarea din cele dou extremiti ale irului s a unui numr minim
numere, fr a schimba ordinea celorlalte numere, astfel nct secvena rezultat s nceap cu un numr format doar din cifre pare i s
termine cu un numr format doar din cifre impare. Programul va afia pe ecran lungimea secvenei obinute.
De exemplu, dac fiierul BAC.TXT conine numerele:
132 214 62 34 28 34 8 45 18 72 35 12 17 34 4 135 63 81 101
pe ecran se va afia numrul 14, deoarece secvena cutat se obine prin eliminarea numerelor subliniate i este format din
numere (8p.)
b) Descriei succint, n limbaj natural, metoda de rezolvare folosit, explicnd n ce const eficiena ei (3 - 4 rnduri). (2p.)
Salt la pagina
20
n desenul alturat este prezentat mecanismul prin care se execut apelul f(12345) al subprogramului recursiv f. Se vor afia
ordine: 5432#****, rspuns pentru care se acord 3p.
b)
Se observ c la n urma executrii apelurilor f(0), f(1), f(2), f(3), f(4), f(5), f(6), f(7), f(8) i f(9), se va afia de fiecare dat caracteru
Pentru rspunsul 0,1,2,3,4,5,6,7,8,9 se acord 3p.
Prelucrarea oferit de subprogram determin fiecare apariie a valorii x n tablou. Dublarea unui element cu valoarea x se realize
prin deplasarea cu o poziie la dreapta a tuturor elementelor situate la dreapta celui ce urmeaz a fi dublat, ncepnd de la sfr
irului. Dup realizarea deplasrii, se mrete valoarea lui n cu 1.
Limbajul Pascal
Limbajul C/C++
Pentru antet corect se acord 3p. (Pentru respectarea structurii antetului (procedure/void) se acord 1p., pentru declararea core
a parametrilor de intare x, pentru declararea corect a parametrilor n i v nc 1p., pentru declararea variabilelor locale nc 1p).
Pentru determinarea fiecrei apariii ale numrului x n tabloul 1p. Pentru dublarea primei apariii n tabloului i incrementarea va
parametrului n se acord cte 1p. Pentru determinarea tuturor apariiilor lui x n tablou se acord 2p. Pentru marirea corespunzto
valorii parametrului n se acord 1p. Pentru corectitudinea global a programului 1p.
n total 10p.
b)
Algoritmul de rezolvare propus presupune determinarea poziei pp a primului numr format doar din cifre pare, respectiv ui a ultim
numar format doar din cifre impare, din fiier pe msura citirii datelor i utilizeaz doar variabile simple fr folosirea unor struc
suplimentare de date.
Eficiena algoritmului, ca timp de executare, const n faptul c parcurgem o singur dat irul cu un numr impresionant de num
Deoarece numrul de valori din fiier (1000000) este dimensiunea care conteaz n problem, spunem c am obinut un algo
liniar. Ca spaiu de memorie, soluia propus este eficient, deoarece utilizeaz doar variabile simple.
Lungimea subirului cutat va fi: ui-pp+1 sau 0 dac pp=0 sau ui=0.
Pentru o descriere coerent a metodei se acord 1p., iar pentru justificarea eficienei, nc 1p. - n total 2p.
a)
Limbajul Pascal
Limbajul C/C++
var f:text;
nr,i, pp, ui,p, imp:longint;
begin
assign(f,'bac.in'); reset(f);
while not(eof(f)) do begin
read(f,nr);
inc(i);
p:=0;
imp:=0;
repeat
if nr mod 2=0 then inc(p)
else inc(imp);
nr:=nr div 10
until nr=0;
if (imp=0) and (pp=0) then pp=i
else if (p==0) ui:=i;
end;
if pp*up=0 then writeln ('0')
else writeln(ui-pp+1);
close(f);
end.
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bac.in");
int main()
{
int pp=0, ui=0, i=0, nr, p, imp;
while(f>>nr)
{
p=imp=0;
i++;
do
{
if(nr%2==0) p++;
else imp++;
nr/=10;
}while(nr>0);
if(imp==0 && pp=0)pp=i;
else if (p==0) ui=i;
}
if(pp*ui) cout<<"Nu exista";
else cout<<ui-pp+1;
f.close();
}
Se acord 1p. pentru operaiile cu fiiere (declarare, nume corect i deschidere pentru citire), nc 1p. pentru citirea tuturor numerel
din fiier, 1p. pentru un algoritm principial corect, nc 1p. pentru determinarea valorii cerute, 1p. pentru afiarea ei, 1p. pentru
corectitudinea formal (declararea variabilelor, structura programului, sintaxa instruciunilor, etc.).
Se acord 1p. pentru alegerea unui algoritm eficient ca timp de executare (O(n)) i 1p. pentru utilizarea eficent a memorie
total 8p.
Considernd o variabil x de tip real, indicai expresia care are valoarea true/1 dac i numai dac x[1,5][7,9]. (4p.)
Limbajul Pascal
Limbajul C/C++
notat cu x%y restul mpririi numrului natural x la numrul natural nenul y, iar cu [x] partea ntreag a numrului real x.
Scriei n pseudocod un algoritm, echivalent cu cel dat, n care s se nlocuiasc structura pentru j<-2,[i/2] execut... c
structur repetitiv de alt tip. (6p.)
Scriei programul Pascal/C/C++ corespunztor algoritmului dat. (10p.)
Salt la pagina
24
Algoritmul calculeaz cte numere prime exist ntre a i b, deoarece variabila d va conine fie cel mai mare divizor propriu al u
numr i cuprins ntre a i b, fie valoarea 0 dac numrul i nu are niciun divizor propriu (ceea ce nseamn c numrul i este prim
Pentru precizarea valorii 3 (ntre 7 i 13 exist 3 numere prime: 7, 11 i 13) se acord 6p.
Deoarece a=10, nseamn c trebuie determinat cea mai mare valoare posibil pentru b astfel nct ntre 10 i b s existe 4 num
prime. Se observ uor faptul c ntre 10 i 19 exist 4 numere prime (11, 13, 17 i 19), numerele 20, 21 i 22 nu sunt prime
numrul 23 este prim, deci cea mai mare valoare posibil pentru b astfel nct ntre 10 i b s existe 4 numere prime este 22.
Structura repetitiv pentru j2,[i/2] execut se poate nlocui cu una dintre structurile repetitive ct
executsau repet... pn cnd, avnd grij la iniializarea, testarea i incrementarea variabilei j:
Limbajul Pascal
timp
Limbajul C/C++
Atragem atenia c structura ct timp...execut asigur echivalena cu structura pentru...execut n toate situaiile,
cnd structura repet...pn cnd este echivalent doar n unele situaii, printre care i cea din acest algoritm.
Pentru alegerea unei structuri repetitive se acord 2 p., pentru iniializarea lui j se acord 1p., pentru testarea condiiei de continu
sau oprire se acord 1p., pentru incrementarea lui j se acord 1p., iar pentru scrierea integral a restului algoritmului se mai aco
1p. - n total 6p.
Se testeaz capacitatea de a reprezenta pe hrtie algoritmul dat folosind un limbaj de programare studiat. Pentru instruciunile core
de declarare a variabilelor, de citire a datelor, de afiare a rezultatului i de decizie se acord cte 1p., pentru cele dou instruc
repetitive se acord 3p., iar pentru cele 4 atribuiri se acord 2p. Pentru structura corect a programului se mai acord 1p., dec
total10p.
Fie G un graf neorientat complet cu 10 vrfuri. Numrul maxim de muchii care pot fi eliminate din G astfel nct acesta s rm
conex este: (4p.)
9
b. 32
c. 36
d. 40
Se consider tipul de date Data, capabil s memoreze o dat calendaristic i tipul de date Elev, capabil s memoreze num
data naterii i media anual a unui elev. Care dintre urmtoarele expresii are valoare true/1 dac i numai dac elevul
crui date sunt memorate n variabila e de tipul Elev este nscut n anul 2000? (4p.)
bajul Pascal
Limbajul C/C++
e^.data_nasterii^.an = 2000
e->data_nasterii->an == 2000
e.data_nasterii.an = 2000
e.data_nasterii.an == 2000
e.an = 2000
e.an == 2000
data_nasterii.an = 2000
data_nasterii.an == 2000
Se consider un graf neorientat G cu 6 noduri etichetate cu numerele de la 1 la 6, graf dat prin listele de adiacen de mai jos:
1:
2:
3:
4:
5:
6:
2
1
2
3
3
1
6
3
4 5 6
5
4
3
Verificai dac graful G este eulerian i, n caz afirmativ, scriei un ciclu eulerian din vrful 1. (6p.)
Se consider dou iruri de caractere s i t declarate prin:
Pascal: var s,t:string[30];
C/C++: char s[31],t[31];
tiind c ambele iruri sunt formate numai din litere mici ale alfabetului englez, scriei doar instruciunea sau instruciunile c
afieaz pe ecran mesajul DA n cazul n care irul s este un prefix al irului t sau mesajul NU n caz contrar. (6p.)
S se construiasc o matrice cu n linii i n coloane care conine pe prima linie numerele naturale de la 1 la n n ord
cresctoare, pe a doua linie numerele naturale de la n+1 la 2n n ordine descresctoare, pe a treia linie numerele naturale
la 2n+1 la 3n n ordine cresctoare, pe a patra linie numerele naturale de la 3n+1 la 4n n ordine descresctoare i aa
departe pn la linia n. Scriei programul care citete de la tastatur o valoare natural n (2<=n<=50), construiete matr
conform cerinei i o afieaz pe ecran, pe linii, cu spaii ntre elementele de pe fiecare linie.
Deoarece variabila e de tip Elev conine data naterii elevului respectiv n cmpul data_naterii de tip Data, rezult c data na
elevului respectiv (adic ziua, luna i anul) se poate accesa prin expresia e.data_naterii, deci anul naterii sale poate fi accesat
expresia e.data_naterii.an.
Pentru rspunsul b) se acord 4p.
Graful dat se poate reprezenta grafic astfel:
Se observ faptul c graful dat este eulerian, deoarece este conex i gradul oricrui vrf este un numr par. Din vrful 1 se pot constr
cicluri euleriene:
i
.
Pentru scrierea nodurilor oricruia dintre ciclurile euleriene
sau
se acord 6p.
irul t este un prefix al irului s dac este un subir al lui s care ncepe pe prima poziie:
Limbajul Pascal
Limbajul C/C++
if Pos(t,s)=1 then
writeln('DA')
else
writeln('NU');
if(strstr(s,t)==s)
cout<<"DA";
else
cout<<"NU";
Pentru utilizarea funciei corespunztoare se acord 3p., pentru afiarea irului de caractere cerut se acord 2p., iar pentru corectitudi
sintactic a secvenei se mai acord 1p. - n total 6p.
Pot fi concepute mai multe metode de obinere a matricei cerute, una dintre ele fiind urmtoarea:
Pentru declararea corect a matricei se acord 1p., pentru citirea lui n se mai acord 1p., pentru parcurgerea unei linii se acord 1p., pe
completarea corect a unei linii (par+impar) se acord 1p.+1p., pentru completarea corect a tuturor liniilor (pare+impare) se acord
+1p., iar pentru afiarea matricei conform cerinei se acord 2p. n plus, pentru declararea variabilelor simple, structura i corectitudi
sintactic a programului se mai acord 1p. - n total 10p
Utiliznd metoda backtracking se genereaz, n ordinea cresctoare a valorii, toate numerele formate din exact n cifre nen
distincte
i
avnd
suma
cifrelor
egal
cu s.
Astfel,
pentru n=2 i s=10,
se
obin,
n
ord
numerele:19,28,37,46,64,73,82,91. Folosind aceeai metod, se genereaz numerele formate din n=4 cifre distinct
avnd suma cifrelor s=25.
Care
(4p.)
3598
va
fi
al
b. 2986
treisprezecelea
c. 358
9
d. 3679
numr
gene
bajul Pascal
Limbajul C/C++
criei cea mai mare valoare de 3 cifre pe care o poate avea o variabil x, astfel nct pentru apelul f(x,2) s se obin valoarea 0. (3p.)
Scriei definiia complet a subprogramului cifre, cu doi parametri, care primete prin intermediul parametrului a un nu
natural format din maxim 9 cifre i furnizeaz prin al doilea parametru b numrul obinut prin eliminarea cifrelor lui a aflate
poziii pare. Cifrele numrului a se numeroteaz de la dreapta spre stnga, ncepnd cu poziia 0 (corespunztoare c
unitilor).
Exemplu: pentru a=2334157, valoarea returnat prin b va fi 345. (10p.)
Fiierul text bac.in conine, pe prima linie, cel mult 1000000 de numere naturale nenule, fiecare fiind format din
mult 9cifre. Oricare dou numere consecutive sunt desprite printr-un spaiu.
a) Scriei un program care, folosind un algoritm eficient din punct de vedere al timpului de executare i al spaiului de mem
utilizat, determin i scrie n fiierul bac.out cel mai mare numr natural care se poate obine din cifrele tuturor numerelor
fiierul bac.in. (8p.)
Exemplu: dac fiierul bac.in conine numerele 2117
numrul98877555321110.
90
885
515
b) Descriei n limbaj natural metoda utilizat i explicai n ce const eficiena ei. (2p.)
Se genereaz n maniera "naintare cu revenire", numerele: 1789, 1798, 1879, 1897, 1978, 1987, 2689, 2698, 28
2896, 2968, 2986, 3589, etc.
Pentru rspunsul c) se acord 4p.
a)
b)
n urma apelului f(x,2) se va calcula suma divizoriilor proprii ai numrului x, deci valoarea 0 se va obine dac i nu
dac x este un numr prim.
Pentru rspunsul 997 (cel mai mare numr prim cu 3 cifre) se acord 3p.
Subprogramul construiete valoarea cerut cifr cu cifr, adugnd la numrul b (iniial egal cu 0) doar cifrele numrului a care
gsesc pe poziii impare. Numerotarea cifrelor lui a se realizeaz de la dreapta spre stnga, folosind variabila auxiliar p, ncep
cu poziia 0 (corespunztoare cifrei unitilor). Deoarece cifrele lui a sunt accesibile de la ultima ctre prima, trebuie utilizate nmu
cu puteri consecutive ale lui 10.
Limbajul Pascal
Limbajul C/C++
Pentru respectarea structurii antetului (procedure/void) se acord 1p., pentru declararea corect a parametrului de intare a
1p., pentru declararea corect a parametrului de ieire b nc 1p., pentru declararea variabilelor locale nc 1p., iar pe
respectarea structurii subprogramului i a sintaxei limbajului se acord nc 1p. Corectitudinea algoritmic a prelucrrii n vede
obinerii valorii cerute este notat cu 4p. Pentru transmiterea natural a rezultatului prin parametrul b se acord 1p, acea
nsemnnd c valoarea luib nu se afieaz i nu se returneaz explicit. n total 10p.
b)
Vom utiliza un vector de frecvene cu 10 elemente fc pentru a contoriza apariiile fiecrei cifre. Vom parcu
fiierul bac.in caracter cu caracter, folosind variabila c de tip char, i, n cazul n care variabila c conine o cifr, vom cre
frecvena sa cu 1. Cel mai mare numr care se poate forma folosind cifrele tuturor numerelor din fi ier se obine scriind
fiierul bac.out fiecare cifr c, de la 9 la 0,de un numr de ori egal cu frecvena sa.
Eficiena algoritmului din punct de vedere al timpului de executare const n faptul c parcurgem o singur dat fiierul
intrarebac.in, obinnd astfel un algoritm liniar n raport cu numrul de cifre din fiier. Eficiena algoritmului din punct de veder
memoriei utilizate const n faptul c se va folosi doar un vector de frecvene cu 10 componente, evitnd astfel memorarea tut
celor maximum 9000000 de cifre din fiier ntr-un vector de caractere.
Pentru o descriere coerent a metodei se acord 1p., iar pentru justificarea eficienei, nc 1p. n total 2p.
a)
Limbajul Pascal
Limbajul C/C++
var fin,fout:text;
c:char; i,j:longint;
fc:array[0..9]of byte;
begin
assign(fin,'bac.in'); reset(fin);
assign(fout,'bac.out'); rewrite(fout);
for i:=0 to 9 do fc[i]:=0;
while(not eof(fin)) do
begin
read(fin,c);
#include <fstream>
using namespace std;
ifstream fin("bac.in");
ofstream fout("bac.out");
int main()
{
int fc[10],i,j;
char c;
for(i=0;i<10;i++)
fc[i]=0;
Limbajul Pascal
Limbajul C/C++
if((c>='0')and(c<='9')) then
inc(fc[ord(c)-ord('0')]);
end.
end;
close(fin);
for i:=9 downto 0 do
for j:=1 to fc[i] do
write(fout,i);
close(fout);
while(fin>>c)
if((c>='0')&&(c<='9'))
fc[c-'0']++;
fin.close();
for(i=9;i>=0;i--)
for(j=0;j<fc[i];j++)
fout<<i;
fout.close();
Se acord 1p. pentru operaiile cu fiiere (declarare, nume corect i deschidere pentru citire), nc 1p. pentru citirea tuturor cifrelor
fiier, 1p. pentru un algoritm corect, nc 2p. pentru determinarea numrului cerut i 1p. pentru corectitudinea formal (declara
variabilelor, structura programului, sintaxa instruciunilor, etc.).
Se acord 1p. pentru alegerea unui algoritm eficient ca timp de executare i 1p. pentru utilizarea eficent a memoriei. n total 8p.
Fie n o variabil de tip ntreg care conine un numr natural format din exact 3 cifre. Indicai expresia care are valoarea true/1 dac i nu
prima cifr a numrului n este egal cu ultima. (4p.)
Limbajul Pascal
Limbajul C/C++
n/10==n%100
n%10==n/100
n/10==n/100
n%10==n%100
notat cu x%y restul mpririi numrului natural x la numrul natural nenul y, iar cu [x] partea ntreag a numrului real x.
Scriei n pseudocod un algoritm, echivalent cu cel dat, n care s se nlocuiasc structura pentru...execut cu o struc
repetitiv de alt tip. (6p.)
Scriei programul Pascal/C/C++ corespunztor algoritmului dat. (10p.)
Deoarece a=818, nseamn c trebuie determinat cea mai mare valoare posibil pentru b astfel nct ntre 818 i b
existe 7numere formate doar din cifre pare. Se observ faptul c ntre 818 i 828 exist 5 numere cu aceast proprie
(820, 822, 824,826 i 828), ntre 829 i 839 nu exist nici un numr cu aceast proprietate (toate conin cifra impar 3),
numerele 840 i 842au proprietatea cerut. n concluzie, cea mai mare valoare posibil pentru b este 843 (numrul 844 este for
doar din cifre pare, deci algoritmul ar afia valoarea 8).
Pentru precizarea valorii 843, se acord 4p.
Structura repetitiv pentru ia,b execut... se poate nlocui cu una dintre structurile repetitive ct
executsau repet... pn cnd, avnd grij la iniializarea, testarea i incrementarea variabilei i:
timp
Atragem atenia c structura ct timp...execut asigur echivalena cu structura pentru...execut n toate situaiile,
cnd structura repet...pn cnd este echivalent doar n unele situaii, printre care i cea din acest algoritm.
Pentru alegerea unei structuri repetitive se acord 2 p., pentru iniializarea lui i se acord 1p., pentru testarea condiiei de continu
sau oprire se acord 1p., pentru incrementarea lui i se acord 1p., iar pentru scrierea integral a restului algoritmului se mai aco
1p. - n total 6p.
Se testeaz capacitatea de a reprezenta pe hrtie algoritmul dat folosind un limbaj de programare studiat. Pentru instruciunile core
de declarare a variabilelor, de citire a datelor, de afiare a rezultatului i de decizie se acord cte 1p., pentru cele dou instruc
repetitive se acord 3p., iar pentru cele 7 atribuiri se acord 2p. Pentru structura corect a programului se mai acord 1p., dec
total 10p.
Un graf orientat are 8 vrfuri, numerotate de la 1 la 8, i arcele: (1,2), (2,3), (2,6), (6,1), (6,5), (3,6), (4,5), (3,2), (5,4
(3,4). Numrul vrfurilor care au gradul intern egal cu gradul extern este: (4p.)
4
b. 1
c. 2
d. 3
Se consider tipul de date Punct2D, capabil s memoreze coordonatele unui punct n plan, i tipul de date Punct3D, capabi
memoreze coordonatele unui punct n spaiu. Care dintre urmtoarele secvene de instruciuni poate fi folosit pentru a iniia
toate coordonatele punctului q cu valoarea 0? (4p.)
bajul Pascal
Limbajul C/C++
e Punct2D=record
x,y:real;
end;
e Elev=record
p:Punct2D;
z:real;
end;
q:Punct3D;
struct Punct2D
{
double x,y;
};
struct Punct3D
{
Punct2D p;
double z;
};
Punct3D q;
q.x:=0;q.y:=0;q.z:=0;
q.x=q.y=q.z=0;
q.p:=0;q.z:=0;
q.p=q.z=0;
q.p.x:=0;q.p.y:=0;q.z:=0;
q.p.x=q.p.y=q.z=0;
q.p.x:=0;q.p.y:=0;q.p.z:=0;
q.p.x=q.p.y=q.p.z=0;
Limbajul C/C++
var s:string[20];
...................
s:='examene';
s:=s+copy(s,3,3);
s:=copy(s,5,20);
writeln(length(s));
char s[20];
...................
strcpy(s,"examene");
strncat(s,s+2,3);
strcpy(s,s+4);
cout<<strlen(s);
Scriei ce se va afia pe ecran n urma executrii secvenei de instruciuni de mai sus. (6p.)
Scriei un program care citete de la tastatur un numr natural n (3n50) i elementele unui tablou bidimensional cu n
i ncoloane, numere naturale cu cel mult patru cifre, apoi modific tabloul n memorie, eliminnd elementele aflate pe diagon
principal, ca n exemplu. Programul trebuie s afieze pe ecran tabloul obinut, fiecare linie a tabloului pe cte o linie a ecranu
elementele de pe aceeai linie fiind separate prin cte un spaiu.
Exemplu: pentru n=4 i tabloul
7
8
4
0
5
1
6
9
3
5
3
9
4
6
5
6
8 5 6
4 6 5
0 9 9
(10p.)
Se observ uor faptul c doar vrfurile 1, 2 i 6 au gradul intern egal cu gradul extern.
Pentru precizarea rspunsului d) se acord 4p.
Deoarece variabila q de tip Punct3D conine coordonatele x i y ale unui punct din spaiu n cmpul p de tip Punct2D, rezult c ace
coordonate se pot accesa prin expresiile q.p.x i q.p.y, n timp ce coordonata z poate fi accesat prin expresia q.z.
Pentru rspunsul c) se acord 4p.
Arborele cu rdcin dat se poate reprezenta grafic ca n imaginea de mai jos i se observ faptul c nodurile 2, 4, 6 i 7 sunt fru
(noduri terminale). Acelai lucru se poate observa i direct din vectorul de tai, deoarece nodurile respective nu sunt tai pentru alte v
din arbore.
Pentru a elimina elementul aflat pe diagonala principal pe o linie i a matricei (respectiv elementul aflat pe coloana j=i), se vor dep
cu o poziie spre stnga elementele aflate pe urmtoarele poziii (respectiv pe coloanele i+1,i+2,...,n), obinndu-se astfel o mat
Pentru declararea corect a matricei se acord 1p., pentru citirea lui n se mai acord 1p., pentru citirea elementelor matricei se
acord 1p., pentru eliminarea corect a tuturor elementelor aflate pe diagonala principal se mai acord 4p., iar pentru afi area mat
conform cerinei se acord 2p. n plus, pentru declararea variabilelor simple, structura i corectitudinea sintactic a programului se
acord 1p. - n total 10p.
Utiliznd metoda backtracking se genereaz, n ordinea cresctoare a valorii, toate numerele formate din exact n cifre aflat
ordine strict cresctoare i avnd prima cifr cel puin egal cu c. Astfel, pentru n=3 i c=5, se obin, n ord
numerele: 567, 568, 569,578, 579, 589, 678, 679, 689 i 789. Folosind aceeai metod, se genereaz numerele form
din n=5 cifre aflate n ordine strict cresctoare i avnd prima cifr cel puin egal cu c=3.
Care va fi al zecelea numr generat? (4p.)
a. 34789
b. 35678
bajul Pascal
Limbajul C/C++
c. 34689
d. 357
criei cea mai mare valoare format din 7 cifre pe care o poate avea o variabil n, astfel nct pentru apelul f(n,7) s se ob
area 2. (3p.)
Scriei definiia complet a subprogramului divp, cu 3 parametri, care primete prin intermediul parametrului a un numr nat
cuprins ntre 2 i 1000000000 i furnizeaz prin al doilea parametru b cel mai mic divizor propriu al numrului a, iar prin cel d
treilea parametru c furnizeaz cel mai mare divizor propriu al numrului a. Un divizor propriu al unui numr natural nenul n este
divizor al su diferit de 1 i n. Dac numrul n nu are nici un divizor propriu, atunci parametrii b i c trebuie s fie furnizeze amn
valoarea 0. Dac numrul n are un singur divizor propriu d, atunci parametrii b i c trebuie s fie furnizeze amndoi valoarea lui
Exemplu: pentru a=2334157, valoarea returnat prin b va fi 345. (10p.)
Fiierul text bac.in conine, pe prima linie, cel mult 1000000 de numere naturale nenule, fiecare fiind format din cel mult 9 c
Oricare dou numere consecutive sunt desprite printr-un spaiu.
a) Scriei un program care, folosind un algoritm eficient din punct de vedere al timpului de executare i al spaiului de memorie utili
determin i scrie n fiierul bac.out cel mai mic numr natural care se poate obine din cifrele tuturor numerelor
fiierul bac.in.(8p.)
Exemplu: dac fiierul bac.in conine
numrul10112355577889.
numerele 2117
90
885
515
37, atunci
con
b) Descriei n limbaj natural metoda utilizat i explicai n ce const eficiena ei. (2p.)
Utiliznd metoda backtracking se genereaz, n ordinea cresctoare a valorii, toate numerele formate din exact n cifre aflat
ordine strict cresctoare i avnd prima cifr cel puin egal cu c. Astfel, pentru n=3 i c=5, se obin, n ord
numerele: 567, 568, 569,578, 579, 589, 678, 679, 689 i 789. Folosind aceeai metod, se genereaz numerele form
din n=5 cifre aflate n ordine strict cresctoare i avnd prima cifr cel puin egal cu c=3.
Care va fi al zecelea numr generat? (4p.)
a. 34789
b. 35678
c. 34689
d. 357
bajul Pascal
Limbajul C/C++
criei cea mai mare valoare format din 7 cifre pe care o poate avea o variabil n, astfel nct pentru apelul f(n,7) s se ob
area 2. (3p.)
Scriei definiia complet a subprogramului divp, cu 3 parametri, care primete prin intermediul parametrului a un numr nat
cuprins ntre 2 i 1000000000 i furnizeaz prin al doilea parametru b cel mai mic divizor propriu al numrului a, iar prin cel d
treilea parametru c furnizeaz cel mai mare divizor propriu al numrului a. Un divizor propriu al unui numr natural nenul n este
divizor al su diferit de 1 i n. Dac numrul n nu are nici un divizor propriu, atunci parametrii b i c trebuie s fie furnizeze amn
valoarea 0. Dac numrul n are un singur divizor propriu d, atunci parametrii b i c trebuie s fie furnizeze amndoi valoarea lui
Exemplu: pentru a=2334157, valoarea returnat prin b va fi 345. (10p.)
Fiierul text bac.in conine, pe prima linie, cel mult 1000000 de numere naturale nenule, fiecare fiind format din cel mult 9 c
Oricare dou numere consecutive sunt desprite printr-un spaiu.
a) Scriei un program care, folosind un algoritm eficient din punct de vedere al timpului de executare i al spaiului de memorie utili
determin i scrie n fiierul bac.out cel mai mic numr natural care se poate obine din cifrele tuturor numerelor
fiierul bac.in.(8p.)
Exemplu: dac fiierul bac.in conine
numrul10112355577889.
numerele 2117
90
885
515
37, atunci
con
b) Descriei n limbaj natural metoda utilizat i explicai n ce const eficiena ei. (2p.)
cu
reven
b)
n urma apelului f(n,7) se va calcula cte cifre diferite de 7 are numrul n, deci valoarea 2 se va obine dac i numai d
numrul nva fi format din 5 cifre egale cu 7 i dou cifre diferite de 7. Deoarece ne intereseaz cea mai mare valoare posibil a lu
rezult c ambele cifre diferite de 7 trebuie s fie egale cu 9.
Pentru rspunsul 9977777 se acord 3p.
Subprogramul caut, mai nti, cel mai mic divizor propriu d al numrului a. Dac acesta nu exist, atunci parametrii b i c prim
amndoi valoarea 0, altfel parametrul b primete valoarea lui d, iar parametrul c primete valoarea [a/d] (cel mai mare divizo
unui numr se obine mprind numrul respectiv la cel mai mic divizor al su).
Limbajul Pascal
Limbajul C/C++
Pentru respectarea structurii antetului (procedure/void) se acord 1p., pentru declararea corect a parametrului de intare a
1p., pentru declararea corect a parametrilor de ieire b i c nc 1p., pentru declararea variabilelor locale nc 1p., iar pe
respectarea structurii subprogramului i a sintaxei limbajului se acord nc 1p. Corectitudinea algoritmic a prelucrrii n vede
obinerii valorii cerute este notat cu 4p. Pentru transmiterea natural a rezultatului prin parametrii b i c se acord 1p, acea
nsemnnd c valorile lui b i c nu se afieaz i nu se returneaz explicit. n total 10p.
b)
Vom utiliza un vector de frecvene cu 10 elemente fc pentru a contoriza apariiile fiecrei cifre. Vom parcu
fiierul bac.in caracter cu caracter, folosind variabila c de tip char, i, n cazul n care variabila c conine o cifr, vom cre
frecvena sa cu 1. innd cont de faptul c un numr nu poate s nceap cu cifra 0, vom determina cel mai mic numr care se po
forma folosind cifrele tuturor numerelor din fiierul bac.in astfel:
cutm prima cifr nenul cn avnd frecvena cel puin egal cu 1 (sigur exist aceast cifr deoarece numerele
fiierul bac.insunt nenule!), o scriem n fiierul de ieire bac.out i i scdem frecvena cu 1;
ncepnd cu cifra 0, scriem n fiierul de ieire toate cifrele pn la 9, fiecare cifr c fiind scris de un numr de ori ega
frecvena sa fc[c].
Eficiena algoritmului din punct de vedere al timpului de executare const n faptul c parcurgem o singur dat fiierul
intrarebac.in, obinnd astfel un algoritm liniar n raport cu numrul de cifre din fiier. Eficiena algoritmului din punct de veder
memoriei utilizate const n faptul c se va folosi doar un vector de frecvene cu 10 componente, evitnd astfel memorarea tut
celor maximum 9000000 de cifre din fiier ntr-un vector de caractere.
Pentru o descriere coerent a metodei se acord 1p., iar pentru justificarea eficienei, nc 1p. - n total 2p.
a)
Limbajul Pascal
Limbajul C/C++
Se acord 1p. pentru operaiile cu fiiere (declarare, nume corect i deschidere pentru citire), nc 1p. pentru citirea tuturor cifrelor
fiier, 1p. pentru un algoritm corect, nc 2p. pentru determinarea numrului cerut i 1p. pentru corectitudinea formal (declara
variabilelor, structura programului, sintaxa instruciunilor, etc.).
Se acord 1p. pentru alegerea unui algoritm eficient ca timp de executare i 1p. pentru utilizarea eficent a memoriei. n total 8p.