This shows you the differences between two versions of the page.
programare-ca:laboratoare:lab13 [2012/12/18 08:24] florin.pop |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 13. Recapitulare ===== | ||
- | **Responsabili:** | ||
- | * [[florin.pop@cs.pub.ro|Florin Pop]], [[george.popescu@cs.pub.ro|George Popescu]] | ||
- | |||
- | ==== Obiective ==== | ||
- | |||
- | În urma parcurgerii acestui laborator, studentul va fi capabil: | ||
- | * să-şi estimeze gradul de acoperire al cunoştinţelor la Programare; | ||
- | * să-şi facă o privire de ansamblu mai bună asupra noţiunilor învăţate la laborator şi a modului în care acestea sunt legate între ele; | ||
- | |||
- | ==== Exerciţii de Laborator ==== | ||
- | |||
- | |||
- | ==== Teste recapitulative ==== | ||
- | |||
- | === Testul 1 === | ||
- | |||
- | |||
- | 1. (task1.c) Fie funcţiile definite astfel: | ||
- | <code c> | ||
- | int functie(void); | ||
- | int functie(); | ||
- | </code> | ||
- | |||
- | Sunt cele două definiţii echivalente? Scrieţi un program C care să justifice răspunsul dat. | ||
- | |||
- | 2. (task2.c) Scrieţi un program care să afişeze propriul cod sursă. | ||
- | |||
- | 3. (task3.c) Rezolvaţi următoarele cerinţe: | ||
- | |||
- | * 3.1 Definiţi structura <tt>Numar_Complex</tt>, cu câmpurile parte reală, parte imaginară. | ||
- | |||
- | * 3.2. Definiţi funcţia <tt>Numar_Complex* citire (char *filename,int *n)</tt>, care să citească din fişierul dat ca parametru numărul natural n, după care să aloce un vector de n numere complexe, care se vor citi apoi de pe următoarele n linii ale fişierului. | ||
- | |||
- | Formatul fisierului: | ||
- | |||
- | n | ||
- | x1 y1 | ||
- | x2 y2 | ||
- | ... | ||
- | xn yn | ||
- | |||
- | * 3.3 Scrieţi un program care citeşte un vector de n numere complexe folosind funcţia de la punctul precedent, şi apoi afişează numărul de modul maxim şi poziţia acestuia în vector. | ||
- | |||
- | 4. (task4.c) Scrieţi un program care poate primi (ca argumente în linia de comandă) opţiunile “-a” şi “-p”. Programul primeşte ca prim parametru în linia de comandă un număr întreg n. | ||
- | |||
- | *Opţiunea “-a” va avea ca efect afişarea adresei variabilei din program în care se reţine numărul. | ||
- | *Opţiunea “-p” va avea ca efect afişarea pătratului numarului. Pentru a calcula pătratul numărului se va folosi o macroinscructiune. | ||
- | *Se permite rularea executabilului cu ambele opţiuni, caz în care se va afişa atât adresa variabilei cât şi pătratul valorii. La rularea executabilului fără opţiuni, nu se va afiţa nimic. | ||
- | *Se va afişa un mesaj de eroare în oricare dintre cazurile: lipsa parametrului n, parametrii nu sunt cei specificaţi mai sus, număr prea mare de parametri. | ||
- | |||
- | 5. (task5.c) Scrieţi un program care interschimbă două variabile x şi y, fără a folosi o variabilă auxiliară. | ||
- | |||
- | 6. Modificaţi următorul fişier makefile, astfel încât executabilul de la problema 4 să se numească task6. | ||
- | |||
- | #makefile | ||
- | |||
- | CC=gcc | ||
- | CFLAGS=-Wall | ||
- | |||
- | all: task1 task2 task3 task4 task5 | ||
- | |||
- | task1: task1.c | ||
- | task2: task2.c | ||
- | task3: task3.c | ||
- | task4: task4.c | ||
- | task5: task5.c | ||
- | |||
- | |||
- | === Testul 2 === | ||
- | |||
- | 1. (task1.c) De ce urmatorul program nu afişează rezultatul corect/aşteptat? | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | float f=0.0f; | ||
- | int i; | ||
- | for(i=0;i<10;i++) | ||
- | f = f + 0.1f; | ||
- | | ||
- | if(f == 1.0f) | ||
- | printf("f is 1.0 \n"); | ||
- | else | ||
- | printf("f is NOT 1.0\n"); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | 2. (task2.c) Scrieţi un program care să afişeze câţi biţi dintr-un număr reprezentat pe 4 octeţi sunt 1. | ||
- | |||
- | 3. (task3.c) Rezolvaţi următoarele cerinţe: | ||
- | |||
- | * 3.1 Definiţi structura Numar_Real, cu câmpurile parte întreagă, parte fracţionară. | ||
- | |||
- | * 3.2 Definiţi funcţia <tt> Numar_Real* citire(char *filename,int *n)</tt>, care să citească din fişierul dat ca parametru dimensiunea vectorului v, să îl aloce dinamic, apoi să citeasca n numere reale, şi să le reţină într-un vector, sub formă de structuri definite ca la punctul precedent. | ||
- | |||
- | Formatul fişierului: | ||
- | |||
- | n | ||
- | nr_1 | ||
- | nr_2 | ||
- | ... | ||
- | nr_n | ||
- | |||
- | * 3.3 Scrieţi un program care să testeze funcţia de citire de la punctul precedent, afişând numerele din vector în ordinea crescătoare a părţii fracţionare. Afişarea se va face în forma: | ||
- | i1 f1 | ||
- | i2 f2 | ||
- | ... | ||
- | in fn, | ||
- | unde i reprezintă partea întreagă, iar f partea fracţionară. | ||
- | |||
- | 4. (task4.c) Scrieţi un program care primeşte (ca argumente în linia de comandă) două numere ''a'' şi ''b'', şi poate primi una dintre opţiunile: “-m” sau “-f”. | ||
- | * Veţi defini un macro care calculează minimul dintre a şi b, precum şi o funcţie cu acelaşi scop: <tt>int minim(int a, int b)</tt>. | ||
- | * Dacă este apelat cu optiunea “-m”, programul va afisa minimul dintre a si b, folosind macrodefinitia. | ||
- | * Dacă este apelat cu optiunea “-f”, programul va afişa adresa funcţiei <tt>minim</tt>. Dacă este apelat cu ambele optiuni, vor fi afişate ambele informaţii. | ||
- | * Programul va afişa un mesaj de eroare în oricare dintre următoarele cazuri: nu sunt daţi parametrii a şi b (sau unul dintre ei), parametrii nu sunt cei specificaţi mai sus, număr prea mare de parametri. | ||
- | |||
- | 5. (task5.c) Scrieţi un program care afişează caracterul ';' (cod ASCII: 59), fără a folosi '''deloc''' ';' în sursa C. (task5.c) | ||
- | |||
- | 6. Modificaţi următorul fişier makefile, adăugând o regulă <tt>clean</tt>, care să şteargă fişierele executabile, precum şi fisierele temporare, ale căror nume se termină cu '~'. | ||
- | |||
- | #makefile | ||
- | |||
- | CC=gcc | ||
- | CFLAGS=-Wall | ||
- | |||
- | all: task1 task2 task3 task4 task5 | ||
- | |||
- | task1: task1.c | ||
- | task2: task2.c | ||
- | task3: task3.c | ||
- | task4: task4.c | ||
- | task5: task5.c |