Documente Academic
Documente Profesional
Documente Cultură
sau
Helping others to find their way!
Imagined and created by
Dorin-Mircea Popovici
Sa facem cunostinta!
• El este Robyx
• Problema:
B
Vedere 3D (perspective view)
B
Ce abilitati i-ar fi necesare lui Robyx?
(0,0)
• Notam pozitia initiala a lui Robyx cu x
A, de coordinate (xa,ya), A
B
Care este conditia care, odata indeplinita ne asigura y
ca Robyx a ajuns acasa? R: (x,y)=(xb,yb)
Si acum sa-l ducem pe Robyx acasa! (cont)
Care sunt actiunile pe care Robyx ar trebui sa le (0,0)
intreprinda pentru a ajunge acasa? x
A
R: Ar trebui sa faca pasi, pas dupa pas
B
A ajuns Robyx acasa? = B? R: NU
y
Z Z
R: DA Z
Ce am invatat pana acum?
• Am inteles enuntul unei probleme
• am identificat contextul, starea initiala si starea finala (i.e. cerintele, prelucrarile
necesare si rezultatul asteptat)
• Cat ne costa?
• La aceasta intrebare vom raspunde in 2 ore. Deocamdata nu ne gandim la asta!
Important este sa obtinem un rezultat corect!
Traducand in pseudocod avem …
• start
• citeste xa, ya, xb, yb
• x=xa; y=ya;
• executa
• fa un pas: i.e alege aleator intre x=x+1 si y=y+1
• atata timp cat ((x!=xb)&&(y!=yb))
• stop
Cu alte cuvinte …
x=0;y=0;
Conditii initiale
do {
arataPozitie();
choice=random(-1,1);
if (choice<0) x=x+1;
else y=y+1;
if ((x==9)&&(y==9)) home=true;
• Stiind ca Dorel poate duce in camionul sau 1.5 tone (adica 1500 Kg) iar excavatorul
companiei poate excava dintr-o singura cupa maxim 0.6 mc (sa zicem 300 Kg)
simultati procesul de incarcare al camionului astfel incat capacitatea sa maxima sa nu
fie depasita.
28.02.2013 15
Structura unui program
28.02.2013 http://ebautu.homenet.org/ 16
Primele 3 intrebari
• Ce este un program?
• O insiruire de instructiuni ce implementeaza un algoritm de rezolvare a unei
probleme
• Cum obtinem un program?
• Fisier sursa -> cod obiect -> cod masina
• Eu pot scrie un program?
• Perseverand “DA”
28.02.2013 http://ebautu.homenet.org/ 17
Un exemplu de program C++
// primul meu program C++ A – directive, librarii
#include <iostream.h>
B – declaratii, ct, fctii, tipuri
int main()
{
cout << "Bine ati venit!"<<endl;
return 0;
}
C – functia main()
28.02.2013 http://ebautu.homenet.org/ 19
De la "vorba" la "fapta“ – pasul 1
• Editare
• C1ex1.c
28.02.2013 http://ebautu.homenet.org/ 20
De la "vorba" la "fapta“ – pasii 2&3
• C1ex1.c
compilare
• C1ex1.obj
link
• C1ex1.exe
28.02.2013 http://ebautu.homenet.org/ 21
De la "vorba" la "fapta“ – pasul 4
• C1ex1.exe
28.02.2013 http://ebautu.homenet.org/ 22
Al doilea program C++
// Al doilea program C++
#include <iostream>
using namespace std;
char nume[20];
int main()
{
cout << "Cum va numiti?"<<endl;
cin >> nume;
cout << "Bine ai venit, "<<nume<<endl;
system("PAUSE");
return 0;
}
28.02.2013 http://ebautu.homenet.org/ 23
Program = Date + Operatii
28.02.2013 http://ebautu.homenet.org/ 24
Date
28.02.2013 http://ebautu.homenet.org/ 25
Tipuri de date ale limbajului C
• Limbajul C este un limbaj tipizat
• fiecare informatie are asociat un tip de date
• Tipuri de date primare (de baza)
• caracter (char)
• număr întreg (int)
• număr real simplă precizie (float)
• număr real dublă precizie (double)
• Tipuri de date complexe (derivate) se obţin prin combinarea celorlalte
tipuri.
28.02.2013 http://ebautu.homenet.org/ 26
Tipuri fundamentale
Tipuri Mărime Domeniu de valori
fundamentale (octeţi)
char 1 -128…127
int 4 -2147483648…2147483647
2 -32768…32767
float 4 -3,40×1038...3,4×1038
double 8 -1,79×10308...1,79×10308
• Tipurile char şi int admit subtipuri în funcţie de care se
modifică domeniul de valori
• unsigned/signed char
• short/long unsigned/signed int
28.02.2013 http://ebautu.homenet.org/ 27
Constante
28.02.2013 http://ebautu.homenet.org/ 28
5
3 ?
28.02.2013 http://ebautu.learsomestuff.com 29
Valori constante
• Constantă = informaţie care nu poate fi modificată de program
• fiecare constantă are asociat un tip de date
• Tipuri de constante
• caracter
• şir de caractere
• număr întreg
• număr real
28.02.2013 http://ebautu.homenet.org/ 30
Constante caracter
• un caracter ASCII scris între apostrofuri
• 'C', '0', '.', '!'
• au întotdeauna tipul char
• secvenţă escape = backslash (\) urmat de caractere cu semnificaţie
specială
• \’ single quote – caracterul apostrof
• \” double quote – caracterul ghilimele
• \\ backslash – caracterul backslash
• \n new line – trecerea la rândul următor
• \t horizontal tab – tabulator orizontal (multiplu de 8)
28.02.2013 http://ebautu.homenet.org/ 31
Constante şir de caractere
• o secvenţă de caractere scrise între ghilimele
• "acesta este un sir"
• "acest sir contine ghilimele astfel \" "
• se pot scrie pe mai multe randuri:
• "acesta este un sir\
pe mai multe randuri"
• "acesta este un sir"
"pe mai multe randuri"
28.02.2013 http://ebautu.homenet.org/ 32
Constante număr întreg
• un număr întreg
• scris în baza 10 – 12
• folosind cifre 0...9
• cifrele au ponderi egale cu puterea lui 10
• scris în baza 8 – 014
• folosind cifre 0...7
• cifrele au ponderi egale cu puterea lui 8
• scris în baza 16 – 0xC
• folosind cifre 0...9 si litere A...F
• cifrele au ponderi egale cu puterea lui 16
28.02.2013 http://ebautu.homenet.org/ 33
Constante număr real
• un număr real scris în baza 10, cu sau fără zecimale, cu sau fără
exponent
• Exponentul = litera e urmată de un număr întreg n (puterea lui 10).
• 10 10.0 10e0
• 1.5 15e-1 0.15E1 = 0.15 x 101
• 0.3 .3 3E-1
• separator pentru zecimale este punctul
28.02.2013 http://ebautu.homenet.org/ 34
Variabile
28.02.2013 http://ebautu.homenet.org/ 35
5
3 ?
28.02.2013 http://ebautu.learsomestuff.com 36
5
28.02.2013 http://ebautu.learsomestuff.com 37
Variabila
• = o zona de memorie capabila sa retina o informatie
de un anumit tip, accesibila de catre programator
printr-un nume si printr-o adresa de memorie de
catre calculator
28.02.2013 http://ebautu.homenet.org/ 38
Identificatori
• un nume pe care programatorul îl dă unei entităţi (o variabilă, funcţie,
tip de date, etc) pentru a putea lucra mai uşor cu aceasta.
• identificator
• secvenţă de caractere alfanumerice şi underscore (_)
• începe cu o literă sau underscore.
• literele mari diferă de litere mici
28.02.2013 http://ebautu.learsomestuff.com 39
Exercitiul 1.1
• Găsiţi identificatorii corecţi:
• varsta
• 1_secret
• greutate
• _secret
• total1980
• _
• 1980total
• _1980
28.02.2013 http://ebautu.homenet.org/ 40
Declararea variabilei
• înainte de a fi folosită orice variabilă trebuie declarată
• float PI = 3.1415926;
• int varsta = 26, greutate;
• int varsta;
28.02.2013 http://ebautu.homenet.org/ 42
Instrucţiuni C
• instrucţiunile unui program determină operaţiile pe care acesta le
efectuează
• o instrucţiune este formată din cuvinte cheie, expresii şi/sau alte
instrucţiuni.
• instrucţiunile simple se termină cu punct si virgulă
• instrucţiunile compuse se scriu între acolade
28.02.2013 http://ebautu.homenet.org/ 43
Instructiunile vida si compusa
• instrucţiunea vidă nu execută nici o operaţie (se scrie doar ; )
• Instructiunea compusa consta dintr-o succesiune de declaratii si
instructiuni incluse intre acolade
28.02.2013 http://ebautu.homenet.org/ 44
Instrucţiunile expresie si atribuire
• este compusă dintr-o expresie C
28.02.2013 http://ebautu.homenet.org/ 45
Program = Date + Operatii
Operatii
Operatori aritmetici
• Operatori unari de păstrare/schimbare a semnului: + şi –
• Operatori binari multiplicativi *, / şi %
• Operatori binari aditivi + şi –
• Exemplu:
• int i = –2 + 3 * 4 – 5;
• Este diferit de –(2 + 3 * 4 – 5);
• Si este diferit de – 2 + 3*(4 – 5);
Instrucţiunea decizionala if
• permite execuţia unei instrucţiuni în funcţie de valoarea unei expresii
• Operatori logici
! negatie logica - are prioritatea cea mai ridicata
&& SI logic - prioritate mai mica decat operatorii relationali
|| SAU logic - prioritate mai mica decat operatorii relationali
X !X
≠0 0
0 1
X Y X && Y X Y X || Y
0 0 0 0 0 0
0 ≠0 0 0 ≠0 1
≠0 0 0 ≠0 0 1
≠0 ≠0 1 ≠0 ≠0 1
Exercitiul 1.3
Considerati secventa de cod:
28.02.2013 http://ebautu.homenet.org/ 53
Sfaturi
• daca primul operand al expresiei in care apare operatorul && este 0,
sigur rezultatul final este 0, indiferent de valoarea celui de-al doilea.
• daca primul operand al expresiei in care apare operatorul || este !=0,
sigur rezultatul final este 1, indiferent de valoarea celui de-al doilea
• Expresiile logice in C se calculeaza prin scurtcircuitare
• daca primul operand are valorile de mai sus, corespunzator operandului &&
sau ||, cel de-al doilea operand nu se mai evalueaza.
10/23/2012 http://ebautu.homenet.org/ 54
Exercitii propuse
1. Să se realizeze un program C++ care afiseaza: "Bine ai venit!"
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(){
cout << "Bine ai venit!“<<endl;
system("pause");
return 0;
}
Modificați programul anterior așa încât să afișeze 3 mesaje pe 3 rânduri diferite. Incercati apoi sa le
puneti pe acelasi rand.
Exercitii propuse (cont)
2.Scrieţi un program care citeşte două numere intregi de la tastatură şi afişează suma lor.
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(){
int nr1, nr2;
int suma;
system("pause");
return 0;
}
Exercitii propuse (cont)
a) Modificați programul anterior așa încât să citească de la tastatură 3 numere întregi și să afișeze
suma lor.
b) Modificați programul anterior așa încât să citească de la tastatură 3 numere reale de tip float și să
afișeze suma lor.
c) Modificați programul anterior așa încât să citească de la tastatură 3 numere reale de tip double și
să afișeze suma lor.
d) Modificați programul anterior așa încât să calculeze rezultatul împărțirii a două numere întregi
(deîmpărțitul va fi primul număr, împarțitorul al doilea număr citit). Atenție la tipul variabilei ce
reprezintă câtul!
e) Modificați programul anterior așa încât să calculeze restul împarțirii primului număr introdus la cel
de al doilea. Folosiți operatorul %.
28.02.2013 http://ebautu.homenet.org/ 57
Exercitii propuse (cont)
3. Scrieți unprogram care citește un număr întreg de la tastatură și verifică dacă este
par.
4. Scrieţi un program determină soluţia unei ecuaţii de gradul 1 cu coeficienţi reali, de
forma ax+b = 0. Coeficienţii a si b vor fi citiţi de la tastatură.
5. Executaţi programul pentru a rezolva ecuaţia 3x+8=0.
6. Folosind instrucţiunea if-else, scrieţi un program care citeşte un număr intre 1 si 7 şi
afişează ziua corespunzătoare a săptămânii.
7. Scrieti un program care transformă o temperatură citită de la tastatură din grade
Celsius in grade Farenheit. Formula de conversie este F=32+9*C/5.
8. Scrieti un program care pentru trei numere naturale citite de la tastatura determină
dacă pot fi laturile unui triunghi şi daca acesta este dreptunghic.
28.02.2013 http://ebautu.homenet.org/ 58
Instructiuni de ciclare
28.02.2013 http://ebautu.learsomestuff.com 59
Ce au in comun?
• Culesul roadelor
pamantului
• Spalatul vaselor
• Mersul pe jos
• CICLITATEA
http://insemnarile-unei-
http://www.dollo.ro/2012/03/degustare-
• Cat timp? Pana cand?vinuri-transilvania-liliac/
femei.blogspot.ro/2011/06/jucarie-noua-
vorba-surorii-mele.html
28.02.2013 http://ebautu.learsomestuff.com 60
Pana cand? … Atata timp cat …!
28.02.2013 http://ebautu.learsomestuff.com 61
Instrucţiunea de ciclare do-while
• execuţă o instrucţiune cât timp o expresie are valoare nenulă
(adevărată)
9/26/2017 http://ebautu.homenet.org 62
Instrucţiunea de ciclare do-while (cont)
• sintaxa:
do
instructiune;
while(conditie);
• efect:
• se execută instructiune;
• dacă valoarea expresiei conditie este 0, atunci se opreşte execuţia lui do-
while,
• altfel se repetă încă o dată corpul lui while.
9/26/2017 http://ebautu.homenet.org 63
Instrucţiunea de ciclare do-while (cont)
• Se dorește citirea unui număr între 1 și 10. Dacă
utilizatorul introduce un număr care nu satisface
această condiție, atunci i se cere din nou.
int n;
do {
cout << "Introduceti un numar intre 1 si 10";
cin >> n;
} while ((n<1)||(n >10));
9/26/2017 http://ebautu.homenet.org 64
Instrucţiunea de ciclare do-while (cont)
• Se dorește calculul sumei primelor n numere
naturale:
9/26/2017 http://ebautu.homenet.org 65
Pana cand? … Atata timp cat…?
28.02.2013 http://ebautu.learsomestuff.com 66
Instrucţiunea de ciclare while
• execuţă o instrucţiune cât timp o expresie are valoare nenulă
(adevărată)
• efect:
• dacă valoarea expr (conditie) este 0, atunci se opreşte execuţia lui while,
• altfel se execută instr şi se repetă while încă o dată.
• Instructiunea instr poate fi o instrucțiune complexă (e.g. un bloc de
instrucțiuni)
9/26/2017 http://ebautu.homenet.org 67
Instrucţiunea de ciclare while (cont)
• Se dorește calcularea sumei cifrelor unui număr
intreg.
9/26/2017 http://ebautu.homenet.org 68
Instrucţiunea de ciclare while (cont)
• Se dorește calcularea sumei numerelor de la 0 la n.
int i=0,s=0;
while(i<n) {
s=s+i;
i=i+1;
}
9/26/2017 http://ebautu.homenet.org 69
Instrucţiunea de ciclare for
• execută o instrucţiune cât timp o expresie are valoare nenulă
• sintaxa:
• efect:
• se evaluează exp1 (initializare) o singură dată.
• dacă exp2 (continuare) este 0, se opreşte for-ul.
• Altfel, se execută instr, apoi exp3 (actualizare) şi se repetă for-ul (fără
iniţializare).
28.02.2013 http://ebautu.learsomestuff.com 70
Instrucţiunea de ciclare for (cont)
• Se dorește afișarea numerelor impare mai mici decat
n.
int i;
for(i = 1; i <= n; i += 2)
cout << i << endl;
9/26/2017 http://ebautu.homenet.org 71
Instrucţiunea de ciclare for (cont)
• Se dorește calcularea produsului primelor n numere
naturale ( n! ).
9/26/2017 http://ebautu.homenet.org 72
Exercitiul 2.2
28.02.2013 http://ebautu.learsomestuff.com 73
Dar sa revenim la vechea noastra cunostinta Robyx