61 lines
1.9 KiB
C
61 lines
1.9 KiB
C
|
/*В программе реализована структура данных:
|
|||
|
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;
|
|||
|
}
|
|||
|
|