This is an old revision of the document!


Laboratorul 13. Recapitulare

Responsabili:

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:

int functie(void);
int functie();

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?

#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;
}

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

programare-ca/laboratoare/lab13.1355811850.txt.gz · Last modified: 2012/12/18 08:24 by florin.pop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0