generated from badea-codrut-cti/materie-facultate
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
169 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# Template materie facultate | ||
# Programarea calculatoarelor | ||
|
||
## Resurse |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
## Exercitiul 1 | ||
|
||
```c | ||
float vm[8] = {10.0, 20.5, 30.0, 40.5, 50.0, 60.5, 70.0, 80.5}; | ||
float *ip = vm + 2; | ||
int a = 4; | ||
int b = 3; | ||
unsigned char c = 50; | ||
``` | ||
Evaluati expresiile de mai jos si scrieti rezultatul. Detaliati modul de calcul pentru fiecare expresie. | ||
- ``a >>= 3`` | ||
- ``((a << b) - 3) < (b << (a+3))`` | ||
- ``a <<= 4 > 20 ? b & ++c : 1`` | ||
- ``((a & 0x2f) == (b|1)) && ((~c) > 20)`` | ||
- ``(a&b)^(a|b)`` | ||
- ``vm + 4`` | ||
- ``*vm + 4`` | ||
- ``*ip + ip[2]`` | ||
## Exercitiul 2 | ||
```c | ||
typedef struct { | ||
int x, y; | ||
} Point; | ||
Point p; | ||
p.x = 30; | ||
p.y = 40; | ||
Point *a = &p; | ||
Point **b = &a; | ||
``` | ||
|
||
Considerand ca `p` are adresa 200, evaluati expresiile de mai jos si scrieti rezultatul: | ||
|
||
- ``a`` | ||
- ``*a`` | ||
- ``a->x`` | ||
- ``b`` | ||
- ``b->a`` | ||
- ``b->x`` | ||
- ``*b`` | ||
- ``*b->y`` | ||
- ``b->a->x`` | ||
- ``(*b)->a`` | ||
- ``(*b)->y`` | ||
- ``**b`` | ||
|
||
Nu este necesara argumentarea rezultatelor. | ||
|
||
<pb/> | ||
|
||
## Exercitiul 3 | ||
|
||
Fie matricea inferior triunghiulara $U$ cu elemente de dimensiune $n$ si un vector $x$ cu $n$ elemente reale. | ||
|
||
Scrieti o functie de alocare dinamica care memoreaza economic elementele matricii $U$ (memorand doar elementele din triunghiul inferior) intr-un tablou bidimensional. | ||
|
||
### Exemplu: | ||
|
||
$\begin{pmatrix} 1 & 0 & 0 \\ 1 & 2 & 0 \\ 1 & 2 & 3\end{pmatrix}$ se memoreaza in forma $\begin{matrix} 1 \\ 1 & 2 \\ 1 & 2 & 3\end{matrix}$ | ||
|
||
Scrieti o functie care primeste tabloul bidimensional $M$ si tabloul unidimensional $x$ si realizeaza eficient(evita operatiile cu 0) inmultirea matrice-vector. | ||
|
||
Indicatie: Fie $r = Mx$, atunci $r_i = \displaystyle\sum_{j=0}^{n-1} M_{ij} x_j$ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
## Exercitiul 1 (4p) | ||
|
||
```c | ||
|
||
union Student { | ||
char nume[10]; | ||
unsigned char admis; | ||
unsigned int id; | ||
} | ||
union Student S[4]; | ||
|
||
union Student *pointer = &S[3]; | ||
union Student **dpointer = &pointer; | ||
|
||
char a = 40; | ||
unsigned char b = 255; | ||
int x = 1000; | ||
``` | ||
|
||
Presupunem ca $S=100$. Evaluati urmatoarele expresii si scrieti rezultatul. Detaliati modul de calcul pentru fiecare caz. | ||
|
||
- ``strcpy(S[0].nume, "Gabriel"); S[0].admis = '1'; printf("%s", S[0].nume);`` | ||
- ``printf("%d", pointer-1);`` | ||
- ``char c = (x/a) * 20; printf("%c", c);`` | ||
- ``strcpy(S[0].nume, "Gabriel"); *(S+2).nume = S->nume; printf("%s", (S+2)->nume);`` | ||
- ``strcpy(S[0].nume, "Gabriel"); printf("%s %d", (*dpointer)->nume, dpointer->pointer);`` | ||
- ``char* p = (char*) &x; printf("%d", *(p+1)-1);`` | ||
- ``(a&b)|(a^b)`` | ||
- ``~a * (b+1);`` | ||
|
||
## Exercitiul 2 (6p) | ||
|
||
Un jurnalist a fost delegat pentru ordonarea arhivei redactiei. Pentru ca articolele din arhiva sunt stocate in format electronic (fisiere text), jurnalistul va executa o sortare a fisierelor folosind limbajul C. Textul fiecarui articol este memorat intr-un fisier text separat, care contine pe linia 0 titlul articolului si, incepand cu linia 2 textul propriu-zis al articolului (vezi exemplul de mai jos). | ||
|
||
Folositi un tablou de structuri alocat dinamic pentru a stoca (in campurile structurii) titlul si textul fiecarui articol. Sortati tabloul in ordine alfabetica dupa titlu, iar articolele cu titluri identice (lexicografic) vor fi sortate dupa numarul cuvintelor din text. Pentru sortare folositi functia ``qsort``. | ||
|
||
``` | ||
NASA.txt: | ||
Statia spatiala | ||
Actualmente activitatea din cadrul statiei spatiale internationale denumita de agentia americana NASA este suspendata. | ||
``` | ||
|
||
``` | ||
UPB.txt: | ||
Activitate academica | ||
Datorita restrictiilor impuse de pandemia actuala COVID-19, Universitatea Politehnica Bucuresti va suspenda activitatea. | ||
``` | ||
|
||
``` | ||
UB.txt: | ||
Activitate academica | ||
Pandemia actuala COVID-19 nu a influentat major Universitatea din Bucuresti. | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
## Exericitul 1 (4p) | ||
|
||
```c | ||
|
||
union Student { | ||
char nume[10]; | ||
unsigned char admis; | ||
unsigned int id; | ||
} | ||
|
||
union Student S[10]; | ||
|
||
union Student *pointer = S + 1; | ||
union Student **dpointer = &pointer; | ||
signed char a = 130; | ||
unsigned char b = 255; | ||
int x = 1000; | ||
``` | ||
|
||
Presupunem ca $S=100$. Evaluati urmatoarele expresii si scrieti rezultatul. Declarati modul de calcul pentru fiecare caz. | ||
|
||
- ``strcpy(S[0].nume, "Gabriel"); *(S+2).nume = S->nume; printf("%s", (S+2)->nume);`` | ||
- ``printf("%d", pointer - 1);`` | ||
- ``char c = (x/a) * 20; printf("%c", c);`` | ||
- ``strcpy(S[0].nume, "Gabriel"); printf("%d %d", (*dpointer)->nume, dpointer->pointer);`` | ||
- ``strcpy(S[0].nume, "Gabriel"); printf("%s %d", (*dpointer)->nume, dpointer->pointer);`` | ||
- ``char* p = (char*) &x; printf("%d", *(p+1)-1);`` | ||
- ``(a & ~b) | (~a ^ b)`` | ||
- ``~a * (b+1);`` | ||
|
||
## Exercitiul 2 (6p) | ||
|
||
Un lant de magazine dispune de o baza de date stocata intr-un fisier text. Baza de date contine inregistrari cu campurile: ``nume_produs`` si ``cantitati_produs``. Primul reprezinta numele produsului, iar al doilea memoreaza cantitatiile din acest produs (separate prin spatiu) stocate in fiecare magazin din oras e.g. | ||
|
||
``` | ||
Ciocolata, 2.5 14.1 1 278 | ||
Suc natural, 16 12 11.6 100 | ||
Iaurt, 2.5 4.1 12 4.7 | ||
``` | ||
|
||
Folositi un tablou unidimensional alocat dinamic pentru a citi si memora datele produselor din fisier. Folositi functia qsort pentru a ordona fiecare subtablou de cantitati. Pe parcursul rezolvarii se va folosi doar alocare dinamica. | ||
|