Simulare Stiinte ale Naturii

Subiecte Simulare Bac 2016_Stiinte ale Naturii

Rezolvare Simulare Bac 2016_Stiinte ale Naturii

Subiectul I

1. c

2.

a) 634

b) 592, 590, 591, 596, 0

c)

m<-0

-repeta

| citeste x

| (numar natural)

| y<-0

| c<-y%10

| -cat timp c>y%10 executa

| | c<-y%10

| | y<-[y/10]

| |_

|

| -daca y<>0 atunci

| | m<m*10+c

| |_

|

| pana cand x=0

|_

scrie m

d)

#include <iostream>

using namespace std;

int main()

{

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

int m,x,y,c;

m=0;

do

{

cin>>x;

y=x;

do

{

c=y%10;

y=y/10;

}while(c>y%10);

if(y!=0)

m=m*10+c;

}while(x!=0);

cout<<m;

return 0;

}

Subiectul II

1. b

2. b

3. if(baza1*inaltime1==baza2*inaltime2)

cout<<"aceeasi arie";

else

cout<<"arii diferite";

4.

a)

citeste n (numar natural)

n<-n+1

p<-0

- repeta

| i<-2

| s<-0

| -cat timp i<n executa

| | -daca n%i=0 atunci

| | | s<s+i

| | |_

| |

| | i<i+1

| |_

|

| -daca s%2=0 si n%2=0 atunci

| | p<-1

| |_

|

| n<n+1

| pana cand p=1

|_

scrie n-1

b) "n" - variabila citita de la tastatura

"p" - variabila care calculeaza daca a fost gasit numarul cautat

"i" - variabila care verifica daca este divizor

"s" - variabila care insemneaza suma divizorilor proprii

date intrare: n

date iesire: n (dupa prelucrare)

Subiectul III

1. a

2. 2000, 2016

3.

#include <iostream>

using namespace std;

int nrc(int a[200],int i,int n)

{

if(i==0)

return 0;

else

{

int nr=0,t;

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

if(a[t]==i)

nr++;

return nr;

}

}

int main()

{

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

int n,m,i,p=1;

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

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

int a[n],b[m];

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

cin>>a[i];

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

cin>>b[i];

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

if(nrc(a,i,n)!=nrc(b,i,m))

p=0;

if(p==1)

cout<<"DA";

else

cout<<"NU";

return 0;

}

4.

b)

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("bac.in");

int a[1000],b[1000],x,i,p=0;

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

{a[i]=0;

b[i]=0;

}

while(f>>x)

{

if(x>999)

a[x%1000]++;

else

if(x<=999 && x>=100)

b[x]++;

}

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

if(a[i]!=0&&b[i]!=0)

{cout<<i<<" ";

p=1;

}

if(p==0)

cout<<"Nu exista";

f.close();

return 0;

}

a)

Cu ajutorul variabilei "x" am citit numerele din fisier. Daca numarul citit este mai mare decat 999, atunci in tabloul "a[1000]", declarat la inceput cu toate valorile 0, pe pozitia x%1000 din tablou, valoarea acesteia creste. Astfel, in tabloul "a" retinem toate sufixele numerelor cu mai mult de trei cifre. Daca numarul citit este mai mic sau egal cu 999 si mai mare sau egal cu 100, atuci pe pozitia b[x], valoarea acesteia creste ( b[1000] este un tablou declarat la inceput cu toate valorile 0).

Cu ajutorul variabilei "i" parcurgem tablourile "a" si "b" incepand de la pozitia 1 pana la pozitia 999. Daca in ambele tablouri pe pozitia "i" nu se afla valoarea 0, atunci se afiseaza valoarea "i". In acest caz, valoarea variabile "p" declarata la inceput cu 0 devine 1. Daca valoarea variabile "p" ramane "0" se afiseaza mesajul "Nu exista".

Programul este eficient deoarece: este liniar, parcurge o singura data fisierul, este de tipul O(n).