MIPI_AdvancedC_FRTK/Lect1/26_page_43_44.c

61 lines
1.9 KiB
C
Raw Normal View History

2024-11-14 08:45:50 +03:00
/*В программе реализована структура данных:
struct pack_array
{
uint32_t array; // поле для хранения упакованного массива из 0 и 1
uint32_t count0 : 8; // счетчик нулей в array
uint32_t count1 : 8; // счетчик единиц в array
}
Необходимо написать программу, которая упаковывает переданный ей массив из 32-ух элементов 0 и 1 в указанную структуру данных.
Функция должна строго соответствовать прототипу: void array2struct(int [], struct pack_array *)
Пример 1
Данные на входе: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Данные на выходе:
Поля структуры
array = ffff0000
count0 = 16
count1 = 16
Пример 2
Данные на входе: 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
Данные на выходе:
Поля струткуры
array = ffa70009
count0 = 17
count1 = 15
*/
#include <stdio.h>
#include <stdint.h>
struct pack_array {
uint32_t array; // поле для хранения упакованного массива из 0 и 1
uint32_t count0 : 8; // счетчик нулей в array
uint32_t count1 : 8; // счетчик единиц в array
};
void array2struct(int origin[] , struct pack_array *res)
{
for (int i =0; i<32; i++)
{
res->count1 += origin[i];
res->array |= origin[i];
i<31 ? res->array<<=1 : 1;
}
res -> count0=32-res->count1;
}
int main ()
{
int arr[32];
struct pack_array res;
for (int i=0; i<32; i++)
{
scanf("%d", arr+i);
}
array2struct(arr, &res);
printf("array: 0x%x\ncount0: %d\ncount1 %d\n", res.array, res.count0, res.count1);
return 0;
}