Sesiunea speciala

Subiecte sesiunea speciala Bac 2017

Rezolvare sesiunea speciala Bac 2017

Subiectul I

1. a

2.

a) 16

b) (2;4);(4;5);(5;6);(4;2)

c) citeste a.b

(numere naturale, a≥2, b≥2)

-daca a>b atunci

| x<-a;

| a<-b;

| b<-x;

|_

s<-0

- pentru x<-a,b executa

| c<-2

| - daca x%c>0 atunci

| | -repeta

| | | c<-c+1

| | | pana cand x%c=0

| | |_

| |

| | s<-s+c

| | _

|_

scrie s

d)

#include <iostream>

using namespace std;

int main()

{

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

int a,b,x,s,c;

cin>>a;

cin>>b;

if(a>b)

{

x=a;

a=b;

b=x;

}

s=0;

for(x=a;x<=b;x++)

{

c=2;

while(x%c>0)

c=c+1;

s=s+c;

}

cout<<s;

return 0;

}

Subiectul II

1. b

2. b

3. struct poligon { unsigned int numar;

struct varfuri { float x;

float y;

}varf[100];

}p;

4.

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

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

if(j>i+1&&j<8-i)

a[i][j]='a';

else

a[i][j]='b';

5.

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

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

char a[101];

int i,s=0,n;

cout<<"Introduceti textul:\n";

cin.get(a,100,'\n');

cin.get();

n=strlen(a);

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

if((a[i]=='D'&&a[i+1]=='O')||(a[i]=='R'&&a[i+1]=='E')||(a[i]=='M'&&a[i+1]=='I')||(a[i]=='F'&&a[i+1]=='A')||(a[i]=='S'&&a[i+1]=='O'&&a[i+2]=='L')||(a[i]=='L'&&a[i+1]=='A')||(a[i]=='S'&&a[i+1]=='I'))

{while(a[i-1]!=' '&&i>0)

i--;

while(a[i]!=' '&&a[i]!='\n'&&i<n)

{cout<<a[i];

i++;

if(a[i]==' ')

cout<<'\n';

}

s=1;

}

if(s==0)

cout<<"nu exista";

return 0;

}

Subiectul III

1. c

2. 1234123121

3.

#include <iostream>

using namespace std;

int verifica(int n)

{

int c;

c=n%10;

n=n/10;

while(n)

{

if(c!=n%10)

return 0;

c=n%10;

n=n/10;

}

return 1;

}

void identice(int a, int b)

{

int i,s=0;

for(i=a;i<=b;i++)

if(verifica(i))

{cout<<i<<" ";

s=1;

}

if(s==0)

cout<<"nu exista";

}

4.

b)

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("bac.in");

int i,m,n,xa,xb,y,t,s=0;

f>>m>>n;

f>>xa;

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

f>>xb;

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

{

f>>y;

f>>t;

if(xa>y&&xb<t)

{cout<<i+1;

s=1;

}

}

if(s==0)

cout<<"imposibil";

f.close();

return 0;

}

a)

Cu ajutorul variabilei "xa" am memorat valoarea primul element din primul sir, iar cu ajutorul variabilei "xb" am memorat valoarea ultimului element din primul sir. Pentru a putea insera primul sir in al doilea, tot ceea ce trebuie sa se intample este ca elementul de pe pozitia "i" din al doilea sir sa fie mai mic decat "xa", iar elementul de pe pozitia "i+1" sa fie mai mic decat "xb". Daca acest lucru se intampla, atunci inseamna ca putem insera sirul intre pozitiile "i" si "i+1". Acest lucru inseamna ca sirul va fi inserat de la pozitia "i+1". Variabila "s" verifica daca a existat o pozitie de inserare. Acest lucru se intampla daca se verifica conditia de inserare mentionata precedent. In cazul in care conditia de inserare este verificata, valoarea variabile "s" devinde 1, iar in caz contrar, valoarea variabilei "s" ramane 0. Daca valoarea variabilei "s" a ramas 0, atunci afisam mesajul "imposibil".

Programul este eficient deoarece: este liniar, nu foloseste un tablouri pentru memorarea termenilor sirurilor, parcurge o singura data fisierul,este de tipul O(n).