Bacalaureat 2009-Sesiunea august-septembrie
Rezolvare bac 2009-Sesiunea de toamna
Subiectul I
1. n/100%2==0
2.
a) 6
b) 968
c)
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
unsigned int n;
int c,ok1,ok;
do
{
cout<<"Introduceti un numar mai mare ca 1: ";cin>>n;
}while(n<=1);
ok=0;
while(n>0)
{
c=n%10;
if(c>5 && c%2==0)
ok1=1;
else
ok1=0;
if(ok1==1)
{
cout<<c<<" ";
ok=1;
}
n=n/10;
}
if(ok==0)
cout<<"nu";
return 0;
}
d)
citeste n
(numar natural, n>1)
ok<-0
- repeta
| c<-n%10
| - daca c>5 si c%2=0 atunci
| | ok<-1
| | altfel
| | ok<-0
| |_
|
| -daca ok=1 atunci
| | scrie c, ' '
| | ok<-1
| |_
|
| n<-[n/10]
| pana cand n<=0
|_
-daca ok=0 atunci
| scrie "nu"
|_
Subiectul II
1. a[2][3]
2. p>urm!=NULL
3. 12
4. 8
5.
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
char a[256];
int i;
cout<<"a=";cin.get(a,255,'\n');
a[0]=a[0]-32;
for(i=1;i<strlen(a);i++)
{ if(a[i]==' ')
a[i+1]=a[i+1]-32;
}
cout<<a;
return 0;
}
Subiectul III
1. b
2. f(6,5) are valoarea 5
f(5,10) are valoarea 7
3.
#include <iostream>
using namespace std;
int prim(int t)
{
int i,k=1;
for(i=2;i<t;i++)
if(t%i==0)
k=0;
return k;
}
void p(unsigned int a,unsigned int b)
{ int i,t=1,p,u;
if(a>b)
{
p=b;
u=a;
}
else
{
p=a;
u=b;
}
for(i=p;i<u;i++)
{if(prim(i))
t=i*i;
if(t<u && t>p)
cout<<t<<" ";
}
}
int main()
{
cout << "Hello world!" << endl;
p(1,40);
return 0;
}
4.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
ifstream f("numere.txt");
int n,i,x,c,nr0=0,nr1=0,nr2=0,nr3=0,nr4=0,nr5=0,nr6=0,nr7=0,nr8=0,nr9=0;
f>>n;
for(i=0;i<n;i++)
{f>>x;
do
{
c=x%10;
if(c==0)
nr0=1;
if(c==1)
nr1=1;
if(c==2)
nr2=1;
if(c==3)
nr3=1;
if(c==4)
nr4=1;
if(c==5)
nr5=1;
if(c==6)
nr6=1;
if(c==7)
nr7=1;
if(c==8)
nr8=1;
if(c==9)
nr9=1;
x=x/10;
}while(x!=0);
}
if(nr0!=0)
cout<<"0 ";
if(nr1!=0)
cout<<"1 ";
if(nr2!=0)
cout<<"2 ";
if(nr3!=0)
cout<<"3 ";
if(nr4!=0)
cout<<"4 ";
if(nr5!=0)
cout<<"5 ";
if(nr6!=0)
cout<<"6 ";
if(nr7!=0)
cout<<"7 ";
if(nr8!=0)
cout<<"8 ";
if(nr9!=0)
cout<<"9 ";
return 0;
}
Am citit numarul "n" de pe prima linie a fisierului. Apoi am citit cele "n" numere de pe a doua linie. Pentru fiecare numar am verificat din ce cifre este format, tinand minte ca acea cifra exista(de la 0 la 9). Am afisat cifrele care exista in ordine crescatoare.
Programul este eficient deoarece parcurge fisierul o singura data, nu foloseste un tablou, este liniar, este de tipul O(n).
Observatie:
Acest program se putea face mult mai simplu, evitandu-se folosirea acestui numar mare de "if", respectiv variabile. Se putea declara un tablou "a[10]" cu valoarea fiecarei pozitii 0. In continuare rezolvarea problemei decurge astfel: a[n%10]++; (ex: pozitia 7 din tablou reprezinta numarul de aparitii a cifrei 7). In continuare rezolvarea este evidenta.