MIPI_BaseC_WebinarFRTK/23_Seminar10/04_sensor_p14_16.c
2024-11-13 09:22:28 +03:00

121 lines
2.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.

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define SIZE 30
struct sensor {
uint8_t day;
uint8_t month;
uint16_t year;
int8_t t;
};
void cgangeIJ(struct sensor* info,int i, int j){
struct sensor temp;
temp=info[i];
info[i]=info[j];
info[j]=temp;
}
//упорядочивающую его по неубыванию температуры
void SortByT(struct sensor* info,int n){
for(int i=0; i<n; ++i)
for(int j=i; j<n; ++j)
if(info[i].t>=info[j].t)
cgangeIJ(info,i,j);
}
unsigned int DateToInt(struct sensor* info){
return info->year << 16 | info->month << 8 | info->day;
}
//упорядочивающую его по дате
void SortByDate(struct sensor* info,int n){
for(int i=0; i<n; ++i)
for(int j=i; j<n; ++j)
if(DateToInt(info+i)>= DateToInt(info+j))
cgangeIJ(info,i,j);
}
void AddRecord(struct sensor* info,int number,
uint16_t year,uint8_t month,uint8_t day,int8_t t){
info[number].year = year;
info[number].month = month;
info[number].day = day;
info[number].t = t;
}
struct data
{
uint32_t number;
struct sensor info[SIZE];
} d;
void load_bin(struct sensor* info,int number)
{
//Проверка на открытие файла
FILE* f = fopen("sensor.bin","rb");
//Проверка на считанные данные
fread(info,number*sizeof(struct sensor),1,f);
fclose(f);
}
void save_bin(struct sensor* info,int number)
{
FILE* f = fopen("sensor.bin","wb");
fwrite(info,number*sizeof(struct sensor),1,f);
fclose(f);
}
void load_bin_d(struct data* d)
{
//Проверка на открытие файла
FILE* f = fopen("sensor.bin","rb");
//Проверка на считанные данные
fread(&d->number,sizeof(d->number),1,f);
fread(d->info,d->number*sizeof(struct sensor),1,f);
fclose(f);
}
void save_bin_d(struct data* d)
{
FILE* f = fopen("sensor.bin","wb");
fwrite(&d->number,sizeof(d->number),1,f);
fwrite(d->info,d->number*sizeof(struct sensor),1,f);
fclose(f);
}
int AddInfo(struct sensor* info){
int counter=0;
AddRecord(info,counter++,2021,9,16,9);
AddRecord(info,counter++,2022,9,2,-9);
AddRecord(info,counter++,2021,1,7,8);
AddRecord(info,counter++,2021,9,5,1);
return counter;
}
void print(struct sensor* info,int number){
printf("===================================\n");
for(int i=0;i<number;i++)
printf("%04d-%02d-%02d t=%3d\n",
info[i].year,
info[i].month,
info[i].day,
info[i].t);
}
int main(void)
{
d.number=AddInfo(d.info);
print(d.info,d.number);
save_bin(d.info,d.number);
printf("\nSort by t\n");
SortByT(d.info,d.number);
print(d.info,d.number);
printf("\nSort by date\n");
SortByDate(d.info,d.number);
print(d.info,d.number);
load_bin(d.info,d.number);
print(d.info,d.number);
return 0;
}