Slide 1

Documente similare
Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Microsoft Word - CarteC.doc

Slide 1

Object Oriented Programming

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Programarea şi utilizarea calculatoarelor

Microsoft Word - CarteC.doc

Paradigme de Programare

SUBPROGRAME

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

E_d_Informatica_sp_MI_2015_bar_02_LRO

L7

Microsoft Word - 2 ES RO.doc

Top

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Slide 1

E_d_Informatica_sp_SN_2014_bar_10_LRO

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Microsoft Word - O problema cu bits.doc

Limbaje de Programare Curs 5 – Siruri de caractere

Microsoft Word - PCLP2_Curs_4_2019.doc

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Slide 1

Slide 1

PROGRAMARE ORIENTATA PE OBIECTE

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Paradigme de programare

Microsoft Word - CarteC.doc

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Laborator 04: Apeluri de funcții

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Limbaje de Programare Curs 8 – Fisiere

proiectarea bazelor de date

tehnologii web

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

PPSD

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Ingineria Sistemelor de Programare

Declararea variabilelor

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

PowerPoint Presentation

LUCRAREA NR

PHP (II)

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

-

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

-

Analiză statică Analiza fluxului de date 23 octombrie 2014

Lab6LCD

Microsoft Word _POO_Lab_1_Modificari_v01.htm

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

Gestionarea I/E

Programarea şi utilizarea calculatoarelor

Laborator 3

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

Limbaje Formale, Automate si Compilatoare

Microsoft Word - lab4.doc

Analiză de flux de date 29 octombrie 2012

Programarea şi utilizarea calculatoarelor

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

PROCESOARE NUMERICE DE SEMNAL

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Scrieţi pe foaia de examen răspunsul pentru fiecare dintre cerinţele următoare

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Diapositive 1

Proiectarea Sistemelor Software Complexe

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

Lucrarea 10

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Slide 1

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

PCLPII-C16(9)

PowerPoint-Präsentation

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Slide 1

FIŞA DISCIPLINEI ANEXA nr. 3 la metodologie 1. Date despre program 1.1 Instituţia de învăţământ superior Universitatea Politehnica din Bucureşti 1.2 F

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Microsoft Word - intro_msp430.doc

1. ARHITECTURA MICROPROCESOARELOR 1.1. Microprocesorul. Noțiuni generale Progresele tehnologice și electronice, înregistrate în ultimele decenii, au d

Dot Matrix Display Module and

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Slide 1

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Microsoft Word - Curs_07.doc

Transcriere:

STRUCTURI DE DATE Fundamente C/C++

EVALUARE SEMESTRU: 4 puncte Testare cunostinte: 1. Calculator (2 puncte) 2. Scris/Oral (2 puncte) 2

EVALUARE EXAMEN: 6 puncte Test cunostinte (pe calculator): 1 punct. Test PRACTIC (pe calculator): 5 puncte. Punctaje acordate DOAR pentru aplicatii duse pana in faza de executie: compilare, exemple de test (inclusiv valori extreme pentru validarea datelor de I/O); 3

BIBLIOGRAFIE Ion Ivan, Marius Popa, Paul Pocatilu (coord.) - Structuri de date, vol. 1, vol. 2, 2009 Ion Smeureanu Programarea in limbajul C/C++, Editura CISON, 2001 Bjarne Strastroup The Creator of C++, The C++ Programming Language 3rd Edition, Editura Addison- Wesley 4

MEMORIE Organizarea memoriei la executia unui proces Kernel SO Segment de COD Segment de DATE Segment BSS HEAP Segment de STIVA Adrese mici Adrese mari Segment de COD - Instructiuni executabile (binare). - Read-Only nu pot fi scrise secvente binare, deci nu poate fi o bresa de securitate (generare eroare acces memorie). - Partajat intre utilizatori care executa concurent codul binar al aplicatiei. 5

MEMORIE Segment de DATE - Date alocate static (clasa de memorie) si date globale initializate cu valori in codul aplicatiei. - Fiecare proces contine propriul segment de date. - Nu este segment executabil. 6

MEMORIE Segment BSS (Block Started by Symbol) - Date alocate static (clasa de memorie) si date globale neinitializate prin codul aplicatiei (implicit au valori nule). - Nu este segment executabil. 7

MEMORIE Segment STACK - Variabile locale definite in functii. - Transfer parametri in functii. - Localizata la capatul memoriei accesibile => alocare descrescatoare a adreselor. - Management stack segment (registri procesor): 1. SP (Stack Pointer procesor de 16 biti) / ESP (Extended Stack Pointer procesor de 32 biti) / RSP (Register Stack Pointer procesor 64 biti). 2. BP (Base Pointer) / EBP (Extended Base Pointer) / RBP (Register Base Pointer). 8

MEMORIE Segment STACK - Utilizata pentru variabilele locale, valori temporare, argumente functii, adrese de return. - Implementata prin structura de date de tip stiva. - Dimensiune cunoscuta la momentul compilarii app si alocata la momentul de incepere a executiei app. - Stocare date la nivel de cuvant calculator unitate de date de lungime fixa folosita de procesor conform setului de instructiuni ale acestuia. Registrii procesorului sunt lungime cuvant calculator (8, 16, 24, 32 sau 64 biti). 9

MEMORIE Segment HEAP - Alocare memorie pe durata de executie a aplicatiei. - Alocare gestionata de sistemul de operare. - Zone de memorie gestionate prin variabile de tip pointer. 10

MEMORIE Segment HEAP - Memorie alocata dinamic (pe dimensiunea cunoscuta la executia app). - Accesata prin pointeri si are un continut anonim; - Dimensiune pana la pointerul break. Poate fi modificata (adaugare) prin cerere catre sistemul de operare; - Posibilitate de crestere a dimensiunii prin mutarea pointerului break spre adrese mai mari; - Fragmentare ridicata prin operatii multiple de alocare / dealocare. - Responsabilitate dezalocare (memory leaks). 11

MEMORIE Memory Leaks - Apps consumatoare de memorie care nu este eliberata catre sistemul de operare si care devine inaccesibla pentru sistemul de operare. - Determina cresterea cerintelor de memorie disponibilizata pentru app. - Efecte: reducere performante computer prin reducerea cantitatii de memorie disponibila, app & system failures etc. - Sisteme de operare moderne: memorie eliberata automata la terminarea executiei (in termen scurt) app. 12

CLASE DE MEMORIE ALE VARIABILELOR AUTOMATICE (specificator auto): - Locale pentru blocul de instructiuni in care se definesc variabilele. - Persistente pana la terminarea blocului de instructiuni in care se definesc. - Zone de memorie distincte pentru cod recursiv sau multithreading. - Stocate in segmentul de stiva; Exemple: auto a = 7; auto b = VariabileAuto ; 13

CLASE DE MEMORIE ALE VARIABILELOR REGISTRU (specificator register): - Specificator utilizat doar pentru variabile locale si parametri ai functiilor. - Persistente pana la terminarea blocului de instructiuni in care se definesc (similar specificatorului auto). - Decizia compilatorului de incarcare a unui registru cu continut variabila. - Utile pentru operatii frecvente din punctul de vedere al reducerii timpului de acces si executie; Exemplu: register int vreg; int d; d = 8; vreg = d; 14

CLASE DE MEMORIE ALE VARIABILELOR EXTERNE (specificator extern): - Utilizate pentru variabile declarate in mai multe fisiere sursa. - Memorie alocata inainte de executia functiei main; persistenta pana la terminare executiei programului. - Definite in bloc de instructiuni cu accesibilitate in cadrul blocului; altfel, accesibila la nivel de fisier sursa; Exemplu: Fisierul 1 Fisierul 2 extern int i; void f() { i++; } } int i = 0; extern void f(); void g() { f(); printf("%d\n", i); 15

CLASE DE MEMORIE ALE VARIABILELOR STATICE (specificator static): - Persistenta continut si vizibilitate in bocul unde sunt definite (chiar si la nivel de fisier). La nivel de fisier individual, pot fi asimilate variabilelor globale, dar vizibilitatea este diferita intr-o colectie de fisiere sursa (abordare static vs global de catre linker). - Alocate la inceperea executiei programului si dezalocate la terminare executiei. - Declararea intr-o functie asigura persistenta continutului intre apeluri. Exemplu: int f() { static int x = 0; x++; return x; } void main() { int j; for (j = 0; j < 10; j++) { printf( Rezultat functie f: %d\n", f()); } } 16

MEMORIE Reprezentare cod ASM Segment cod Sursa cod C/C++ #include<stdio.h> char a = 7, b = 9; short int c = 0; void main() { c = a+b; } MicroProcesor RAM.model small.stack 16.data a db 7 b db 9 c dw 0.code start: mov AX, @data mov DS, AX mov AL, a add AL, b mov c, AX B8 02 00 8E D8 A0 00 00 02 06 01 00 A3 02 00 B8 00 4C CD 21 00 00 00..00 00 07 09 00 00 Segment date 8 biti 8 biti AH AX AL BUS mov AX, 4C00h int 21h end start 16 biti 17

MEMORIE Sursa C/C++ MicroProcesor RAM #include<stdio.h> BUS char a = 7, b = 9; short int c; HDD 7 9 0 0 void main() { c = a+b; } 1Byte 1Byte 2Bytes 20 Bytes 16 Bytes B8 02 00 8E D8 A0 00 00 02 06 01 00 A3 02 00 B8 00 4C CD 21 DATE COD STIVA 18

Tipuri de date Sursa definirii: Fundamentale, definite in cadrul limbajului; Definite de utilizator (programator/dezvoltator etc); exemple: structuri articol, clase de obiecte, structuri pe biti, uniuni etc. Natura continutului: Simple, corespunzatoare tipului de date. Masive, agregate si accesibile prin indecsi. Pointeri, acces explicit la zone de memorie. 19

Tipuri de date Descriere tipuri fundamentale C/C++: char Denumire Explicatie Dimensiune in bytes Interval valori posibile Caracter sau intreg de valoare mica. 1 byte short int (short) Intreg short. 2 bytes int Intreg. 4 bytes long int (long) Intreg long. 4 bytes float double long double Real virgula mobila precizie simpla. Real virgula mobila precizie dubla. Real virgula mobila precizie extinsa. cu semn: -128 la 127 fara semn: 0 la 255 cu semn: -32768 la 32767 fara semn: 0 la 65535 cu semn: -2147483648 la 2147483647 fara semn: 0 la 4294967295 cu semn: -2147483648 la 2147483647 fara semn: 0 to 4294967295 4 bytes +/- 3.4e +/- 38 8 bytes +/- 1.7e +/- 308 8 bytes / 10 bytes / 16 bytes (functie de compilator) 20

Tipuri de date Reprezentare interna tipuri reale (lungimi zone in biti): Denumire Semn Exponent Mantisa Total biti Bias exponent float 1 8 23 32 127 double 1 11 52 64 1023 long double 1 15 64 80 16383 21

POINTERI Date numerice utilizate pentru a gestiona valori reprezentand adrese. Dimensiune este data de arhitectura procesorului. Pointeri near si far. Definire: Initializare: Utilizare: tip_data * nume_pointer; nume_pointer = & nume_variabila; nume_variabila = * nume_pointer; 22

POINTERI Exemple: i n t * p i ; // pointer la int c h a r ** p p c ; // pointer la pointer de char i n t * a p [1 0 ]; // vector de 10 pointeri la int Valoarea 0 pentru un pointer este o valoare nula. Aceasta este asociata cu simbolul sau cu constanta #define NULL 0 const int NULL = 0; 23

POINTERI Probleme initializare pointer cu 0 sau NULL: - Imposibilitatea de a face diferenta dintre tip intreg (valoarea 0) si tip pointer in functiile supraincarcate. - Imposibilitatea de a face diferenta dintre constanta 0 si macrodefinitia NULL in functiile supraincarcate. void func(int* i) { printf( Call func(int*)\n"); } void func(int i) { printf( Call func(int)\n"); } int main() { func(null); // Call func(int); } 24

POINTERI Solutia: nullptr (C++11) - Constanta explicita pentru pointer nul. - Diferenta intre constanta intreaga 0 si constanta nullptr pentru functiile supraincarcate. void func(int* i) { printf( Call func(int*)\n"); } void func(int i) { printf( Call func(int)\n"); } int main() { func(nullptr); // Call func(int*); func(null); // Call func(int); } 25

POINTERI Aritmetica pointerilor: Pentru un pointer de tip T*, operatorii --/++ asigura deplasarea inapoi/inainte cu sizeof(t) bytes. Pentru un pointer de tip T*, expresia pt + k sau pt k este echivalenta cu deplasarea peste k * sizeof(t) bytes. Diferenta dintre 2 pointeri din interiorul aceluiasi sir de valori reprezinta numarul de elemente (de tipul aferent pointerului) dintre cele doua adrese. Adunarea dintre 2 pointeri nu este acceptata. 26

POINTERI Pointeri constanti Exemplu: i n t * c o n s t p ; // pointer constant la int i n t c o n s t * p i n t ; // pointer la int constant c o n s t i n t * p i n t 2 ; // pointer la int constant c o n s t i n t * c o n s t p i n t 2 ; // pointer constant la int constant Utilizare: c h a r * s t r c p y (c h a r * p, c o n s t c h a r * q ); 27

POINTERI Alocare dinamica memorie: Functii: malloc Operatorul new sau new [ ] Rezerva memorie in HEAP Dezalocare memorie: Functie: free Operatorul delete sau delete [ ] Elibereaza memoria rezervata in HEAP 28

FUNCTII Caracteristici Secventa de cod sursa cu caracter general si repetitiv. Accepta parametri de intrare si returneaza rezultate. Definirea imbricata nu este permisa in C/C++. Transferul parametrilor de intrare: valoare, adresa, variabile globale, utilizare referinta. Parametri copiati in zone de memorie organizate ca stive. Rezultatul returnat: tip de retur, argumente transmise prin adresa. 29

FUNCTII Declararea si construirea unei functii: TipRetur DenFunctie([ListaParametriFormali]); Declarare antet functie Standard/Utilizator Implicit int/void Masiv NU! Identificator functie TipRetur DenFunctie([ListaParametriFormali]){ // corp functie } declaratii locale instructiuni apeluri subprograme instructiune return Parametrii formali sub forma [tipi pi[, ]] 30

FUNCTII Exemplu functie: Sursa C/C++ #include<stdio.h> #include<stdio.h> double Suma1(float x, float y) { double s; s = x + y; return s; } float a = 1.2, b = 4.7, c; c = Suma1(a, b); Apel subprograme C/C++ void Suma2(float x, float y, float *z){ *z = x + y; } float a = 1.2, b = 4.7, c; Suma2(a, b, &c); 31

POINTERI LA FUNCTII Definire tip_return (* den_pointer) (lista_parametri); Initializare den_pointer = den_functie; Apel functie prin pointer den_pointer (lista_parametri); 32

POINTERI LA FUNCTII f l o a t (*f p )(int *); // pointer la functie ce primeste un pointer la int si ce returneaza un float i n t * f (c h a r *); // functie ce primeste char* si returneaza un pointer la int i n t * (*f p [5]) (c h a r *); // vector de 5 pointeri la functii ce primesc char* si returneaza un pointer la int 33

PREPROCESARE Etapa ce precede compilarea. Bazata pe simboluri definite prin operatorul # NU reprezintă instrucţiuni executabile. Determina compilarea condiţionata a unor instrucţiuni. Substituire simbolica. Tipul enumerativ. Macrodefinitii. 34

PREPROCESARE Substituire simbolica: Bazata pe directiva #define #define NMAX 1000 #define then #define BEGIN { #define END } void main() BEGIN int vb = 10; int vector[nmax]; if(vb < NMAX) then printf( mai mic ); else printf( mai mare ); END 35

PREPROCESARE Substituire simbolica: Valabilitate simbol: Sfarsit sursa. Redefinire simbol. Invalidare simbol: #define NMAX 1000. #define NMAX 10 #undef NMAX 36

PREPROCESARE Tipul enumerativ: enum denumire {lista simboluri} lista variabile Valorile sunt in secventa. Se poate preciza explicit valoarea fiecarui simbol enum rechizite {carte, caiet, creion = 4, pix = 6, creta} 37

PREPROCESARE Macrodefinitii: #define nume_macro(lista simboluri) expresie Exemplu: #define PATRAT(X) X*X #define ABS(X) (X) < 0? (X) : (X) Sursa C/C++... int x=patrat(3); int y=patrat(3+2);... 38

PREPROCESARE Macrodefinitii generatoare de functii: #define SUMA_GEN(TIP) TIP suma(tip vb2, TIP vb2) \ { return vb1 + vb2; } Compilare conditionata: #if expresie_1 secventa_1 #elif expresie_2 secventa_2 #else secventa_n #endif 39

PREPROCESARE Compilare conditionata: sau #ifdef nume_macro #else #endif #ifndef nume_macro #endif 40

PREPROCESARE Operatorii # si ##: Utilizati impreuna cu #define Operatorul # (de insiruire) transforma argumentul intrun sir cu #define macro1(s) # s Operatorul ## (de inserare) concateneaza 2 elemente #define macro2(s1, s2) s1 ## s2 41