Documente Academic
Documente Profesional
Documente Cultură
“Skill-uri” necesare:
-> gandire algoritmica – > analiza problemei cat si gasirea, generalizarea si optimizarea
solutiei
-> niste/un limbaj/e – C, C++, C#, Java, PHP, Matlab, etc
-> ceva experienta – niste mici proiecte proprii
Organizarea materiilor de programare / ani
Laborator - 30 pcte
- media notelor obtinute la fiecare tema de laborator
- nota se va acorda la finalul celor 2h aferente fiecarei temei de laborator
- laboratorul nu se poate recupera/face cu alta semigrupa
- pentru a intra in examen, numarul de absente acceptate la laborator este maxim 3
- in ultima saptamana de scoala se poate recupera, in caz de absenta (!nu reface),
un singur laborator
In fiecare saptamana veti avea postat pe Moodle materialul de curs, laborator si o lista cu
probleme de rezolvat (dintre acestea, 3-4 probleme vor fi selectate pentru a fi rezolvate in
timpul laboratorului).
PCLP I - Continut
▪ Ce este un algoritm. Reprezentarea algoritmilor
▪ Instructiuni
▪ Structuri si uniuni
▪ Fisiere
Input = date de intrare = datele cunoscute initial, pe baza carora algoritmul calculeaza
rezultatele cerute
Ex: un numar, o matrice, un graf, o imagine, text, etc
▪ Unicitate – rezultatele la fiecare pas sunt unic definite si depind doar de datele de
intrare si pasii precedenti
▪ Generalitate – algoritmul poate sa fie aplicat unei multimi de intrari (ex. algoritm
care rezolva toate ecuatiile de gradul II, nu doar x^2 - 1 =0)
o Start / Stop
o Atribuire de valori
o Conditie
Limbaj pseudocod si limbaj de programare
DI : x, y
DO : s
Pb 2 x, y, max reale
Citesc x, y
Se dau doua numere
Daca x>y atunci max <- x
reale x si y. altfel max <- y
Sa se gaseasca Scriu max
maximul – max-
dintre ele si sa se
afiseze.
DI : x, y
DO : max
x, y, max reale
Citesc x, y
max<-y
Daca x>max atunci max <- x
Scriu max
Pb 3 n, f, i intregi
Citesc n
Sa se calculeze f <- 1
si apoi afiseze Pentru i <- 1…n, cu pas 1*
factorialul f al f <- f*i
numarului Scriu f
natural pozitiv
n. *pas 1, adica valoarea
contorului i porneste de la
1 si creste dupa executia
DI : n secventei f <- f*i cu 1 :
DO : f f <- f*1
f <- f*2
…
Tipuri de date:
Date = tot ce e prelucrat printr-un program
Un tip de date defineste multimea valorilor pe care le pot lua variabilele de acel
tip, respectiv, modul de reprezentare al acestora in memoria calculatorului si
operatiile care pot fi efectuate cu acele date.
Tipuri de date fundamentale si modificatori de tip
OBS: Pe langa aceste tipuri de date avem o serie de altele derivate - create
folosind modificatori de tip: short, long si unsigned/signed.
Cu ajutorul lor specific care e spatiul de memorie pe care o sa il ocupe o variabila
de un anumit tip (modific domeniul unui tip de baza).
Observatie: In memoria calculatorului, pentru stocarea valorilor, se foloseste
reprezentarea binara (o cifra binara (0/1) = bit).
Variabila - o entitate dintr-un program care are un nume, un tip, o durata de viata si ocupa un
anumit spatiu de memorie
- valoarea ei poate sa se schimbe de-a lungul programului.
float a, b=2.5; // declar doua variabile de tip float: a si b; b are valoare initiala fixata: 2.5
char c, d=‘a’; // declar doua variabile de tip caracter: c si d; d are valoare initiala fixata: a
bool s=0, s1; // declar doua variabile de tip boolean: s si s1; s are valoare initiala fixata: 0 (false)
➢ in afara oricarei functii – variabile globale si atunci sunt vizibile oriunde in program.
Dev-C++ pasi:
1. File -> New -> Source File;
2. Save as: dau un nume fisierului si selectez ca tip de fisier: C++ source file – care va
pune extensia .cpp fisierului generat. Automat acest program va fi compilat ca un
program C++.
int main() // aceasta este o functie - cea principala = intrarea in program; unica
{ // nu face nimic
return 0; // return 0 se foloseste pentru a marca terminarea / incheierea/
} // /iesirea din functia main - cu succes
// orice aplicatie consola o sa contina minim aceasta secventa de cod
2. Un program care afiseaza un text, trece la linia urmatoare si afiseaza un numar:
#include <iostream>
using namespace std;
//includ biblioteca iostream ca sa pot sa folosesc operatorul << pentru afisare
//efectul cuvintelor rezervate using si namespace le vom discuta mai tarziu
//in principiu ma ajuta sa am acces la entitatea consola – cout
int main() {
cout<<“SALUT!”; // afisez pe consola – cout, folosind operatorul <<, textul SALUT!
cout<<endl; // trece la linia urmatoare
cout<<2.5; //cu operatorul << pot afisa orice tip de date de baza
return 0;
}
OBS: // - comentarii de linie; /*…*/ - comentarii bloc - nu au efect –ignorate la compilare
Cum as putea sa afisez valoarea unei variabile x, intregi, cu valoarea initiala 10, respectiv,
cu valoarea citita de la tastatura? Stiti sa faceti citirea/afisarea altfel?
3. Citirea de la tastatura a valorilor pentru variabile si afisarea lor :
#include <iostream>
using namespace std;
int main() {
int x, y; // declar doua variabile de tip intreg, locale (se gasesc intr-o functie)
// au o valoare initiala oarecare !!!NU SUNT INITIALIZATE CU 0
cout<<“Dati valori pentru x si y (cu spatiu intre ele sau pe linii diferite):”;
cout<<“Valoarea lui x este”<<x<<endl; //afisez text:” Valoarea lui x este” si valoarea lui x
cout<<“Valoarea lui y este”<<y<<endl; //apoi trec pe linie noua (endl)
return 0;
}
OBS! Daca o sa “copy – paste”-ati codul din pdf-uri este posibil ca simbolurile “ ” sa
fie diferite de cele folosite de IDE-ul Dev-C++ si veti avea un mesaj de eroare de tipul:
[Error] stray '\223' in program Solutie: Rescrieti simbolurile!
3. Variabile globale si locale (diferente)
OBS: Doar variabilele globale sunt initializate automat cu 0.
#include <iostream>
using namespace std; #include <iostream>
//variabile globale (in afara oricarei functii) using namespace std;
int x;
int main() {
float y; //variabile locale (in functia main)
double z; int x;
char c; float y;
double z;
char c;
int main() {
cout<<“Valoarea lui x e ”<<x<<endl; cout<<“Valoarea lui x e ”<<x<<endl;
cout<<“Valoarea lui y e ”<<y<<endl; cout<<“Valoarea lui y e ”<<y<<endl;
cout<<“Valoarea lui z e ”<<z<<endl; cout<<“Valoarea lui z e ”<<z<<endl;
cout<<“Valoarea lui c e ”<<c<<endl; cout<<“Valoarea lui c e ”<<c<<endl;
return 0;
return 0; }
}
Notiuni importante:
• precedenta = ordinea efectuarii operatiilor = prioritatea operatorilor
Ex: a=b+c*d; se executa *, apoi +, apoi = (rezultatele intermediare se stocheaza in variabile
temporare, fara nume, care exista pana la finalizarea instructiunii)
OBS: Precedenta poate sa fie modificata prin utilizarea de () - pe oricate niveluri e necesar.
Ex: a=(b+c)*d; se executa +, apoi *, apoi =
• asociativitatea = ordinea de asociere cand folosim un operator de mai multe ori in aceeasi
expresie
Ex: a+b+c; care + se executa mai intai? Cel din stanga sau cel din dreapta?
Prioritate
mare
Prioritate
mica
Operatori – Exemple si discutii
int a=3, b=4; int a=3, b=4; int a=3, b=4; int a=3, b=4;
Verificati daca numerele intregi a, b si c sunt mai mari ca 10. Daca aceasta conditie e
indeplinita afisati 1 (adevarat), altfel 0;
Operatorul conditional ?:
expresie1?expresie2:expresie3;
//in main
int a, b, max;
cout<<max;
//…
Conversii de tip
int a=3;
float b=4;
cout<<((b+a)/2)<<endl;
//3.5 - primul operand al operatorului + este de tip float=> rezultatul e de tip float
cout<<((a+a+a)/2)<<endl;
//4 - primul operand al operatorului + este de tip int => rezultatul impartirii e int
Exemplu: