De când luăm contact cu programarea pe calculator în școală, auzim profesorii spunând că vor preda C++. În fond, majoritatea copiilor care vin la centrul Nerdvana ne spun că ei știu sau vor să învețe C++. Când le spunem că ne dorim să îi învățăm C, ei se opun, spunând că este un limbaj prea vechi sau că vor să învețe ceea ce se cere la școală. Ce trebuie să înțeleagă orice elev ce dorește să învețe programare este că limbajul este doar forma prin care scriem instrucțiunile pe care calculatorul să le poată înțelege. Algoritmul este cel cu adevărat important, pentru că el decide logica soluției problemei.
Revenind la cele două limbaje, dacă nu cunoașteți sau nu ați fost curioși să căutați diferențele dintre C și C++, vom încerca să vă lămurim noi. La o simplă căutare pe Google, veți găsi niște explicații relativ stufoase și veți rămâne cu ideea generală că C++ este mai recent decât C.
Un exemplu de comparație regăsiți pe site-ul GeeksForGeeks: https://www.geeksforgeeks.org/difference-between-c-and-c/. Putem înțelege de aici că cele două limbaje sunt aproape identice, dar C++ are unele comenzi modificate sau în plus. Practic, C++ a fost construit peste limbajul C, pentru a adăuga funcții noi, în special unei filosofii de programare numită programare orientată pe obiect. Aceasta se studiază abia în facultate.
Concluzia devine evidentă: cele două limbaje sunt totuna, doar că C++ are câteva comenzi diferite. Pentru că studiem programarea la nivel de gimnaziu sau liceu, comenzile utilizate care sunt diferite sunt de citire și scriere a numerelor și caracterelor. Toate celelalte comenzi, operatori și metode sunt identice!
În secțiunea următoare vom prezenta comenzile care sunt diferite în C și C++, dar care îndeplinesc aceeași funcție.
Funția pe care o îndeplinește | Comandă în C | Comandă în C++ |
---|---|---|
Citirea din consolă |
scanf("%d%d", &variabila1, variabila2); Funcția este scanf(); %d se numește descriptor și reprezintă valoarea citită de la consolă. Putem avea oricât de mulți descriptori. Fiecare valoare citită este atribuită unei variabile din lista oferită în funcție. Astfel, prima valoare introdusă va fi atribuită la variabila1, iar a doua la variabila2. |
cin>>variabila1>>variabila2; Funcția este cin; Folosim semnele >> pentru a arăta că din consolă, valoarea ajunge în variabilă. Variabilele sunt delimitate prin semnele >>. Putem avea atâtea variabile câte citiri facem. |
Scrierea în consolă |
printf("Acesta este un text. %d este o valoare.", variabila1); Funcția este printf(); %d se numește descriptor și va fi înlocuit cu valoarea unei variabile la afișare. Putem avea oricât de mulți descriptori. Fiecare variabilă afișată va înlocui un descriptor, în ordinea scrierii din listă. |
cout<<"Acesta este un text"< Funcția este cout; Folosim semnele << pentru a arăta că din variabilă, valoarea va fi afișată în consolă. Variabilele sunt delimitate prin semnele <<. Putem avea atâtea variabile câte citiri facem. |
Declararea fișierelor |
FILE *nume_fișier1, *nume_fișier2; Comanda de declarare este FILE Se va continua cu lista de variabile de fișier. Aceste variabile vor servi doar pentru a gestiona fișierele. |
Nu există declarare de fișiere. Aceste sunt declarate automat la deschiderea lor. |
Deschiderea fișierelor | nume_fișier1 = fopen("nume_fisier_citire.extensie", "r"); nume_fișier2 = fopen("nume_fisier_scriere.extensie", "w"); Funcția este fopen; Vom preciza numele fișierului aflat pe hard disk pe care îl deschidem: nume_fisier_citire.extensie și nume_fisier_scriere.extensie. Avem un parametru care setează modul de deschidere al fișierului: r - read (doar citim din fișier) și w - write (doar scriem în fișier). |
ifstream nume_fisier("nume_fisier.extensie"); ofstream nume_fisier("nume_fisier_citire.extensie"); Funcția este ifstream; sau ofstream; Vom preciza numele fișierului aflat pe hard disk pe care îl deschidem: nume_fisier_citire.extensie și nume_fisier_scriere.extensie. Pentru a citi din fișier vom folosi funcția ifstream iar pentru a scrie într-un fișier vom folosi funcția ofstream. |
Închiderea fișierelor | fclose(nume_fișier); Funcția este fclose; Vom preciza numele fișierului aflat pe hard disk pe care îl închidem: nume_fișier. |
nume_fișier.close(); Funcția este .close(); Vom preciza numele fișierului aflat pe hard disk pe care îl închidem: nume_fișier. |
Citirea din fișier |
fscanf(nume_fișier, "%d%d", &variabila1, variabila2); Funcția este fscanf(); nume_fișier reprezintă fișierul din care citim. Acesta trebuie deschis în prealabil, pe modul citire. %d se numește descriptor și reprezintă valoarea citită de la consolă. Putem avea oricât de mulți descriptori. Fiecare valoare citită este atribuită unei variabile din lista oferită în funcție. Astfel, prima valoare introdusă va fi atribuită la variabila1, iar a doua la variabila2. |
nume_fișier>>variabila1>>variabila2; Funcția cin este înlocuită de numele fișierului nume_fișier; Folosim semnele >> pentru a arăta că din consolă, valoarea ajunge în variabilă. Variabilele sunt delimitate prin semnele >>. Putem avea atâtea variabile câte citiri facem. |
Scrierea în fișier |
fprintf(nume_fișier, "Acesta este un text. %d este o valoare.", variabila1); Funcția este fprintf(); nume_fișier reprezintă fișierul în care scriem. Acesta trebuie deschis în prealabil, pe modul scriere. %d se numește descriptor și va fi înlocuit cu valoarea unei variabile la afișare. Putem avea oricât de mulți descriptori. Fiecare variabilă afișată va înlocui un descriptor, în ordinea scrierii din listă. |
nume_fișier<<"Acesta este un text"< Funcția cout este înlocuită de numele fișierului nume_fișier; Folosim semnele << pentru a arăta că din variabilă, valoarea va fi afișată în consolă. Variabilele sunt delimitate prin semnele <<. Putem avea atâtea variabile câte citiri facem. |
Citirea caracterelor (tipul char) |
variabila_char = fgetc(nume_fișier); Funcția este fgetc(); variabila_char este o variabilă de tip char, în care salvez caracterul citit. nume_fișier reprezintă fișierul din care citim. Acesta trebuie deschis în prealabil, pe modul citire. Această funcție citește caracterele ascunse, de genul spațiu sau sfârșit de linie (\n). |
nume_fișier.get(variabila_char); Funcția este .get(); variabila_char este o variabilă de tip char, în care salvez caracterul citit. nume_fișier reprezintă fișierul din care citim. Acesta trebuie deschis în prealabil, pe modul citire. Această funcție scrie caracterele ascunse, de genul spațiu sau sfârșit de linie (\n). |
Scrierea caracterelor (tipul char) |
fputc(variabila_char, nume_fișier); Funcția este fputc(); variabila_char este o variabilă de tip char, pe care vrem să o scriem. nume_fișier reprezintă fișierul în care scriem. Acesta trebuie deschis în prealabil, pe modul scriere. Această funcție scrie caracterele ascunse, de genul spațiu sau sfârșit de linie (\n). |
nume_fișier.put(variabila_char); Funcția este .put(); variabila_char este o variabilă de tip char, pe care vrem să o scriem. nume_fișier reprezintă fișierul în care scriem. Acesta trebuie deschis în prealabil, pe modul scriere. Această funcție scrie caracterele ascunse, de genul spațiu sau sfârșit de linie (\n). |
După cum se observă, diferențele nu sunt deloc mari. Limbajul C are o abordare procedurală, cu funcții pentru toate aspectele, pe când C++ a devenit mai permisiv. Însă, noi credem cu tărie, că la început de drum, fiecare elev trebuie să fie riguros și atent la modul în care scrie codul. Astfel că limbajul C ne oferă această strictețe, de care noi avem nevoie pentru a învăța despre precizie în programare. Mai târziu, când elevii au trecut la alt nivel și învață cum să folosească tehnologiile mai avansate, trecerea la C++ sau alt limbaj orientat pe obiect, va fi naturală.
Până atunci, noi cei de la Nerdvana, vă sugerăm să le luați pas cu pas și să fiți mai deschiși. C nu înseamnă vechi, iar C++ nu este mai bun. Sunt limbaje aproape identice.