Parcare eficientă

Avem de administrat eficient o parcare de mașini cu n locuri. Fiecare loc de parcare poate fi liber (0) sau ocupat cu o mașină (1). Vom considera un șir de n biți pentru a gestiona toate locurile din parcare, adică k = [n/8]+1 octeți care se vor memora printr-un tablou de k elemente de tip byte (definit ca unsigned char). Să se implementeze funcțiile:

int SET_CAR(int pos, byte p[], int n);

Încearcă să parcheze o mașină în poziția pos. Dacă locul de parcare este liber, îl marchează cu 1 și întoarce valoarea 1, dacă locul de parcare nu este liber, nu marchează locul și întoarce 0.

int SET_NEXT_CAR(byte p[], int n);

Parchează mașina pe primul loc liber din parcare. Întoarce poziția pe care a fost parcată mașina (un număr între 1 și n). Dacă nu s-a găsit loc liber, se returnează -1.

int RESET_CAR(int pos, byte p[], int n);

Eliberează locul de parcare din poziția pos; întoarce 1 dacă locul era ocupat și a fost eliberat; întoarce -1 dacă locul era liber.

int COUNT_CAR(byte p[], int n);

Numără câte mașini sunt parcate.

Să se scrie o funcție main care primește un număr n, inițializează o parcare goală, apoi primește p comenzi de forma (cod operație, parametru):

0 pos - pentru SET_CAR
1 - pentru SET_NEXT_CAR
2 pos - pentru RESET_CAR

și care afișează pe ecran rezultatul fiecărei operații, iar la final numărul de locuri libere din parcare.