Bacalaureat 2027 la informatică: modelul oficial, științele naturii

Subiectul oficial din 2027, cu baremul, pe 90 de puncte. Grilele și răspunsurile scurte le verifici pe loc; restul le scrii aici sau pe caiet, apoi te verifici pe barem.

Arată cum va arăta subiectul de la Bac.

3 ore · 90 de puncte + 10 din oficiu

Subiectul (PDF)Baremul (PDF)

Pe timp, ca la examen

Ceasul merge și dacă închizi pagina. Poți lua o singură pauză. La final, nota estimată după barem.

Subiectul ISubiectul al II-leaSubiectul al III-lea

Subiectul I 20 p

I.14 p

Indicați expresia C/C++ a cărei valoare este 0.

Vezi rezolvarea

Răspuns: a) 27==27/(3*3*3)\texttt{27==27/(3*3*3)}

I.24 p

Pentru a verifica dacă într-un tablou unidimensional cu 7 elemente există valoarea x=27, se aplică metoda căutării binare, iar succesiunea de elemente ale tabloului a căror valoare se compară cu valoarea lui x pe parcursul aplicării metodei indicate este: 49, 10, 27. Indicați o succesiune de valori care pot fi elementele tabloului, în ordinea în care apar în acesta.

Vezi rezolvarea

Răspuns: d) (5,10,27,49,50,51,64)

I.34 p

Indicați valorile pe care le pot avea variabilele reale x și y, astfel încât expresia C/C++ ceil(x)*abs(y)\texttt{ceil(x)*abs(y)} să aibă valoarea 16.

Vezi rezolvarea

Răspuns: a) x=4\texttt{x=4} și y=-4\texttt{y=-4}

Secvența: p=-1; do { ..... if(c%2==0) p=c; } while(n!=0);

I.44 p

În secvența C/C++ alăturată toate variabilele sunt întregi. Indicați atribuirile care pot înlocui punctele de suspensie astfel încât, în urma executării secvenței obținute, variabila p să memoreze prima cifră pară a numărului natural memorat inițial în variabila n, sau -1 dacă nu există o astfel de cifră.

Vezi rezolvarea

Răspuns: b) c=n%10; n=n/10;\texttt{c=n\%10; n=n/10;}

Secvența: for(i=1;i<=6;i++) if(i==1 || i==3) cout<<i<<endl; else for(j=i+1;j<=6;j++) if(j!=3) cout<<i<<" "<<j<<endl;

I.54 p

Se generează toate seturile de echipamente pentru drumeție din mulțimea {rucsac (100 de lei), notat cu 1, lanternă (50 de lei), notată cu 2, pelerină (100 de lei), notată cu 3, bidon (20 de lei), notat cu 4, busolă (50 de lei), notată cu 5, hartă (30 de lei), notată cu 6}. Într-un set sunt cel mult două echipamente, acestea sunt distincte și costă, în total, cel mult 100 de lei. Două soluții diferă prin cel puțin un echipament. În secvența C/C++ de mai jos, toate variabilele sunt de tip întreg, iar în urma executării ei se obțin toate seturile de tipul precizat, afișându-se pe ecran notațiile corespunzătoare echipamentelor. Primele trei soluții obținute corespund, în această ordine, distribuțiilor (rucsac), (lanternă, bidon), (lanternă, busolă). Indicați setul care corespunde celei de a șasea soluții obținute.

Vezi rezolvarea

Răspuns: b) (bidon, busolă)

Subiectul al II-lea 40 p

Algoritmul de la II.1

Algoritmul alăturat este reprezentat în pseudocod. S-a notat cu a%b restul împărțirii numărului natural a la numărul natural nenul b și cu [c] partea întreagă a numărului real c.

Algoritmul în pseudocod: citește x,y; n←1; cât timp x>0: ok←1; cât timp ok=1: dacă x%2=0 atunci y←y*y; x←[x/2], altfel x←x-1; ok←0; apoi n←n*y; la final scrie n.

II.1.a6 p

algoritmul de la II.1

a. Scrieți valoarea afișată în urma executării algoritmului dacă se citesc, în această ordine, numerele 11, 2.

Vezi rezolvarea

Răspuns: 2048

II.1.b6 p

algoritmul de la II.1

b. Dacă primul număr citit este 3, scrieți două numere din intervalul [1,10] care pot fi citite pentru variabila y astfel încât, în urma executării algoritmului, pentru fiecare dintre acestea, numărul afișat să fie din intervalul [27,127].

Verifică-te pe barem

Un exemplu de răspuns

Oricare două dintre 3, 4, 5 (de exemplu 3 și 4).

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. Pentru răspuns corect: câte 3p. pentru fiecare dintre cele două numere conform cerinței (oricare două numere dintre 3, 4, 5)6 p

II.1.c10 p

algoritmul de la II.1

c. Scrieți programul C/C++ corespunzător algoritmului dat.

Verifică-te pe barem

Un exemplu de răspuns

#include <iostream>
using namespace std;
int main()
{
    int x, y, n = 1, ok;
    cin >> x >> y;
    while (x > 0)
    {
        ok = 1;
        while (ok == 1)
            if (x % 2 == 0) { y = y * y; x = x / 2; }
            else { x = x - 1; ok = 0; }
        n = n * y;
    }
    cout << n;
    return 0;
}

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. declarare a tuturor variabilelor, conform cerinței1 p
  2. citire a datelor, conform cerinței1 p
  3. afișare a datelor, conform cerinței1 p
  4. instrucțiune de decizie, cu expresie condițională și cuvinte cheie conform cerinței2 p
  5. instrucțiuni repetitive, cu expresii condiționale inițiale de repetare și cuvinte cheie conform cerinței (se acordă numai 2p. dacă doar una dintre instrucțiunile repetitive este conform cerinței)3 p
  6. atribuiri, conform cerinței1 p
  7. corectitudine globală a programului1 p

II.1.d6 p

algoritmul de la II.1

d. Scrieți în pseudocod un algoritm echivalent cu cel dat, înlocuind adecvat prima structură cât timp...execută cu o structură repetitivă cu test final.

Verifică-te pe barem

Un exemplu de răspuns

citește x,y (numere naturale)
n←1
dacă x>0 atunci
repetă
ok←1
cât timp ok=1 execută
dacă x%2=0 atunci y←y*y; x←[x/2]
altfel x←x-1; ok←0
■
■
n←n*y
până când x=0
■
scrie n

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. utilizare a unei structuri repetitive de tipul cerut, înlocuind-o pe cea indicată (se acordă punctajul chiar dacă algoritmul obținut nu este echivalent cu cel dat; se punctează orice formă de structură repetitivă explicită, conform cerinței)2 p
  2. aspecte specifice pentru secvența obținută prin înlocuire, conform cerinței (se acordă numai 2p. dacă doar unul dintre următoarele două aspecte specifice este conform cerinței: tratare a cazului x=0, expresie condițională finală de repetare/oprire)3 p
  3. algoritm complet, corectitudine globală a algoritmului1 p

II.26 p

Fiecare dintre tablourile unidimensionale A=(3,7,x,15) și B=(2,5,y,14,20) are valori naturale distincte și nicio valoare nu este comună. Tablourile sunt interclasate în ordine crescătoare, fiind parcurse de la stânga la dreapta. Scrieți câte o valoare pentru x și y, știind că fiecare valoare din A se compară cu câte două valori din B pe parcursul aplicării metodei.

Verifică-te pe barem

Un exemplu de răspuns

De exemplu x = 10 și y = 9.

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. Pentru răspuns corect (se acordă punctajul pentru oricare două numere naturale cu proprietatea că 8≤y<x≤13, și numai 3p. dacă cele două tablouri obținute au elementele ordonate strict crescător, fără valori comune, dar nu conform cerinței)6 p

II.36 p

Pentru o pereche de pantofi se memorează următoarele date: mărimea (număr natural) și prețul (număr real). Variabilele m1 și pret1 memorează datele pentru o pereche de pantofi, iar variabilele m2 și pret2 memorează datele pentru o altă pereche de pantofi. O persoană caută pantofi mărimea 36 și cumpără perechile care corespund mărimii, dintre cele două precizate. Declarați variabilele pret1 și pret2 și scrieți o secvență de instrucțiuni C/C++ în urma executării căreia să se afișeze pe ecran mesajul Total: urmat de suma cheltuită.

Exemplu: dacă m1=36, pret1=400.99, m2=36, pret2=250.0, se afișează pe ecran Total:650.99

dacă m1=36, pret1=400.99, m2=39, pret2=250.0, se afișează pe ecran Total:400.99

dacă m1=39, pret1=400.99, m2=39, pret2=250.0, se afișează pe ecran Total:0

Verifică-te pe barem

Un exemplu de răspuns

int m1, m2;
float pret1, pret2, s = 0;
if (m1 == 36) s = s + pret1;
if (m2 == 36) s = s + pret2;
cout << "Total:" << s;

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. declarare a variabilelor, conform cerinței1 p
  2. afișare a datelor, conform cerinței (pentru afișare parțial corectă, se acordă numai câte 2p. pentru fiecare dintre următoarele două aspecte conform cerinței: mesaj, corelare cazuri-date afișate)4 p
  3. corectitudine globală a secvenței1 p

Subiectul al III-lea 30 p

III.110 p

Un grădinar are un teren dreptunghiular pe care îl împarte în parcele pătrate, toate de latură egală, număr natural. Se citesc două numere naturale nenule, x și y, reprezentând lățimea, respectiv lungimea terenului, măsurate în metri. Se cere să se scrie, pentru fiecare variantă de împărțire a terenului, o pereche formată din numărul de parcele obținute și latura unei astfel de parcele, în această ordine. Valorile din pereche sunt separate prin expresia cu latura, iar fiecare pereche este urmată de simbolul punct și virgulă (;), ca în exemplu.

Scrieți, în pseudocod, algoritmul de rezolvare pentru problema enunțată.

Exemplu: pentru x=18 și y=24, se scrie, cu perechile nu neapărat în această ordine:

432 cu latura 1;108 cu latura 2;48 cu latura 3;12 cu latura 6;

Verifică-te pe barem

Un exemplu de răspuns

citește x,y (numere naturale nenule)
pentru d←1,x execută
dacă x%d=0 și y%d=0 atunci
scrie [x/d]*[y/d], " cu latura ", d, ";"
■
■

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. citire a datelor, conform cerinței1 p
  2. determinare a valorilor cerute (pentru algoritm care conduce la o rezolvare parțială se acordă numai câte 1p. pentru fiecare dintre următoarele patru aspecte conform cerinței: identificare a unei laturi posibile/divizor al unui număr, identificare a unei laturi valide/divizor comun, identificare a numărului de parcele posibile pe lungimea sau lățimea terenului/divizor complementar, configurații suport analizate/divizori comuni suport)5 p
  3. scriere a datelor, conform cerinței (se acordă numai 1p. dacă au fost afișate valorile numerice determinate, dar nu în formatul cerut)2 p
  4. scriere principial corectă a structurilor de control, corectitudine globală a subprogramului (se punctează orice formă explicită de structură repetitivă sau decizională)2 p

III.210 p

Scrieți un program C/C++ care citește de la tastatură un număr natural n (n∈[2,10²]), apoi un șir de n numere naturale din intervalul [1,10⁴], elemente ale unui tablou unidimensional. Programul afișează pe ecran numărul termenilor care sunt pătrate perfecte impare și sunt strict mai mici decât ultimul număr citit.

Exemplu: pentru n=11 și tabloul 9 27 81 25 49 100 101 25 77 16 49 se afișează pe ecran 3

Verifică-te pe barem

Un exemplu de răspuns

#include <iostream>
using namespace std;
int main()
{
    int n, v[100], i, r, nr = 0;
    cin >> n;
    for (i = 0; i < n; i++) cin >> v[i];
    for (i = 0; i < n; i++)
    {
        r = 1;
        while (r * r < v[i]) r++;
        if (r * r == v[i] && v[i] % 2 == 1 && v[i] < v[n - 1]) nr++;
    }
    cout << nr;
    return 0;
}

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. declarare a unei variabile care să permită memorarea unui tablou unidimensional, conform cerinței1 p
  2. citire a datelor, conform cerinței1 p
  3. determinare a numărului cerut (pentru algoritm care conduce la o rezolvare parțială se acordă numai câte 1p. pentru fiecare dintre următoarele patru aspecte specifice: algoritm de bază pentru numărarea unei serii de valori cu inițializarea și actualizarea rezultatului, identificare a unui pătrat perfect, identificare a unui număr par/impar, identificare a ultimului element)6 p
  4. afișare a datelor, conform cerinței1 p
  5. declarare a variabilelor simple, corectitudine globală a algoritmului1 p
Concursul de la III.3

La un concurs, fiecare echipă are câte un indicativ, număr natural din intervalul [10,99]; indicativele sunt acordate la rând, în ordinea înscrierii. Fiecare echipă are de rezolvat câte trei probleme și fiecare problemă este evaluată cel mult o dată și notată cu un punctaj, număr natural din intervalul [0,99]. Rezultatul pentru fiecare problemă trimisă spre evaluare este înregistrat sub forma unui număr natural, format prin concatenarea, în această ordine, a numărului problemei (1, 2 sau 3), a punctajului obținut și a indicativului echipei. Problemele pentru care nu se trimit rezolvări spre evaluare sunt notate implicit cu câte 0 puncte. Clasamentul se face în funcție de punctajul total obținut, în ordine descrescătoare, iar în caz de egalitate în funcție de ordinea înscrierii.

Fișierul bac.txt conține cel mult 10⁶ numere naturale din intervalul [10³,10⁵), reprezentând rezultatele obținute la problemele evaluate. Numerele sunt separate prin câte un spațiu.

Se cere să se afișeze pe ecran indicativul primei echipe din clasament. Proiectați un algoritm eficient din punctul de vedere al timpului de executare.

Exemplu: dacă fișierul are conținutul alăturat, pe ecran se afișează 12 (primele cinci echipe din clasament sunt, în această ordine, 12, 15, 11, 10, 30, primele două obținând câte 259 de puncte și prima echipă fiind înscrisă înaintea celei de-a doua).

Conținutul fișierului bac.txt: 19912 19910 28012 38012 29011 3010 19015 38011 37015 22030 29915 29910 18811.

III.3.a2 p

concursul de la III.3

a. Descrieți în limbaj natural algoritmul proiectat, justificând eficiența acestuia.

Verifică-te pe barem

Un exemplu de răspuns

Folosesc un vector de frecvență p indexat după indicativ (10..99), unde p[i] este punctajul total al echipei i. Citesc numerele din fișier unul câte unul: indicativul e x%100, punctajul e (x/100)%100 dacă x/100>99, altfel (x/100)%10, și îl adun la p[i]. La final parcurg indicativele crescător și rețin echipa cu punctaj strict mai mare; la egalitate rămâne echipa cu indicativ mai mic, adică înscrisă mai devreme.

Eficiență: fiecare număr e citit o singură dată și prelucrat în timp constant, fără a memora șirul din fișier; parcurgerea finală are 90 de pași. Algoritmul e liniar în numărul de valori din fișier.

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. descriere coerentă a algoritmului (se acordă punctajul chiar dacă algoritmul ales nu este eficient)1 p
  2. justificare a elementelor de eficiență, conform cerinței1 p

III.3.b8 p

concursul de la III.3

b. Scrieți programul C/C++ corespunzător algoritmului proiectat.

Verifică-te pe barem

Un exemplu de răspuns

#include <fstream>
#include <iostream>
using namespace std;
int p[100];
int main()
{
    ifstream f("bac.txt");
    int x, i, pct, em = 10;
    while (f >> x)
    {
        i = x % 100;
        if (x / 100 > 99) pct = (x / 100) % 100;
        else pct = (x / 100) % 10;
        p[i] += pct;
    }
    for (i = 11; i < 100; i++)
        if (p[i] > p[em]) em = i;
    cout << em;
    return 0;
}

Exemplu scris de Zece, nu singurul răspuns bun.

Barem oficial

  1. operații cu fișiere: declarare, pregătire în vederea citirii, citire din fișier conform cerinței1 p
  2. determinare a valorii cerute (se acordă punctajul chiar dacă algoritmul ales nu este eficient; pentru algoritm care conduce la o rezolvare parțială se acordă numai câte 1p. pentru fiecare dintre următoarele trei aspecte specifice: identificare a elementelor componente ale unui rezultat, algoritm de bază pentru suma unei serii de valori cu inițializarea și actualizarea rezultatului, algoritm de bază pentru determinarea maximului dintr-o serie de valori cu inițializarea și actualizarea rezultatului)5 p
  3. utilizare a unui algoritm eficient (se acordă punctajul numai pentru un algoritm liniar)1 p
  4. declarare a variabilelor, afișare a datelor, corectitudine globală a programului1 p
Ai terminat? Bifează pe barem ce ai făcut și află câte puncte ai fi luat. Alte subiecte de informatică.