Witam, mam dwa takie zadanka do zrobienia i kompletnie nie wiem jak się do nich zabrać, ani od czego zacząć, możecie mnie jakoś naprowadzić?
Część A
Dość często potrzebujemy ustawiać lub sprawdzać wartości pojedynczych bitów w słowie typu int lub unsigned int. Zdefiniuj dwie funkcje: jedną do odczytywania wartości określonego bitu w słowie (funkcja ma zwracać wartość 0 lub 1), a drugą do ustawiania wartości określonego bitu (funkcja ma ustawić bit na 1 tylko wtedy, gdy parametr ma wartość różną od 0):
int jakiBit (char *tablica, unsigned int nrBitu);
void ustawBit (char *tablica, unsigned int nrBitu, int wartosc);
Przy programowaniu tych funkcji skorzystaj z operatorów bitowych. Na koniec przetestuj działanie obu funkcji.
Część B
Zdefiniuj unię, która będzie zawierała pole typu int oraz pole będące tablicą znakową char[sizeof(int)]. Następnie napisz krótki program testowy, który w nieskończonej pętli będzie wczytywał liczbę całkowitą typu int, umieszczał ją w unii a następnie wypisywał kolejne bity reprezentujące tą liczbę (korzystając tablicy znakowej w tej unii oraz z funkcji z poprzedniej części zadania). Sprawdź za pomocą tego programu, czy na twoim komputerze są zapisywane w systemie little-endian czy big-endian (uzasadnij swoją opinię).
Zdefiniuj strukturę z polami bitowymi do zapamiętywania godziny (5 bitów na godziny, 6 bitów na minuty i 6 bitów na sekundy). Napisz też funkcję, która podane wartości typu unsigned int reprezentujące określoną godzinę upakuje do pola bitowego:
godzina upakuj (int g, int m, int s);
Potem zdefiniuj strukturę opisująca rozmowę telefoniczną: numer dzwoniącego, numer odbierającego oraz godzina rozpoczęcia i zakończenia rozmowy (skorzystaj ze struktury godzina z polami bitowymi do pamiętania czasu).
typedef struct { /.../ } polaczenie;
Następnie napisz program, który dla wczyta ze standardowego wejścia liczbę całkowitą n>0 oznaczającą ilość rozmów, potem utworzy automatyczną n-elementową tablicę struktur i wczyta do niej informacje o n rozmowach telefonicznych prowadzonych w jakimś dniu za pośrednictwem pewnej centrali. Do sortowania użyj funkcji qsort() z biblioteki standardowej.
Na koniec program powinien najpierw wypisać połączenia od najdłuższego do najkrótszego a potem obliczyć i wypisać średnią długość połączeń telefonicznych w danym dniu (liczoną w sekundach z dokładnościa do 2 miejść po kropce dziesiętnej).