нужна помощь в том, каким алгоритмическим способом подойти к этой проблеме - PullRequest
0 голосов
/ 04 октября 2019

Я работаю в диапазоне частот SUB-GHZ для передачи и приема через радиоплату.

enter image description here

из таблицы выше, если я выберу FlashКанал-1 в качестве входных данных должен отображать меня на Rail Channel 16.

Если я выберу Flash Channel 20, он автоматически отображает меня на Rail Channel 1.

Может ли кто-нибудь помочь мне здесьо том, как подойти к нему, как пример кода?

Используемый язык - C.

1 Ответ

0 голосов
/ 04 октября 2019

Поскольку кажется, что нет никакой связи между каналом RAIL и каналом Flash, вам понадобится таблица, которую можно индексировать по каналу RAIL.

Вы обновили свой вопрос, также требуя обратного просмотра. Это можно сделать, используя вторичную таблицу, чтобы отобразить flash в raid, а затем (при необходимости) найти такие детали, как частота и слово в таблице Raid:

struct {
    int Flash;
    double freq;
    DWORD ChannelID;
    //...
} myTable[] = {     // table indexed by RAIL channel number
    {0, 0.0, 0},
    {20, 340.04, 0x0CCC0CCC},
    {25, 340.40, 0x07C707C7}
    //...
};
int getFlashFromRAIL(int RAIL)
{
    return myTable[RAIL].Flash;
}

// table of RAIL channel numbers, indexed by Flash channel number
int myTableInv[] = { 0, 16, 18 /*...*/ };

double getFreqFromFlash(int Flash) // return frequency for Flash channel number
{
    return myTable[myTableInv[Flash]].freq;
}
int getRAILFromFlash(int Flash) // return RAIL channel number for Flash channel number
{
    return myTableInv[Flash];
}

Примечание: как номера каналов RAIL, так и Flashначинаются с 1, но индексы C начинаются с 0..n-1, в каждую таблицу добавляется первая запись, поэтому номера каналов можно использовать для индексации массивов.

EDIT

Учитывая наше обсуждение в комментариях, ниже приводится упрощенное решение:

int RAIL2Flash_table[] = {0, 20, 25, 19 /*...*/};
int Flash2RAIL_table[] = {0, 16, 18, 20 /*...*/};

int RAIL2Flash(int RAIL)
{
    return RAIL2Flash_table[RAIL];
}
int Flash2RAIL(int Flash)
{
    return Flash2RAIL_table[Flash];
}

Таким образом, каждая запись x из RAIL2Flash_table имеет RAIL номер канала, соответствующий индексу x,Таким образом, RAIL канал 1 находится в записи массива 1 и имеет Flash номер канала 20 и т. Д. То же самое для другой таблицы.

...