LUCRAREA NR. 6 POINTERI

Size: px
Start display at page:

Download "LUCRAREA NR. 6 POINTERI"

Transcription

1 LUCRAREA NR. 6 POINTERI Un pointer este o variabilă care păstrează adresa unui obiect de tip corespunzător. Forma generală pentru declararea unei variabile pointer este: tip * nume_variabila; unde tip poate fi oricare din tipurile de bază admise în C, iar nume_variabila este numele variabilei pointer. Tipul de bază al pointerului defineşte tipul variabilelor spre care indică pointerul Operatori pointer Există doi operatori pointer speciali * şi &: Operatorul & este un operator unar care oferă (returnează) adresa unei variabile (adresa operandului său). Operatorul * este complementarul lui &. Este un operator unar care returnează valoarea variabilei plasată la adresa care urmează după acest operator. int *count_addr, count, val; count = 100; /* int count are valoarea 100 */ count_addr = &count; /*count_addr indica spre count. */ val = count_addr; /* val preia valoarea de la adresa count_addr. */ printf ("%d", val); /*Se va tipari numarul 100 */ } Importanţa tipului de bază Considerăm declaraţia: val = *count_addr; Se pune întrebarea: care va fi numărul de bytes ce va fi transferat variabilei val de la adresa indicată prin *count_addr. Sau, mai general, de unde ştie compilatorul câţi bytes să transfere în cazul oricărei asignări care utilizează pointeri. Răspunsul la aceste întrebări este acela că, tipul de bază al pointerului determină tipul datei spre care indică pointerul. /* Acest program nu lucreaza corect */ float x = 10.12, y; short int *p; /* pointer la intreg */ p = &x; /* p preia adresa lui x */ y = *p; /* y preia valoarea de la adresa p */ printf ("x = %f y = %f",x,y); } Acest program nu va atribui valoarea lui x lui y, deoarece în program se declară p ca fiind pointer la întreg scurt şi compilatorul va transfera în y numai 2 bytes (corespunzători reprezentării unui întreg scurt) şi nu 4 bytes, corespunzători unui număr real în virgulă mobilă Expresii în care intervin pointeri În general, expresiile în care intervin pointeri respectă aceleaşi reguli ca orice alte expresii din limbajul C. Atribuirea pointerilor Ca orice variabilă, un pointer poate fi folosit în membrul drept al unei instrucţiuni de asignare (atribuire), pentru atribuirea valorii unui pointer unui alt pointer. 1

2 int x; int *p1,*p2; /* pointeri la intregi */ p1 = &x; /* p1 indica spre x */ p2 = p1 /* p2 indica tot spre x */ printf ("p1 = %p p2 = %p", p1, p2); } /* Se afiseaza valoarea hexa a adresei lui x, nu valoarea lui x */ Se observă că în funcţia printf() tipărirea se face cu formatul %p care specifică faptul că variabilele din listă vor fi afişate ca adrese pointer. Operaţii aritmetice efectuate asupra pointerilor o Utilizarea operatorilor de incrementare şi decrementare Fie secvenţa: int *p1; /* pointer la intreg */ p1++; De fiecare dată când se incrementează p1, acesta va indica spre următorul întreg. Astfel, dacă p1 = 2000, după efectuarea instrucţiunii p1++, acesta va fi p1 = 2004 (va indica spre următorul întreg). După fiecare incrementare a unui pointer, acesta va indica spre următorul element al tipului său de bază. După fiecare decrementare a unui pointer, acesta va indica spre elementul anterior. Valoarea pointerilor va fi crescută sau micşorată în concordanţă cu lungimea tipului datelor spre care aceştia indică, aşa cum se poate vedea în exemplul următor: Cum valoarea indirectată de un pointer este o l-valoare, ea poate fi asignată şi incrementată ca orice altă variabilă. O l-valoare (left value) este un operand care poate fi plasat în stânga unei operaţii de atribuire. Verificaţi utilizarea pointerilor din programul următor: void main(void) { short *pi, *pj, t; long *pl; double *pd; short i, j; i=1; j=2; t=3; printf("i= %d, j= %d\n", i, j); pi=&i; pj=&j; printf("pi= %p, pj= %p\n", pi, pj); *pj /= *pi+1; printf("*pi= %d *pj= %d\n", *pi, *pj); *pj /= *pi+2; printf("*pi= %d *pj= %d\n", *pi, *pj); printf("++pj= %p, ++*pj= %d\n",++pj,++*pj); } o Utilizarea operatorilor de adunare şi de scădere La sau dintr-un pointer, se pot aduna sau scădea valori de tip întreg. Rezultatul este un pointer de acelaşi tip cu cel iniţial, indicând spre un alt element din tablou. De exemplu, p1 = p1 + 9; face ca p1 să indice spre al 9-lea element având tipul lui p1, considerând că elementul curent este indicat de p1. Evident că valoarea pointerului se va modifica corespunzător lungimii tipului datei indicată prin pointer. int *p1; /* Pointer la intreg */ p1 = p1 + 9; Dacă valoarea p1 = 3000, atunci p1 + 9 va avea valoarea: (valoarea lui p1)+9*sizeof(int)=3000+9*4=3036 Aceleaşi considerente sunt valabile în cazul în care un întreg este scăzut dintr-un pointer. Dacă doi pointeri de acelaşi tip sunt scăzuţi, rezultatul este un număr întreg cu semn care reprezintă deplasamentul dintre cei doi pointeri (pointerii la obiecte vecine diferă cu 1). În cazul tablourilor, dacă pointerul rezultat indică în afara tabloului, rezultatul este nedefinit. Dacă p indică spre ultimul membru dintr-un tablou, atunci (p+1) are valoare nedeterminată. Observaţii : Nu se pot aduna sau scădea valori de tip float sau double la/sau dintr-un pointer. 2

3 Nu se pot efectua operaţii de înmulţire şi împărţire cu pointeri. Scăderea a doi pointeri este exemplificată în programul: void main(){ int i=4, j; float x[] = {1,2,3,4,5,6,7,8,9}, *px; j = &x[i]-&x[i-2]; px = &x[4]+i; printf("%d %f %p %p\n",j,*px,&x[4],px); } o Compararea pointerilor Doi pointeri de acelaşi tip se pot compara printr-o expresie relaţională, astfel: dacă p şi q sunt doi pointeri, atunci instrucţiunile: if (p < q) printf ( p indica spre o adresa mai mica decit q \n ); sunt corecte. Compararea pointerilor se utilizează când doi sau mai mulţi pointeri indică spre acelaşi obiect comun. Un exemplu interesant de utilizare a pointerilor constă în examinarea conţinutului locaţiilor de memorie ale calculatorului. /*Programul afiseaza continutul locatiilor de memorie dela o adresa specificata*/ # include <stdlib.h> dump (start); unsigned long int start; /* start = adresa de inceput */ printf ( Introduceti adresa de start: ); scanf ( %lu, &start); dump (start); } /* Se apeleaza functia dump () */ dump (start) /* Se defineste functia dump() */ unsigned long int start; { char far *p; int t; p = (char far *) start; /*Conversie la un pointer*/ for (t = 0; ; t++, p++) { if (!(t%16)) printf ("/n"); printf ("%2X ", *p); /*Afiseaza in hexazecimal continutul locatiei de memorie adresata cu *p*/ if (kbhit()) return;} } /* Stop cand se apasa orice tasta */ o Utilizarea pointerilor ca parametri formali ai funcţiilor În exemplele de până acum, s-au folosit funcţii C care atunci când erau apelate, parametrii acestor funcţii erau (întotdeauna) actualizaţi prin pasarea valorii fiecărui argument. Acest fapt ne îndreptăţeşte să numim C-ul ca un limbaj de apel prin valoare. Există totuşi o excepţie de la această regulă atunci când argumentul este un tablou. Această excepţie este explicată, pe scurt, prin faptul că valoarea unui nume al unui tablou (vector, matrice etc.) neindexate este adresa primului său element. Folosind variabile pointer se pot pasa adrese pentru orice tip de date. Spre exemplu, funcţia scanf() acceptă un parametru de tip pointer (adresă): scanf( %f,&x); Ceea ce este important de evidenţiat este cum anume se poate scrie o funcţie care să accepte ca parametri formali sau ca argumente pointeri?. Funcţia care recepţionează o adresă ca argument va trebui să declare acest parametru ca o variabilă pointer. De exemplu, funcţia swap() care va interschimba valorile a doi întregi poate fi declarată astfel: void swap(); /*Prototipul functiei swap()*/ void main(void) { int i,j; i=1; j=2; printf("i= %d j= %d\n", i, j); swap(&i,&j); /* Apelul functiei */ printf("i= %d j= %d\n", i, j); } void swap(int *pi, int *pj) { int t; t = *pi; *pi = *pj; *pj = t; } 3

4 6.2. Pointeri şi tablouri Între pointeri şi tablouri există o strânsă legătură în limbajul C. Există însă o mare deosebire între tablouri şi pointeri pe care trebuie să o avem mereu în vedere. Un tablou constă întotdeauna dintr-o mare cantitate de memorie, îndeajuns de mare pentru a reţine toţi octeţii corepunzători tuturor elementelor tabloului. Astfel, tabloul q declarat ca short q[100]; rezervă 2x100 octeţi de memorie iar int q[100] rezervă 4x100 octeţi de memorie. În C numele unui tablou fără indici este adresa de start a tabloului. De fapt, numele tabloului este un pointer la tablou. Ca o concluzie, un pointer declarat sau numele unui tablou fără indici reprezintă adrese, pe când numele unui tablou cu indici se referă la valorile stocate în acea poziţie în tablou. Pentru a avea acces la elementul unui tablou, în limbajul C, se folosesc 2 metode : 1. utilizarea indicilor tabloului; 2. utilizarea pointerilor. Deoarece a doua metodă este mai rapidă, în programarea în C, de regulă, se utilizează această metodă. Pentru a vedea modul de utilizare a celor două metode, considerăm un program care tipăreşte cu litere mici un şir de caractere introdus de la tastatură cu litere mari: Versiunea cu indici char sir[80]; int i; printf ("Introduceti un sir de caractere scrise cu litere mari: \n"); gets (sir); printf ("Acesta este sirul in litere mici: \n"); for(i=0;sir[i];i++) printf("%c", tolower(str[i]));} Versiunea cu pointeri char sir[80], *p; printf ("Introduceti un sir de caractere scrise cu litere mari: \n"); gets (sir); printf (" Acesta este sirul in litere mici: \ n"); p = sir; /* p preia adresa de inceput a sirului */ while (*p) printf (" %c ", tolower(*p++)); } Pointerii sunt rapizi şi uşor de utilizat când se doreşte referirea elementelor unui tablou în ordine strict crescătoare sau strict descrescătoare. Dacă însă se doreşte referirea aleatoare a elementelor unui tablou, atunci indexarea tabloului este cel mai simplu şi sigur de utilizat Indexarea pointerilor În C, dacă p este un pointer, iar i este întreg, p[i] este identic cu *(p+i). Dacă avem declaraţiile: short q[100]; short *pq atunci sunt permise şi posibile următoarele declaraţii: Varianta cu tablou pq=&q[0] pq=q q[n] Varianta cu pointeri pq=&q[0] pq=q pq[n] *(pq+n) 4 Descriere Pointerul pq indică adresa primului element al tabloului q pq[n] înseamnă acelaşi lucru cu *(pq+n) În C, dacă se pune un index unui pointer, ca în pq[n], atunci se consideră această utilizare echivalentă cu *(pq+n). Cu alte cuvinte, orice referire la pq[n] înseamnă acelaşi lucru cu valoarea de la adresa (pq+n). Programul următor realizează tipărirea pe ecran a numerelor cuprinse între 1 şi 10. #include <stdio.h> int v[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int *p, i; p = v; /* p indica spre v */ for (i=0;i<10;i++) printf ("%d", p[i]);}

5 Utilizarea constantelor şir în locul poinetrilor la caractere este posibilă dar nu este uzuală. void main(){ char *sir = "To be or not to be", *altsir; printf("%s\n", "That don't impress me much"+5); printf("%c\n",*("12345"+3)); printf("%c\n","12345"[1]); puts("string\n"); altsir = "American pie"; printf("sir = %s\naltsir = %s\n",sir,altsir);} Pointeri şi şiruri Deoarece numele unui tablou fără indici este un pointer la primul element al tabloului, pentru implementarea unor funcţii care manipulează şiruri, se pot utiliza pointeri. Stim că funcţia strcmp(s1, s2) realizează compararea şirurilor s1 şi s2 şi întoarce 0 dacă s1 = s2, o valoare negativă, dacă s1 < s2 şi o valoare pozitivă, dacă s1 > s2. Prezentăm o variantă de scriere a funcţiei strcmp(s1,s2) char *s1, *s2; { while (*s1) if (*s1 - *s2) return *s1-*s2; /* Returneaza diferenta */ else {s1++; s2++;} return '\0';} //Se returneaza 0 in caz de egalitate Reamintim că un şir în C se termină cu caracterul NULL. De aceea, instructiunea while(*s1) rămâne adevărată până când se întâlneşte caracterul NULL, care este o valoare falsă. Dacă într-o expresie se utilizează un şir constant, calculatorul tratează constanta ca pointer la primul caracter al şirului. Programul următor afişează pe ecran mesajul " Acest program funcţionează ": char *s; s = " Acest program functioneaza "; printf (s); } Preluarea adresei unui element al unui tablou Până acum s-a văzut că un pointer poate să adreseze primul element al unui tablou. Este posibil să se adreseze orice element al unui tablou aplicând operatorul & unui tablou indexat. De exemplu, p = &x[2]; plasează adresa celui de-al 3-lea element al vectorului x în pointerul p. Un domeniu în care această practică este esenţiala constă în găsirea unui subşir într-un şir dat. Programul următor afişează ultima parte a unui şir introdus de la tastatură, din punctul în care se întâlneşte primul spaţiu: char s[80]; char *p; int i; printf (" Introduceti un sir : \n "); gets (s); /* Gaseste primul spatiu sau sfarsitul sirului */ for (i = 0; s[i] && s[i]!= ' '; i++) p = & s[i+1]; printf (p); } Dacă p indică spre un spaţiu, programul va afişa spaţiul şi apoi subşirul rămas. Dacă în şirul introdus nu este nici un spaţiu, p indică spre sfârşitul şirului şi atunci nu se va afişa nimic. De exemplu, dacă se introduce my friend, atunci printf() afişează mai întâi un spaţiu şi apoi friend Tablouri de pointeri Putem construi tablouri de pointeri în aceeaşi manieră în care se definesc alte tipuri de date. int *x[10]; // Vector de 10 pointeri la intregi 5

6 char *p[20]; // Vector de 20 pointeri la caracter Pentru atribuirea unei variabile întregi, var, celui de al treilea element al tabloului de pointeri *x[10], se va scrie: x[2] = &var; Pentru găsirea valorii lui var, se va scrie: y = *x[2]; //Valoarea lui var este atribuita lui y Atentie!. Trebuie facută distincţia între: int *v[10]; // Tablou de 10 pointeri la intregi int (*v)[10]; // Pointer la un tablou de 10 intregi Pentru aceasta trebuie ţinut cont de faptul că * este un operator prefixat, iar [] şi () sunt operatori postfixaţi. Deoarece prioritatea operatorilor postfixaţi este mai mare decât cea a operatorilor prefixaţi, atunci când se doreşte schimbarea priorităţii, trebuie folosite paranteze Pointeri la pointeri Un tablou de pointeri este ceea ce numim pointeri la pointeri. Conceptul de tablou de pointeri este simplu, deoarece indexarea tabloului conduce la clarificarea semnificaţiei lui. Un pointer la un pointer este o formă de indirectare multiplă sau un lanţ de pointeri. În cazul unui pointer la pointer, primul pointer conţine adresa celui de-al doilea pointer, care indică spre variabila ce conţine valoarea dorită: Pointer Pointer Variabilă Adresă > Adresă > Valoare Declararea indirectărilor multiple se face sub forma: Pentru a avea acces la o valoare indirectată printr-un pointer la pointer este necesară, de asemenea, utilizarea operatorului * de două ori, aşa cum se vede în exemplul următor: int x, *p, **q; x = 10; p = &x; /* p preia adresa lui x */ q = &p; /* q preia adresa lui p */ printf(" %d ", **q); } /*Se afiseaza valoarea lui x*/ Alocarea dinamică a memoriei Există două metode principale prin care un program C poate memora informaţii în memoria principală a calculatorului. Prima metodă foloseşte variabilele globale şi locale. În cazul variabilelor globale, memoria ce li se alocă este fixă pe tot timpul execuţiei programului. Pentru variabilele locale, programul alocă memorie în spaţiul stivei, în timpul execuţiei programului. Deşi variabilele locale sunt eficient de implementat, în C, de multe ori, utilizarea acestora, necesită cunoaşterea în avans a cantităţii de memorie necesare în fiecare situaţie. A doua metodă de alocare a memoriei, constă în utilizarea funcţiilor de alocare dinamică malloc() şi free(). Prin această metodă, un program alocă memorie pentru diversele informaţii în spaţiul memoriei libere numită heap, plasată între programul util şi memoria sa permanentă şi stivă. Se observă că stiva creşte în jos, iar dimensiunea acesteia depinde de program. H igh Low Stiva M emorie liberá pentru alocare (heap) V ar iabile globale (statice) Pr ogr am 6 M em oria Un program cu multe funcţii recursive va folosi mult mai intens stiva în comparaţie cu un program ce nu utilizeaza funcţii recursive, aceasta deoarece adresele de retur şi variabilele locale corespunzătoare acestor funcţii sunt salvate în stivă.

7 Funcţiile malloc() şi free() Aceste funcţii formează sistemul de alocare dinamică a memoriei în C şi fac parte din fisierul antet <stdlib.h>. Acestea lucrează împreună şi utilizează zona de memorie liberă plasată între codul program şi memoria sa permanentă (fixă) şi vârful stivei, în scopul stabilirii şi menţinerii unei liste a variabilelor memorate. De fiecare dată când se face o cerere de memorie, funcţia malloc() alocă o parte din memoria rămasă liberă. De fiecare dată când se face un apel de eliberare a memoriei, funcţia free() eliberează memorie sistemului. Declararea funcţiei malloc() se face sub forma: void *malloc (int numar_de_bytes); Aceasta întoarce un pointer de tip void, ceea ce înseamnă că trebuie utilizat un şablon explicit de tip atunci când pointerul returnat de malloc() se atribuie unui pointer de un alt tip. Dacă apelul lui malloc() se execută cu succes, malloc() va returna un pointer la primul byte al zonei de memorie din heap ce a fost alocată. Dacă nu este suficientă memorie pentru a satisfce cererea malloc(), apare un eşec şi malloc() returnează NULL. Pentru determinarea exactă a numărului de bytes necesari fiecărui tip de date, se poate folosi operatorul sizeof(). Prin aceasta, programele pot deveni portabile pe o varietate de sisteme. Funcţia free() returnează sistemului memoria alocată anterior cu malloc(). După eliberarea memoriei cu free(), aceasta se poate reutiliza folosind un apel malloc(). Declararea funcţiei free() se realizează sub forma: free(void *p); Funcţia free() eliberează spaţiul indicat de p şi nu face nimic dacă p este NULL. Parametrul actual p trebuie să fie un pointer la un spaţiu alocat anterior cu malloc(), calloc() sau realloc(). Următorul program va aloca memorie pentru 40 de întregi, va afişa valoarea acestora, după care eliberează zona, utilizând free(): # include <stdlib.h> void main(void) { int t, *p; p = (int *) malloc(40*sizeof(int)); if (!p) printf("out of memory \n"); //Verificati daca p este un pointer corect else { for (t=0; t<40; ++t) *(p + t) = t; for (t=0; t < 40; ++t) printf("%d", *(p + t)); free(p); } } Funcţiile calloc() şi realloc() Funcţia calloc() alocă un bloc de n zone de memorie, fiecare de dim octeţi şi setează la 0 zonele de memorie; funcţia returnează un pointer la acel bloc (adresa primului octet din bloc). Declararea funcţiei se face cu: void *calloc(unsigned int n, unsigned int dim); Funcţia realloc() primeşte un pointer la un bloc de memorie alocat în prealabil (declarat pointer de tip void) şi redimensionează zona alocată la dim octeţi (dacă este nevoie, se copiază vechiul conţinut întro altă zonă de memorie). Declararea funcţiei se face cu: void *realloc(void *ptr, unsigned int dim); Pointeri la structuri Limbajul C recunoaşte pointerii la structuri în acelaşi mod în care se recunoaşte pointerii la orice alt tip de variabilă. Declararea unui pointer la structură se face plasând operatorul * în faţa numelui unei variabile structură. De exemplu, pentru structura addr definită mai înainte, următoarea instrucţiune declară pe addr_pointer ca pointer la o dată de acest tip : struct addr *addr_pointer; O utilizare importantă a pointerilor la structură constă în realizarea apelului prin adresă într-o funcţie. Când unei funcţii i se transmite ca argument un pointer la o structură, calculatorul va salva şi va reface din stivă numai adresa structurii, conducând astfel la cresterea vitezei de executare a programului. 7

8 Pentru a găsi adresa unei variabile structură, se plasează operatorul & înaintea numelui variabilei structură. De exemplu, dându-se următorul fragment : struct balanta { float balance; char name[80]; } person; struct balanta *p; /* se declara un pointer la structura */ atunci: p = &person; plasează adresa lui person în pointerul p. Pentru a referi elementul balance, se va scrie: (*p).balance Deoarece operatorul punct are prioritate mai mare decât operatorul *, pentru o referire corectă a elementelor unei structuri utilizând pointerii sunt necesare paranteze. Actualmente, pentru referirea unui element al unei variabile structură dându-se un pointer la acea variabilă, există două metode: Prima metodă utilizează referirea explicită a pointerului nume-structură, iar a doua metodă, modernă, utilizează operatorul săgeată -> (minus urmat de mai mare). Pentru a vedea cum se utilizează un pointer-struct, examinăm următorul program care afişează ora, minutul şi secunda utilizând un timer software. void actualizeaza(); void afiseaza(), delay(); struct tm { /* se defineste structura tm */ int ore; int minute; int secunde;}; void main() {struct tm time; // Declara structura time de tip tm time.ore = 0;time.minute = 0;time.secunde = 0; for (;;) { actualizeaza (&time); afiseaza (&time); }} void actualizeaza(t) struct tm *t; {t->secunde ++; if (t->secunde == 60) { t->secunde = 0; t->minute ++; } if (t->minute == 60) { t->minute = 0; t->ore ++;} if (t->ore == 24) t->ore = 0; delay();} void afiseaza(t) // Se defineste functia afiseaza() struct tm *t; { printf ("%d : ", t->ore); printf ("%d : ", t->minute); printf ("%d ", t->secunde); printf ("\n");} void delay() /* Se defineşte funcţia delay() */ { long int t; for (t = 1;t< ;++t);} TEME: 1. Sa se ordoneze crescator si descrescator un vector de numere reale utilizand pointer. 2. Utilizand pointeri la siruri de caractere sa se realilzeze un program ce primeste un numar intreg intre 1 si 12 si returneaza numele lunii respective. 3. Sa se creeze un tablou de pointeri care sa memoreze adresele a 5 variabile de tip float. Sa se afiseze cele 5 variabile in ordine crescatoare, sa se afiseze adresele lor si adresa de inceput a tabloului de pointeri. 4. Utilizand pointeri, sa se realizeze suma, diferenta si produsul a doua matrici. Sa se afiseze adresa ultimului element din fiecare matrice. 5. Sa se realizeze o structura ALBUM cu urmatoarele campuri: nume,_album, nume_melodii, autor, interpret, an aparitie, pret. Campul nume melodii este un tablou de siruri de caractere. Campul interpret este tot o structura ce contine campurile: nume, prenume, varsta, albumuri vandute. Sa se creeze un tablou cu 5 elemente de tip ALBUM si utilizand pointeri sa se ordoneze tabloul dupa pretul unui album, dupa numele interpretului (alfabetic), dupa anul aparitiei si dupa pret. Sa se realizeze o functie care primeste ca parametru numele unei melodii si afiseaza numele albumului, interpretul, anul aparitiei si pretul. 8

Alocarea memoriei în C sub Linux

Alocarea memoriei în C sub Linux Costel Aldea Alocarea memoriei în C sub Linux Sunt trei funcţii C standard care se pot folosi pentru a aloca memorie: malloc(), calloc(), si realloc(). Prototipurile lor, după cum sunt definite în stdlib.h:

More information

Laborator 5 Instrucțiunile repetitive

Laborator 5 Instrucțiunile repetitive Laborator 5 Instrucțiunile repetitive Instrucțiunea for Instrucțiunea for permite repetarea unei secvențe de instrucțiuni atâta timp cât o condiție este îndeplinita. În plus, oferă posibilitatea execuției

More information

Laborator 8 Java Crearea claselor de obiecte. Variabilele (campurile) clasei de obiecte

Laborator 8 Java Crearea claselor de obiecte. Variabilele (campurile) clasei de obiecte Laborator 8 Java Crearea claselor de obiecte. Variabilele (campurile) clasei de obiecte Probleme rezolvate: Scrieti, compilati si rulati toate exemplele din acest laborator: 1. Programul urmator (LotoConstante.java)

More information

Fişiere in C++ Un fişier este o colecţie de date indicat printr-un nume şi o extensie. Numele este desparţit de extensie prin punct.

Fişiere in C++ Un fişier este o colecţie de date indicat printr-un nume şi o extensie. Numele este desparţit de extensie prin punct. Fişiere in C++ Un fişier este o colecţie de date indicat printr-un nume şi o extensie. Numele este desparţit de extensie prin punct. Avantajul lucrului cu fisiere este evident, datele rezultate în urma

More information

Lucrarea nr. 2. Funcţii şi structuri în C++

Lucrarea nr. 2. Funcţii şi structuri în C++ Lucrarea nr. 2 Funcţii şi structuri în C++ Pe măsură ce programele cresc in complexitate şi dimensiune, ele trebuiesc împărţite în fragmente mai mici şi mai uşor de gestionat numite funcţii. Funcţiile

More information

CURS 7. Pointeri. - specifice limbajelor de asamblare

CURS 7. Pointeri. - specifice limbajelor de asamblare CURS 7 Pointeri - tipuri speciale de variabile sau constante care au ca valori adrese ale unor alte variabile sau constante (adrese ale unor locaţii de memorie) - permit calcule cu adrese - specifice limbajelor

More information

Capitolul 8 Funcţii în limbajul C

Capitolul 8 Funcţii în limbajul C Obiectiv: stabilirea avantajelor pe care le aduce în programarea structurată folosirea funcţiilor. Activităţi: - Prezentarea funcţiilor definite de utilizator - Descrierea parametrilor formali şi a parametrilor

More information

Siruri de caractere. 1.1 Folosirea şirurilor

Siruri de caractere. 1.1 Folosirea şirurilor Informatica clasa a X-a 1 Siruri de caractere 1.1 Folosirea şirurilor Cea mai comună utilizare a tabloului unidimensional în limbajul C/C++ este şirul (de caractere). Spre deosebire de multe alte limbaje

More information

1. Să se determine de câte ori apare cifra c în scrierea în baza p a numărului n.

1. Să se determine de câte ori apare cifra c în scrierea în baza p a numărului n. Observatii: Codul de mai jos a fost realizat si testat pe pagina online: https://www.tutorialspoint.com/compile_pascal_online.php 1. Să se determine de câte ori apare cifra c în scrierea în baza p a numărului

More information

Laborator 10. SGBD-ul MySQL (partea I)

Laborator 10. SGBD-ul MySQL (partea I) Laborator 10 SGBD-ul MySQL (partea I) 1. Introduceţi următoarea secvenţă PHP: $dbh = mysql_connect("localhost", "Costica", "mypass") or die("unable to connect to MySQL"); $selectdb = mysql_select_db('lucrudb');

More information

Tablouri de date. Tablouri unidimensionale(siruri de date sau vectori)

Tablouri de date. Tablouri unidimensionale(siruri de date sau vectori) Tablouri de date Tablouri unidimensionale(siruri de date sau vectori) I. Operaţii asupra şirurilor de date monodimensionale Definiţie Tablou = succesiune de locaţii de memorie recunoscute prin acelaşi

More information

8. Tablouri. 8.1 Tipuri de dată simple şi tipuri de dată structurate

8. Tablouri. 8.1 Tipuri de dată simple şi tipuri de dată structurate 8. Tablouri Tablourile (arrays) reprezintă un tip important de structură de date şi sunt colecţii de obiecte de acelaşi tip reunite sub un singur nume. Uneori este necesar să referim anumite variabile

More information

Rezolvare fişă de laborator Java Iniţiere în limbajul Java

Rezolvare fişă de laborator Java Iniţiere în limbajul Java Rezolvare fişă de laborator Java Iniţiere în limbajul Java Ex 1: Scrie următorul program Java folosind JCreator apoi încercă să-l înţelegi. public class primulprg System.out.println("Acesta este primul

More information

Îmbunătăţiri aduse în limbajul C++ facilităţilor standard ale limbajului C (cele care nu ţin de conceptele programării orientate obiect).

Îmbunătăţiri aduse în limbajul C++ facilităţilor standard ale limbajului C (cele care nu ţin de conceptele programării orientate obiect). Îmbunătăţiri aduse în limbajul C++ facilităţilor standard ale limbajului C (cele care nu ţin de conceptele programării orientate obiect). Supraîncărcarea numelui de funcţii (overloading) In C nu este permisa

More information

Programarea calculatoarelor

Programarea calculatoarelor Programarea calculatoarelor #3 C++ Elemente introductive ale limbajului C++ 2016 Adrian Runceanu www.runceanu.ro/adrian Curs 3 Elemente introductive ale limbajului C++ 02.11.2016 Curs - Programarea calculatoarelor

More information

1. Funcţii referitoare la o singură înregistrare (single-row functions)

1. Funcţii referitoare la o singură înregistrare (single-row functions) Laborator 4 Limbajul SQL 1. Funcţii referitoare la o singură înregistrare (single-row functions) 2. Funcţii referitoare la mai multe înregistrări (multiple-row functions) 1. Funcţii referitoare la o singură

More information

Lucrarea nr.9 SUPRAÎNCĂRCAREA OPERATORILOR

Lucrarea nr.9 SUPRAÎNCĂRCAREA OPERATORILOR Lucrarea nr.9 SUPRAÎNCĂRCAREA OPERATORILOR Ca şi în C, limbajul C++ are posibilitatea supraîncărcării funcţiilor şi operatorilor. Mai exact, unei funcţii (metode) i se conferă posibilitatea de a înţelege

More information

Utilizarea formularelor in HTML

Utilizarea formularelor in HTML Utilizarea formularelor in HTML Formulare Un formular este constituit din elemente speciale, denumite elemente de control (controls), cum ar fi butoane radio, butoane de validare, câmpuri text, butoane

More information

PROGRAMARE ORIENTATĂ PE OBIECTE

PROGRAMARE ORIENTATĂ PE OBIECTE Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu PROGRAMARE ORIENTATĂ PE OBIECTE Lector dr. Adrian Runceanu 03.01.2014 1 Curs 15 Limbajul

More information

Probleme consultații 20 ianuarie 2018

Probleme consultații 20 ianuarie 2018 Algoritmi elementari Probleme consultații 20 ianuarie 2018 Problema 1: zerouri factorial Enunt Fiind dat un numar natural n, sa se determine numarul de cifre 0 cu care se termină factorialul numărului

More information

Ingineria Sistemelor de Programare. UML Diagrama Cazurilor de Utilizare 2016

Ingineria Sistemelor de Programare. UML Diagrama Cazurilor de Utilizare 2016 Ingineria Sistemelor de Programare UML Diagrama Cazurilor de Utilizare mihai.hulea@aut.utcluj.ro 2016 Introducere UML UML UML = Unified Modeling Language Dezvoltat in cadrul Object Management Group In

More information

Se cer 2 variante: una cu implementarea statica si a doua cu implementarea dinamica a structurilor de date necesare. Comentati variantele.

Se cer 2 variante: una cu implementarea statica si a doua cu implementarea dinamica a structurilor de date necesare. Comentati variantele. Lucrarea 1 SDA 03.04.2017 Sa se realizeze urmatoarele programe, in limbaj C: 1. Se primesc de la intrarea standard: un numar k si un sir infinit de numere naturale a i. Se afiseaza la iesirea standard,

More information

Programarea calculatoarelor

Programarea calculatoarelor Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Programarea calculatoarelor Lect. dr. Adrian Runceanu Curs 10 13.11.2013 Programarea

More information

Proiectarea bazelor de date. PL/SQL Proceduri în PL/SQL(partea II-a) # 9. Adrian Runceanu

Proiectarea bazelor de date. PL/SQL Proceduri în PL/SQL(partea II-a) # 9. Adrian Runceanu Proiectarea bazelor de date # 9 PL/SQL Proceduri în PL/SQL(partea II-a) 2016 Adrian Runceanu www.runceanu.ro/adrian Curs 9 Proceduri în PL/SQL Proiectarea bazelor de date 2 Cuprins Proceduri în PL/SQL

More information

POINTERI (III) 1. Alocarea dinamică a memoriei

POINTERI (III) 1. Alocarea dinamică a memoriei Cursul 13 POINTERI (III) 1. Alocarea dinamică a memoriei 1.1. Necesitatea alocării dinamice. Ne punem problema utilizării într-un program C a unui număr foarte mare de date de tip double, de exemplu, date

More information

Operatori. Comentarii. Curs 1

Operatori. Comentarii. Curs 1 Operatori atribuirea: = operatori matematici: +, -, *, /, % Este permisa notatia prescurtata de forma lval op= rval (ex: n += 2) Exista operatorii pentru autoincrementare si autodecrementare (post si pre)

More information

Nivelul inferior de prelucrare a fişierelor

Nivelul inferior de prelucrare a fişierelor INTRĂRI ŞI IEŞIRI Operaţiile de I/E în limbajul C se realizează prin intermediul unor funcţii din biblioteca standard a limbajului. Majoritatea operaţiilor de I/E se realizează în ipoteza că datele sunt

More information

Memorator funcţii predefinite C++ Funcţii matematice

Memorator funcţii predefinite C++ Funcţii matematice Funcţii matematice Funcţia Prototipul funcţiei Fişierul pow(x,y) double pow (double x,double y); long double pow ( long double x, long double y); float pow (float x,float y); double pow (double x, int

More information

Tipuri de date structurate

Tipuri de date structurate Tipuri de date structurate Problema 1 Să se citească un șir A de la tastatură, citirea șirului se termina la introducerea valorii 0. Să se construiască și să se tipărească șirul B de perechi (element,

More information

Fisiere text in Java.

Fisiere text in Java. Fisiere text in Java. Doru Anastasiu Popescu Prelucrarea fisierelor text in Java Aspecte teoretice: http://cursuri.cs.pub.ro/~poo/wiki/index.php/input/output http://upm.ro/intranet/ecalin/cd_educational/cd/javac/cap3.htm

More information

Şiruri de caractere System.String string Verbatim verbatim verbatim Exemplu

Şiruri de caractere System.String string Verbatim verbatim verbatim Exemplu Şiruri de caractere Pentru reprezentarea şirurilor de caractere, în limbajul C#, tipul de date utilizat este clasa System.String (sau aliasul string). Se definesc două tipuri de şiruri: regulate de tip

More information

Capitolul IB.03. Funcţii de intrare/ieşire în limbajul C

Capitolul IB.03. Funcţii de intrare/ieşire în limbajul C Capitolul Cuvinte-cheie Funcţii de intrare/ieşire caractere, funcţii de intrare/ieşire şiruri de caractere, citire/scriere cu format IB.03.1 Funcţii de intrare/ieşire în C În limbajul C, nu există instrucţiuni

More information

Structuri Bazele structurilor

Structuri Bazele structurilor 1. Bazele structurilor 2. Structurile şi funcțiile 3. Transmiterea structurilor ca argumente 4. Structurile şi pointerii 5. Tablouri de structuri 6. Pointerii spre structuri 7. Typedef 8. Alocarea dinamică

More information

Programarea calculatoarelor. C++ Siruri de caractere # 10. Adrian Runceanu

Programarea calculatoarelor. C++ Siruri de caractere # 10. Adrian Runceanu Programarea calculatoarelor # 10 C++ Siruri de caractere 2016 Adrian Runceanu www.runceanu.ro/adrian Curs 10 21.11.2016 Programarea calculatoarelor 2 Capitolul 8. Şiruri de caractere 8.1. Formă generală.

More information

Instructiuni de control

Instructiuni de control Instructiuni de control Introducerea caracterelor de la tastatura Instructiuni de selectie (if, switch) Instructiuni repetitive (for, while, dowhile, foreach) Instructiuni de salt (break, continue, goto,

More information

Tema 2 PL/SQL. 3. a. Creati o tabela numita emp_dup care să fie duplicata tabelei employees. Create table emp_dup as select * from employees

Tema 2 PL/SQL. 3. a. Creati o tabela numita emp_dup care să fie duplicata tabelei employees. Create table emp_dup as select * from employees Tema 2 PL/SQL 1. Ce va afişa acest bloc? fname varchar2(20); lname varchar2(15) default fernandez ; DBMS_OUTPUT.PUT_LINE(fname lname); a. Va printa fernandez. b. Va returna o eroare deoarece variabila

More information

1.Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare apeluluif(121,1)? void f(long n, int i) { if(n!=0) if(n%3>0) { cout<<i;

1.Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare apeluluif(121,1)? void f(long n, int i) { if(n!=0) if(n%3>0) { cout<<i; 1.Pentru definiţia de mai jos a subprogramului f, ce se afişează ca urmare apeluluif(121,1)? void f(long n, int i) { if(n!=0) if(n%3>0) { cout

More information

Laborator 3 Java. Introducere in programarea vizuala

Laborator 3 Java. Introducere in programarea vizuala Laborator 3 Java Introducere in programarea vizuala 1. Pachetele AWT si Swing. 2. Ferestre 3.1. Introduceti urmatorul program JAVA: public class Pv public static void main(string args[ ]) JFrame fer=new

More information

Programarea calculatoarelor

Programarea calculatoarelor Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Programarea calculatoarelor Lect. dr. Adrian Runceanu Curs 10 05.05.2014 Programarea

More information

STRUCTURI DE DATE SI ALGORITMI LABORATOR 2 STIVA I. ASPECTE TEORETICE

STRUCTURI DE DATE SI ALGORITMI LABORATOR 2 STIVA I. ASPECTE TEORETICE STIVA I. ASPECTE TEORETICE O stiva este o lista simplu inlantuita gestionata conform principiului LIFO (Last In First Out). Conform acestui principiu, ultimul nod pus in stiva este primul nod care este

More information

Introducere în C B. Kernighan, D. Richie-Limbajul C 1. Despre C. Primul program

Introducere în C B. Kernighan, D. Richie-Limbajul C 1. Despre C. Primul program B. Kernighan, D. Richie-Limbajul C 1. Despre C. Primul program 2. Variabile şi expresii aritmetice 3. Instrucțiunea for 4. Constante simbolice 5. Citirea şi scrierea caracterelor 6. Tablouri 7. Funcții

More information

Gestionarea memoriei dinamice. Tablouri şi şiruri de caractere. Conversii de date. Operaţii de intrare / ieşire

Gestionarea memoriei dinamice. Tablouri şi şiruri de caractere. Conversii de date. Operaţii de intrare / ieşire Lucrarea 3 Gestionarea memoriei dinamice. Tablouri şi şiruri de caractere. Conversii de date. Operaţii de intrare / ieşire Cuprins Simbolul this...1 Colectorul de reziduuri (Garbage Collector)...4 Transmiterea

More information

Proiectarea bazelor de date

Proiectarea bazelor de date Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Proiectarea bazelor de date Lect.univ.dr. Adrian Runceanu 19.03.2013 Proiectarea bazelor

More information

Lenuta Alboaie Reţele de calculatoare

Lenuta Alboaie Reţele de calculatoare Programarea in retea - OOB- Lenuta Alboaie adria@info.uaic.ro 1 Cuprins Trimiterea si receptarea datelor in regim 2 Ideea: in timpul unei conexiuni cind sunt transmise date ( inband data ), si daca la

More information

// tip reprezintă tipul de bază al pointerului şi va indica tipul //datei memorate

// tip reprezintă tipul de bază al pointerului şi va indica tipul //datei memorate Pointeri. Şiruri decaractere. Un pointer este o dată care are ca valori adrese de memorie. Pointerii sunt utilizańi în general: în lucrul cu tablouri la transmiterea parametrilor în funcńii pentru accesarea

More information

Fișiere de comenzi (BAT) sub DOS

Fișiere de comenzi (BAT) sub DOS L3 Fișiere de comenzi (BAT) sub DOS Un fișier de comenzi este un fisier text care conține una sau mai multe comenzi si / sau directive care se execută succesiv, fară intervenția directă a utilizatorului.

More information

Birotică Profesională. Cursul 12

Birotică Profesională. Cursul 12 Birotică Profesională Cursul 12 Sumar Visual Basic for Applications (VBA) Tipuri de date Structuri de control Funcţii si proceduri Obiecte si colecţii VBA Mediu de programare destinat in special realizării

More information

[LABORATOR DE PROGRAMARE C++] Aritoni Ovidiu. Algoritmi STL

[LABORATOR DE PROGRAMARE C++] Aritoni Ovidiu. Algoritmi STL Algoritmi STL 1. Prezentare generală 2. Clasificare: Algoritmi nechirurgicali ; Algoritmi chirurgicali ; Algoritmi de sortare; Algoritmi generali; 3. Algoritmi nechirurgicali (Non-mutating algorithms)

More information

1. Citirea datelor de la tastatura si afisarea datelor pe ecran

1. Citirea datelor de la tastatura si afisarea datelor pe ecran Laborator 6 Java 1. Citirea datelor de la tastatura si afisarea datelor pe ecran In limbajul Java nu exista instructiuni specializate pentru citirea/scrierea datelor. Aceste operatii se realizeaza prin

More information

Laborator 1 Java. Citirea datelor de la tastatura si afisarea datelor pe ecran

Laborator 1 Java. Citirea datelor de la tastatura si afisarea datelor pe ecran Laborator 1 Java Citirea datelor de la tastatura si afisarea datelor pe ecran In limbajul Java nu exista instructiuni specializate pentru citirea/scrierea datelor. Aceste operatii se realizeaza prin intermediul

More information

Probleme propuse pentru Testul de Laborator Semestrul I

Probleme propuse pentru Testul de Laborator Semestrul I Probleme propuse pentru Testul de Laborator Semestrul I Problema 1: Scrieti un program in C pentru rezolvarea ecuatiei de gradul 1 cu coeficienti reali. Valorile coeficientilor se citesc de la tastatura.

More information

Variabile predefinite

Variabile predefinite Php(2) Variabile predefinite Variabile predefinite $GLOBALS = pot fi accesate toate variabilele globale care sunt accesibile scriptului PHP curent $_SERVER = contine o serie de variabile ale caror valori

More information

Şirurile de caractere sunt de fapt succesiuni de caractere. Am învăţat deja să memorăm succesiuni de caractere cu ajutorul tablourilor.

Şirurile de caractere sunt de fapt succesiuni de caractere. Am învăţat deja să memorăm succesiuni de caractere cu ajutorul tablourilor. 3. Şiruri de caractere 3.1. Declararea şi memorarea vectorilor de caractere Şirurile de caractere sunt de fapt succesiuni de caractere. Am învăţat deja să memorăm succesiuni de caractere cu ajutorul tablourilor.

More information

Rezolvarea exceptiilor

Rezolvarea exceptiilor PL/SQL SECTIUNE 6 Rezolvarea exceptiilor Entering an incorrect username and/or password Forgetting to include the @ in an email address Entering a credit card number incorrectly Entering an expiration

More information

Laborator 9. Programare orientată pe obiecte Laborator 9. 1) Să se realizeze o aplicaţie care să rezolve ecuaţii de gradul al doilea.

Laborator 9. Programare orientată pe obiecte Laborator 9. 1) Să se realizeze o aplicaţie care să rezolve ecuaţii de gradul al doilea. Laborator 9 1) Să se realizeze o aplicaţie care să rezolve ecuaţii de gradul al doilea. Interfaţa aplicaţiei va fi următoarea Casetelor text li se vor da denumirile: camp_a, camp_b, camp_c, rez. Evenimentului

More information

JavaScript - Intorducere. Și nu numai...

JavaScript - Intorducere. Și nu numai... JavaScript - Intorducere Și nu numai... Ce facem azi Nu o sa va vină să credeți. Pe foaia albă vă scrieți numele și prenumele ȘI Povestim despre JavaScript Exemple de aplicare discutii și surprize mici

More information

Elemente de bază ale limbajului C++

Elemente de bază ale limbajului C++ Elemente de bază ale limbajului C++ 1. Vocabularul limbajului Elementele de bază ale limbajului, numite şi entităţi sintactice sau atomi lexicali, fac parte din următoarele categorii : cuvinte rezervate

More information

Programarea calculatoarelor

Programarea calculatoarelor Limbajul C CURS 3 Instrucţiuni C continuare curs 2 Alte instrucţiuni C Instrucţiunea break >ieşire forţată din ciclu sau switch Salt după instrucţiunea din care a ieşit Instrucţiunea continue ->continuă

More information

Sintaxa definińiei unei funcńii este: tip_rez nume_funcńie (<lista_parametri>) { <declarańii locale> secvenńă de instrucńiuni }

Sintaxa definińiei unei funcńii este: tip_rez nume_funcńie (<lista_parametri>) { <declarańii locale> secvenńă de instrucńiuni } Laboratorul 10. FUNCłII ÎN C/C++ Introducere În limbajul C++ (similar cu limbajul C standard) programul este o colecńie de module distincte numite funcńii, structura generală a programului fiind:

More information

Tehnici avansate de programare

Tehnici avansate de programare Tehnici avansate de programare Curs - Cristian Frăsinaru acf@infoiasi.ro Facultatea de Informatică Universitatea Al. I. Cuza Iaşi Adnotarea elementelor Tehnici avansate de programare p.1/1 Cuprins Ce sunt

More information

Programarea calculatoarelor CURS 1

Programarea calculatoarelor CURS 1 Limbajul C CURS 1 Carmen Odubăşteanu Cuprins Introducere Prezentare limbaj C Elemente de bază ale limbajului C Tipuri de date şi constante Variabile şi operatori Expresii Directive de preprocesare Funcţii

More information

Introducere in AutoCAD 3D

Introducere in AutoCAD 3D Introducere in AutoCAD 3D Eu obisnuiesc sa spun ca diferenta dintre AutoCAD 2D si AutoCAD 3D este doar de 15 minute deoarece totul se reduce doar la a intelege cum functioneaza acest 3D si sistemul de

More information

Limbaje de tipul 3. Gramatici regulate Automate finite. Expresii regulate. Deterministe Nedeterministe. a, a, ε, E 1.E 2, E 1 E 2, E 1*, (E 1 )

Limbaje de tipul 3. Gramatici regulate Automate finite. Expresii regulate. Deterministe Nedeterministe. a, a, ε, E 1.E 2, E 1 E 2, E 1*, (E 1 ) Curs 7 1 Limbaje de tipul 3 Gramatici regulate Automate finite Deterministe Nedeterministe Expresii regulate a, a, ε, E 1.E 2, E 1 E 2, E 1*, (E 1 ) 2 Istoric Paşii compilării Analiza lexicală Descriere

More information

J. Introducere in limbajul Java

J. Introducere in limbajul Java Curs POO-2006 (draft) 2006-2007 1/34 10/22/2006 2006_Intro_Java_v01.htm J. Introducere in limbajul Java J.1. Etapele dezvoltarii programelor Java si instrumentele folosite Programele sunt dezvoltate (concepute,

More information

Arbori. 5 aprilie Utilizarea şi programarea calculatoarelor. Curs 16

Arbori. 5 aprilie Utilizarea şi programarea calculatoarelor. Curs 16 Arbori 5 aprilie 2004 Arbori 2 Noţiunea de arbore. Terminologie Arborii ne permit sǎ structurǎm ierarhic o mulţime de elemente structura de directoare şi fişiere într-un calculator arborele genealogic

More information

Stiva - continuare. Implementare prin listă înlănţuită. Lect. dr. Gabriela Trimbitas

Stiva - continuare. Implementare prin listă înlănţuită. Lect. dr. Gabriela Trimbitas Stiva - continuare Implementare prin listă înlănţuită 1 head T O R head T O R head NEW head O D R head O R D O R Ştergerea/Inserarea unui nod într-o stivă 2 Acest cod implementează TAD STIVĂ prin listă

More information

1. Sa se deseneze un circuit logic care corespunde urmatoarelor forme de unda (A si B sunt intrari, X este iesirea)

1. Sa se deseneze un circuit logic care corespunde urmatoarelor forme de unda (A si B sunt intrari, X este iesirea) 1. Sa se deseneze un circuit logic care corespunde urmatoarelor forme de unda (A si B sunt intrari, X este iesirea) 2. Sa se implementeze functia logica data de urmatorul tabel de adevar folosind numai

More information

Programarea Calculatoarelor. Cursul 1: Concepte introductive. Tipuri de date. Funcții de intrare/ieșire

Programarea Calculatoarelor. Cursul 1: Concepte introductive. Tipuri de date. Funcții de intrare/ieșire Programarea Calculatoarelor Cursul 1: Concepte introductive. Tipuri de date. Funcții de intrare/ieșire Ion Giosan Universitatea Tehnică din Cluj-Napoca Departamentul Calculatoare Cadre didactice Curs Ion

More information

Curs 4. Elementele de bază ale limbajului Delphi (II)

Curs 4. Elementele de bază ale limbajului Delphi (II) Programare Delphi Curs 4 Elementele de bază ale limbajului Delphi (II) http://docwiki.embarcadero.com/radstudio/en/delphi_reference 2.5 Pointeri. Pointerii sunt iabile simple (alocate în momentul de faţă

More information

Proiectarea Rețelelor 32. Controlul modelelor de trafic in retea prin alterarea atributelor BGP

Proiectarea Rețelelor 32. Controlul modelelor de trafic in retea prin alterarea atributelor BGP Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic Proiectarea Rețelelor 32. Controlul modelelor de trafic in retea prin alterarea atributelor BGP De ce ebgp? De ce ibgp?

More information

la Microsoft Office Communicator pentru ca modificarea selecţiei dispozitivului telefonic să se actualizeze.

la Microsoft Office Communicator pentru ca modificarea selecţiei dispozitivului telefonic să se actualizeze. QUICK START GUIDE Plug-in de selec ie a telefonului pentru caracteristica de control al apelurilor din Microsoft Office Communicator pentru Cisco Unified Presence versiunea 7.0(3) Prezentare generală 2

More information

Instrucţiuni ale limbajului Java

Instrucţiuni ale limbajului Java P a g e 1 TEHNICI AVANSATE DE PROGRAMARE LUCRARE DE LABORATOR 2 Instrucţiuni ale limbajului Java I. SCOPUL LUCRĂRII Lucrarea de faţă are rolul de a prezenta şi familiariza studentul cu câteva instrucţiuni

More information

Programarea Aplicațiilor Windows curs 1

Programarea Aplicațiilor Windows curs 1 Programarea Aplicațiilor Windows curs 1 Lect. dr. Cristian CIUREA Departamentul de Informatică și Cibernetică Economică Academia de Studii Economice București cristian.ciurea@ie.ase.ro 1 Agenda 1. Structură

More information

Laborator 5 Sisteme Lindenmayer. Temă

Laborator 5 Sisteme Lindenmayer. Temă Laborator 5 Sisteme Lindenmayer. Temă 1. Parcurgerea unui pătrat. Următorul L-sistem Alfabet=F,+,-; Producţii= F -> F-F+F+F+F-F-F-F+F, + -> +, - -> - Axioma= F generează, cu interpretările standard (F

More information

CONFIGURAREA UNUI SERVER IRC IN LINUX. Bica Bogdan *

CONFIGURAREA UNUI SERVER IRC IN LINUX. Bica Bogdan * CONFIGURAREA UNUI SERVER IRC IN LINUX Bica Bogdan * In this exemple i show how to configure an irc server based on ircd dameon named ircu.this is the main file name ircd.conf and the most important.configure

More information

GDB. Rulare gdb. Comenzi de bază GDB GDB. GDB poate fi folosit în două moduri pentru a depana programul:

GDB. Rulare gdb. Comenzi de bază GDB GDB. GDB poate fi folosit în două moduri pentru a depana programul: GDB GDB Rulare gdb GDB poate fi folosit în două moduri pentru a depana programul: rulându-l folosind comanda gdb folosind fişierul core generat în urma unei erori grave (de obicei segmentation fault) Cea

More information

1 Laborator 3: Liste Circulare si Liste Dublu Inlantuite

1 Laborator 3: Liste Circulare si Liste Dublu Inlantuite 1.1 Obiective În lucrare sunt prezentate principalele operaţii asupra listelor circulare simplu înlănţuite: crearea, inserarea unui nod, ştergerea unui nod şi ştergerea listei. În a ua parte vor fi prezentate

More information

Laborator 3 Aplicatii Java

Laborator 3 Aplicatii Java Laborator 3 Aplicatii Java 1. Programarea vizuala Scrieti, compilati si rulati toate exemplele din acest laborator: 1. Fisierul se numeste testschimbareculori.java: import java.awt.*; import java.awt.event.*;

More information

ELEMENTELE DE BAZA ALE LIMBAJULUI C++ 1. CITIRI, SCRIERI. Implementarea algoritmilor Limbajul C++ Informatică

ELEMENTELE DE BAZA ALE LIMBAJULUI C++ 1. CITIRI, SCRIERI. Implementarea algoritmilor Limbajul C++ Informatică ELEMENTELE DE BAZA ALE LIMBAJULUI C++ Un program scris in C++ este alcatuit din una sau mai multe functii. Fiecare functie are mai multe instructiuni in C++ care codifica algoritmul programului. Instructiunile

More information

Lucrarea nr.8 CLASE IMBRICATE

Lucrarea nr.8 CLASE IMBRICATE Lucrarea nr.8 CLASE IMBRICATE În C++ se poate include declaraţia unei clase în interiorul altei clase. Clasa declarată în interiorul alteia se numeşte clasă imbricată (nested class) şi permite evitarea

More information

13. Java si XML Fisiere XML în aplicatii Java... XML si orientarea pe obiecte... Utilizarea unui parser SAX... Utilizarea unui parser DOM...

13. Java si XML Fisiere XML în aplicatii Java... XML si orientarea pe obiecte... Utilizarea unui parser SAX... Utilizarea unui parser DOM... CUPRINS 1. Java ca limbaj de programare cu obiecte Diferente între limbajele Java si C................................... Tipuri clasã si tipuri referintã....................................... Structura

More information

COLEGIUL TEHNIC VICTOR UNGUREANU CÂMPIA TURZII INSTALAREA SI CONFIGURAREA UNUI SERVER DNS PE WINDOWS SERVER 2003

COLEGIUL TEHNIC VICTOR UNGUREANU CÂMPIA TURZII INSTALAREA SI CONFIGURAREA UNUI SERVER DNS PE WINDOWS SERVER 2003 INSTALAREA SI CONFIGURAREA UNUI SERVER DNS PE WINDOWS SERVER 2003 DNS (Domain Name Service) este un protocol care translateaza numele de domenii in adrese IP. De exemplu numele de domeniu www.google.ro

More information

Avantaje. 2. permite o foarte bună portabilitate a programelor. 3. permite programarea structurată (modulară)

Avantaje. 2. permite o foarte bună portabilitate a programelor. 3. permite programarea structurată (modulară) CURS 3 Limbajul C - dezvoltat între anii 1969-1973 (D.M.Ritchie), o dată cu dezvoltarea sistemului de operare Unix. (Ken Thompson & D.M.Ritchie); - 1972 - anul "naşterii" limbajului C. - 1973 - elementele

More information

Bibliografie. * * *, Java Development Kit ndex.html

Bibliografie. * * *, Java Development Kit  ndex.html Bibliografie * * *, Java Development Kit http://www.oracle.com/technetwork/java/javase/downloads/i ndex.html Java programming: from problem analysis la program design, D.S. Malik, 2010 Java de la 0 la

More information

Programare orientată pe obiecte. 1. Clase şi obiecte (continuare) 2. Tablouri

Programare orientată pe obiecte. 1. Clase şi obiecte (continuare) 2. Tablouri Programare orientată pe obiecte 1. Clase şi obiecte (continuare) 2. Tablouri // Autor : Fred Swartz import javax.swing.*; public class KmToMiles { Metode: cum funcţionează un apel private static double

More information

Capitolul 4. Subnivelul Controlul Accesului la Mediu (MAC=Medium Access Control)

Capitolul 4. Subnivelul Controlul Accesului la Mediu (MAC=Medium Access Control) Capitolul 4 Subnivelul Controlul Accesului la Mediu (MAC=Medium Access Control) 1 The Channel Allocation Problem Static Channel Allocation in LANs and MANs Dynamic Channel Allocation in LANs and MANs Alocare

More information

Programare orientată obiect

Programare orientată obiect UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică Programare orientată obiect Curs 01 Laura Dioşan 2 Conţinut Introducere Programare structurată la nivel inferior Programare structurată

More information

2) Fiecare apel relativ la un obiect este transformat într-un apel obişnuit. Exemplu: myscreen.home(); devine home Screen( &myscreen );

2) Fiecare apel relativ la un obiect este transformat într-un apel obişnuit. Exemplu: myscreen.home(); devine home Screen( &myscreen ); 6 Clase C++ (II) 6.1 Pointerul implicit this Fiecare obiect al unei clase conţine câte o copie a datelor membre. Screen myscreen, bufscreen; // fiecare are propriul numar de linii (row), de coloane(col),

More information

Anexa 3 - Sed; awk. Filtrarea pe baza de expresii regulate

Anexa 3 - Sed; awk. Filtrarea pe baza de expresii regulate Anexa 3 - Sed; awk Contents 1 Filtrarea pe baza de expresii regulate 1.1 Similaritati 1.2 Sintaxa 1.3 Mod de rulare 1.4 Structura unui script 1.5 Expresii regulate 1.5.1 Exemple 2 sed 3 awk 3.1 Editarea

More information

Curs 5. Programare Paralela si Distribuita. Forme de sincronizare - Java. Curs 5 - PPD 1

Curs 5. Programare Paralela si Distribuita. Forme de sincronizare - Java. Curs 5 - PPD 1 Curs 5 Programare Paralela si Distribuita Forme de sincronizare - Java Curs 5 - PPD 1 Monitor in Java Fiecare obiect din Java are un mutex care poate fi blocat sau deblocat in blocurile sincronizate: Bloc

More information

Proiectarea bazelor de date

Proiectarea bazelor de date Proiectarea bazelor de date #3 PL/SQL Funcţii SQL, operatori şi vizibilitatea variabilelor 2016 Adrian Runceanu www.runceanu.ro/adrian Curs 3 Funcţii SQL, operatori şi vizibilitatea variabilelor în PL/SQL

More information

4. Supraîncărcarea operatorilor

4. Supraîncărcarea operatorilor 4. Supraîncărcarea operatorilor Obiective - Înţelegerea modului în care se pot redefini (supraîncărca) operatorii pentru a lucra cu noi tipuri de date - Înţelegerea modului în care se pot converti obiectele

More information

Laborator 4 Java Colectii

Laborator 4 Java Colectii Laborator 4 Java Colectii Scrieti, compilati si rulati toate exemplele din acest laborator: 1. Urmatorul exemplu foloseste diferite clase de colectii si adauga cate un element in aceste colectii import

More information

Thread-uri. Continut. Thread-uri 1

Thread-uri. Continut. Thread-uri 1 Thread-uri Continut 1 Prezentare teoretică 1.1 Introducere 1.1.1 Diferente dintre thread-uri şi procese 1.2 Avantajele thread-urilor 1.3 Tipuri de thread-uri 1.3.1 Kernel Level Threads 1.3.2 User Level

More information

SECTION 5 L1 - Group By and Having Clauses

SECTION 5 L1 - Group By and Having Clauses SECTION 5 L1 - Group By and Having Clauses Clauza Group By 1. SELECT department_id, AVG(salary),MAX(salary) 2. SELECT job_id, last_name, AVG(salary) GROUP BY job_id; ORA-00979: not a GROUP BY expression

More information

Proiectarea bazelor de date

Proiectarea bazelor de date Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Proiectarea bazelor de date Lect.univ.dr. Adrian Runceanu 11-Mar-13 Proiectarea bazelor

More information

Curs 1 PPOO. Conf. univ. dr. Cristian CIUREA Departamentul de Informatică și Cibernetică Economică

Curs 1 PPOO. Conf. univ. dr. Cristian CIUREA Departamentul de Informatică și Cibernetică Economică Curs 1 PPOO Conf. univ. dr. Cristian CIUREA Departamentul de Informatică și Cibernetică Economică cristian.ciurea@ie.ase.ro 1 Structură evaluare Curs = 60% (examen la calculator) Seminar = 20% (proiect)

More information

Error! Bookmark not defined.

Error! Bookmark not defined. SEMINAR 06 CONTENTS Enuntul Problemei... 1 Repository... 2 Memory... 2 XML... 3 GUI... 4 Forma Selectie... 4 Forma Programator... 5 Forma Tester... 6 Java... 7 Mecanismul de Transmitere al Evenimentelor

More information

Expresii lambda (Lambda expressions). Arbori de expresii (Expression trees).

Expresii lambda (Lambda expressions). Arbori de expresii (Expression trees). Cuprins Expresii lambda (Lambda expressions). Arbori de expresii (Expression trees). Cuvantul cheie var obiecte si initializarea colectiilor. tipuri anonime, new forma noua. Metode extinse (Extension methods).

More information

Vulnerabilitati Web si securizarea acestora v1.0

Vulnerabilitati Web si securizarea acestora v1.0 Vulnerabilitati Web si securizarea acestora v1.0

More information