Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is-ab:laboratoare:01 [2024/10/02 08:54]
razvan.cristea0106 [Asemănări C/C++]
poo-is-ab:laboratoare:01 [2025/01/19 22:27] (current)
razvan.cristea0106
Line 12: Line 12:
 ==== Introducere ==== ==== Introducere ====
  
-În acest laborator vom face o scurtă recapitulare a noțiunilor de bază învățate în limbajul C și vom vedea care sunt diferențele în linii mari dintre limbajele C și C++. Noi vom scrie programe în C++ pe întreg parcursul acestui semestru, deoarece vom învăța o nouă paradigmă de programare și anume cea __**Orientată Obiect (OO)**__.+În acest laborator vom face o scurtă recapitulare a noțiunilor de bază învățate în anul întâi la disciplina **Programarea Calculatoarelor și Limbaje de Programare (PCLP)** ​și vom vedea care sunt diferențele în linii mari dintre limbajele C și C++. Noi vom scrie programe în C++ pe întreg parcursul acestui semestru, deoarece vom învăța o nouă paradigmă de programare și anume cea **Orientată Obiect (OO)**.
  
 ==== Scurt Istoric ==== ==== Scurt Istoric ====
Line 183: Line 183:
 </​code>​ </​code>​
  
-Pasul indică la ce iterație ne aflăm în bucla for și dacă este satisfăcută condiția de continuare. Putem lua ca exemplu de cod incrementarea cu 5 a valorilor unui vector de numere întregi.+Pasul indică la ce iterație ne aflăm în bucla **for** și dacă este satisfăcută condiția de continuare. Putem lua ca exemplu de cod incrementarea cu 5 a valorilor unui vector de numere întregi.
  
 <code cpp> <code cpp>
Line 233: Line 233:
 </​code>​ </​code>​
  
-Instrucțiunea **do-while** este o variantă a buclei **while**, cu o diferență esențială:​ în bucla do-while, condiția de verificare este evaluată **după** ce codul din interiorul buclei a fost executat, **nu** înainte. Aceasta înseamnă că blocul de cod din bucla do-while va fi executat cel puțin **o dată**, indiferent dacă condiția este adevărată sau falsă.+Instrucțiunea **do-while** este o variantă a buclei **while**, cu o diferență esențială:​ în bucla **do-while**, condiția de verificare este evaluată **după** ce codul din interiorul buclei a fost executat, **nu** înainte. Aceasta înseamnă că blocul de cod din bucla **do-while** va fi executat cel puțin **o dată**, indiferent dacă condiția este adevărată sau falsă.
  
 Forma generală a instrucțiunii do-while Forma generală a instrucțiunii do-while
Line 267: Line 267:
 <​note>​Puteți folosi oricare din cele 3 instrucțiuni repetitive, important este ca efectul codului scris de voi să fie cel dorit și să fiți atenți la cum puneți condițiile.</​note>​ <​note>​Puteți folosi oricare din cele 3 instrucțiuni repetitive, important este ca efectul codului scris de voi să fie cel dorit și să fiți atenți la cum puneți condițiile.</​note>​
  
-<note warning>​Trebuie menționat faptul că șansele de a intra într-o **buclă infinită** sunt mai mari atunci când folosim instrucțiunea **while**, deoarece putem omite să modificăm **pasul** la fiecare iterație. Instrucțiunea for este mai sigură din acest punct de vedere, dar trebuie menționat că putem avea un infinite loop chiar și dacă folosim cum nu trebuie for-ul.+<note warning>​Trebuie menționat faptul că șansele de a intra într-o **buclă infinită** sunt mai mari atunci când folosim instrucțiunea **while**, deoarece putem omite să modificăm **pasul** la fiecare iterație. Instrucțiunea ​**for** este mai sigură din acest punct de vedere, dar trebuie menționat că putem avea un **infinite loop** chiar și dacă folosim cum nu trebuie for-ul.
 </​note>​ </​note>​
  
Line 286: Line 286:
 </​code>​ </​code>​
  
-Astfel programul nu va mai ieși din bucla for și va multiplica valoarea lui x de 10 ori la infinit.+Astfel programul nu va mai ieși din bucla **for** și va multiplica valoarea lui x de 10 ori la infinit.
  
 === Utilizarea pointerilor === === Utilizarea pointerilor ===
  
-C++, la fel ca C-ul, are tipuri de date speciale denumite pointeri, care sunt utile atunci când vrem să modificăm o valoare de la o anumită adresă din memorie.+C++, la fel ca C-ul, are tipuri de date speciale denumite ​**pointeri**, care sunt utile atunci când vrem să modificăm o valoare de la o anumită adresă din memorie.
  
-Un pointer este un tip de date care stochează **o adresă** din memorie la un anumit moment de timp în program. Să luam spre exemplu următoarea secvență de cod.+**Un pointer** este un tip de date care stochează **o adresă** din memorie la un anumit moment de timp în program. Să luam spre exemplu următoarea secvență de cod.
  
 <code cpp> <code cpp>
Line 310: Line 310:
 Pe linia ''​int* ptr = &​x;'',​ ceea ce se întâmplă este faptul că pointerul **ptr** este asociat cu adresa variabilei **x** (apariția săgeții de la **ptr** la **adresa** lui **x** din desen). Practic, **ptr** devine un **"​arătător"​** către locația din memorie unde este stocată variabila **x**. Este important să înțelegeți că un pointer nu este altceva decât o variabilă specială care conține adresa de memorie a unei alte variabile. Astfel, **ptr** indică către adresa lui **x** și poate fi folosit pentru a accesa sau modifica valoarea lui **x** prin intermediul acestei adrese. Pe linia ''​int* ptr = &​x;'',​ ceea ce se întâmplă este faptul că pointerul **ptr** este asociat cu adresa variabilei **x** (apariția săgeții de la **ptr** la **adresa** lui **x** din desen). Practic, **ptr** devine un **"​arătător"​** către locația din memorie unde este stocată variabila **x**. Este important să înțelegeți că un pointer nu este altceva decât o variabilă specială care conține adresa de memorie a unei alte variabile. Astfel, **ptr** indică către adresa lui **x** și poate fi folosit pentru a accesa sau modifica valoarea lui **x** prin intermediul acestei adrese.
  
-<note warning>​Un pointer poate pointa doar către **o singură** adresă, situația de mai jos fiind taxată cu o eroare de compilare.</​note>​+<note warning>**Un pointer** poate pointa doar către **o singură** adresă, situația de mai jos fiind taxată cu o eroare de compilare.</​note>​
  
 <code cpp> <code cpp>
Line 762: Line 762:
 La fel ca în C, în C++ putem declara variabile constante folosind cuvântul cheie **const**. Așa cum le spune și numele variabilele constante sunt cele care odată inițializate cu o valoare **nu** mai pot fi modificate. La fel ca în C, în C++ putem declara variabile constante folosind cuvântul cheie **const**. Așa cum le spune și numele variabilele constante sunt cele care odată inițializate cu o valoare **nu** mai pot fi modificate.
  
-<note warning>​O variabilă constantă se ințializează pe linia unde a fost **declarată** altfel va genera o eroare de compilare</​note>​+<note warning>​O ​**variabilă constantă** se ințializează pe linia unde a fost **declarată** altfel va genera o eroare de compilare.</​note>​
  
 == Utilizarea keyword-ului const pe variabile obișnuite == == Utilizarea keyword-ului const pe variabile obișnuite ==
Line 835: Line 835:
 === Citirea și afișarea variabilelor === === Citirea și afișarea variabilelor ===
  
-În C erați obișnuiți să citiți și să afișați variabilele utilizând funcțiile **scanf** și **printf**. În C++ vom folosi operatorul **>>​** pentru ​citire ​și operatorul **<<​** pentru afișare.+În C erați obișnuiți să citiți și să afișați variabilele utilizând funcțiile **scanf** și **printf**. În C++ vom folosi operatorul **%%>>%%** pentru ​citirea datelor de la tastatură sau din fișiere ​și operatorul **%%<<%%** pentru afișarea datelor în fișiere sau consolă.
  
-== Citirea și afisarea ​în C ==+== Citirea și afișarea ​în C ==
  
 <code c> <code c>
Line 855: Line 855:
 </​code>​ </​code>​
  
-== Citirea și afisarea ​în C++ ==+== Citirea și afișarea ​în C++ ==
  
 <code cpp> <code cpp>
Line 1190: Line 1190:
 Funcția afisareVector folosește referințe constante la pointeri (const int* const& v), pentru a garanta că atât adresa vectorului, cât și conținutul acestuia nu vor fi modificate în timpul afișării, menținând integritatea datelor. Funcția afisareVector folosește referințe constante la pointeri (const int* const& v), pentru a garanta că atât adresa vectorului, cât și conținutul acestuia nu vor fi modificate în timpul afișării, menținând integritatea datelor.
  
-<note important>​C++ introduce posibilitatea de a inițializa pointerii cu **nullptr**,​ care este specific doar pentru acest tip de date. Acesta funcționează similar cu **NULL**, dar cu un avantaj important: **nullptr** este un tip de date dedicat **pointerilor**,​ ceea ce previne atribuirea sa accidentală altor tipuri de variabile, cum se putea întâmpla cu **NULL** în C++. În C++, **NULL** este definit doar ca un **macro** care reprezintă valoarea 0 și poate fi atribuit chiar și variabilelor care nu sunt pointeri, lucru care poate duce la erori neintenționate.</​note>​+<note important>​C++ introduce posibilitatea de a inițializa pointerii cu **nullptr**,​ care este specific doar pentru acest tip de date. Acesta funcționează similar cu **NULL**, dar cu un avantaj important: **nullptr** este un tip de date dedicat **pointerilor**,​ ceea ce previne atribuirea sa accidentală altor tipuri de variabile, cum se putea întâmpla cu **NULL** în C++. În C++, **NULL** este definit doar ca un **macro** care reprezintă valoarea 0 și poate fi atribuit chiar și variabilelor care nu sunt pointeri, lucru care poate duce la confuzii nedorite.</​note>​
  
 <code cpp> <code cpp>
Line 1209: Line 1209:
 ==== Concluzii ==== ==== Concluzii ====
  
-Am putut observa în cadrul acestui laborator care sunt asemănările dar și diferențele în linii mari dintre C și C++. De acum înainte suntem pregătiți să explorăm ​paradigma orientată obiect ​pe care o vom începe din laboratorul următor.+Am putut observa în cadrul acestui laborator care sunt **asemănările**, dar și **diferențele** în linii mari dintre C și C++. De acum înainte suntem pregătiți să explorăm ​**Paradigma Orientată Obiect** ​pe care o vom începe din laboratorul următor.
poo-is-ab/laboratoare/01.1727848472.txt.gz · Last modified: 2024/10/02 08:54 by razvan.cristea0106
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0