Simulare Mate-Info

Subiecte Simulare Bac 2017_Mate_Info

Rezolvare Simulare Bac 2017_Mate-Info

Subiectul I

1. b

2.

a) 3 4 6 8 9 15

b) 7 6 6

8 7 7

c)

citeste n,a,b

(numere naturale nenule, a ≤n, b ≤n)

ok<-0

-pentru x<-1,n executa

| -daca x%a=0 si x%b≠0 sau

| | x%a≠0 si x%b=0

| | scrie x, ' '

| | ok<-1

| |_

|_

-daca ok=0 atunci

| scrie 0

|_

d)

Varianta C++

#include <iostream>

using namespace std;

int main()

{

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

unsigned int a,b,n,ok,x;

cin>>n>>a>>b;

ok=0;

x=1;

while(x<=n)

{

if((x%a==0&&x%b!=0)||(x%a!=0&&x%b==0))

{cout<<x<<" ";

ok=1;

}

x=x+1;

}

if(ok==0)

cout<<0;

return 0;

}

Varianta C

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Hello world!\n");

unsigned int a,b,n,ok,x;

scanf("%u%u%u",&n,&a,&b);

ok=0;

x=1;

while(x<=n)

{

if((x%a==0&&x%b!=0)||(x%a!=0&&x%b==0))

{printf("%u ",x);

ok=1;

}

x=x+1;

}

if(ok==0)

printf("0");

return 0;

}

Subiectul II

1. d

2. c

3. 2, 3, 6

4. struct masina{ unsigned int an;

char carburant[51];

}m[20];

5.

Varianta C++

#include <iostream>

using namespace std;

int main()

{

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

int i,j,n;

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

int a[n][n];

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

for(j=n-1;j>=0;j--)

{if(i==0)

a[i][j]=n;

if(j==n-1)

a[i][j]=n-i;

if(i!=0&&j!=3)

a[i][j]=a[i][j+1]+a[i-1][j];

}

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

{for(j=0;j<n;j++)

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

cout<<endl;

}

return 0;

}

Varianta C

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Hello world!\n");

int **a,i,j,n;

printf("n=");scanf("%d",&n);

a=(int**)malloc(n*sizeof(int*));

if(a==NULL)

{

printf("Eroare la alocare dinamica");

exit(1);

}

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

a[i]=(int*)calloc(n,sizeof(int));

if(a==NULL)

{

printf("Eroare la alocare dinamica");

exit(1);

}

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

for(j=n-1;j>=0;j--)

{if(i==0)

a[i][j]=n;

if(j==n-1)

a[i][j]=n-i;

if(i!=0&&j!=3)

a[i][j]=a[i][j+1]+a[i-1][j];

}

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

{for(j=0;j<n;j++)

printf("%d ",a[i][j]);

printf("\n");

}

free(a);

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

free(a[i]);

return 0;

}

Subiectul III

1. c

2. brandusa, liliac, margareta

iasomie, lalea, margareta

3.

int ranguri(int n)

{

int i=0,nr=0;

while(n)

{

if(n%10==i)

nr++;

n=n/10;

i++;

}

return nr;

}

4.

b)

Varianta C++

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

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

ifstream f("bac.in");

int i,j,m,n,x,t1=0,t2=0,k=-1;

f>>m>>n;

int a[n],b[m];

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

{f>>x;

if(x%2==0)

{

a[t1]=x;

t1++;

}

}

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

{f>>x;

if(x%2==0)

{

b[t2]=x;

t2++;

}

}

// inceput algoritm interclasare

i=0;j=0;

int s[t1+t2];

while((i<t1)&&(j<t2))

{k++;

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

{

s[k]=a[i];

i++;

}

else

{

s[k]=b[j];

j++;

}

}

while(i<t1)

{k++;

s[k]=a[i];

i++;

}

while(j<=t2)

{k++;

s[k]=b[j];

j++;

}

// sfarsit algoritm interclasare

for(i=k-1;i>=0;i--)

if(s[i+1]!=s[i])

cout<<s[i]<<" ";

if(t1==0&&t2==0)

cout<<"nu exista";

f.close();

return 0;

}

Varianta C

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Hello world!\n");

int *a,*b,i,j,m,n,x,t1=0,t2=0,k=-1;

FILE *f;

f=fopen("bac.in","r");

if(f==NULL)

{

printf("Eroare la deschiderea fisierului.");

exit(EXIT_FAILURE);

}

fscanf(f,"%d%d",&m,&n);

a=(int*)malloc(m*sizeof(int));

if(a==NULL)

{

printf("Eroare la alocare dinamica");

exit(1);

}

b=(int*)malloc(n*sizeof(int));

if(b==NULL)

{

printf("Eroare la alocare dinamica");

exit(1);

}

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

{

fscanf(f,"%d",&x);

if(x%2==0)

{

a[t1]=x;

t1++;

}

}

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

{

fscanf(f,"%d",&x);

if(x%2==0)

{

b[t2]=x;

t2++;

}

}

// inceput algoritm interclasare

i=0;j=0;

int *s;

s=(int*)malloc((t1+t2)*sizeof(int));

if(s==NULL)

{

printf("Eroare la alocare dinamica");

exit(1);

}

while((i<t1)&&(j<t2))

{k++;

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

{

s[k]=a[i];

i++;

}

else

{

s[k]=b[j];

j++;

}

}

while(i<t1)

{k++;

s[k]=a[i];

i++;

}

while(j<=t2)

{k++;

s[k]=b[j];

j++;

}

// sfarsit algoritm interclasare

for(i=k-1;i>=0;i--)

if(s[i+1]!=s[i])

printf("%d ",s[i]);

if(t1==0&&t2==0)

printf("nu exista");

free(a);

free(b);

free(s);

fclose(f);

return 0;

}

a)

Cu ajutorul variabilei "x" am citit numerele din fisier. Am declarat doua tablouri "a" si "b" fiecare cu cel mult "n" respectiv "m" elemente. Aceste tablouri vor contine doar numerele pare din fisier. "t1" si "t2" reprezinta numarul de elemente ale tablourilor "a" respectiv "b". In caz ca nu exista elemente pare in fisier, valorilor variabilelor "t1" si "t2" declarate la inceput cu 0 vor ramane 0. In acest caz afisam mesajul "nu exista". Vom forma un sir "s" de dimensiune maxima "t1+t2" sortat crescator. Acesta va contine elementele din tablourile "a" si "b". Pentru aceasta vom folosi algortimul de interclasare. Afisam tabloul "s" de la sfarsit la inceput si ne asiguram ca nu afisam elemente egale.

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

In cazul variantei C, gestionarea memoriei este si mai eficienta datorita alocarii dinamice a memoriei si a eliberarii acesteia la sfarsitul programului.