MIPI_AdvancedC_FRTK/Lect1/26_page_43_44.c
2024-11-14 08:45:50 +03:00

61 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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