Sunteți pe pagina 1din 7

 

 
 
 
 
 

 
 
 
 
 
 

Eficientizarea pregătirii elevilor pentru concursuri și


examenul de bacalaureat 

 
 
 
 
 

 
 
 
 
 

Prezentarea subiectelor date la bacalaureat


informatică 2019 sesiunea iunie-iulie

Profesori:
Bria Monica, Berceanu Viorel, Ionescu Florența, Moise Jeni, Tătaru Dana
/* Matrice Simetrica #include <iostream>
Cerința
Un tablou bidimensional cu număr impar de coloane este numit using namespace std;
simetric faţă de coloana din mijloc dacă, pe fiecare linie a tabloului,
elementele dispuse simetric faţă de elementul din mijloc al liniei
int main()
respective au valori egale. { int m,n,i,j,a[22][22];
Scrieţi un program care citește de la tastatură două numere naturale, bool ok=true;
m și n (n impar), și elementele unui tablou bidimensional cu m linii și
n coloane, numere naturale. Programul afișează pe ecran mesajul DA, cin>>m>>n;
dacă tabloul este simetric față de coloana din mijloc, sau mesajul NU
în caz contrar. for(i=1;i<=m;i++)
Date de intrare
for(j=1;j<=n;j++)
Programul citește de la tastatură numerele m și n , iar apoi cele n*m cin>>a[i][j];
elemente ale matricei.
for(j=1;j<=n/2;j++) // parcurg pe
Date de ieșire
Programul va afișa pe ecran mesajul DA sau NU, conform eununțului.
//matr. pe col. Si apoi pe linii
for(i=1;i<=m;i++)
Restricții și precizări
3 ≤ n, m ≤ 21 if(a[i][j]!=a[i][n+1-j])
numerele citite din matrice vor fi mai mici decât 10.000 ok=false;// actualizez
Exemplu //ok cu false de cate ori gases doua
Intrare elemente care nu coresp simetriei
45 if(ok) cout<<"DA";
12421
35553
else cout << "NU" ;
24142 return 0;
11111 }
Ieșire
Obs. Metod. Nu ar fi fost gresit nici
DA daca
Am fi parcurs j=1…n
*/
/* functia Impare void Impare(int &n){
Cerința int nn=0,c,p=1;
Subprogramul Impare are un singur // p va fi actualizat cu 10,
parametru, n, prin care primește un număr // 100, 1000,….
natural. Subprogramul înlocuiește fiecare cifră while(n){
impară a lui n cu cea mai mare cifră pară strict
mai mică decât ea (astfel cifra 1 se înlocuieşte cu c=n%10;
cifra 0, cifra 3 cu cifra 2 etc.) și furnizează if(c%2) {c--; // decrementam cifra para
numărul obținut tot prin parametrul n. nn=c*p+nn;
Scrieți definiția completă a subprogramului. p=p*10;
Restricții și precizări }
1 ≤ n ≤ 1.000.000.000 else{
Numele funcției va fi Impare nn=c*p+nn;
Funcția va primi un singur parametru, numărul n, p=p*10;
iar la finalul funcției n va avea valoarea cerută. }
Exemplu n=n/10;
Dacă n=235690, atunci, după apel, n=224680, } //end while
n=nn;
iar dacă n=15690, atunci, după apel, n=4680. }
Obs. Met. Puteam sa construim
Important rasturnatul (fara sa folosim p) si apoi
Soluția propusă va conține doar definiția funcției cerute. rasturnatul rasturnatului…
Prezența în soluție a altor instrucțiuni poate duce la erori
de compilare sau de execuție care vor avea ca efect Sau construiam un vector cu cifre si apoi
depunctarea soluției. din vectorul prelucrat numarul cerut
Atentie la &n
Varf local-fisiere // Varf local fisiere
#include <iostream>
Un termen al unui șir de numere se #include <fstream>
numește vârf local al acestuia dacă using namespace std;
nu există niciun alt termen mai mare ifstream f("bac.txt");
int main(){
sau egal cu el care să îl preceadă în int maxim, x, y;
șir sau dacă este egal cu termenul bool afisat; // indica faptul ca variabila curenta
este sau nu afisata
vecin anterior, iar acesta este vârf f >> x;
local. Fișierul bac.txt conține un șir maxim = x;
format din cel puțin două și cel mult cout << x << " "; afisat=true;
while(f >> x){
106 numere naturale din intervalul if (x> maxim){
[0,103], separate prin câte un spațiu. cout << x<< " "; // afisam la actualizarea
maximului
Se cere să se afișeze pe ecran, maxim = x;
separate prin câte un spațiu, toate afisat=true; // marcam afisarea
vârfurile locale ale șirului aflat în }
else
fișier. Proiectați un algoritm eficient if (x == maxim && afisat == true)
din punctul de vedere al timpului de {cout << x << " "; afisat=true;}
executare și al spațiului de memorie else
afisat=false; // resetam afisat in
utilizat. Exemplu: dacă fișierul conține conditiile in care sau nu am actualizat
numerele 7 4 9 10 10 10 8 10 10 8 30 //max sau nu avam un maxim egal la
se afișează pe ecran stanga
//sau canda nu am gasit un maxim cu
7 9 10 10 10 30 vecin
} // end while
return 0;
}

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