Informatică BAC: parcurs cu 50 de lecții
Pregătește informatica pentru BAC în 50 de lecții: algoritmi, tablouri, texte, subprograme și grafuri. Exersează prin exemple, grile și fișe de verificare.
Înapoi la blog

21 octombrie 2026
6 min citire
Numărarea literelor și transformarea majusculelor sunt cerințe frecvente în exercițiile de prelucrare a textelor. La BAC, partea decisivă este definirea exactă a caracterelor acceptate: literă, vocală, consoană, cifră sau separator. Un contor corect pornește de la o condiție precisă, iar transformarea trebuie să păstreze caracterele pe care enunțul nu cere să le modifici.
Lecția este pentru conținuturile despre șiruri de caractere de la matematică-informatică. Folosim alfabetul englez și codificarea ASCII, fără diacritice, așa cum precizează explicit problema noastră. Când lucrezi un subiect de BAC la informatică, păstrează definițiile și alfabetul din acel enunț, chiar dacă diferă de exemplul de aici.
O literă mică este cuprinsă între a și z, iar o literă mare între A și Z, în alfabetul folosit. O cifră este cuprinsă între zero și nouă ca simbol textual. Spațiul și semnele de punctuație nu intră în niciuna dintre aceste două categorii.
Vocalele din exemplu sunt a, e, i, o și u, în ambele forme de scriere. Consoanele sunt literele care nu aparțin acestei mulțimi. Un semn de întrebare nu devine consoană doar pentru că nu este vocală.
| Caracter | Literă? | Vocală? | Cifră? |
|---|---|---|---|
A |
Da | Da | Nu |
b |
Da | Nu | Nu |
7 |
Nu | Nu | Da |
! |
Nu | Nu | Nu |
Această clasificare arată de ce testul pentru consoană trebuie să includă mai întâi apartenența la litere. Complementul unei mulțimi se calculează față de un univers precizat, nu față de toate caracterele posibile fără nicio restricție.
Dacă majusculele și minusculele trebuie considerate identice, poți transforma temporar caracterul într-o formă comună. În exemplul nostru convertim literele mari în litere mici. După conversie, trebuie să comparăm numai cu cele cinci vocale mici.
Conversia se face doar după verificarea intervalului literelor mari. Aplicarea aceleiași diferențe numerice oricărui caracter ar modifica și cifre, spații sau semne de punctuație. O formulă de transformare corectă are și o condiție de aplicare.
Diferența dintre codul literei mici a și codul literei mari A este folosită pentru alfabetul ASCII precizat. Nu generalizăm această regulă la toate alfabetele și codificările. Pentru problemele școlare, restricția explicită permite o soluție simplă și verificabilă.
Programul citește o linie cu cel mult două sute de caractere ASCII. Transformă majusculele în minuscule, apoi afișează textul rezultat și, pe linia următoare, numărul vocalelor, consoanelor și cifrelor. Celelalte caractere rămân nemodificate și nu sunt incluse în aceste contoare.
#include <iostream>
using namespace std;
int main() {
char s[201];
cin.getline(s, 201);
int vocale = 0, consoane = 0, cifre = 0;
for (int i = 0; s[i] != '\0'; ++i) {
if (s[i] >= 'A' && s[i] <= 'Z')
s[i] = char(s[i] - 'A' + 'a');
if (s[i] >= 'a' && s[i] <= 'z') {
char c = s[i];
if (c == 'a' || c == 'e' || c == 'i' ||
c == 'o' || c == 'u')
++vocale;
else
++consoane;
} else if (s[i] >= '0' && s[i] <= '9') {
++cifre;
}
}
cout << s << '\n';
cout << vocale << ' ' << consoane << ' ' << cifre;
return 0;
}
Condițiile pentru litere și cifre sunt disjuncte în alfabetul ales. Ramura alternativă exprimă faptul că un caracter deja clasificat drept literă nu mai trebuie analizat drept cifră. Ordinea transformării și clasificării evită dublarea testelor pentru majuscule.
Pentru textul Ana ARE 2 mere!, rezultatul normalizat este ana are 2 mere!. Vocalele sunt două în primul cuvânt, două în al doilea și două în ultimul, deci șase în total. Consoanele sunt una, una și două, deci patru.
Există o singură cifră. Cele trei spații și semnul exclamării nu sunt numărate ca litere sau cifre. Lungimea textului este cincisprezece, iar totalul celor trei contoare este unsprezece; diferența corespunde exact acestor patru caractere rămase.
Acest bilanț este un test util, dar nu înlocuiește verificarea clasificării. Două contoare greșite se pot compensa. Verifică atât totalul, cât și contribuția fiecărui cuvânt sau caracter atunci când depanezi algoritmul.
Numărul aparițiilor unei litere nu este același cu numărul literelor distincte. Textul banana are șase litere, dar numai trei litere distincte: b, a și n. Litera a apare de trei ori, iar n de două ori.
Pentru apariții, incrementezi un contor la fiecare caracter care respectă condiția. Pentru litere distincte, ai nevoie să reții dacă o literă a mai fost întâlnită. Un tablou de frecvențe cu douăzeci și șase de poziții poate face această diferențiere.
După normalizare, indicele unei litere mici poate fi obținut din distanța față de a. Totuși, accesarea tabloului trebuie făcută numai pentru litere. Un spațiu sau o cifră nu trebuie transformat într-un indice al alfabetului.
Programul modifică șirul în memorie. Dacă enunțul cere ulterior și forma inițială, trebuie fie să păstrezi o copie, fie să normalizezi doar o variabilă temporară folosită la comparație. Alegerea depinde de rezultatele cerute.
Pentru simpla numărare fără afișare transformată, o variabilă temporară este suficientă. Citești caracterul, îi obții forma mică și actualizezi contoarele, fără să rescrii poziția din tablou.
Conversia la minuscule pierde informația despre forma inițială a literelor. Din textul normalizat nu poți reconstrui sigur unde erau majusculele. De aceea, nu modifica datele înainte să stabilești dacă acea informație mai este necesară.
Pentru a verifica dacă un caracter se află într-un interval, cele două limite se leagă prin și. Caracterul trebuie să fie simultan cel puțin limita inferioară și cel mult limita superioară. Folosirea lui sau poate accepta caractere din afara intervalului.
Pentru a verifica dacă este una dintre mai multe vocale, egalitățile se leagă prin sau. Caracterul nu poate fi simultan egal cu a și cu e. Conjuncția tuturor egalităților ar face condiția imposibilă.
Scrie întâi condiția în cuvinte și abia apoi în cod. Această traducere este o formă de învățare prin înțelegere, utilă mai ales când o expresie scurtă produce rezultate aparent inexplicabile.
Textul este AEiou. După transformare obții aeiou. Sunt cinci vocale, zero consoane și zero cifre.
Textul este Bac2027?. Forma normalizată este bac2027?. Ai o vocală, două consoane și patru cifre. Semnul întrebării nu intră în aceste categorii.
Textul este Y y. În definiția folosită aici, cele două litere sunt consoane. Numărul vocalelor este zero; clasificarea urmează mulțimea explicită din problemă.
Textul este vid. Toate contoarele rămân zero. Terminatorul nu trebuie clasificat și nici transformat.
Nu. Intervalele folosite aici acoperă alfabetul englez în ASCII. Diacriticele cer o regulă și o reprezentare potrivite; nu trebuie presupus că intră între a și z în orice codificare.
Numai dacă întregul text conține exclusiv litere din alfabetul definit. Într-un text cu spații, cifre și punctuație, acea diferență ar include și caractere care nu sunt consoane.
Construiește un test cu o majusculă, o minusculă, o cifră, un spațiu și un semn de punctuație. Dacă rezultatul diferă, urmărește fiecare ramură sau discută condițiile cu un profesor de informatică.
Official curriculum reference
Official curriculum reference (www.edu.ro)Folosim cookie-uri pentru a îmbunătăți experiența ta pe Hola25. Cookie-urile esențiale sunt necesare pentru funcționarea platformei. Poți personaliza setările pentru cookie-uri de analiză și marketing.
Politica de cookies | Politica de confidențialitatePregătește informatica pentru BAC în 50 de lecții: algoritmi, tablouri, texte, subprograme și grafuri. Exersează prin exemple, grile și fișe de verificare.

Înțelege complexitatea buclelor la BAC. Compară parcurgeri succesive, imbricate și împărțiri repetate, apoi justifică timpul și memoria algoritmului.