Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Ambele părți revizuirea anterioară Versiuni anterioare Urmatoarea versiune | Versiuni anterioare Urmatoarea versiune Ambele părți următoarea reviziune | ||
laboratoare:laborator-01 [2017/02/18 21:17] iulian.matesica [2.1. Mașina virtuală SDA-AB în laborator] |
laboratoare:laborator-01 [2017/03/05 19:19] iulian.matesica [6. Referințe] |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Laborator 01: Introducere ====== | ====== Laborator 01: Introducere ====== | ||
- | ===== 1. Obiectivele laboratorului ===== | + | ===== 1. Obiectivele laboratorului |
* familiarizarea cu structuri de date | * familiarizarea cu structuri de date | ||
Linia 181: | Linia 181: | ||
Utilitarul **make** folosește un fișier de configurare denumit '' | Utilitarul **make** folosește un fișier de configurare denumit '' | ||
- | <file Makefile> | + | === Exemplu de utilizare === |
+ | < | ||
all: | all: | ||
gcc hello.c -o hello | gcc hello.c -o hello | ||
Linia 188: | Linia 189: | ||
</ | </ | ||
+ | <code bash> | ||
+ | student@sda-ab-vm: | ||
+ | hello.c | ||
+ | student@sda-ab-vm: | ||
+ | gcc hello.c -o hello | ||
+ | student@sda-ab-vm: | ||
+ | hello hello.c | ||
+ | student@sda-ab-vm: | ||
+ | rm -f hello | ||
+ | student@sda-ab-vm: | ||
+ | hello.c | ||
+ | student@sda-ab-vm: | ||
+ | gcc hello.c -o hello | ||
+ | student@sda-ab-vm: | ||
+ | hello hello.c | ||
+ | </ | ||
+ | Exemplul prezentat mai sus conține două reguli: '' | ||
+ | |||
+ | |||
+ | === Sintaxa unei reguli === | ||
+ | Sintaxa unei reguli dintr-un fișier Makefile: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | * **target** - este, de obicei, fișierul care se va obține prin rularea comenzii command. După cum s-a observat și din exemplul anterior, poate să fie o țintă virtuală care nu are asociat un fișier. | ||
+ | * **prerequisites** - reprezintă dependențele necesare pentru a urmări regula; de obicei sunt fișiere necesare pentru obținerea țintei. | ||
+ | * **< | ||
+ | * **command** - o listă de comenzi (niciuna, una, oricâte) rulate în momentul în care se trece la obținerea țintei. | ||
+ | |||
+ | |||
+ | Un exemplu recomandat pentru un fișier '' | ||
+ | <file Makefile Makefile> | ||
+ | all: hello | ||
+ | |||
+ | hello: hello.o | ||
+ | gcc hello.o -o hello | ||
+ | |||
+ | hello.o: hello.c | ||
+ | gcc -c hello.c | ||
+ | |||
+ | clean: | ||
+ | rm -f *.o *~ hello | ||
+ | </ | ||
+ | |||
+ | Observăm prezeța regulii '' | ||
+ | |||
+ | * **all** are ca dependență '' | ||
+ | * **hello** are ca dependență '' | ||
+ | * **hello.o** are ca dependență '' | ||
+ | |||
+ | < | ||
+ | |||
+ | === Folosirea variabilelor === | ||
+ | Un fișier '' | ||
+ | |||
+ | <file Makefile Makefile> | ||
+ | CC = gcc | ||
+ | CFLAGS = -Wall -g | ||
+ | |||
+ | all: hello | ||
+ | |||
+ | hello: hello.o | ||
+ | $(CC) $^ -o $@ | ||
+ | |||
+ | hello.o: hello.c | ||
+ | $(CC) $(CFLAGS) -c $< | ||
+ | | ||
+ | clean: | ||
+ | rm -f *.o *~ hello | ||
+ | </ | ||
+ | |||
+ | În exemplul de mai sus au fost definite variabilele '' | ||
+ | |||
+ | Variabilele predefinte sunt: | ||
+ | * **$@** se expandează la numele target-ului | ||
+ | * **$^** se expandează la lista de cerințe (prerequisites - lista de dependențe) | ||
+ | * **$<** se expandează la prima cerință (la prima dependență) | ||
+ | |||
+ | |||
+ | ===== 4. Calculul complexității algoritmilor ===== | ||
+ | |||
+ | Analiza complexității unui algoritm are ca scop estimarea volumului de resurse de calcul necesare pentru execuția algoritmului. Prin resurse se înțelege: | ||
+ | • //Spațiul de memorie// necesar pentru stocarea datelor pe care le prelucrează algoritmul.\\ | ||
+ | • //Timpul necesar pentru execuția// tuturor prelucrărilor specificate în algoritm. | ||
+ | |||
+ | Această analiză este utilă pentru a stabili dacă un algoritm utilizează un volum acceptabil de resurse pentru rezolvarea unei probleme. In acest fel timpul de executie va fi exprimat prin numarul de operatii elementare executate. Sunt considerate operatii elementare cele aritmetice (adunare, scadere, ınmulțire, | ||
+ | |||
+ | Este așadar suficient sa se contorizeze doar anumite tipuri de operații elementare, | ||
+ | |||
+ | **Exemplul 1 - Suma a n numere** \\ | ||
+ | Consideram problema calculului sumei . Dimensiunea acestei probleme poate fi considerata // | ||
+ | problemei. | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | **Exemplul 2 - Înmulțirea a 2 matrici** \\ | ||
+ | Consideram problema determinarii produsului a doua matrici: A de dimensiune m×n si B de dimensiune n×p. In acest caz dimensiunea problemei este determinata de trei valori: (m, n, p). \\ | ||
+ | In practica nu este necesara o analiza atat de detaliata ci este suficient sa se identifice | ||
+ | operatia dominantă si sa se estimeze numarul de repetari ale acesteia. Prin operatie dominanta se ıntelege operatia care contribuie cel mai mult la timpul de executie a algoritmului si de regulă este operatia ce apare ın ciclul cel mai interior. În exemplul | ||
+ | |||
+ | {{ : | ||
---- | ---- | ||
- | ===== 3. Ceva chestii | + | ===== 5. Exerciții ===== |
+ | |||
+ | ==== Exercițiul 1 - Hello world ==== | ||
+ | Realizați un program un C/C++ care afișează mesajul //Hello, World// la ieșirea standard. | ||
+ | |||
+ | ==== Exercițiul 2 - Makefile | ||
+ | Realizați un fișier Makefile pentru programul de la exercițiul 1 astfel încat: | ||
+ | |||
+ | * la rularea comenzii '' | ||
+ | * la rularea comenzii '' | ||
+ | |||
+ | |||
+ | ==== Exercițiul 3 - Makefile | ||
+ | |||
---- | ---- | ||
- | ===== 4. Exerciții ===== | + | ===== 6. Referințe ===== |
+ | - [[https:// | ||
+ | - [[https:// | ||
- | ==== Exercițiul 1 - Hello world (2p) ==== | ||
- | ==== Exercițiul 2 - Makefile (3p) ==== | ||
- | ==== Exercițiul 3 - Makefile cu surse multiple (3p) ==== | ||
- | ==== Exercițiul 4 - ?? ==== | ||