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 Ultima versiune Ambele părți următoarea reviziune | ||
laboratoare:laborator-01 [2017/02/18 21:16] iulian.matesica [2.1. Mașina virtuală SDA-AB în laborator] |
laboratoare:laborator-01 [2018/02/21 16:31] mihai.iacov [1. Obiectivele laboratorului pe întreg semestrul] |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Laborator 01: Introducere ====== | ====== Laborator 01: Introducere ====== | ||
- | ===== 1. Obiectivele laboratorului | + | ===== 1. Reguli pentru laborator===== |
- | * familiarizarea cu structuri | + | Mai multe detalii pot fi găsite pe pagina [[informaii-generale: |
- | * liste | + | |
- | * stive | + | |
- | * cozi | + | |
- | + | ==== Reguli esenţiale pentru promovarea laboratorului==== | |
- | * introducere in algoritmi și tehnici de programare | + | ---- |
- | * recursivitate | + | * **MAXIM** 3 absenţe la laborator (**NU** se poate reface la alte grupe) |
- | | + | * **MINIM** jumătate din punctajul |
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | + | ||
- | * introducere în teoria grafurilor | + | |
- | | + | |
- | * arbori binari, arbori minimi | + | |
- | * drumuri minime in graf (Dijkstra) | + | |
Linia 38: | Linia 26: | ||
Pe stațiile de lucru din laborator a fost instalat VMware Player și adăugată mașina virtuală cu numele SDA-AB. Porniți mașina virtuală. | Pe stațiile de lucru din laborator a fost instalat VMware Player și adăugată mașina virtuală cu numele SDA-AB. Porniți mașina virtuală. | ||
- | {{ : | + | {{ : |
Credențialele sunt următoarele: | Credențialele sunt următoarele: | ||
Linia 181: | Linia 169: | ||
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 177: | ||
</ | </ | ||
+ | <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. GDB ===== | ||
+ | |||
+ | GDB (GNU Debugger) este unealta standard pentru debugging (depanare) din GNU. Este portabil şi poate fi folosit, printre altele, pentru a detecta instrucţiunea ce determina blocarea unui program la rulare (precum şi semnalul asociat erorii). | ||
+ | |||
+ | Exemplu de lansare:\\ | ||
+ | < | ||
+ | gcc -Wall -g my_file.c -o my_file.exe | ||
+ | gdb my_file.exe | ||
+ | </ | ||
+ | |||
+ | **Câteva comenzi utile în timpul depanării: | ||
+ | • **list** - arată conţinutul unui fişier (câteva rânduri, în jurul unui punct numit) \\ | ||
+ | • **run** - porneşte executia\\ | ||
+ | • **n** (sau **next**) - trece la instrucţiunea următoare (fără a intra în apeluri de funcţii)\\ | ||
+ | • **s** (sau **step**) - intră în apel de funcţie pentru a inspecta execuţia\\ | ||
+ | • **b** (sau **break** sau **breakpoint**) - setează un breakpoint ce va forţa oprirea execuţiei în punctul respectiv\\ | ||
+ | • **continue** - continuă execuţia până la următorul breakpoint\\ | ||
+ | • **fin** (sau **finish**) - iese din funcţia curentă\\ | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Exemple de identificare a instrucţiunilor (la fel pentru list) - funcţie, rândul din fişier, adresa din memorie (eventual cu explicitarea fişierului): | ||
+ | < | ||
+ | breakpoint my_function | ||
+ | breakpoint 13 | ||
+ | breakpoint *0x401377 | ||
+ | |||
+ | breakpoint my_file:10 | ||
+ | breakpoint my_file: | ||
+ | </ | ||
---- | ---- | ||
- | ===== 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:// | ||
- | ==== Exercițiul 1 - Hello world (2p) ==== | ||
- | ==== Exercițiul 2 - Makefile (3p) ==== | ||
- | ==== Exercițiul 3 - Makefile cu surse multiple (3p) ==== | ||
- | ==== Exercițiul 4 - ?? ==== | ||