Bacalaureat 2011-Sesiunea august-septembrie

Subiecte bac 2011-Sesiunea de toamna

Rezolvare bac 2011-Sesiunea de toamna

Subiectul I

1. d

2.

a) 200

b) (96; 10); (97; 11); (98;12); (99;13); (10;96); (11;97); (12;98); (13;99)

c) citeste n,m

(numere naturale)

-daca n<m atunci

| x<-n

| n<-m

| m<-x

|_

n<n-m

scrie n

d)

#include <iostream>

using namespace std;

int main()

{

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

unsigned int n,m,x,c,p;

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

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

if(n<m)

{

x=n;

n=m;

m=x;

}

p=1;

while(m>0)

{

c=m%10;

m=m/10;

n=n-p*c;

p=p*10;

}

cout<<"n="<<n;

return 0;

}

Subiectul II

1. c

2. a

3. struct CARTE{ float preteuro;

int numarpagini;

char titlulcartii[51];

}x[100];

4. bAcAlAUrEAt

5.

#include <iostream>

using namespace std;

int main()

{

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

unsigned int n,i,j,m,a[25][25];

do

{

cout<<"Introduceti un numar cuprins intre 2 si 24: ";cin>>n;

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

do

{

cout<<"Introduceti un numar cuprins intre 2 si 24: ";cin>>m;

}while(m<2 || m>24);

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

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

if(i==n || j==m)

a[i][j]=1;

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

for(j=m-1;j>=1;j--)

a[i][j]=(a[i+1][j]+a[i][j+1])%10;

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

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

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

cout<<endl;

}

return 0;

}

Subiectul III

1. b

2. *12345*123*1****

3.

#include <iostream>

using namespace std;

unsigned int inter(unsigned int na,unsigned int nb,unsigned int a[100],unsigned int b[100])

{ int i,j,nrap=0,t=0,nr=0,c[100],aux,s;

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

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

if(a[i]==b[j])

{ c[t]=a[i];

t++;

nr++;

}

do{

s=0;

for(t=0;t<nr;t++)

if(c[t]<c[t+1])

{

aux=c[t+1];

c[t+1]=c[t];

c[t]=aux;

s=1;

}}while(s!=0);

for(t=0;t<nr;t++)

if(c[t]!=c[t+1])

nrap++;

return nrap;

}

int main()

{

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

unsigned int i,na,nb,a[100],b[100];

cout<<"na=";cin>>na;

cout<<"nb=";cin>>nb;

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

{cout<<"a["<<i+1<<"]=";

cin>>a[i];

}

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

{cout<<"b["<<i+1<<"]=";

cin>>b[i];

}

cout<<inter(na,nb,a,b);

return 0;

}

4.

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("BAC.TXT");

int i=0,n=0,x,a[100000],c0[100000],c1[100000],c2[100000],c3[10000],c4[10000],c5[10000],c6[10000],c7[10000],c8[10000],c9[10000],fi[10];

int c0j=0,c1j=0,c2j=0,c3j=0,c4j=0,c5j=0,c6j=0,c7j=0,c8j=0,c9j=0,max,nrap=0;

while(f>>x)

{

a[i]=x;

i++;

n++;

}

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

{if(a[i]/10%10==0)

{c0[c0j]=a[i];

c0j++;

}

if(a[i]/10%10==1)

{c1[c1j]=a[i];

c1j++;

}

if(a[i]/10%10==2)

{c2[c2j]=a[i];

c2j++;

}

if(a[i]/10%10==3)

{c3[c3j]=a[i];

c3j++;

}

if(a[i]/10%10==4)

{c4[c4j]=a[i];

c4j++;

}

if(a[i]/10%10==5)

{c5[c5j]=a[i];

c5j++;

}

if(a[i]/10%10==6)

{c6[c6j]=a[i];

c6j++;

}

if(a[i]/10%10==7)

{c7[c7j]=a[i];

c7j++;

}

if(a[i]/10%10==8)

{c8[c8j]=a[i];

c8j++;

}

if(a[i]/10%10==9)

{c9[c9j]=a[i];

c9j++;

}

}

fi[0]=c0j;

fi[1]=c1j;

fi[2]=c2j;

fi[3]=c3j;

fi[4]=c4j;

fi[5]=c5j;

fi[6]=c6j;

fi[7]=c7j;

fi[8]=c8j;

fi[9]=c9j;

max=fi[0];

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

if(max<fi[i])

max=fi[i];

//cout<<"Numere cu cifra zecilor egala cu 1: "<<endl;

// for(i=0;i<c1j;i++)

// cout<<c1[i]<<" ";

// cout<<endl<<"Numere cu cifra zecilor egala cu 2: "<<endl;

// for(i=0;i<c2j;i++)

// cout<<c2[i]<<" ";

// cout<<endl<<"Numere cu cifra zecilor egala cu 3: "<<endl;

// for(i=0;i<c3j;i++)

// cout<<c3[i]<<" ";

// cout<<endl<<"Numere cu cifra zecilor egala cu 6: "<<endl;

// for(i=0;i<c6j;i++)

// cout<<c6[i]<<" ";

if(max==c0j)

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

if(c0[c0j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c1j)

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

if(c1[c1j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c2j)

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

if(c2[c2j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c3j)

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

if(c3[c3j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c4j)

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

if(c4[c4j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c5j)

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

if(c5[c5j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c6j)

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

if(c6[c6j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c7j)

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

if(c7[c7j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c8j)

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

if(c8[c8j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

if(max==c9j)

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

if(c9[c9j-1]==a[i]&&nrap==0)

{cout<<"Numarul de ordine este: "<<i+1;

nrap=1;

}

return 0;

}

Am declarat mai mult tablouri. In tabloul "a" am memorat toate elementele fisierului. In tablourile "c0", "c1", ..."c9" am memorat elementele care au cifra zecilor 0,1,...9, Cu variabilele "c0j","c1j",..."c9j" am memorat numarul de elemente al tablourilor "c0", "c1", ..."c9". In tabloul "fi[10]" am pus aceste variabile("c0j", "c1j", ..."c9j"). Am calculat maximul din acest tablou.

Daca acest maxim este egal cu "c0j", "c1j", ..."c9j" atunci inseamna ca proprietatea ceruta o au elementele tabloului "c0", "c1", ..."c9". Adica, elementul cautat este reprezentat de ultimul element din tabloul corespunzator.

Caut in tabloul "a" acest ultim element si afisez pozitia in care se afla, acesta reprezentand numarul de ordin.

Numarul de ordin se va afisa o singura data, deoarece numarul de aparitii al acestuia este contorizat de variabila "nrap".

Observatie:

Acest program este ineficient din motive evidente. Cei care au o solutie eficienta pot posta in rubrica de comentarii acea solutie.