Primul program C++
Structura unui program, ce face fiecare linie din scheletul obligatoriu și erorile pe care le vei vedea în prima săptămână.
Scheletul
Orice program C++ pe care îl vei scrie la examen arată așa:
#include <iostream>
using namespace std;
int main() {
// aici scrii tu
return 0;
}Înțelege ce face fiecare linie. Altfel o să le copiezi mecanic ani de zile.
#include <iostream> aduce în program ceea ce îți trebuie ca să citești de la tastatură și să afișezi pe ecran. Fără linia asta, cin și cout nu există și compilatorul se oprește. iostream vine de la input/output stream.
using namespace std; te scutește să scrii std::cout de fiecare dată. Numele din biblioteca standard stau într-un „spațiu de nume" numit std. Linia aceasta îi spune compilatorului: „dacă vezi un nume pe care nu-l recunoști, caută-l și acolo".
int main() este funcția de la care pornește execuția. Un program poate avea o sută de funcții, dar prima se execută main. Acoladele { } delimitează corpul ei.
return 0; îi spune sistemului de operare că programul s-a terminat cu bine. Zero înseamnă succes.
Un program care face ceva
Se citesc două numere întregi și se afișează suma lor.
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}Patru linii de conținut:
- Cu
int a, b;declar două variabile întregi. De acum există în memorie două locuri pe care le pot numiașib. - Cu
cin >> a >> b;citesc două valori și le pun acolo. Săgețile arată încotro merg datele: dinsprecin, înspre variabile. - Cu
cout << a + b;calculez și trimit rezultatul spre ecran. Săgețile sunt întoarse, pentru că datele merg în cealaltă direcție. return 0;și gata.
Reguli de scris care chiar contează
Punctul și virgula termină fiecare instrucțiune. Fără el, compilatorul nu știe unde se termină o instrucțiune. Eroarea este raportată de obicei pe linia următoare, așa că mulți începători caută greșeala pe linia greșită.
C++ face diferență între litere mari și mici. n, N și No sunt trei variabile diferite. Int nu este int și nu compilează.
Spațiile și liniile goale nu contează pentru compilator, dar contează pentru tine și pentru corector. Indentează corpul fiecărei bucle și al fiecărui if. La bac, un program aliniat prost este mai greu de corectat, iar asta te dezavantajează pe tine.
Comentariile se scriu cu // până la capătul liniei sau între /* și */ pe mai multe linii. Compilatorul le ignoră complet.
int n; // numărul de elemente
/* Aici pot scrie
pe mai multe rânduri. */Cum ajunge programul să ruleze
Ce scrii tu este text, iar procesorul nu înțelege text. Între cele două stă compilatorul. El traduce programul în instrucțiuni mașină și produce un fișier executabil.
De aici vin două feluri de probleme, complet diferite. Dacă le confunzi, pierzi timp:
Eroare de compilare. Programul nici nu pornește. Ai uitat un ;, ai scris greșit un nume, ai uitat o acoladă. Compilatorul îți spune linia. Programul nu s-a executat niciodată.
Eroare de execuție sau de logică. Programul compilează și rulează, dar face altceva decât trebuie. Aici compilatorul nu te mai ajută. Trebuie să urmărești tu ce se întâmplă.
La bac scrii pe hârtie, deci nu ai compilator. Tocmai de aceea trebuie să știi ce ar fi spus.
Erorile pe care le vei vedea primele
expected ';' before ...: lipsește punct și virgulă, aproape sigur pe linia dinaintea celei indicate.
'n' was not declared in this scope: folosești o variabilă pe care nu ai declarat-o sau ai scris-o cu altă literă decât la declarare.
expected '}' at end of input: ai deschis o acoladă și nu ai închis-o. Numără-le sau lasă editorul să le potrivească.
Programul rulează și afișează valori fără sens. Cel mai probabil folosești o variabilă în care nu ai pus nimic. În C++, o variabilă declarată într-o funcție (de exemplu în main) căreia nu i-ai dat explicit o valoare nu este zero. Conține ce se întâmpla să fie în memorie la acea adresă.
int s; // s conține o valoare imprevizibilă
for (int i = 1; i <= n; i++) s = s + i; // greșitint s = 0; // acum știm ce e în s
for (int i = 1; i <= n; i++) s = s + i; // corectE aceeași greșeală ca „inițializarea uitată" din pseudocod, doar că în C++ nu se vede. Programul rulează și dă un rezultat, dar rezultatul e greșit.
De reținut
#include <iostream>,using namespace std;,int main() { … return 0; }: scheletul, în care fiecare linie are un rost.cin >>citește,cout <<afișează. Săgețile arată direcția datelor.- Fiecare instrucțiune se termină cu
;, iar literele mari contează. - Eroare de compilare ≠ eroare de logică. Prima te oprește, a doua te lasă să crezi că merge.
- Inițializează variabilele. În C++ nu pornesc de la zero.