Documente Academic
Documente Profesional
Documente Cultură
- PC -
1
Organizare:
Curs – 2h/sapt
Laborator – 2h/sapt.
*temele de laborator se realizeaza in timpul laboratorului si se predau pe
Moodle conform deadlineurilor (in fiecare saptamana - vineri ora 23:59)
**se poate recupera o tema nepredata in ultima saptamana
Nota finala:
Examen - 50% nota (25% grile + 25% probleme)
Verificari intermediare - 2x10% (saptamanile 7 si 12) – exercitii scurte
Laborator - 30% nota
- media notelor obtinute la fiecare tema de laborator
* Laboratoarele o sa fie testate antiplagiat cu programul Moss (Standford)
**In caz de plagiat – tema se puncteaza cu (-1)*punctajul aferent
2
Necesar:
Cunostinte medii de C
0. Introducere
d.p.d.v. al fisierelor
• c cplusplus
cin >> variabila; // de la obiectul consola (cin) se citeste (>>) valoarea variabilei
cout << variabila; // pe obiectul consola (cout) se afiseaza (<<) valoarea variabilei
• variabila poate sa fie de orice tip de date de baza sau sir de caractere
Exemple:
int x, a; double b; cout << “textul: ”<<sir;
char sir[20]; cout << “\n”;
int stare_Panel = 0;
in C++ : // butoane (8): Scenariu, Salvare, Configurare, Declansare, Analiza,
// Adnotari, Ajutor, Iesire
// stari (4): Initiala, Declansare, Analiza, Simulare
int StariButoane[4][8] =
{{0,1,1,0,0,0,0,0},{1,1,0,1,0,0,0,0},{0,1,0,1,1,0,0,0},{1,1,1,1,1,1,1,1}};
// int StariButoane[2][3] = {{1,2,3},{4,5,6}};
// = {{0,1,1,0,0,0,0,0},{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,0}};
Daca linia este prea lunga si se trece automat pe linia urmatoare si comentariul 6
“nu mai are efect” => se numesc comentarii de linie!
C1: Deosebiri intre C si C++
3. Pozitia declaratiilor in program
la inceput
in C :
oriunde in program
in C++ :
7
la inceput oriunde in
in C : in C++ : program
// vizibilitate 1 // vizibilitate 2
4. Structurile si uniunile
C: C++:
typedef struct p point; struct point {
struct p{ int x;
int x; int y;
int y; };
};
point pct;
struct p pct;
point pct1;
10
Declarati o variabila de tip point? Cum fac initializarea, modificarea si afisarea ei? Cum
ar arata functiile care fac aceste operatii?
C1: Deosebiri intre C si C++
5. Functii ca parti ale unor structuri (functii membre)
#include <cstdlib>
#include <iostream>
using namespace std;
return 0;
} 13
//ce se afiseaza?
#include <cstdlib>
#include <iostream>
using namespace std; void point::afisare() //functia afisare din
// domeniul fisier cu numele point
struct point { {
private: int x;//altfel ar fi publice cout<<x<<" "<<y<<endl;
int y; }
// utilizare:
cout<<f()<<“ ”<< f(5); // va afisa 0 (folosind valoarea implicita) sau 25
16
Parametrii impliciti trebuie sa se gaseasca la finalul listei de
parametri!
Dar?
void funct(int val=0,int x=0)
{
cout<<val<<“ “<<x; La apelul: funct(2) se afiseaza: 2 0
! DAR Nu o sa am cum sa apelez implicit parametrul val
}
//se poate apela: funct(2,2); si explicit parametrul x
//sau funct(2); 17
//sau funct();
C1: Deosebiri intre C si C++
9. Supradefinirea functiilor (overload)
In C++ pot exista in acelasi program mai multe functii cu acelasi nume, dar
semnatura diferita = functii supradefinite.
Semnatura functiei = numarul, ordinea si tipul parametrilor
int arie_drept(int lun, int lat) float arie_drept(float lun, float lat)
{ {
return lun*lat; return lun*lat;
} }
18
double arie_drept(double lun, double lat) float arie_drept(float lun)
{ {
return lun*lat; return lun*lun;
} }
// utilizare:
cout<<arie_drept(2, 4);
cout<< arie_drept(2.5, 2.2);
cout<< arie_drept(2.5);
// main…
a = 3; b = 4;
cout<< a <<“ “<< b; //3 4
schimba_1();
cout<< a <<“ “<< b; //4 3
// main...
int a = 3, b = 4;
cout<< a <<“ “<< b;
schimba_2(a, b);
cout<< a <<“ “<< b; // ce rezultat – de ce?
21
c) cu pointeri (pass-by-reference – C ):
void schimba_3(int *pa, int *pb)
{
int temp = *pa; // se lucreaza la adresele variabilelor trasmise in functie
*pa = *pb;
*pb = temp;
}
//…main()
int a,b; // variabile locale
a = 3; b = 4;
cout<< a <<“ “<< b;
schimba_3(&a, &b); //transmit adresele lui a si b
cout<< a <<“ “<< b; // rezultat? – de ce?
// main…
int a=3,b=5;
schimba_4(a, b);
cout<<a<<“ “<<b; //5 3
23
Alt exemplu (functie care majoreaza cu o valoare o variabila):
// cu pointer // cu referinta
void majoreaza(int *val) void majoreaza(int &val)
{ {
*val += 5; val += 5;
} }
// main… // main
int x = 0; int x = 0;
majoreaza(&x); majoreaza(x);
// adresa lui x e trimisa ca argument // referinta la x e primita ca argument
Ce se intampla?
…
void sum(const int &xx, const int &yy)
{
Cuvantul cheie (rezervat) const apare uneori dupa lista de argumente a unor
metode (functii membre).
Va fi mai clara necesitatea cand vom ajunge la clase; vor aparea si alte discutii
despre utilizarea si utilitatea lui const.
• new – returneaza un pointer de tipul cerut (int*,point*, etc) catre o zona de memorie
bool sw;
if (3<4) sw=true; //sw=1;
else sw=false; //sw=0;
cout<<sw; //afiseaza 1
33
Problema 1
Care din urmatoarele functii sunt o supradefinire a functiei:
void f(double t, int y);
funct(3);
Se apleaza: square(z);
DAR:
36
Problema 4
1. Creati o stuctura pentru numere complexe (campurile real si imaginar sunt
private) si implementati o functie membra de afisare pentru aceasta stuctura
struct complex
{
private: double re;
double im;
public: void afis() const
{
cout<<re<<"+j*"<<im<<endl;
}
};
T **mat=new T *[lin];
mat[i]=new T[col];
delete [] mat[i];
delete []mat;
cout<<mat[1][1];
//se afiseaza ce se gaseste la acea adresa
mat=NULL;
39
Problema 6
Ce se afiseaza?
int y=3;
int &x=y;
cout<<x<<" "; 3
cout<<&x<<" "; 0x28ff44
cout<<&y<<" "; 0x28ff44
x=5;
cout<<y<<" "; 5
int z=2;
x=z;
z++;
40
cout<<x; 2
using - cuvantul cheie - se poate folosi ca directiva pentru introducerea in zona de
lucru a unui intreg namespace (grupare de variabile/obiecte si functii):
#include <iostream>
using namespace std;
namespace first {
int x = 5;
int y = 10;
}
namespace second {
double x = 3.1;
double y = 2.7;
}
int main () {
using namespace first;
cout << x << endl;
cout << y << endl;
cout << second::x << endl; //folosind operatorul de rezolutie precizez ca ma refer la
cout << second::y << endl; //variabilele x si y din namespaceul second
return 0; 41
}
using si using namespace - sunt valide doar in blocul in care au fost
mentionate sau in intregul cod daca au fost folosite in maniera globala.
Examplu de utilizare a variabilelor dintr-un namespace si apoi a variabilelor din alt
namespace:
#include <iostream>
using namespace std;
namespace first {
int x = 5;
}
namespace second { //intr-un namespace pot sa fie implementate si functii
double x = 3.1416;
}
int main () {
{
using namespace first;
cout << x << endl; //5
}
{
using namespace second;
cout << x << endl; //3.1416
}
return 0; 42
}
Namespace alias
Putem declara nume alternative pentru namespaceuri existente astfel:
Namespace std
Toate fisierele din biblioteca standard C++ isi au declarate
variabilele/obiectele necesare in namespace-ul std.
De aceea includem biblioteca <iostream> si apoi precizam ca avem
nevoie de obiectele declarate in std (using namespace std), aici fiind
declarate obiectele cin si cout (sau le utilizam astfel std::cin/std::cout).
endl e tot o variabila din std.
43