Код: Виділити все
// Вхідні дані
int intA;
int intB;
int intC;
// Медіанний фільтр (фільтр пікового шуму)
/* https://embeddedgurus.com/stack-overflow/tag/median-filter/ */
/*Проводимо перше сортування за спаданням:if (A<B) and (A<C),
то вважаємо A – найменшим елементом і далі вибираємо між B і С,
найменший елемент є медіаною і видаємо його на вихід*/
if ((intA <= intB) && (intA <= intC))
{
intMiddle[intCs] = (intB <= intC) ? intB : intC;
}
/*Якщо умова при першому сортуванні не виконується,
тоді проводимо друге сортування за спаданням: if (B<A) and (B<C),
тоді вважаємо B – найменшим елементом і далі вибираємо між A і С,
найменший елемент є медіаною і видаємо його на вихід*/
else if ((intB <= intA) && (intB <= intC))
{
intMiddle[intCs] = (intA <= intC) ? intA : intC;
}
/*Якщо умови по першому і другому сортуванню не виконуються,
тоді проводимо третє сортування за спаданням між A і B,
найменший елемент є медіаною і видаємо його на вихід*/
else
{
intMiddle[intCs] = (intA <= intB) ? intA : intB;
}
Цей код можна просто вставити в програму, а можна використовувати як функцію :
Код: Виділити все
uint16_t middle_of_3(uint16_t a, uint16_t b, uint16_t c)
{
uint16_t middle;
if ((a <= b) && (a <= c))
{
middle = (b <= c) ? b : c;
}
else if ((b <= a) && (b <= c))
{
middle = (a <= c) ? a : c;
}
else
{
middle = (a <= b) ? a : b;
}
return middle;
}