Sunteți pe pagina 1din 24

Variabile.

Tipuri de date fundamentale.


Tipuri de date derivate.

Variabile
Variabila este o zona de memorie in care se
poate stoca o valoare
Se caracterizeaza prin nume, tip, valoare
Numele unei variabile ne permite accesul la
valoarea ei sau modificarea valorii ei
a = 5;
a = a + 1;
result = a + b;

Tipuri fundamentale
char: pot reprezenta un singur caracter ca A sau &. In
memorie ocupa un octet
int: pot reprezenta numere intregi ca 7 sau 1024;
float: numere reale in virgula mobila, simpla precizie (
3.14, 0.01 )
double: numere reale in virgula mobila, dubla precizie
bool: true sau false ( nu exista in C ?)
tipurile intregi au varianta signed si unsigned
Pentru a afla marimea unui anume tip de date : sizeof
Exercitiu: aflati marimea tipului int folosind operatorul sizeof

Variabile.Declarare
Orice variabila trebuie declarata inainte de a fi
folosita
Specificam tipul si numele
int a;
float num;
int a, b, c;

Variabile.Intializare
Cand variabilele sunt declarate, au o valoare
nedeterminata pana in momentul cand i se
asigneaza o valoare
int a = 0;
float x = 3.2;

Variabile. Exercitii
1)Scrieti un program care sa calculeze suma a
doua numere intregi;
2)Scrieti un program care sa calculeze
maximul a 2 nr intregi;
3) Care e eroarea in secventa de mai jos
int x = 0;
int y = 1;
a = x + y;

Tipuri de date derivate.


Tablouri unidimensionale(vectori)
Nu va speriati , nu este vorba de vectorii de la fizica
Este doar o forma de organizare a datelor
De ce nu sunt suficiente variabilele? Daca avem de
manipulat 100 de date de intrare, devine dificil sa
gestionam 100 de variabile. Lungimea codului ar creste
considerabil.
Este un sir de elemente de acelasi tip, plasate in memorie
intr-o zona contigua.

Tablouri unidimensionale(vectori).
vec

12

16

70

100

32

400

37

89

129

Declaratie:
int vec[10];

Intr-un vector cu 10 elemente, elementele sunt


numerotate de la 0 la 9. Atentie, primul element
are indexul 0, nu 1 !
Numarul dintre paranteze[] reprezinta lungimea
vectorului si trebuie sa fie o expresie constanta!

Tablouri unidimensionale(vectori).
Elementele unui vector pot fi initializate la momentul
declararii:
int vec[5] = {12, 45, 100, 1234, 12876};
120
1
2
3
476
12

45

100

1234

int vec [5] = { 10, 20, 30 };


120
1
2
3
10

20

30

12876

476
0

int vec [5] = {};


120
0

1
0

2
0

3
0

476
0

Tablouri unidimensionale(vectori).
vec[0]
vec 12

vec[1]

vec[2]

vec[3]

vec[4]
76

45

100

1234

12876

Accesarea unui element se face prin nume si


index:
vec[0] = 75;
x = vec[2];

Vectori.Exercitii
1) Avem vectorul cu 5 elemente de pe slide-ul
anterior. Ce e gresit la urmatoarea
instructiune:
vec[5] = 3;

2) Care este eroarea:


int n = 5;
int v[n];

Vectori.Exercitii
Fie un vector de intregi cu lungimea 1000.Scrieti
un program care sa initializeze elementele
vectorului cu valorile 1 1000;
Fie un vector de nr intregi cu lungime 10 si valori
de la 1 la 10.Scrieti un program care sa faca suma
elementelor din vector;
Scrieti un program care cauta un element intr-un
vector si afiseaza indexul la care s-a gasit( daca e
cazul)
Scrieti un program care afiseaza elementele de pe
pozitiile pare dintr-un vector.

Vectori.Exercitii
Se citesc de la tastatura doi vectori cu elemente
numere ntregi de dimensiune n, respectiv m. Sa
se afieze cte elemente din al doilea vector sunt
strict mai mici dect toate elementele din primul
vector.
Fie v un vector de numere ntregi. Sa se
construiasca un vector w, astfel nct
w[i]=numarul de apariii ale lui v[i] n vectorul v.
Sa se afieze cei doi vectori, fiecare pe cte o
linie. Ex. Pentru v=(1, 5, 2, 1, 5, 7, 2, 1, 5) se
obine w=(3, 3, 2, 3, 3, 1, 2, 3, 3).

Tablouri multidimensionale
Sunt de fapt tablouri cu elemente care sunt la
randul lor tablouri.
Declaratie:
<tip> <nume> [dim1][dim2]:::[dimN];

Matrici (tablouri bidemensionale)


n matematic i informatic, o matrice este
un set de numere prevzute n form de tabel
(n rnduri i coloane).
Folosite si pentru a defini corelatii intre seturi
finite de elemente
Declaratie:
- int mat[3][10];
- defineste o matrice cu 3 linii si 10 coloane;

Matrici

Matrici - reprezentare
Elementele unei matrici sunt stocate contiguu
in memorie
int mat[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
1

sizeof(int) = 4 (in C/C++)


sizeof(mat) = ?

Matrici
Accesul la elementele matricei se face direct;
compilatorul calculeaza adresa elementului pe
baza liniei, a coloanei, a numarului de elemente
pe linie si a dimensiunii unui element. Formula
folosita este:
adr(m[i][j]) = adr(m[0][0]) + (i *
nr_max_elemente_linie + j) * dim_element
Numerotarea liniilor si a coloanelor se face
incepand cu zero.

Matrici
Este vreo diferenta in reprezentarea lui mat1 si
mat2 ?
int mat1[3][6];
int mat2[18];

mat1[1][3]

Matrici Explicati rezultatele


#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int mat[2][3] = {{1,4,8}, {2,6,5}};
printf("sizeof(int) = %d \n", sizeof(int));
printf("sizeof(mat) = %d \n", sizeof(mat));
printf("mat[1][2] = %d \n", mat[1][1]);
printf("*(*mat + 2) = %d \n", *(*mat + 2) );
printf("**mat + 4 = %d \n",**mat + 4 );
getchar();

return 0;

Probleme cu matrici (1)

Citirea/scrierea unei matrici


Suma elementelor unei matrici
Suma elementelor unei linii dintr-o matrice
Afisarea elementelor de pe diagonala
principala
Afisarea elementelor de deasupra diagonalei
principale
Suma a doua matrici

Probleme cu matrici (2)


Sa se construiasca o matrice A cu n linii i n coloane ce
se completeaza cu termenii irului lui Fibonacci.
Completarea se va face pe linii. Nu se vor folosi
structuri de date auxiliare. def
Ex. Pentru n=3 se va afisa matricea :
1
1
2
3
5
8
13
21
34.
Se da o matrice de ordinul n. Se considera ca
diagonalele sale mpart matricea n 4 zone: nord, sud,
vest i est. Se cere sa se calculeze suma elementelor
impare din zona de nord a matricei. def

Probleme cu matrici (3)


Liniarizarea unei matrici (transformarea unui
tablou bidimensional intr-unul
unidimensional)
Transpusa unei matrici (inversarea liniilor si
coloanelor) def

Links
Variabile:
variabile si tipuri

Vectori:
vectori
vectori

Matrici:
matrices - basic operations
matrices for programmers

And anything else!