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.