Sunteți pe pagina 1din 29

Limbaje de Programare

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri

Dan Novischi

Review

Conversii
Binar-Hexazecimal

Reprezentarea Limbaje de Programare


Numerelor Intregi
Curs 5 - Operatori Bitwise si Tablouri
Reprezentarea
Numerelor Reale

Operatori la Nivel
de Bit Dan Novischi
Tablouri
Uni-Dimesionale

Aplicatii Tablou
Uni-Dimensional

Tablouri
21 Mar
Multi-Dimesionale

Aplicatii
Multi-Dimensional
Sumar

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri 1 Review
Dan Novischi

Review 2 Conversii Binar-Hexazecimal


Conversii
Binar-Hexazecimal
3 Reprezentarea Numerelor Intregi
Reprezentarea
Numerelor Intregi

Reprezentarea
4 Reprezentarea Numerelor Reale
Numerelor Reale

Operatori la Nivel
de Bit
5 Operatori la Nivel de Bit
Tablouri
Uni-Dimesionale 6 Tablouri Uni-Dimesionale
Aplicatii Tablou
Uni-Dimensional

Tablouri
7 Aplicatii Tablou Uni-Dimensional
Multi-Dimesionale

Aplicatii
Multi-Dimensional
8 Tablouri Multi-Dimesionale

9 Aplicatii Multi-Dimensional
Review

Limbaje de
Programare
Curs 5 - Operatori Functiile reprezinta unitatea structurala de baza a limabjului C prin
Bitwise si Tablouri
intermediul careia un program se poate organiza logic in sarcini.
Dan Novischi

Review
Similar functiilor matematice, functiile din limabjele de programare
trebuie definite. O definitie corecta are in componenta: tipul returnat de
Conversii
Binar-Hexazecimal functie, numele functiei, o lista de parametrii formali separati prin vigula
Reprezentarea si un bloc de instructiuni care implementeaza o anumita facilitate sau
Numerelor Intregi indeplinesc o anumita sarcina.
Reprezentarea
Numerelor Reale Declaratia unei functii este data de antetul (header-ul) acestia si este
Operatori la Nivel compusa din tipul returnat, numele si lista de parametrii formali.
de Bit
Declaratiile se utilizeaza pentru a instrui compilator-ul de existenta unei
Tablouri
Uni-Dimesionale
functii inainte ca acesta sa fie definita propriu-zis intr-un program.
Aplicatii Tablou
Uni-Dimensional Utilizarea functiilor se realizeaza prin apelul acestora intr-un program.
Tablouri
Procesul de apelare a unei functii implica trasmiterea unor argumente
Multi-Dimesionale parametrilor formali.
Aplicatii
Multi-Dimensional Trasmiterea argumentelor se realizeaza prin copierea acestora. Astfel,
instructunile din corpul unei functii lureaza intodeauna cu copii ale
argumentelor. Acest mecanism se numeste trasmiterea argumentelor
prin valoare.
Review

Limbaje de
Programare Variabile dintr-un program depind de locul in care acesta sunt definite,
Curs 5 - Operatori
Bitwise si Tablouri
astfel avem: variabile locale, variabile globale si parametrii formali.
Dan Novischi
Compilatorul poate fi instruit de felul in care trebuie memorata o anumita
Review variabila prin utilizarea specificatorilor pentru clasa de memorare. Clasele
Conversii se impart in patru categori: auto, register, static si extern.
Binar-Hexazecimal

Reprezentarea Clasa auto specifica faptul ca o aumita variabila este locala unui bloc de
Numerelor Intregi
instructiuni.
Reprezentarea
Numerelor Reale
Clasa register similara cu auto, numai ca variabilele sunt plasate in
Operatori la Nivel
de Bit
registrii procesorului (in limita acestora).
Tablouri
Uni-Dimesionale Clasa static aplicata asupra unei variabile locale specifica faptul ca acesta
Aplicatii Tablou
trebuie memorata ca si o varibila globala (midle ground intre local si
Uni-Dimensional global), iar aplicata unei variabile globale sau asupra unei functii
Tablouri determina compilatorul sa trateze variabila sau functia ca fiind globala in
Multi-Dimesionale cardul fisierului in care este definita dar locala acelui fisier.
Aplicatii
Multi-Dimensional
Clasa extern se utilizeaza la importarea variabilelor sau functiilor (definite
global) in alte fisiere in fisierul curent.

Un program se poate segmenta in fisiere sursa .c – care contin codul util


si fisiere header .h – care contin in principal declaratii de functii.
Conversii Binar-Hexazecimal

Limbaje de
Programare
Curs 5 - Operatori Cifrele sitemului de numeratie hexazecimal se reprezinta cu ajutorul a patru
Bitwise si Tablouri
cifre (sau un nibble sau un half-byte) in sitemul de numeratie binar. Astfel
Dan Novischi
avem urmatoarea tabela de conversie:
Review
Zecimal Binar Hexazecimal
Conversii 0 0 0
Binar-Hexazecimal
1 1 1
Reprezentarea
Numerelor Intregi 2 10 2
Reprezentarea
3 11 3
Numerelor Reale 4 100 4
Operatori la Nivel 5 101 5
de Bit 6 110 6
Tablouri 7 111 7
Uni-Dimesionale
8 1000 8
Aplicatii Tablou
Uni-Dimensional
9 1001 9
10 1010 A
Tablouri
Multi-Dimesionale 11 1011 B
Aplicatii
12 1100 C
Multi-Dimensional 13 1101 D
14 1110 E
15 1111 F
Reprezentarea Numerelor Intregi

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri In cursul 2 am vazut ca tipurile de date intregi se stocheaza pe un numar
Dan Novischi finit de octeti, unde un octet are in componenta 8 biti (2 nibbles). Astfel,
in functie de lungimea tipului de intreg utilizat putem reprezenta un
Review numar de valori mai mare sau mai mic.
Conversii
Binar-Hexazecimal Spre exempul, tipul char are o lugime de 1 octet, iar numarul de valori
Reprezentarea
care se pot reprezenta pe un octect este 256 = 28 , unde valoarea maxima
Numerelor Intregi este 255 = 28 − 1 In general, valoarea maxima pozitiva care se pote
Reprezentarea reprezenta pe o anumita lungime este data de relatia:
Numerelor Reale

Operatori la Nivel 2N − 1
de Bit

Tablouri unde N reprezinta numarul de biti.


Uni-Dimesionale
In calculator numerele se pot reprezenta cu sau fara semn (signed sau
Aplicatii Tablou
Uni-Dimensional unsigned). Ceea ce inseamna ca pentru unsigned char valorile posible
Tablouri
sunt in intevalul 0 · · · 255 (sau 0 · · · 28 − 1), in timp valorile posible
Multi-Dimesionale pentru signed char sunt impartite pe jumatate intre numere negative si
Aplicatii pozitive fiind in intervalul −128 · · · 0 · · · 127 (sau −27 · · · 0 · · · 27 − 1).
Multi-Dimensional
In general pentru numere cu semn pentru o anumita reprezentare avem
intervalu dat de:
−2N−1 · · · 0 · · · 2N−1 − 1
Reprezentarea Numerelor Intregi

Limbaje de
Programare Problema care se pune este: Cum distribuim valorile posibile la nivel de
Curs 5 - Operatori
Bitwise si Tablouri bit pentru o anumita lungime intre reprezentarea cu sau fara semn?
Astfel pentru valoarile reprezentate pe un octect:
Dan Novischi
combinatiile intre 0b0000000 si 0b01111111 corespund valorilor intre 0 · · · 127
Review atat pentru numere fara semn cat si pentru cele cu semn.
Conversii combinatiile intre 0b10000000 si 0b11111111 in cazul unsigned corespund
Binar-Hexazecimal valorilor intre 128 · · · 255, iar in cazul unsigned corespund valorilor intre
Reprezentarea
−128 · · · − 1
Numerelor Intregi

Reprezentarea Acesta reprezentare a fost aleasa deoarce prezinta anumite avantaje:


Numerelor Reale
Se poate determina foarte usor daca un numar este pozitiv sau negativ pe
Operatori la Nivel baza primului bit.
de Bit Aveam aceleasi reprezentari atat pentru numere pozitive cat si pentru cele
Tablouri negative
Uni-Dimesionale Operatiile aritmetice functioneaza identic pentru ambele reprezentari
Aplicatii Tablou
Uni-Dimensional
O a doua problema este cum aflam reprezentarea unei valori negative
Tablouri stiind-o pe cea pozitiva. Raspunsul este dat de transformarea in
Multi-Dimesionale complement fata de 2 care presupune:
Aplicatii 1 negarea tuturor bitilor din reprezentare
Multi-Dimensional
2 apoi adunarea valorii 1 la rezultat
Exemplu:
Neg(4) = Neg(0b00000100) = 0b11111101
=> -4 = 0b11111101 + 1 = 0b11111110
Reprezentarea Numerelor Reale

Limbaje de
Programare
Ca si in cazul numerelor intregi, numerele fractionare se reprezinta pe un
Curs 5 - Operatori anumit numar de biti in functie de lungimea reprezentarii.
Bitwise si Tablouri

Dan Novischi
Numai ca in cazul reprezentarii acestor numere se doreste:
obtinerea unui interval cat mai mare de valori intre un minim si un maxim
Review o precizie cat mai buna a valorilor; precizia data de numarul cifrelor de dupa
virgula.
Conversii
Binar-Hexazecimal
Astfel, reprezentarea alesa este cea in virgula mobila in care toate valorile
Reprezentarea
Numerelor Intregi au urmatorul format:
Reprezentarea
Numerelor Reale
(−1)bit_semn ∗ 1.mantisa ∗ (baza)exponent
Operatori la Nivel unde:
de Bit
bit_semn este un bit care specifica semnul (0 - pozitiv si 1 - negativ)
Tablouri mantisa reprezinta parte fractionara a numarul, numarul de biti al acesteia
Uni-Dimesionale
dand precizia reprezentarii.
Aplicatii Tablou baza poate fi 2, 10, 16 si este aleasa conform unor standarde - deobicei se
Uni-Dimensional lucrandu-se cu baza 2 - nefiind stocata in reprezentarea propriu-zisa.
Tablouri exponentul este puterea la care este ridicata baza, iar numarul de biti pe care
Multi-Dimesionale este reprezentata aceasta ne da intervalul de valori ai reprezentarii.
Aplicatii
Multi-Dimensional In calculator o valoare in acesta reprezentare este stocata astfel:
Operatori la Nivel de Bit

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri Operatiile la nivel de bit se aplica NUMAI tipurilor date intregi (char,
Dan Novischi
short, int, long) cu sau fara semn (signed sau unsigned) si sunt
utilizate pentru a manipula in mod direct valorile bitilor (de 0 sau 1) ai
Review unui operand (valoare / variabila).
Conversii
Binar-Hexazecimal Limbajul C dispune de doua clase de operatori care actioneaza asupra
Reprezentarea reprezentarilor binare a intregilor, si anume: deplasari de biti si operatori
Numerelor Intregi
logici la nivel de bit.
Reprezentarea
Numerelor Reale
Deplasararile de biti (shifts) sunt de doua tipuri: stanga – dat de
Operatori la Nivel
de Bit operatorul << – sau dreapta – dat de operatorul >>. Acestea au rolul
Tablouri
de a deplasa toti bitii unui operand la stanga sau la drepta cu un anumit
Uni-Dimesionale numar de pozitii specificat, unde bitii care depasesc lungimea tipului de
Aplicatii Tablou date ales se pierd, iar golurile se completeaza cu zero (vezi exemplu).
Uni-Dimensional Sintaxa generala fiind:
Tablouri
Multi-Dimesionale /* deplasare stanga */
Aplicatii (operand) << numar_pozitii;
Multi-Dimensional

/* deplasare dreapta */
(operand) >> numar_pozitii;
Operatori la Nivel de Bit

Limbaje de
Programare Spre exemplu, valoarea 99 reprezenta pe 8 biti esta data de 0b01100011
Curs 5 - Operatori
Bitwise si Tablouri in binar, o deplasare la stanga cu o singura pozitie are urmatoare forma:
Dan Novischi
(99 << 1)
Review a carei rezultat este 0b11000110 in binar si echivalent cu 198 in zecimal.
Conversii Acest proces este prezentat grafic in figura de mai jos:
Binar-Hexazecimal

Reprezentarea
Numerelor Intregi

Reprezentarea
Numerelor Reale

Operatori la Nivel Similar o deplasare dreapta cu o singura pozitie a volorii 99 reprezenta pe


de Bit
8 biti va avea urmatoarea forma:
Tablouri
Uni-Dimesionale (99 >> 1)
Aplicatii Tablou
Uni-Dimensional
a carei rezultat este 0b00110001 in binar, proces exemplificat in figura de
mai jos:
Tablouri
Multi-Dimesionale

Aplicatii
Multi-Dimensional

Oservatie: Deplasararile dupa cum se poate observa se aplica asupra unui


singur operand, astfel acestia fac parte in acelasi timp din categoria
operatorilor unari.
Operatori la Nivel de Bit

Limbaje de
Programare Operatorii logici la NIVEL DE BIT realizeaza operatii logice intre
Curs 5 - Operatori
Bitwise si Tablouri
reprezentarile binare ale operanzilor, adica intre toti bitii operanzilor.
Dan Novischi
Acestia sunt sumarizati in urmatorul tabel:
Operator Descriere Utilizare
Review
~ Negatie la nivel de bit ~a
Conversii
Binar-Hexazecimal & AND la nivel de bit a & b
Reprezentarea | OR la nivel de bit a | b
Numerelor Intregi

Reprezentarea
^ XOR la nivel de bit a ^ b
Numerelor Reale

Operatori la Nivel Tabele de adevar sunt urmatorarele:


de Bit
X Y X & Y
Tablouri
Uni-Dimesionale X ~X 0 0 0
Aplicatii Tablou 0 1 0 1 0
Uni-Dimensional 1 0 1 0 0
Tablouri 1 1 1
Multi-Dimesionale

Aplicatii
X Y X | Y X Y X ^ Y
Multi-Dimensional 0 0 0 0 0 0
0 1 1 0 1 1
1 0 1 1 0 1
1 1 1 1 1 0
Operatori la Nivel de Bit

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri
Exemple:
Dan Novischi
short x = 3, y = 17, z;
Review

Conversii z = ~x & y;
Binar-Hexazecimal

Reprezentarea z = x ^ y;
Numerelor Intregi

Reprezentarea z = y ^ 1;
Numerelor Reale

Operatori la Nivel
de Bit z = (~(x << 2) & y) | (x & y);
Tablouri
Uni-Dimesionale z = ((z >> x) | ((y >> 1) << z) & z);
Aplicatii Tablou
Uni-Dimensional
Toti operatorii la nivel de bit se pot combina cu operatorul de asignare in
Tablouri
Multi-Dimesionale mod simlar operatorilor aritmetici. Astfel, avem urmatoarele forme:
Aplicatii <<= >>= ~= &= |= ^=
Multi-Dimensional

Observatie: NU confundati operatori logici la nivel de bit cu operatori logici


deoarce au efecte total diferite.
Tablouri Uni-Dimensionale

Limbaje de
Programare
Curs 5 - Operatori Un tablou (array) este o collectie de date de aceslasi tip care are in
Bitwise si Tablouri
componenta un numar fix de elemente sau o colectie de date de acelasi
Dan Novischi
tip a carei dimensiune este fixa.
Review
Array-urile sunt de doua tipuri si anume: uni-dimensionale sau
Conversii
Binar-Hexazecimal
multi-dimensionale.
Reprezentarea In ambele cazuri elementele sunt stocate la locatii succesive de memorie
Numerelor Intregi
(vezi exemplu), sau mai spus intr-o zona de memorie contigua (fara
Reprezentarea
Numerelor Reale goluri).
Operatori la Nivel
de Bit
Declararea unui array uni-dimensional are urmatoarea forma generala:
Tablouri tip_date nume_array[dimensiune_array];
Uni-Dimesionale

Aplicatii Tablou
Uni-Dimensional
unde tip_date reprezinta tipul de date, nume_array este numele dat
array-ului – care respecta acelasi conventii pentru specificarea unui nume
Tablouri
Multi-Dimesionale de variabila sau de functie – si dimensiune_array este dimensiunea
Aplicatii (fixa) a array-ului.
Multi-Dimensional
Spre exempul, un vector de 100 de numere reale pentru a stoca 100 de
note la 100 de studenti s-ar putea declara astfel:
double note[100];
Tablouri Uni-Dimensionale

Limbaje de
Programare In cazul array-urilor uni-dimensionale, de multe ori, este util sa le
Curs 5 - Operatori
Bitwise si Tablouri vizualizam ca fiind o colectie de variabile. In exemplul anterior in loc sa
Dan Novischi
declaram 100 de variabile pentru a stoca 100 de note: double nota0,
nota1, ..., nota99; am declarat un singur array uni-dimensional avand
Review 100 de variabile.
Conversii
Binar-Hexazecimal

Reprezentarea
Numerelor Intregi

Reprezentarea
Numerelor Reale

Operatori la Nivel
de Bit

Tablouri
Uni-Dimesionale

Aplicatii Tablou
Uni-Dimensional

Tablouri
Multi-Dimesionale
Observati faptul ca delcrarea unui array seamna cu o declaratie de
variabila, sigurul lucru in plus este dimensiunea tabloului care trebuie
Aplicatii
Multi-Dimensional definita intre paranteze patrate.
La fel ca si variabilele obisnuite, array-urile respecta acelasi reguli de
localitate si pot fi declarate global sau local. Mai mult, acestea pot fi
prefatate cu specificatori ai claselor de memorare pastrand definitiile
prezentate in Cursul 4.
Accesul la Elementele Tabloului 1D

Limbaje de
Programare Accesul la elementele array-ului se realizeaza prin intermediul
Curs 5 - Operatori
Bitwise si Tablouri
mecanismului de indexare. Astfel, fiecare element are asociat un index
unic care specifica pozitia elementului in cadrul array-ului.
Dan Novischi

Review

Conversii
Binar-Hexazecimal

Reprezentarea
Numerelor Intregi

Reprezentarea
Numerelor Reale Indecsii sunt numerotati incepand cu 0. Astfel, primul element al unui
Operatori la Nivel array va fi intodeauna la index-ul zero.
de Bit
Ultimul element se afla intodeauna la (dimensiune – 1). In figura de
Tablouri
Uni-Dimesionale mai sus, dimensiunea array-ului este 5, deci ultimul element se afla la
Aplicatii Tablou index-ul 4.
Uni-Dimensional
Presupunand ca array-ul din figura a fost declarat ca int a[5]; atunci
Tablouri
Multi-Dimesionale
pentru a accesa primul element ca sa ii schimbam valoarea in -1 trebuie
sa scriem
Aplicatii
Multi-Dimensional a[0] = -1;
similar pentru a accesa restul de elemente:
a[1] = 3; // modifcarea elementului 2
printf("%d", a[3]); // afisarea elementului 4
scanf("%d", &a[4]); // citirea ultimului element
Initializare Tablou 1D

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri Initializarea unui array se poate realiza in doua moduri: la declaratie sau
Dan Novischi accesand ulterior fiecare element.
Review
Initializarea la declaratie unui array peresupune furnizarea unor valori
Conversii fiecarui element in momentul declararii array-ului. Astfel, avem
Binar-Hexazecimal
urmatoarea forma generala:
Reprezentarea
Numerelor Intregi tip_date nume_array[dimensiune] = {val0, val1, ..., valN};
Reprezentarea
Numerelor Reale
unde valorile corespunzatoare elemetelor sunt separate prin virgula,
intreaga lista este scrisa intre acoloade si numarul de valori din lista
Operatori la Nivel
de Bit trebuie sa corespunda dimensiunii declarate.
Tablouri
Uni-Dimesionale Valorile din lista de intializare a unui array corespund in ordine fiecarui
Aplicatii Tablou element din vector, astfel prima valorea va fi atribuita elementului de pe
Uni-Dimensional pozitia 0, a doua elementului de pe pozitia 1, s.a.m.d.
Tablouri
Multi-Dimesionale
Spre exemplu, pentru a intializa un array de intregi cu numele x de
Aplicatii dimensiune 5 trebuie sa furnizam o lista de 5 valori:
Multi-Dimensional
int x[5] = {-1, 51, 3, 18, -1600};
unde -1 corespunde lui x[0], 51 corespunde lui x[1], s.a.m.d.
Initializare Tablou 1D

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri
Deoarece furnizam lista de intializare la declaratia array-ului, dimensiunea
Dan Novischi
acestuia se poate omite lasand doar paratezele patrate. Dimensiunea
acestuia este dedusa de compilator din numarul valorilor din lista. Spre
Review exemplu, array-ul x putea fi declarat si astfel:
Conversii int x[] = {-1, 51, 3, 18, -1600};
Binar-Hexazecimal

Reprezentarea In cazul in care la declaratie NU furnizam o lista de intializare


Numerelor Intregi dimensiunea array-ului trebuie neaparat furnizata, desi compilatorul nu va
Reprezentarea semnala nici o erroare in caz contrar.
Numerelor Reale

Operatori la Nivel Lista de initializare se poate furniza numai la declaratia array-ului,


de Bit furnizarea ei ulteriorara va genera o eroare de compilare.
Tablouri
Uni-Dimesionale Totusi, cel mai adesea, NU vom furniza datele la initializare. Astfel,
Aplicatii Tablou pentru initializarea ulterioara a elementelor va trebui sa le accesam pe
Uni-Dimensional fiecare imparte si sa le schimbam valoarea. Spre exemplu putem citi
Tablouri valorile vectorului de la tastura folosind o contructie repetitiva for:
Multi-Dimesionale
int x[5];
Aplicatii
Multi-Dimensional for(i = 0; i < 5; i++){
printf("x[%d] = ", i);
scanf("%d", &x[i]);
}
Determinare Dimensiune Array 1D

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri In Cursul 2 discutam despre operatorul sizeof() prin intermediul caruia
Dan Novischi puteam determina dimensiunea in octeti al unui anumit tip de date sau al
unei variabile. Nu e de mirare, faptul ca putem utiliza acest operator
Review
pentru a determina in mod automat dimensiunea unui arrary in numar de
Conversii elemente.
Binar-Hexazecimal

Reprezentarea Operatorul sizeof() aplicat unui array va returna lugimea in octeti a


Numerelor Intregi
intregului array, adica lugimea cumulata a elementelor in octeti. Spre
Reprezentarea exemplu:
Numerelor Reale

Operatori la Nivel
double a[] = {12.1, -123.18, 3.14142, 802};
de Bit printf("%d\n", (int)sizeof(a));
Tablouri va afisa valoarea 32 deoarce un sigur element de tip double are lungimea
Uni-Dimesionale
de 8 bytes si array-ul are 4 astfel de elemente.
Aplicatii Tablou
Uni-Dimensional Pentru a obine lungimea in numar de elemente a array-ului putem imparti
Tablouri lungimea array-ul in bytes la lungimea tipului de date, astfel:
Multi-Dimesionale
printf("%d\n", (int) (sizeof(a)/sizeof(double)));
Aplicatii
Multi-Dimensional va afisa valoarea 4, care reprezinta dimensiunea array-ului.

ATENTIE!!! Acealasi mecanism aplicat unui array care reprezinta paramentrul


unei functii NU functioneaza!!!!
Array-uri 1D ca Parametri/Argumente de Functii

Limbaje de
Programare
Curs 5 - Operatori Ca parametrii de functii array-urile se declara fara a specifica dimensiunea
Bitwise si Tablouri
acestora, ca si cand am furniza o lista de intializare.
Dan Novischi
Sa presupunem ca dorim sa creem o functie care afiseaza (succesiv pe
Review cate o line) toate valorile unui array de intregi. Fuctia va avea ca
Conversii parametrii array-ul si dimensiunea acestuia.
Binar-Hexazecimal

Reprezentarea
void printIntArray(int x[], int n){
Numerelor Intregi for(int i = 0; i < n; i++){
Reprezentarea printf("x[%d] = %d\n", i, x[i]);
Numerelor Reale }
Operatori la Nivel }
de Bit

Tablouri Furnizarea unui array ca argument al unei functii se realizeaza ca si in


Uni-Dimesionale
cazul variabilelor simple, prin furnizarea array-ului.
Aplicatii Tablou
Uni-Dimensional int main(void){
Tablouri int a[] = {-1, 1334, 1, 0};
Multi-Dimesionale

Aplicatii printIntArray(a, sizeof(a)/sizeof(int));


Multi-Dimensional

return 0;

}
Aplicatii Tablou Uni-Dimensional

Limbaje de
Programare 1. Scrieti un program care sa afiseze valoarea maxima dintr-un array de
Curs 5 - Operatori
Bitwise si Tablouri
numere reale citit de la tastatura:
Dan Novischi #include <stdio.h>
float max(float x[], int n){
Review float m = x[0];
Conversii for(int i = 0; i < n; i++){
Binar-Hexazecimal
if(m < x[i])
Reprezentarea
Numerelor Intregi
m = x[i];
}
Reprezentarea
Numerelor Reale return m;
Operatori la Nivel }
de Bit int main(void){
Tablouri float x[100], int n;
Uni-Dimesionale
printf("n = "); scanf("%d", &n);
Aplicatii Tablou if (n > 100) return -1;
Uni-Dimensional

Tablouri
Multi-Dimesionale for(int i = 0; i < n; i++){
Aplicatii
printf("x[%d] = ", i);
Multi-Dimensional scanf("%f",&x[i]);
}
printf("Max = %f\n", max(x,n));
return 0;
}
Aplicatii Tablou Uni-Dimensional

Limbaje de
Programare
2. Scrieti o functie care implementeaza algoritmul de cautare binara a unui
Curs 5 - Operatori element intr-un array de numere reale sortat (ex: float x[] = {-12.1,
Bitwise si Tablouri
2.73, 3.14, 7}).
Dan Novischi
int binarySearch(double arr[], double x, int n){
Review
int mid, left, right;
Conversii
Binar-Hexazecimal
left = 0;
Reprezentarea
Numerelor Intregi
right = n - 1;
Reprezentarea
Numerelor Reale do{
Operatori la Nivel mid = (left + right)/2; // sau mid = left + (right - left)/2;
de Bit

Tablouri if(x == arr[mid]){


Uni-Dimesionale
return mid;
Aplicatii Tablou
Uni-Dimensional
}else if(x < arr[mid]){
right = mid - 1;
Tablouri
Multi-Dimesionale }else{
Aplicatii
left = mid + 1;
Multi-Dimensional }
}while(left <= right);

return -1;
}
Aplicatii Tablou Uni-Dimensional

Limbaje de 3. Realizati un program care sorteaza un array de numere intregi utilizand


Programare
Curs 5 - Operatori metoda bulelor
Bitwise si Tablouri
#include <stdio.h>
Dan Novischi
int main(void){
Review int array[100], n, swap;
Conversii
printf("n = "); scanf("%d", &n);
Binar-Hexazecimal printf("Introduceti %d intregi\n", n);
Reprezentarea for (int i = 0; i < n; i++)
Numerelor Intregi
scanf("%d", &array[i]);
Reprezentarea
Numerelor Reale
for(int i = 0 ; i < ( n - 1 ); i++){
Operatori la Nivel
de Bit
for(int j = 0 ; j < n - i - 1; j++){
if(array[j] > array[j+1]){
Tablouri
Uni-Dimesionale swap = array[j];
Aplicatii Tablou array[j] = array[j+1];
Uni-Dimensional array[j+1] = swap;
Tablouri }
Multi-Dimesionale
}
Aplicatii
Multi-Dimensional
}
printf("Elementele sortate ascendent: ");
for (int i = 0; i < n; i++)
printf("%d ", array[i]);
return 0;
}
Tablouri Multi-Dimensionale

Limbaje de
Programare
Curs 5 - Operatori Limbajul C permite declararea si utilizarea array-urilor de mai multe
Bitwise si Tablouri dimensiuni. Cel mai adesea, fiind util sa ne gandim la acest tip de
Dan Novischi tablouri ca fiind un array care are in componenta sub-array-uri (sau un
array de array-uri).
Review

Conversii Forma generala pentru declaratia unui tablou multi-dimensional:


Binar-Hexazecimal
tip_date nume_array[dim1][dim2]...[dimN];
Reprezentarea
Numerelor Intregi unde dim1...dimN reprezinta dimensiunile array-ului pe fiecare axa.
Reprezentarea
Numerelor Reale Cea mai simpla forma de array muli-dimensional este cel 2D, pe care il
Operatori la Nivel putem vizualiza ca un array de array-uri 1D (sau ca o matrice). Spre
de Bit exemplu, pentru a declara un array de numere reale denumit mat cu
Tablouri dimesiunea de 4 × 3 vom scrie:
Uni-Dimesionale

Aplicatii Tablou
float mat[4][3];
Uni-Dimensional
unde dimensiunea array-ului principal este 4 si are in componenta alte 3
Tablouri array-uri 1D. Sau altfel spus, array-ul este o matrice de 4 linii (rows) si 3
Multi-Dimesionale
coloane (columns).
Aplicatii
Multi-Dimensional
Succesiv putem adauga cate dimensiuni dorim. Spre exemplu, daca vrem
sa creem un array de numere intregi x cu 3 dimensiuni (2 × 3 × 4) vom
scrie:
int x[2][3][4];
Accesul la Elemente in Multi-D

Limbaje de
Programare
Curs 5 - Operatori
Similar tablourilor uni-dimesionale accesul la elementele array-ului
Bitwise si Tablouri multi-dimensional se realizeaza prin indexare.
Dan Novischi
Indexarea unui array multi-dimensional se realizeaza in fiecare
Review
dimesiune, pastrand regulile de numerotare unde primul index se afla pe
pozitia 0 iar ultiumul pe pozitia (dimesiune - 1).
Conversii
Binar-Hexazecimal Spre exemplu, pentru a modifica primul element din tabloul mat declarat
Reprezentarea anterior vom scrie:
Numerelor Intregi

Reprezentarea
mat[0][0] = 2.73;
Numerelor Reale
unde operatia se poate citi: elementul de pe prima linie si prima coloana
Operatori la Nivel este egal cu 2.73.
de Bit

Tablouri
Dat fiind faptul ca array-ul mat are dimesiunea de 4 × 3 ultimul element
Uni-Dimesionale se afla la indecsii 4 − 1 si 3 − 1 sau:
Aplicatii Tablou
Uni-Dimensional
mat[3][2] = 3.1;
Tablouri Similar pentru mai multe dimensiuni. Spre exemplu, pentru array-ul x
Multi-Dimesionale declarat anterior vom avea:
Aplicatii x[0][0][0] = 1; // primul element
Multi-Dimensional
x[1][2][3] = 9; // ultimul element
Alte Exemple:
mat[1][0] = 2.3; // a doua line, prima coloana
mat[0][2] = 2.3; // prima line, a treia coloana
Inizilizari Tablouri Multi-Dimesionale

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri

Dan Novischi
Initializarea tablourilor multi-dimensionale poate fi realizata similar cu
Review
cele uni-dimensionale: folosind o lista de intializare sau ulterior prin
Conversii accesul individual la elemente.
Binar-Hexazecimal

Reprezentarea
Initializarea la declaratie in acest caz se realizeaza furnizand o lista de
Numerelor Intregi liste care respecta dimensiunele declaratie. Spre exemplu, initializarea
Reprezentarea array-ului mat la declaratie cu valoarea 1.0 peste tot va avea urmatoarea
Numerelor Reale
forma:
Operatori la Nivel float mat[4][3] = {
de Bit
{1.0, 1.0, 1.0},
Tablouri
Uni-Dimesionale
{1.0, 1.0, 1.0},
Aplicatii Tablou
{1.0, 1.0, 1.0},
Uni-Dimensional {1.0, 1.0, 1.0}
Tablouri };
Multi-Dimesionale
unde se poate observa elementele din lista principala sunt la randul lor
Aplicatii liste de intializare.
Multi-Dimensional
Inizilizari Tablouri Multi-Dimesionale

Limbaje de
Programare
Curs 5 - Operatori
Bitwise si Tablouri Similar se va proceda pentru mai multe dimensiuni:
Dan Novischi int x[2][3][4] = { // lista primara
Review
// lista secundara
Conversii
Binar-Hexazecimal
{
Reprezentarea
{1, 1, 1, 1},
Numerelor Intregi {1, 1, 1, 1},
Reprezentarea {1, 1, 1, 1},
Numerelor Reale },
Operatori la Nivel
de Bit
// lista secundara
Tablouri {
Uni-Dimesionale
{1, 1, 1, 1},
Aplicatii Tablou
Uni-Dimensional {1, 1, 1, 1},
Tablouri
{1, 1, 1, 1},
Multi-Dimesionale }
Aplicatii
Multi-Dimensional };
unde pornind ierahic de sus in jos: prima lista are doua elemente, cea
secundara are 3 elemente, iar ultima lista din ierarhie are 4 elemente.
Inizilizari Tablouri Multi-Dimesionale

Limbaje de
Programare
Cel mai adesea nu vom cunoste datele unui tablou la scrierea unui
Curs 5 - Operatori program, astfel va trebui sa le citim in momentul rularii programului,
Bitwise si Tablouri
accesand individual elementele tabloului.
Dan Novischi
Spre exemplu, programul urmator citeste o matrice de numere reale cu
Review dimensiunea m × n de la tastura si o afiseaza:
Conversii #include <stdio.h>
Binar-Hexazecimal int main(void){
Reprezentarea float mat[100][100];
Numerelor Intregi
int m,n;
Reprezentarea
Numerelor Reale
printf("Introduceti numarul de linii: "); scanf("%d",&m);
printf("Introduceti numarul de coloane: "); scanf("%d",&n);
Operatori la Nivel
de Bit for(int i = 0; i < m; i++){
Tablouri for(int j = 0; j < n; j++){
Uni-Dimesionale printf("mat[%d][%d] = ", i, j);
Aplicatii Tablou scanf("%d", &mat[i][j]);
Uni-Dimensional
}
Tablouri }
Multi-Dimesionale
for(int i = 0; i < m; i++){
Aplicatii
Multi-Dimensional for(int j = 0; j < n; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
return 0;
}
Aplicatii

Limbaje de
Programare 1. Traspusa unei matrici de m linii si n coloane:
Curs 5 - Operatori
Bitwise si Tablouri #include <stdio.h>
Dan Novischi int main(void){
int a[10][10], transpose[10][10], rows, col;
Review

Conversii // Citire linii si coloane ...


Binar-Hexazecimal

Reprezentarea
Numerelor Intregi
// Citire matrice ...
Reprezentarea
Numerelor Reale for(int i = 0; i < rows; i++){
Operatori la Nivel for(int j = 0; j < col; j++){
de Bit transpose[j][i] = a[i][j];
Tablouri }
Uni-Dimesionale
}
Aplicatii Tablou
Uni-Dimensional
printf("\nMatricea Transpusa:\n");
Tablouri
Multi-Dimesionale for(int i = 0; i < col; i++){
Aplicatii
for(int j = 0; j < rows; j++){
Multi-Dimensional printf("%d ", transpose[i][j]);
}
}
return 0;
}
Aplicatii

Limbaje de
Programare 1. Inmultirea matriciilor
Curs 5 - Operatori
Bitwise si Tablouri #include <stdio.h>
Dan Novischi int main(void){
float a[10][10];
Review float b[10][10];
Conversii float c[10][10];
Binar-Hexazecimal
int m1, n1; // dimesiunile matricii a
Reprezentarea
Numerelor Intregi
int m2, n2 // dimensiunile matricii b
// Citeste dimensiunile...
Reprezentarea
Numerelor Reale // Citeste matricile a si b
Operatori la Nivel // Intializea c cu zero peste tot
de Bit if(n1 != m2) return;
Tablouri
Uni-Dimesionale
for(int i = 0; i < m1; i++){
Aplicatii Tablou for(int j = 0; j < n2; k++){
Uni-Dimensional
for(int k = 0; k < n1; k++){
Tablouri
Multi-Dimesionale c[i][j] += a[i][k]*b[k][j];
Aplicatii
}
Multi-Dimensional }
}
// Afiseaza matricea c ...
return 0;
}

S-ar putea să vă placă și

  • Smart Cities
    Smart Cities
    Document5 pagini
    Smart Cities
    Camer Aptula
    Încă nu există evaluări
  • Realitate Virtuala in Medicina - Asc
    Realitate Virtuala in Medicina - Asc
    Document5 pagini
    Realitate Virtuala in Medicina - Asc
    Camer Aptula
    Încă nu există evaluări
  • Infrastructura Deschisă Pentru Rezultate (ASC)
    Infrastructura Deschisă Pentru Rezultate (ASC)
    Document6 pagini
    Infrastructura Deschisă Pentru Rezultate (ASC)
    Camer Aptula
    Încă nu există evaluări
  • Realitate Virtuala in Medicina - Asc
    Realitate Virtuala in Medicina - Asc
    Document7 pagini
    Realitate Virtuala in Medicina - Asc
    Camer Aptula
    Încă nu există evaluări
  • Metodologie Acs
    Metodologie Acs
    Document5 pagini
    Metodologie Acs
    Camer Aptula
    Încă nu există evaluări
  • Metodologie Acs
    Metodologie Acs
    Document5 pagini
    Metodologie Acs
    Camer Aptula
    Încă nu există evaluări
  • TEMA Finala ASC
    TEMA Finala ASC
    Document1 pagină
    TEMA Finala ASC
    Camer Aptula
    Încă nu există evaluări
  • Smart City
    Smart City
    Document4 pagini
    Smart City
    Camer Aptula
    Încă nu există evaluări
  • Ia2 L3
    Ia2 L3
    Document18 pagini
    Ia2 L3
    Cristian Mihai
    Încă nu există evaluări
  • IA2 L1 PDF
    IA2 L1 PDF
    Document22 pagini
    IA2 L1 PDF
    Mihai Gatea
    100% (1)
  • ASC - Sectiune2 - L1 - Prez IDE - Ex
    ASC - Sectiune2 - L1 - Prez IDE - Ex
    Document51 pagini
    ASC - Sectiune2 - L1 - Prez IDE - Ex
    Camer Aptula
    Încă nu există evaluări
  • Lab 11
    Lab 11
    Document2 pagini
    Lab 11
    Camer Aptula
    Încă nu există evaluări
  • L2. Functii MATLAB de Interes General. Functii Matematice Uzuale. Reprezentarea Graficelor
    L2. Functii MATLAB de Interes General. Functii Matematice Uzuale. Reprezentarea Graficelor
    Document18 pagini
    L2. Functii MATLAB de Interes General. Functii Matematice Uzuale. Reprezentarea Graficelor
    Camer Aptula
    Încă nu există evaluări
  • Lab 12
    Lab 12
    Document1 pagină
    Lab 12
    Camer Aptula
    Încă nu există evaluări
  • LP Curs12
    LP Curs12
    Document19 pagini
    LP Curs12
    Camer Aptula
    Încă nu există evaluări
  • LP Curs12
    LP Curs12
    Document19 pagini
    LP Curs12
    Camer Aptula
    Încă nu există evaluări
  • Lab 10
    Lab 10
    Document2 pagini
    Lab 10
    Camer Aptula
    Încă nu există evaluări
  • LP Curs9
    LP Curs9
    Document32 pagini
    LP Curs9
    Camer Aptula
    Încă nu există evaluări
  • Lab 07
    Lab 07
    Document2 pagini
    Lab 07
    Camer Aptula
    Încă nu există evaluări
  • Lab 10
    Lab 10
    Document2 pagini
    Lab 10
    Camer Aptula
    Încă nu există evaluări
  • Lab 12
    Lab 12
    Document1 pagină
    Lab 12
    Camer Aptula
    Încă nu există evaluări
  • LP Curs10
    LP Curs10
    Document15 pagini
    LP Curs10
    Camer Aptula
    Încă nu există evaluări
  • Lab 09
    Lab 09
    Document3 pagini
    Lab 09
    Camer Aptula
    Încă nu există evaluări
  • LP Curs6
    LP Curs6
    Document28 pagini
    LP Curs6
    Camer Aptula
    Încă nu există evaluări
  • Lab 04
    Lab 04
    Document2 pagini
    Lab 04
    Camer Aptula
    Încă nu există evaluări
  • Lab 06
    Lab 06
    Document2 pagini
    Lab 06
    Camer Aptula
    Încă nu există evaluări
  • LP Curs8 PDF
    LP Curs8 PDF
    Document25 pagini
    LP Curs8 PDF
    Camer Aptula
    Încă nu există evaluări
  • LP Curs8 PDF
    LP Curs8 PDF
    Document25 pagini
    LP Curs8 PDF
    Camer Aptula
    Încă nu există evaluări
  • Lab 05
    Lab 05
    Document3 pagini
    Lab 05
    Camer Aptula
    Încă nu există evaluări