Didaxis
lecție · Informatică

Conversii text–număr

Transformarea între reprezentări textuale și numerice.

Apare la:
Bacalaureat
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Textul „42” și întregul 42 au semnificații diferite în program. Pentru a obține numărul dintr-un tablou de caractere, prelucrăm fiecare cifră: rezultatul anterior se înmulțește cu 10, apoi se adaugă cifra curentă. Pentru conversia inversă extragem cifrele prin restul împărțirii la 10. Concatenarea textelor „4” și „2” produce „42”; adunarea numerelor 4 și 2 produce 6.

Desen la lecția „Conversii text–număr”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Textul "42" și numărul 42 au reprezentări diferite în program. Un șir care conține cifre nu poate fi folosit într-un calcul înainte de conversie, iar un număr nu poate fi tratat ca text înainte de a fi transformat în caractere. Concatenarea textelor "4" și "2" dă "42", pe când adunarea numerelor 4 și 2 dă 6.

Din șir în număr. Se parcurg cifrele de la stânga la dreapta. Rezultatul pornește de la , iar pentru fiecare cifră se calculează . Pentru "42": după '4', ; după '2', . Înainte de calcul se verifică dacă fiecare caracter este cifră; altfel textul nu reprezintă un număr întreg.

Exemplul 1 — conversia șirului în număr.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char s[] = "42";
    int x = 0;
    for (int i = 0; i < strlen(s); ++i) {
        if (s[i] < '0' || s[i] > '9') return 1;
        x = x * 10 + (s[i] - '0');
    }
    cout << x;
    return 0;
}

Programul afișează 42. Dacă șirul ar fi "4a", al doilea caracter nu este cifră și programul se încheie cu codul 1, fără să afișeze nimic. Pentru "007" rezultatul este 7, pentru că zerourile de la început nu schimbă valoarea.

Din număr în șir. Restul x % 10 este ultima cifră, care devine caracter prin adunarea lui '0'; câtul x / 10 dă numărul rămas. Cifrele se obțin în ordine inversă, deci șirul se inversează la sfârșit. Un ciclu cu test la sfârșit tratează și cazul , pentru care trebuie produs șirul "0".

Exemplul 2 — conversia numărului în șir.

#include <iostream>
using namespace std;
int main() {
    int x = 42, n = 0;
    char s[20];
    do {
        s[n++] = char('0' + x % 10);
        x /= 10;
    } while (x > 0);
    for (int i = 0; i < n / 2; ++i) {
        char t = s[i];
        s[i] = s[n - 1 - i];
        s[n - 1 - i] = t;
    }
    s[n] = '\0';
    cout << s;
    return 0;
}

Pentru 42 se extrag mai întâi '2', apoi '4', deci în s apare 24; inversarea dă 42, iar terminatorul se scrie pe poziția n.

Exemplul 3 — funcțiile gata făcute. În C++ există atoi (din <cstdlib>), stoi, stod și to_string (din <string>): atoi("123") + 1 este 124, stoi("42") * 2 este 84, to_string(42) + "1" este textul "421", iar stod("2.5") + 1 este 3,5. În Python se folosesc int("12"), float("2.5") și str(12); int("12") + 3 este 15, iar str(12) + "3" este "123". Funcțiile gata făcute nu verifică ele singure forma textului: stoi("4a") convertește numai prefixul valid, adică 4.

Numerele negative. Pentru "-125" primul caracter este semnul. Se rețin semnul și valoarea absolută: dacă prima poziție este '-', conversia pornește de la indicele 1 și rezultatul se înmulțește cu la sfârșit. În sens invers, pentru se extrag cifrele lui , se adaugă '-' ca ultim caracter extras și se inversează întregul șir: rezultă -125.

Urmărirea pe un exemplu — "1905". La conversia șir–număr, ia pe rând valorile 1, 19, 190 și 1905: după fiecare cifră, valoarea veche se mută cu un rang la stânga prin înmulțirea cu 10. La conversia număr–șir, pentru se obțin cifrele 5, 0, 9, 1, iar devine succesiv 190, 19, 1 și 0; cifra 0 din mijloc se păstrează, pentru că ciclul se oprește doar când . Șirul "5091" se inversează în "1905".

Limita tipului. Tipul int memorează cel mult 2147483647. Pentru textul "3000000000" valoarea nu încape, iar pentru astfel de numere se folosește long long, a cărui limită superioară este 9223372036854775807. Programul de conversie nu trebuie să presupună că orice șir de cifre se potrivește într-un int; lungimea șirului se compară cu limita din enunț.

Greșeli frecvente

  • Greșit: '7' și 7 au aceeași valoare.
    Corect: '7' este caracterul cu codul 55; valoarea 7 se obține cu '7' - '0'.
  • Greșit: cifrele obținute prin împărțiri la 10 sunt deja în ordinea scrierii numărului.
    Corect: se obțin în ordine inversă și șirul rezultat se inversează.
  • Greșit: ciclul while (x > 0) convertește corect și numărul 0.
    Corect: pentru 0 nu s-ar executa niciun pas; ciclul cu test final produce șirul 0.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro

Documente consultate

  • Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.