Fișiere text și fluxuri de date: Informatică la Bacalaureat

64 de cerințe oficiale din subiectele de Bac; aici sunt cele mai noi 20. Rezolvi pe loc sau pe caiet, apoi te verifici pe barem.

Profilul tău:

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, la punctaj egal departajarea fiind în funcție de numărul de probleme cu punctaj 99, 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 trei obținând câte 259 de puncte, primele două cu câte o problemă de punctaj 99 ș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 18911.

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], nr[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;
        if (pct == 99) nr[i]++;
    }
    for (i = 11; i < 100; i++)
        if (p[i] > p[em] || (p[i] == p[em] && nr[i] > nr[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 patru 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 numărarea 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
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.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
Textul 11

Fragment original al subiectului de informatică III-3-p2

III.3.a2 p

textul 11

Descrie algoritmul și justifică eficiența lui.

Verifică-te pe barem

Un exemplu de răspuns

Factorizez baza și număr factorii primi din n! fără să calculez factorialul. Pentru factorul 13, suma [n/13]+[n/13^2]+... dă exponentul. La baza 26=2*13, exponentul lui 2 este cel puțin exponentul lui 13, deci minimul este tot suma pentru 13. Împart repetat copia lui n la 13 și adun câturile. Timp O(log_13 n), memorie O(1).

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

Criterii (după barem)

  1. descriere coerentă a algoritmului (*)1 p
  2. a elementelor de eficiență -justificare1 p

III.3.b8 p

textul 11

Scrie programul C/C++ pentru problema din fragment.

Verifică-te pe barem

Un exemplu de răspuns

#include <iostream>
#include <fstream>
using namespace std;
int main(){long long n,p=0;cin>>n;while(n){n/=13;p+=n;}ofstream f("bac.txt");f<<p;return 0;}

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

Criterii (după barem)

  1. cu fișiere: declarare, pregătire în -operații vederea scrierii, scriere în fișier1 p
  2. determinare a valorii cerute (*),(**)5 p
  3. utilizare a unui algoritm eficient (***)1 p
  4. declarare a variabilelor, citire a datelor, corectitudine globală a programului 1)1 p
Textul 11

Fragment original al subiectului de informatică III-3-p2

III.3.a2 p

textul 11

Descrie algoritmul și justifică eficiența lui.

Verifică-te pe barem

Un exemplu de răspuns

Numărul cerut este exponentul factorului prim 13 în n!. Fiecare multiplu de 13 contribuie o dată, fiecare multiplu de 169 încă o dată și așa mai departe. Adun câturile obținute prin împărțirea repetată a unei copii a lui n la 13. Timp O(log_13 n), memorie O(1).

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

Criterii (după barem)

  1. a -descriere coerentă algoritmului (*)1 p
  2. justificare a elementelor de eficiență1 p

Alte teme

Toate temele →