ALGORITMI SI STRUCTURI DE DATE Lect. dr. Cristian Bologa Cabinet: 431 Email: cbologa@econ.ubbcluj.ro
Organizare: <ul><li>Semigrupe: </li></ul><ul><li>Marti 10,50-13,15  831-S1 Bologa Cristian (sala 441) </li></ul><ul><li>83...
Bibliografie: [Aho85] Aho A. V. Hopcroft J. E., Ullman J. D. –Data Structures and Algorithms, Addison Wesley, Reading, Mas...
Examinare:
Scurt istoric <ul><li>Algoritm: -pronuntia fonetica:  Abu Ja`far Mohammed ibn Musa al-Khowarizmi (780-850);   “al-Khowariz...
Caracteristici ale unui algoritm <ul><li>Generalitate </li></ul><ul><li>Claritate </li></ul><ul><li>Finititudine </li></ul...
Caracteristici ale unui program <ul><li>+ </li></ul><ul><li>Claritate </li></ul><ul><li>Extensibilitate </li></ul><ul><li>...
Scurt istoric <ul><li>Program   = exprimarea într-un limbaj de programare a unui  algoritm </li></ul><ul><li>Algoritm   = ...
Algoritmi <ul><li>Caracterizati de: </li></ul><ul><li>Elaborare </li></ul><ul><li>Reprezentare </li></ul><ul><li>Executie ...
Fazele dezvoltarii unei aplicatii software <ul><li>Specificarea problemelor </li></ul><ul><li>Proiectarea solutiilor </li>...
Reprezentarea algoritmilor <ul><li>Limbaj natural </li></ul><ul><li>Pseudocod </li></ul><ul><li>Scheme logice </li></ul><u...
Reprezentarea algoritmilor <ul><li>Pseudocod </li></ul><ul><li>Inmultirea a 2 numere folosind doar adunari, inmultiri si i...
Reprezentarea algoritmilor <ul><li>Pseudocod </li></ul><ul><li>function  inmultire_a_la_russe(a, b)   x[1]    a; y[1]   ...
Reprezentarea algoritmilor <ul><li>Scheme logice </li></ul><ul><li>Simbolurile folosite in schemele logice au fost standar...
Reprezentarea algoritmilor <ul><li>Scheme logice </li></ul>
Structuri de control <ul><li>Teorema de structura a lui Bohm si Jacopini </li></ul><ul><li>Structura secventiala (liniara)...
Structuri de control <ul><li>Structura secventiala (liniara) </li></ul>
Structuri de control <ul><li>Structura alternativa </li></ul>
Structuri de control <ul><li>Structura repetitiva cu conditionare anterioara </li></ul>
Structuri de control <ul><li>Structura repetitiva cu conditionare posterioara </li></ul>
Structuri de control <ul><li>Structura repetitiva cu un numar cunoscut de pasi </li></ul>
Intrebari?
Limbajul C <ul><li>1972; Dennis Ritchie; Brian Kernigham (Bell Laboratories) -> “ The C Programming Language ” (Englewood ...
Limbajul C <ul><li>Avantaje </li></ul><ul><li>Generalitate, absenta restrictiilor </li></ul><ul><li>Aritmetica pointerilor...
Limbajul C Functii C tip nume(lista_parametrii_formali) declarare parametri { instrucţiuni specifice funcţiei: declarare v...
Limbajul C Functii C #include<stdio.h> void main(void) { printf(“Salut!”); }
Limbajul C <ul><li>Functii C </li></ul><ul><li>Prototipul unei functii </li></ul><ul><li>Transmiterea parametrilor in cadr...
Limbajul C Transmiterea prin valoare #include<stdio.h> void schimbare(int x, int y) //se vor crea copii ale variabilelor x...
Limbajul C Transmiterea prin adresa #include<stdio.h> void schimbare(int *x, int *y) //se vor crea copii ale variabilelor ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Caracterele </li></ul><ul><li>Identificatorii ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Caracterele (negrafice, spatiu, grafice, codul...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri de date </li></ul><ul><li>Fundamentale ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri aritmetice </li></ul>
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri aritmetice </li></ul>
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul intreg </li></ul><ul><li>int numar_octal...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul caracter - se reprezinta pe un octet si ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul caracter  </li></ul><ul><li>Corect: ‘’’ ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Constante </li></ul><ul><li>const double PI=3....
Variabile locale, parametri formali si variabile globale.   #include<stdio.h> int factorial(int n) //n este parametru form...
Variabile locale, parametri formali si variabile globale.   #include<stdio.h> int factorial(int n)   { int i,fact=1; for(i...
Variabile locale, parametri formali si variabile globale.   #include<stdio.h> int fact=1; void factorial(int n) { int i; f...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tablouri  ->Indicii in C pornesc de la 0 ! </l...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Variabilele automatice   -locale fiecarei apel...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Comentarii </li></ul><ul><li>/* Acesta este </...
Limbajul C Constructiile de baza ale limbajului C int a,v=0; a=++v; //dupa executarea instructiunii v=1 si a=1 a=v++; //a=...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori relationali si logici </li></ul><ul>...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>7  ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul>
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Se ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Se ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Sa ...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul de atribuire </li></ul><ul><li>nume...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul de conversie explicita (cast) </li>...
Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul dimensiune (sizeof) </li></ul><ul><...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea vida </li></ul><ul><li>Instructiunea de atribuire </li><...
Limbajul C Instructiuni C if(x) if(y) printf(“1”); else printf(“2”);  if(x) {if (y) printf(“1”); } else printf(“2”);  if(i...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea while </li></ul><ul><li>#include<stdio.h> </li></ul><ul>...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea do while </li></ul><ul><li>do </li></ul><ul><li>  instru...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea return </li></ul><ul><li>return; </li></ul><ul><li>retur...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea break –>iesirea fortata dintr-o bucla </li></ul><ul><li>...
Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea goto –>saltul la o instr precedata de o eticheta </li></...
Limbajul C Pointeri C tip *nume;  Operatori:  *  & int *p, n=5, m; p=&n; m=*p; m=*p+1;
Limbajul C Pointeri C int *p; float x=1.23, y; p=&x; y=*p;  ->valoare eronata pentru y int *a,**b,c=1,d; a=&c; b=&a; d=**b...
Limbajul C Operatii cu pointeri  Adunarea (scaderea) unei constante la un pointer   tip*p; p++;  ↔ p=p+sizeof(tip); p--;  ...
Limbajul C Operatii cu pointeri  Scăderea a doi pointeri de acelasi tip   Compararea a doi pointeri (operatii relationale ...
Limbajul C Pointeri si tablouri int v[10];  int *v; v=malloc(10*sizeof(int)); Referire elemente: v[i]  *(v+i),
Limbajul C Pointeri si tablouri int i; double v[100],x,*p; p=&v[0]; ->corect, neelegant p=v; x=v[5]; x=*(v+5); v++; ->inco...
Limbajul C Pointeri si tablouri void main(void) { int v[10]; … f(v); … } void f(int *p) { …} void f(int a[10]) { …} void f...
Limbajul C Pointeri la functii #include<stdio.h> int suma(int a, int b) { return(a+b);} int produs(int a, int b) { return(...
Limbajul C Alocarea si dezalocarea memoriei void *malloc(numar_de_octeti);  void free(void tip);  str=(char *)malloc(10); ...
Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Structuri </li></ul><ul><li>struct nume_structura { </li><...
Limbajul C struct { int x; int *y; } *p;    ++p->x incrementează pe x şi nu pe pointerul p, deoarece ordinea implicită est...
Limbajul C struct NOD { int cheie; struct NOD *stanga, *dreapta; } nod;  nod *creare(); void preordine(nod *p);
Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Campuri de biti </li></ul><ul><li>struct nume_generic { </...
Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Uniuni </li></ul><ul><li>union nume_generic { </li></ul><u...
Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Enumerari </li></ul><ul><li>enum nume_generic {lista enume...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Substitutia lexicala </li></ul><ul><li>#define ide...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Substitutia lexicala </li></ul><ul><li>#define ide...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Macroinstructiuni </li></ul><ul><li>#define max(a,...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Suprimarea unei definitii </li></ul><ul><li>#undef...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Compilari conditionate   </li></ul><ul><li>#ifdef ...
Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Includerea fisierelor   </li></ul><ul><li>#include...
Limbajul C <ul><li>Functii de intrare/iesire </li></ul><ul><li>Functia printf </li></ul><ul><li>Functia scanf </li></ul><u...
Limbajul C   #include<stdio.h> void main(void) { int a[10],i.n; for(i=0;i<10;a[i++]=0); while((n=getchar())!=’
’) if((n-‘0...
Limbajul C Functii matematice
Limbajul C Functii de conversie int atoi(const char *s);  long atol(const char*s);  double atof(char *s);  Functii generat...
Limbajul C Functii pentru operatii cu caractere si siruri de caractere  int isalpha(int c)  int isdigit(int c)  int isalnu...
Limbajul C Functii pentru operatii cu caractere si siruri de caractere  int strcmp(const char *s1, const char *s2);  int *...
Limbajul C <ul><li>Operatii cu fisiere </li></ul><ul><li>- text </li></ul><ul><li>- binar </li></ul><ul><li>stdin </li></u...
Limbajul C putc() fputc() getc() fgetc() fseek() fputs()  fgets() fprintf() fscanf()  fwrite() fread() feof() ferror()  re...
Limbajul C Argumentele liniei de comanda #include<stdio.h> #include<stdlib.h> void main(int argc, char *argv[]) { if(argc!...
Limbajul C #include<stdio.h> #include<stdlib.h> void main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) { print...
Upcoming SlideShare
Loading in …5
×

Algorithms

3,147 views

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,147
On SlideShare
0
From Embeds
0
Number of Embeds
75
Actions
Shares
0
Downloads
97
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Algorithms

    1. 1. ALGORITMI SI STRUCTURI DE DATE Lect. dr. Cristian Bologa Cabinet: 431 Email: cbologa@econ.ubbcluj.ro
    2. 2. Organizare: <ul><li>Semigrupe: </li></ul><ul><li>Marti 10,50-13,15 831-S1 Bologa Cristian (sala 441) </li></ul><ul><li>831-S2 Silaghi Gheorghe </li></ul><ul><li>Marti 13,15-15,40 832-S1 Bologa Cristian (sala 441) </li></ul><ul><li>832-S2 Silaghi Gheorghe </li></ul><ul><li>Marti 15,50-18,15 833-S1 Bologa Cristian (sala 441) </li></ul><ul><li>832-S2 Silaghi Gheorghe </li></ul>
    3. 3. Bibliografie: [Aho85] Aho A. V. Hopcroft J. E., Ullman J. D. –Data Structures and Algorithms, Addison Wesley, Reading, Massachusets, 1985 [Cormen00] Cormen T., Leiserson C., Rivest R. -Introducere în algoritmi, Ed. Computer Libris Agora, Tg. Mureş, 2000. [Knuth99] Knuth D. E. –Arta programării calculatoarelor, vol 1 , Algoritmi fundamentali, Ed. Teora, Bucureşti, 1999 [Knuth00] Knuth, D. E. -Arta programarii calculatoarelor, vol. 2, Algoritmi seminumerici, Ed. Teora, 2000. [Knuth01] Knuth, D. E. - Arta programarii calculatoarelor, vol. 3, Sortare şi căutare, Ed. Teora, 2001. [Negrescu02] Negrescu L –Limbajele C şi C++ pentru începători, volumul 1: Limbajul C, Ed. Albastră, Cluj-Napoca, 2002. [Bologa05] Bologa C. –Algoritmi si structuri de date; Editura Risoprint, Cluj-Napoca, 2005, 328 pag, 250.000 lei (vechi) ?
    4. 4. Examinare:
    5. 5. Scurt istoric <ul><li>Algoritm: -pronuntia fonetica: Abu Ja`far Mohammed ibn Musa al-Khowarizmi (780-850); “al-Khowarizmi” ( din orasul Khowarizm ) </li></ul><ul><li>Algoritmul lui Euclid </li></ul><ul><li>Definitii: </li></ul><ul><li>Odagescu: &quot; Un algoritm poate fi definit ca o funcţie f: D -> F, unde F este mulţimea informaţiilor finale, iar D este mulţimea informaţiilor iniţiale &quot;. </li></ul><ul><li>Albeanu “ Prin algoritm vom înţelege o secvenţă finită de comenzi explicite şi neambigue care executate pentru o mulţime de date(ce satisfac anumite condiţii iniţiale, conduce în timp finit la rezultatul corespunzător .” </li></ul>
    6. 6. Caracteristici ale unui algoritm <ul><li>Generalitate </li></ul><ul><li>Claritate </li></ul><ul><li>Finititudine </li></ul><ul><li>Corectitudine </li></ul><ul><li>Performanta </li></ul><ul><li>Robustete </li></ul>
    7. 7. Caracteristici ale unui program <ul><li>+ </li></ul><ul><li>Claritate </li></ul><ul><li>Extensibilitate </li></ul><ul><li>Reutilizabilitate </li></ul><ul><li>Compatibilitate </li></ul><ul><li>Portabilitate </li></ul><ul><li>Eficienta </li></ul>
    8. 8. Scurt istoric <ul><li>Program = exprimarea într-un limbaj de programare a unui algoritm </li></ul><ul><li>Algoritm = exprimarea într-un limbaj de reprezentare a unui raţionament </li></ul><ul><li>NU orice problema poate fi rezolvata prin algoritmizare ( clasa problemelor decidabile + clasa problemelor nedecidabile ) </li></ul><ul><ul><li>Problema celor 4 culori; enuntare 1852 Francis Guthri; rezolvare 1977 backtracking </li></ul></ul>
    9. 9. Algoritmi <ul><li>Caracterizati de: </li></ul><ul><li>Elaborare </li></ul><ul><li>Reprezentare </li></ul><ul><li>Executie </li></ul><ul><li>Analiza algoritmului </li></ul><ul><li>Testarea programului </li></ul>
    10. 10. Fazele dezvoltarii unei aplicatii software <ul><li>Specificarea problemelor </li></ul><ul><li>Proiectarea solutiilor </li></ul><ul><li>Implementarea solutiilor </li></ul><ul><li>Analiza solutiilor </li></ul><ul><li>Testarea si depanarea </li></ul><ul><li>Documentarea </li></ul><ul><li>Exploatarea, actualizarea si intretinerea </li></ul>
    11. 11. Reprezentarea algoritmilor <ul><li>Limbaj natural </li></ul><ul><li>Pseudocod </li></ul><ul><li>Scheme logice </li></ul><ul><li>Diagrame arborescente </li></ul><ul><li>Tabele de decizie </li></ul>
    12. 12. Reprezentarea algoritmilor <ul><li>Pseudocod </li></ul><ul><li>Inmultirea a 2 numere folosind doar adunari, inmultiri si impartiri cu 2 (« inmultirea a la russe ») </li></ul>73 15 15 36 30 - 18 60 - 9 120 120 4 240 - 2 480 - 1  960  960     1.095
    13. 13. Reprezentarea algoritmilor <ul><li>Pseudocod </li></ul><ul><li>function inmultire_a_la_russe(a, b)   x[1]  a; y[1]  b   i  1    cat timp x[i] > 1 execută    x[i+1]  x[i] div 2 { div reprezintă împărţirea întreagă}     y[i+1]  y[i]+y[i]     i  i + 1 </li></ul><ul><li> sf-cat timp   prod  0; i  i - 1    cat timp i > 0 execută    dacă x[i] este impar atunci prod  prod + y[i]     i  i - 1 </li></ul><ul><li> sf-cat timp </li></ul><ul><li>return prod </li></ul>
    14. 14. Reprezentarea algoritmilor <ul><li>Scheme logice </li></ul><ul><li>Simbolurile folosite in schemele logice au fost standardizate prin standardul X35 aprobat de ANSI (American National Standard Institute) in 1970, conform cu recomandarile R1028/1969 ale ISO (International Standard Organization). </li></ul>
    15. 15. Reprezentarea algoritmilor <ul><li>Scheme logice </li></ul>
    16. 16. Structuri de control <ul><li>Teorema de structura a lui Bohm si Jacopini </li></ul><ul><li>Structura secventiala (liniara) </li></ul><ul><li>Structura alternativa </li></ul><ul><li>Structura repetitiva </li></ul>
    17. 17. Structuri de control <ul><li>Structura secventiala (liniara) </li></ul>
    18. 18. Structuri de control <ul><li>Structura alternativa </li></ul>
    19. 19. Structuri de control <ul><li>Structura repetitiva cu conditionare anterioara </li></ul>
    20. 20. Structuri de control <ul><li>Structura repetitiva cu conditionare posterioara </li></ul>
    21. 21. Structuri de control <ul><li>Structura repetitiva cu un numar cunoscut de pasi </li></ul>
    22. 22. Intrebari?
    23. 23. Limbajul C <ul><li>1972; Dennis Ritchie; Brian Kernigham (Bell Laboratories) -> “ The C Programming Language ” (Englewood Cliffs, Prentice Hall, 1978) </li></ul><ul><li>BCPL (Basic Combined Programming Language) (1969, Martin Richards) -> B (1970, Ken Thomson) -> C </li></ul><ul><li>1983 ANSI American National Standard Language Institute ->Comitetul de Limbaje de Programare (Programming Language Committee) X3J11 -> 1989 ANSI C </li></ul>
    24. 24. Limbajul C <ul><li>Avantaje </li></ul><ul><li>Generalitate, absenta restrictiilor </li></ul><ul><li>Aritmetica pointerilor </li></ul><ul><li>Set bogat de operatori </li></ul><ul><li>Exprimare concisa </li></ul><ul><li>Acces direct la componente hardware </li></ul><ul><li>Portabilitate </li></ul>
    25. 25. Limbajul C Functii C tip nume(lista_parametrii_formali) declarare parametri { instrucţiuni specifice funcţiei: declarare variabile locale, instrucţiuni executabile }
    26. 26. Limbajul C Functii C #include<stdio.h> void main(void) { printf(“Salut!”); }
    27. 27. Limbajul C <ul><li>Functii C </li></ul><ul><li>Prototipul unei functii </li></ul><ul><li>Transmiterea parametrilor in cadrul unei functii (prin valoare sau prin adresa) </li></ul>
    28. 28. Limbajul C Transmiterea prin valoare #include<stdio.h> void schimbare(int x, int y) //se vor crea copii ale variabilelor x şi y { int tmp; tmp=x; x=y; y=tmp; //în cadrul copiilor variabilelor se face inversarea } //la revenire copiile variabilelor x şi y se distrug void main(void) { int x=5, y=7; schimbare(x,y); //transmitere prin valoare printf(“%d %d ”,x,y); //valorile rămân nemodificate adică se va afişa 5 7 }
    29. 29. Limbajul C Transmiterea prin adresa #include<stdio.h> void schimbare(int *x, int *y) //se vor crea copii ale variabilelor x şi y { int tmp; tmp=*x; *x=*y; *y=tmp; //se face inversarea asupra zonei original } void main(void) { int x=5, y=7; schimbare(&x,&y); //transmitere prin adresă printf(“%d %d ”,x,y); //valorile sunt inversate adică se va afişa 7 5 }
    30. 30. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Caracterele </li></ul><ul><li>Identificatorii </li></ul><ul><li>Cuvintele cheie </li></ul><ul><li>Tipuri de date </li></ul><ul><li>Constantele si variabilele </li></ul><ul><li>Comentariile </li></ul><ul><li>Operatorii </li></ul>
    31. 31. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Caracterele (negrafice, spatiu, grafice, codul 0, ‘ ’) </li></ul><ul><li>Identificatorii </li></ul><ul><li>Cuvintele cheie: </li></ul><ul><li>int extern else char register for </li></ul><ul><li>float typedef do double static while </li></ul><ul><li>struct goto switch union return case </li></ul><ul><li>long sizeof default short break if </li></ul><ul><li>unsigned continue auto </li></ul><ul><li>Standardul ANSI C a mai adaugat 5: </li></ul><ul><li>  enum const signed void volatile </li></ul>
    32. 32. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri de date </li></ul><ul><li>Fundamentale : caracter (char), intreg (int), virgula mobila (float), virgula mobila dubla precizie (double), nedefinit (void) </li></ul><ul><li>Derivate: tipuri structurate (tablouri, structuri, campuri de biti, uniuni si enumerari), tipuri functie, tipuri pointer </li></ul>
    33. 33. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri aritmetice </li></ul>
    34. 34. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipuri aritmetice </li></ul>
    35. 35. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul intreg </li></ul><ul><li>int numar_octal=045; </li></ul><ul><li>int numar_hexa=0x25; </li></ul><ul><li> constanta zecimală 37 poate fi scrisă ca 045 în octal şi ca 0x25 sau 0X25 în hexagesimal. </li></ul><ul><li>Tipul flotant </li></ul><ul><li>-1,5e-5 </li></ul><ul><li>2.e-4 </li></ul><ul><li>12.4 </li></ul>
    36. 36. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul caracter - se reprezinta pe un octet si are ca valoare codul ASCII al caracterului respectiv </li></ul><ul><li>‘ A’ -> 65 </li></ul><ul><li>Caractere negrafice –se foloseste </li></ul>
    37. 37. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tipul caracter </li></ul><ul><li>Corect: ‘’’ (pentru apostrof) ‘ (pentru backslash) </li></ul><ul><li>Gresit: ‘’’ ‘’ </li></ul><ul><li>Derivat din tipul caracter este tipul sir de caractere -> succesiune de octeti ce contin codurile ASCII ale caracterelor din sir si la sfarsit octetul nul (termina orice sir de caractere) </li></ul><ul><li>“ A” -> 65 00 </li></ul>
    38. 38. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Constante </li></ul><ul><li>const double PI=3.1415; </li></ul><ul><li>const int LIM=10000; </li></ul><ul><li>Variabile –declarare: </li></ul><ul><li>tip lista variabile; </li></ul><ul><li>char a,b,c; </li></ul><ul><li>int d; </li></ul><ul><li>double d; </li></ul><ul><li>float f; </li></ul>
    39. 39. Variabile locale, parametri formali si variabile globale. #include<stdio.h> int factorial(int n) //n este parametru formal si este // declarat de tip întreg { int i,fact=1; for(i=2;i<=n;i++) fact=fact*i; //în variabila locala fact //calculăm n! return(fact);//functia factorial returnează valoarea lui n! } void main(void) { int v; printf(&quot;3!=%d &quot;,factorial(3)); //în functia printf apelam //functia factorial având ca parametru real valoarea 3 printf(&quot;Introd o valoare:&quot;); scanf(&quot;%d&quot;,&v); printf(&quot;%d!=%d &quot;,v,factorial(v)); //functia factorial //este apelata având ca parametru //real valoarea citita în variabila v }
    40. 40. Variabile locale, parametri formali si variabile globale. #include<stdio.h> int factorial(int n) { int i,fact=1; for(i=2;i<=n;i++) fact=fact*i; return(fact); } void main(void) { int v; printf(&quot;3!=%d &quot;,factorial(3)); printf(&quot;Introd o valoare:&quot;); scanf(&quot;%d&quot;,&v); printf(&quot;%d!=%d &quot;,v,factorial(v)); }
    41. 41. Variabile locale, parametri formali si variabile globale. #include<stdio.h> int fact=1; void factorial(int n) { int i; fact=1; for(i=2;i<=n;i++) fact=fact*i; } void main(void) { int v; factorial(3); printf(&quot;3!=%d &quot;,fact); printf(&quot;Introd o valoare:&quot;); scanf(&quot;%d&quot;,&v); factorial(v); printf(&quot;%d!=%d &quot;,v,fact); }
    42. 42. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Tablouri ->Indicii in C pornesc de la 0 ! </li></ul><ul><li>int a[10]; </li></ul><ul><li>float b[5][4]; </li></ul><ul><li>char c[4]; </li></ul><ul><li>Clasa de memorare: </li></ul><ul><li>clasa_de_memorare tip_de_baza lista_declaratori; </li></ul><ul><li>Clasa de memorare: automatic, static, extern si register . </li></ul>
    43. 43. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Variabilele automatice -locale fiecarei apelari a unui bloc sau sau functii si sunt declasate la iesirea din bloc </li></ul><ul><li>Variabile statice –sunt locale unui bloc dar retin valoarea pana la revenirea in blocul respectiv (interne respectiv externe=variabile globale) </li></ul><ul><li>Variabile externe –isi pastreaza valoarea in cursul executiei programului; pot fi folosite pt comunicare intre functii </li></ul><ul><li>Variabile registru –pentru accesari rapide </li></ul>
    44. 44. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Comentarii </li></ul><ul><li>/* Acesta este </li></ul><ul><li>un comentariu in C */ </li></ul><ul><li>//comentariu linie C++ </li></ul><ul><li>Operatori aritmetici </li></ul>
    45. 45. Limbajul C Constructiile de baza ale limbajului C int a,v=0; a=++v; //dupa executarea instructiunii v=1 si a=1 a=v++; //a=1 si v=2 a=v--; //a=2 si v=1 a=--v; //a=1 si v=0; float b=5; b=b + 1/2; b=b + 1./2;
    46. 46. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori relationali si logici </li></ul><ul><li>0 –fals in C! </li></ul><ul><li>Orice val diferita de 0 = adevarat! </li></ul>
    47. 47. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>7 000000000000000111 </li></ul><ul><li>8 000000000000001000 </li></ul><ul><li>si pe biti: 000000000000000000 </li></ul><ul><li>7&8=0 </li></ul><ul><li>7&&8=1 (adevarat si adevarat  adevarat). </li></ul>
    48. 48. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul>
    49. 49. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Se considera n,p intregi. Sa se seteze pe 1 bitul p din reprezentarea lui n. </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>{ </li></ul><ul><li>unsigned int n=5,p=1; </li></ul><ul><li>n|=1<<p; </li></ul><ul><li>printf(“%u ”n); </li></ul><ul><li>} </li></ul>
    50. 50. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Se considera n,p intregi. Sa se seteze pe 0 bitul p din reprezentarea lui n. </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>{ </li></ul><ul><li>unsigned int n=7,p=1; </li></ul><ul><li>n&= ~(1<<p); </li></ul><ul><li>printf(“%u ”n); </li></ul><ul><li>} </li></ul>
    51. 51. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatori logici pe biti </li></ul><ul><li>Sa se înlocuiasca primii p biti semnificativi din reprezentarea interna a lui n cu complementul lor fata de 1. </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>{ </li></ul><ul><li>unsigned int n=7,p=3; </li></ul><ul><li>n^= ~0<<(8*sizeof(n)-p); //x^0=x si x^1=!x, oricare ar fi x </li></ul><ul><li>printf(“%u ”n); </li></ul><ul><li>} </li></ul>
    52. 52. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul de atribuire </li></ul><ul><li>nume_variabila=expresie; </li></ul><ul><li>a = b = … = x =expresie; </li></ul><ul><li>v=v op expresie v op = expresie. </li></ul>
    53. 53. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul de conversie explicita (cast) </li></ul><ul><li>(tip) operand </li></ul><ul><li>int a=10, b=4; </li></ul><ul><li>double c; </li></ul><ul><li>c=a/b; </li></ul><ul><li>c=(float)a/b </li></ul>
    54. 54. Limbajul C <ul><li>Constructiile de baza ale limbajului C </li></ul><ul><li>Operatorul dimensiune (sizeof) </li></ul><ul><li>Operatorul conditional exp1?exp2:exp3; </li></ul><ul><li>int a=5, b=3,c; </li></ul><ul><li>c=a>b?b:a; </li></ul><ul><li>Operatorul virgula expr1, expr2, … exprn </li></ul>
    55. 55. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea vida </li></ul><ul><li>Instructiunea de atribuire </li></ul><ul><li>Instructiunea compusa </li></ul><ul><li>Instructiunea if </li></ul><ul><li>i f (expresie) instructiune1; </li></ul><ul><li>else instructiune2 </li></ul>
    56. 56. Limbajul C Instructiuni C if(x) if(y) printf(“1”); else printf(“2”); if(x) {if (y) printf(“1”); } else printf(“2”); if(i=0) printf(“Variabila i are valoarea 0”); else printf(“variabila i are o valoare diferita de 0”); ->Gresit!
    57. 57. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea while </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>void main(void) </li></ul><ul><li>{ </li></ul><ul><li>int a=18, b=12, r; </li></ul><ul><li>while (r=a%b) a=b,b=r; </li></ul><ul><li>printf(“cmmdc este %d ”,b); </li></ul><ul><li>} </li></ul>
    58. 58. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea do while </li></ul><ul><li>do </li></ul><ul><li> instructiune; </li></ul><ul><li>while(expresie); </li></ul><ul><li>Instructiunea for </li></ul><ul><li>for(exp1;exp2;exp3) instructiune; </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>void main(void) </li></ul><ul><li>{ int n=5, fact=1, i; </li></ul><ul><li>for(i=1;i<=n;i++) fact*=i; </li></ul><ul><li>printf(“%d! = %d ”,n,fact); </li></ul><ul><li>} </li></ul>
    59. 59. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea return </li></ul><ul><li>return; </li></ul><ul><li>return expresie; </li></ul><ul><li>int max(int x, int y) </li></ul><ul><li>{ </li></ul><ul><li>if(x>y) return(x); </li></ul><ul><li>else return(y); </li></ul><ul><li>} </li></ul>
    60. 60. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea break –>iesirea fortata dintr-o bucla </li></ul><ul><li>Functia exit: </li></ul><ul><li>void exit(int cod_de_intoarcere); </li></ul><ul><li>-termina executia programului </li></ul><ul><li>Instructiunea continue ->continua cu urmatoarea iteratie a ciclului </li></ul>
    61. 61. Limbajul C <ul><li>Instructiuni C </li></ul><ul><li>Instructiunea goto –>saltul la o instr precedata de o eticheta </li></ul><ul><li>goto eticheta; </li></ul><ul><li>eticheta: instructiune; </li></ul><ul><li>Instructiunea switch </li></ul><ul><li>switch (expresie) { </li></ul><ul><li>case c1: instr1; </li></ul><ul><li>[case c2: instr2;] </li></ul><ul><li>… </li></ul><ul><li>[default: instr_default;] </li></ul><ul><li>} </li></ul>
    62. 62. Limbajul C Pointeri C tip *nume; Operatori: * & int *p, n=5, m; p=&n; m=*p; m=*p+1;
    63. 63. Limbajul C Pointeri C int *p; float x=1.23, y; p=&x; y=*p; ->valoare eronata pentru y int *a,**b,c=1,d; a=&c; b=&a; d=**b; ->d=1
    64. 64. Limbajul C Operatii cu pointeri Adunarea (scaderea) unei constante la un pointer   tip*p; p++; ↔ p=p+sizeof(tip); p--; ↔ p=p-sizeof(tip); p=p+c; ↔ p=p+c*sizeof(tip); p=p-c; ↔ p=p-c*sizeof(tip);
    65. 65. Limbajul C Operatii cu pointeri Scăderea a doi pointeri de acelasi tip Compararea a doi pointeri (operatii relationale cu pointeri) = =, !=, <, >, <=, >= Pointeri si tablouri tip v[lim1][lim2]…[limn]; tip *v;
    66. 66. Limbajul C Pointeri si tablouri int v[10]; int *v; v=malloc(10*sizeof(int)); Referire elemente: v[i] *(v+i),
    67. 67. Limbajul C Pointeri si tablouri int i; double v[100],x,*p; p=&v[0]; ->corect, neelegant p=v; x=v[5]; x=*(v+5); v++; ->incorect p++; ->corect
    68. 68. Limbajul C Pointeri si tablouri void main(void) { int v[10]; … f(v); … } void f(int *p) { …} void f(int a[10]) { …} void f(int a[]) { …}
    69. 69. Limbajul C Pointeri la functii #include<stdio.h> int suma(int a, int b) { return(a+b);} int produs(int a, int b) { return(a*b);} void main(void) { int a,b; int (*p)(int,int); scanf(&quot;%d %d&quot;,&a,&b); p=suma; printf(&quot;suma este %d &quot;,p(a,b)); p=produs; printf(&quot;produsul este %d &quot;,p(a,b)); }
    70. 70. Limbajul C Alocarea si dezalocarea memoriei void *malloc(numar_de_octeti); void free(void tip); str=(char *)malloc(10); free(str); p=(int *)malloc(50*sizeof(int));
    71. 71. Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Structuri </li></ul><ul><li>struct nume_structura { </li></ul><ul><li>tip nume_camp_1; </li></ul><ul><li>tip nume-camp_2; </li></ul><ul><li>… </li></ul><ul><li>} [lista_variabile_structura]; </li></ul><ul><li>struct data_calendaristica { </li></ul><ul><li>int zi; </li></ul><ul><li>int luna; </li></ul><ul><li>int an; </li></ul><ul><li>} d; </li></ul><ul><li>->Referire elemente: d.zi, d.luna, d.an </li></ul>
    72. 72. Limbajul C struct { int x; int *y; } *p;   ++p->x incrementează pe x şi nu pe pointerul p, deoarece ordinea implicită este ++(p->x). (++p)->x incrementează pointerul p inainte de a accesa x, (p++)->x incrementează pointerul p după ce accesează pe x. *p->y reprezintă valoarea întregului spre care pointează y *p->y++ incrementează pointerul y după ce se accesează întregul spre care pointează y (*p->y)++ incrementează ceea ce pointează pointerul y *p++->y incrementează pointerul p după accesul la întregul spre care pointează y.
    73. 73. Limbajul C struct NOD { int cheie; struct NOD *stanga, *dreapta; } nod; nod *creare(); void preordine(nod *p);
    74. 74. Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Campuri de biti </li></ul><ul><li>struct nume_generic { </li></ul><ul><li>tip nume1:lungime; </li></ul><ul><li>tip nume2: lungime; </li></ul><ul><li>… </li></ul><ul><li>tip numen: lungime; </li></ul><ul><li>} lista_variabile; </li></ul>
    75. 75. Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Uniuni </li></ul><ul><li>union nume_generic { </li></ul><ul><li>tip nume_variabilă; </li></ul><ul><li>tip nume_variabilă; </li></ul><ul><li>… </li></ul><ul><li>} variabile_uniune; </li></ul><ul><li>union exemplu_uniune { </li></ul><ul><li>int i; </li></ul><ul><li>char ch; </li></ul><ul><li>} eu; eu.i=10; eu.ch=’a’; </li></ul>
    76. 76. Limbajul C <ul><li>Tipuri structurate de date </li></ul><ul><li>Enumerari </li></ul><ul><li>enum nume_generic {lista enumerărilor} lista_variabile_enumerare; </li></ul><ul><li>enum curcubeu {roşu, orange, galben, verde, albastru, indigo, violet}; </li></ul><ul><li>enum curcubeu ec; </li></ul><ul><li>ec=albastru; </li></ul><ul><li>if (ec= =albastru) printf(“Albastru! ”); </li></ul>
    77. 77. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Substitutia lexicala </li></ul><ul><li>#define identificator [text] </li></ul><ul><li>#define void </li></ul><ul><li>#define then </li></ul><ul><li>#define begin { </li></ul><ul><li>#define end } </li></ul><ul><li>#define N 100 </li></ul>
    78. 78. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Substitutia lexicala </li></ul><ul><li>#define identificator [text] </li></ul><ul><li>#define void </li></ul><ul><li>#define then </li></ul><ul><li>#define begin { </li></ul><ul><li>#define end } </li></ul><ul><li>#define N 100 </li></ul>
    79. 79. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Macroinstructiuni </li></ul><ul><li>#define max(a,b) (a)>(b)?(a):(b) </li></ul><ul><li>#define abs(a) (a)<0?-(a):(a) </li></ul><ul><li>#include<stdio.h> </li></ul><ul><li>#define PAR(a) a%2==0?1:0 </li></ul><ul><li>void main(void) </li></ul><ul><li>{ if PAR(9+1)) printf(“este par ”); </li></ul><ul><li>else printf(“este impar ); </li></ul><ul><li>} </li></ul><ul><li>9+1%2==0 va conduce la 9+0 ==0 F ->”este impar” </li></ul>
    80. 80. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Suprimarea unei definitii </li></ul><ul><li>#undef identificator </li></ul><ul><li>Compilari conditionate </li></ul><ul><li>#if expresie_constanta </li></ul><ul><li>… </li></ul><ul><li>else </li></ul><ul><li>… </li></ul><ul><li>#endif </li></ul>
    81. 81. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Compilari conditionate </li></ul><ul><li>#ifdef NUME </li></ul><ul><li>… </li></ul><ul><li>#endif </li></ul><ul><li>  </li></ul><ul><li>#ifndef NUME </li></ul><ul><li>… </li></ul><ul><li>#endif </li></ul>
    82. 82. Limbajul C <ul><li>Linii de comanda pentru compilator </li></ul><ul><li>Includerea fisierelor </li></ul><ul><li>#include<nume_fisier> </li></ul><ul><li>#include ”nume_fisier” </li></ul>
    83. 83. Limbajul C <ul><li>Functii de intrare/iesire </li></ul><ul><li>Functia printf </li></ul><ul><li>Functia scanf </li></ul><ul><li>Functii de citire/scriere </li></ul><ul><li>int getchar(void); </li></ul><ul><li>int putchar(int c); </li></ul><ul><li>char *gets(char *s); </li></ul><ul><li>int *puts(char *s); </li></ul><ul><li>int getch(void); </li></ul><ul><li>int getche(void); </li></ul>
    84. 84. Limbajul C   #include<stdio.h> void main(void) { int a[10],i.n; for(i=0;i<10;a[i++]=0); while((n=getchar())!=’ ’) if((n-‘0’>=0)&&(n-‘0’<=9)) a[n-‘0’]++; for(i=0;i<10;i++) if(a[i]) printf(“Cifra %d apare de %d ori ”,i,a[i]); }
    85. 85. Limbajul C Functii matematice
    86. 86. Limbajul C Functii de conversie int atoi(const char *s); long atol(const char*s); double atof(char *s); Functii generatoare de numere aleatoare int rand(void); void srand(unsigned int i);
    87. 87. Limbajul C Functii pentru operatii cu caractere si siruri de caractere int isalpha(int c) int isdigit(int c) int isalnum(int c) int isascii(int c) int iscntrl(int c) int isprint(int c) int iscntrl(int c) int isupper(int c) int islower(int c) int isspace(int c) int ispunct(int c) int isspace(int c) int isxdigit(int c) int toupper(int c) int tolower(int c)
    88. 88. Limbajul C Functii pentru operatii cu caractere si siruri de caractere int strcmp(const char *s1, const char *s2); int *strcpy(char *d, const char *s); int strncpy(char *d, const char *s, unsigned n); char *strdup(const char *s); int strlen(const char *s); char *strcat(char *d, const char *s); char *strncat(char *d, const char *s, unsigned n); char *strchr(const char *s, int c); char *strrchr(const char *s, int c); char *strstr(const char *s, const char *subsir);
    89. 89. Limbajul C <ul><li>Operatii cu fisiere </li></ul><ul><li>- text </li></ul><ul><li>- binar </li></ul><ul><li>stdin </li></ul><ul><li>stdout </li></ul><ul><li>stderr </li></ul><ul><li>FILE *fp; </li></ul><ul><li>FILE *fopen(const char *numefisier, const char *mod); </li></ul><ul><li>int fclose(FILE *flux); </li></ul>
    90. 90. Limbajul C putc() fputc() getc() fgetc() fseek() fputs() fgets() fprintf() fscanf() fwrite() fread() feof() ferror() rewind() rename() remove() fflush() tmpfile()
    91. 91. Limbajul C Argumentele liniei de comanda #include<stdio.h> #include<stdlib.h> void main(int argc, char *argv[]) { if(argc!=2) { printf(“Nr invalid de arg pe linia de comanda! ”); exit(1); } printf(“Salut %s! ”,argv[1]); }
    92. 92. Limbajul C #include<stdio.h> #include<stdlib.h> void main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) { printf(“Numar incorect de parametri! ”); exit(1); } if((fp=fopen(argv[1],”w”))==NULL) { printf(“Nu se poate deschide in scriere fisierul precizat ! ”); exit(1); } do {ch=getchar(); putc(ch,fp); } while (ch!=EOF); fclose(fp); }

    ×