Programarea Calculatoarelor Cursul 2: Tipuri de Date Expresii Instrucțiuni de Decizie
Programarea Calculatoarelor Cursul 2: Tipuri de Date Expresii Instrucțiuni de Decizie
Calculatoarelor
Cursul 2
Tipuri de date
Expresii
Instrucțiuni de decizie
Obiective
2
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Sisteme de numerație
3
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Conversie baza 10 - baza 2
78 0 32 0
39 1 16 0
19 1 8 0
9 1 4 0
4 0 2 0
2 0 1 1
1 1 0
4
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Conversie baza 2 - baza 10
cifrele 1 0 0 1 1 1 0 1
cifrele 1 0 0 0 0 0 0
5
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Reprezentare numere întregi pozitive
6
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Reprezentare numere întregi pozitive - exemplu
7
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Baza octală și cea hexazecimală
8
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Reprezentare caractere
[Link]
9
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Numere întregi negative
10
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Numere întregi negative - Complement față de 2
● Reprezentare C2
○ Dacă se folosesc n biți
■ Numere pozitive de la
■ 000...0 = 0 până la 011...1 = 2n-1-1
■ Numere negative de la
■ 100...0 = -2n-1 până la 111...1 = -1
● Conversie rapidă număr negativ în
reprezentare C2
○ Se convertește valoarea în modul în binar
○ Se adaugă zerouri în față până la n biți
○ Se schimbă starea biților, 1 în 0 și 0 în 1
(complement față de 1)
○ Se adună 1 la rezultatul în binar
○ Exemplu, pe 4 biți
-6 = ~0110(2)+1(2) = 1001(2)+1(2) = 1010(2)
11
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Numere întregi negative - Complement față de 2
6 = 0110
-6 = 1010
0 = 10000
● se iau în considerare doar ultimii 4 biți
1 urmat de n biți de 0
○ se iau în considerare doar ultimii n biți atunci devine 0
12
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Reprezentare numere întregi negative - exemplu
-108,828 ca un int = 32 biți = 4 bytes
Adunăm 1 în binar
1111 1111 1111 1110 0101 0110 1110 0100
14
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Conversie baza 2 - baza 10 - numere subunitare
cifrele 0 1 0 1
cifrele 1 1 1 1 1
15
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Consecințe
x = ±[Link]… bazaputere
17
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Conversie număr zecimal în virgulă flotantă
x = ±[Link]…
~ 10000100.1001000111101100(2)= k este 7
= 1.00001001001000111101100(2)×27 =
= 2134-127×1.00001001001000111101100(2)
= 210000110(2)-127×1.00001001001000111101100(2)
bit semn 0 pozitiv, 1 negativ; biți exponent; biți mantisă - se ignoră cifra de 1 din stânga
* dimensiunea în octeți se dă pentru Windows 64 biți, poate fi diferită pe alt sistem de operare
* long long int este introdus în standardul C99
20
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Tipuri de date - reale
* dimensiunea în octeți se dă pentru Windows 64 biți, poate fi diferită pe alt sistem de operare
* long double este introdus în standardul C99
[Link] [Link]
21
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Depășirea limitei - Overflow
22
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Depășirea limitei - Overflow - exemple
23
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Expresii - introducere
● O expresie este
○ o variabilă sau o constantă x sau 14
○ un operator unar și o expresie -x sau +14
○ un operator binar și două expresii x+y sau x*14
○ un operator ternar și trei expresii x?0:1
● Practic, este o formulă care se evaluează la o valoare în
momentul execuției programului
● În general formulele matematice se transcriu aproape
identic ca expresii în C
● Exemplu, x + 3*y - 5*(z+4)
24
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Clasificare operatori
● Aritmetici
○ +-/*%
○ rezultatul operației este un număr
○ % este restul împărțirii = modulo
○ nu există ridicare la putere
● Relaționali
○ > >= < <= == !=
○ rezultatul operației este adevărat 1 sau fals 0
○ == verifică egalitate, = este pentru atribuire, != diferit
● Logici
○ ! && ||
○ ! - not, negare logică, && - și logic, || - sau logic
○ rezultatul operației este adevărat 1 sau fals 0
● Incrementare, decrementare (post și pre)
○ ++ --
25
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Evaluarea expresiilor
● Dacă expresia este o constantă sau o variabilă valoarea
ei este egală cu valoarea constantei/variabilei și se
păstrează tipul
● Dacă expresia este formată din mai mulți operanzi de
același tip atunci rezultatul va fi tot de acest tip
● Dacă expresia este formată din mai mulți operanzi de
tipuri diferite atunci tipurile cu domeniu mai mic sunt
automat (implicit) convertite în tipuri cu domeniu mai mare
și rezultatul va fi de acest tip = conversie implicită
○ ordinea tipurilor de la domeniu mic la domeniu mare:
char -> unsigned char -> short -> unsigned short -> int ->
unsigned int -> long long -> unsigned long long -> float ->
double -> long double
26
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Evaluarea expresiilor
char x = 120;
char y = 110;
int z = x + y;
printf("%d\n", z); // 230
27
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Evaluarea expresiilor
28
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Operatori aritmetici
//operatori unari
-a ● dacă a este 1, -a este -1; dacă a este -2, -a este 2; 0 neafectat
+-6 ● este tot -6, operatorul unar + este doar cosmetic
//operatori binari
int x = 6-7; ● -1, două constante de tip int, rezultatul tot de tip int
int y = 1/2; ● 0, se calculează câtul împărțirii dacă ambii operanzi sunt int
float z = 1/2; ● 0.f, rezultatul împărțirii este tot int, care apoi este convertit la float
float u = 1.f/2; ● 0.5f, operandul 2 de tip int este convertit implicit la float
float v = 1/2.f; ● 0.5f, operandul 1 de tip int este convertit implicit la float
float w = 1/2.0; ● 0.5f, rezultatul 0.5 de tip double este convertit implicit la float
float q = (float)1/2; ● 0.5f, operandul 1 de tip int este convertit explicit la float
29
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Operatori aritmetici - împărțire la 0
//operanzi intregi
int a = 5; ● nu este eroare de compilare
int b = a/0; ● eroare la rularea programului, nu se poate calcula pentru întregi
//operanzi reali
float x = 5.0f; ● se poate face împărțire cu 0 pe tipuri reale
float y = x/0; ● inf, valoare specială rezervată pentru numere peste limita maximă
float z = -x/0.f; ● -inf, valoare specială pentru numere sub limita minimă
30
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Operatori aritmetici - incrementare și asignare
32
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Operatori aritmetici - prioritate și asociativitate - tabel
1 post-increment .++
post-decrement .--
2 pre-increment ++.
pre-decrement --.
plus unar +.
minus unar -.
3 multiplicative */%
4 aditive +-
5 asignare = *= /= %= += -=
33
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Operatori relaționali și logici
34
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Expresii - greșeli des întâlnite
35
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă if
● Ramifică fluxul de control pe una din maxim două
alternative în funcţie de valoarea de adevăr a expresiei
evaluate
if ( expresie )
instructiune_1;
else
instructiune_2;
● Expresia trebuie obligatoriu inclusă între paranteze
rotunde
● Dacă expresie este adevărată (nenulă) atunci se
execută instructiune_1 altfel se execută
instructiune_2
● Ramura else poate să lipsească
36
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă if - exemplu simplu
37
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă if - exemplu complex
38
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă if - erori frecvente
39
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă switch
41
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Instrucţiunea alternativă switch - exemplu
42
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Discuție problemă - Intersecția a două intervale
43
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga
Discuție problemă - Intersecția a două intervale
#include <stdio.h>
int main() {
float A, B, C, D;
scanf("%f%f", &A, &B);
scanf("%f%f", &C, &D);
● calculăm în L maximul dintre A și C
float L = A;
if (C > L)
L = C;
● calculăm în R minimul dintre B și D
float R = B;
if (D < R)
R = D;
● se intersectează
if (R > L)
● atunci lungimea este diferența
printf("%f\n", R-L);
else
● altfel lungimea este 0
printf("0");
return 0;
}
45
PC Curs 2 - Tipuri de date; Expresii; Instrucțiuni de decizie - R. Varga