Bacalaureat 2012-Sesiunea august-septembrie

Subiecte bac 2012-Sesiunea de toamna

Rezolvare bac 2012-Sesiunea de toamna

Subiectul I

1. c

2.

a) 15

b) (28; 28); (15;14)

c)

citeste n,p (numere naturale nenule)

s<-0

i<-1

-repeta

| j<-i

| -cat timp j%p<>0 executa

| | j<-j-1

| |_

|

| s<-s+j

| i<-i+1

|pana cand i>n

|_

scrie s

d)

#include <iostream>

using namespace std;

int main()

{

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

int n,p,s,i,j;

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

}while(n<=0);

do{cout<<"p=";cin>>p;

}while(p<=0);

s=0;

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

{

j=i;

while(j%p!=0)

j=j-1;

s=s+j;

}

cout<<"s="<<s;

return 0;

}

Subiectul II

1. d

2. b

3. if( t1.a + t1.b +t1.c > t2.a + t2.b + t3.c)

4. for(i=0;i<strlen(s);i++)

cout<<s+i<<" ";

5.

#include <iostream>

using namespace std;

int main()

{

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

unsigned int n,i,j;

do{cout<<"Introduceti un numar cuprins intre 2 si 15: n=";cin>>n;

}while(n<2 || n>15);

unsigned int a[n][n];

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

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

if(j==1)

a[i][j]=1;

else

if(i==n)

a[i][j]=j;

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

for(j=2;j<=n;j++)

a[i][j]=a[i+1][j]+a[i][j-1];

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

{for(j=1;j<=n;j++)

cout<<a[i][j]<<" ";

cout<<endl;

}

return 0;

}

Subiectul III

1. b

2.

f(3,4) are valoarea 3

f(2,20) are valoarea 16

3.

#include <iostream>

using namespace std;

void zero(int n,int v[50])

{

int i,j=1,a[25],b[25];

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

if(v[i]%2==0)

{a[j]=v[i];

j++;

}

j=1;

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

if(v[i]%2!=0)

{b[j]=v[i];

j++;

}

j=2;

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

{v[j]=a[i];

j=j+2;

}

j=1;

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

{v[j]=b[i];

j=j+2;

}

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

cout<<v[i]<<" ";

}

4.

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("bac.txt");

int n,x,i,max=-1,nrap,t;

f>>n;

while(f>>x)

{ i++;

if(x>max)

{max=x;

nrap=0;

t=i-1;

};

if(max>x)

nrap++;

}

nrap=nrap+t;

if(nrap>n/2)

cout<<"Da";

else

cout<<"Nu";

f.close();

return 0;

}

Am citit numarul "n" de pe prima linie a fisierului. In continuare, am citit si urmatoarele "n" numere din fisier. Daca numarul citit este mai mare decat variabila "max" declarata la inceput cu valoarea "-1", atunci max ia valoarea acestui numar. De fiecare data cand "max" este mai mare decat numarul urmator din fisier, valoarea lui "nrap" creste. Cand numarul citit din fisier este mai mare decat valoarea lui max, valoarea variabilel "nrap" se reinitializeaza. Variabila "i" numara numerele din fisier, iar de fiecare data cand "max" ia alta valoarea, numarul de numere ce au fost inaintea lui "max" este contorizat de variabila "t". Astfel, numarul de numere ce au fost inaintea si dupa "max" este contorizat.

Daca acest numar este mai mare decat n/2 afisam "Da", altfel, afisam "Nu".

Algortimul este eficient deoarece: nu foloseste un tablou, este liniar, parcurge o singura data fisierul, este de tipul O(n).