Bacalaureat 2016-Sesiunea august-septembrie

Subiecte bac 2016-Sesiunea de toamna

Rezolvare bac 2016-Sesiunea de toamna

Subiectul I

1. a

2.

a) 8

b) cel mai mic: 16

cel mai mare: 31

c) citeste n

(numar natural nenul)

p<-0

i<-1

-repeta

| m<-i

| -cat timp m%2=0 executa

| | m<[m/2]

| |_

|

| -daca m=1 atunci

| | p<-i

| |_

|

| i<-i+1

| pana cand i>n

|_

scrie p

d)

#include <iostream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

int n,i,m,p;

cout<<"n=";cin>>n;

p=0;

for(i=1;i<=n;i++)

{

m=i;

while(m%2==0)

m=m/2;

if(m==1)

p=i;

}

cout<<p;

return 0;

}

Subiectul al II-lea

1. c

2. c

3. 11aur

4. 1, 5, 7

5.

#include <iostream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

int n,m,i,j,x,p=0;

cout<<"n=";cin>>n;

cout<<"m=";cin>>m;

int a[n][m];

for(i=0;i<n;i++)

for(j=0;j<m;j++)

cin>>a[i][j];

cout<<endl<<"x=";cin>>x;

for(i=0;i<n;i++)

for(j=0;j<m;j++)

if(a[i][j]==x && (i==0 || i==n-1 || j==0 || j==m-1) )

p=1;

if(p==1)

cout<<"DA";

else

cout<<"NU";

return 0;

}

Subiectul al III-lea

1. b

2. CRETA CRTAE

3.

#include <iostream>

#include <cmath>

using namespace std;

int nrcifre(int n)

{

int p=0;

while(n)

{

n=n/10;

p++;

}

return p;

}

void duplicare(int n, int &d)

{

int i,m;

d=0;

for(i=nrcifre(n)-1;i>=0;i--)

{

m=n/pow(10,i);

d=d*10+m%10;

if(m%10%2==0)

d=d*10+m%10;

}

if(d==n)

d=-1;

}

Metoda 2

void duplicare(int n, int &d)

{

int p=1,x=n;

d=0;

while (x)

{

if(x%10%2) d+=x%10*p;

else

{

d+=x%10*p;

p*=10;

d+=x%10*p;

}

x/=10;

p*=10;

}

if(d==n) d=-1;

}

4.

b)

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

cout << "Hello world!" << endl;

ifstream f("bac.txt");

int i=0,x,n=-1,v=-1;

while(i<3&&!f.eof())

{

f>>x;

if(x%2!=0)

i++;

}

while(i==3&&!f.eof())

{

f>>x;

if(x%2!=0)

i++;

else

if(n<x)

{

v=n;

n=x;

}

}

if(n==-1 || v==-1)

cout<<"Nu exista";

else

cout<<v<<" "<<n;

f.close();

return 0;

}

a)

Parcurg fisierul pana ce citesc 3 numere impare. Cat timp am gasit 3 numere impare, continui parcurgerea fisierului pana la gasirea urmatorului numar impar. Intre timp, compar valoarea citita cu valoarea variabilei ce tine minte cel mai mare numar par precedat de 3 numere impare. Aceasta variabila este "n" si este initializata cu valoarea -1. Daca valoarea citita este mai mare ca "n" atunci "v" ia valoarea lui "n" si "n" ia valoarea citita. "v" este variabila ce tine minte a doua cea mai mare valoare para precedata de 3 numere impare. "v" este initializat cu valoarea -1. Daca la final, "n" sau "v" raman cu valoarea -1, se afiseaza mesajul "Nu exista". In caz contrar, se afiseaza valorile variabilelor "v" si "n".

Programul este eficient deoarece: este de tipul O(n), nu foloseste un tablou, este liniar, nu parcurge in fiecare caz intregul fisier.