p align="left">Блок 18,19,23 - подпрограмма заполняющая массив х. В подпрограмму передаем следующие параметры imin, imax, iinc, jmin, jmax, jinc, В блоке 20-22, задаются номера входов разрядов контрольного кода КА16 {1,2}, а также номер выхода первого в таблице сумматора по модулю три, который подается на вход следующего сумматора. В блоке 27-29, задаются номера входов разрядов контрольного кода КА12 {1,2}, а также номер выхода первого в таблице сумматора по модулю три, который подается на вход следующего сумматора. В блоке 24-26, заполним столбцы таблицы, первый столбец в четвертом ряду В блоке 30, задаются номера входов разрядов контрольного кода КА32 {1,2}, а также номер выхода первого в таблице сумматора по модулю три, который подается на вход следующего сумматора. Блок 31 вычитаем из свернутого операнда А его ККА, получаем признак корректности результата. В блоке 32 производится вывод данных. Алгоритм, описывающий табл. 2., представлен в приложении 3. Блок 2 описывает ввод данных: · n - разрядность МКП; · k - количество отбрасываемых разрядов. В блоке 3 представлены ключевые данные: · d1 = (n-k)* 2 - первое значение в таблице 1; · d2 = 8*n - 5*k -3 - номер выхода первого сумматора в таблице. 2. · d3 = n - k - 3 - количество столбцов в таблице 2. · as1 = n/4-2 - Количество сумматоров в первом ряду. · Tail, head - переменые(указатели) хранят номер опорного и «заполняемого» элемента Блоки 56,62 определяют данные первого столбца таблицы 2. В блоках 63 - 65 задан цикл по столбцам, начиная со второго и заканчивая последним столбцом. В цикле определяют данные последних двух строк таблицы, а также первых двух строк. Номер выхода в строке увеличивается на 2 для каждого последующего столбца. В блоках 57 - 61 заданы циклы по строкам 1: 4 и по столбцам 1: as1. В цикле определяются входы сумматоров по модулю три, определяющих вычисляемые контрольные коды. В блоках 66 - 68 заполняются первый два столбца таблицы. Заполнением данными столбцы 9,11,13,15,17; 10,12,14,16. Установим указатели tail и head, на опорный элемент, тот элемент откуда берутся данные, и тот, который заполняется. В блоках 72 - 76 заполним данными 10,12,14,16 элементы. Инициализируем tail, head, затем вызываем подпрограмму, увеличиваем tail, head. В цикле определяются входы сумматоров по модулю три, определяющих вычисляемые контрольные коды. Определим КВ22, КВ24, КВ26, КВ28, КВ30. В блоках 77 - 85 заполним 11,13,15,17 данными элементы. В цикле вызываем подпрограмму, увеличиваем tail, head. Определим КВ4, КВ8, КВ12, КВ16. В блоке 86-88, задаются номера входов разрядов контрольного кода КВ32 {1,2}, а также номер выхода первого в таблице сумматора по модулю три, который подается на вход следующего сумматора. Блок 89-91 вычитаем из свернутого операнда А его ККА, получаем признак корректности результата В блоке 92 производится вывод данных. 7. Листинг программы, реализующей алгоритмы 1) Текст программы, реализующей описание схемы блока контроля БКА.БКв void __fastcall TForm1: Button1Click (TObject *Sender) { int d3b, d3a; n = StrToInt (Edit1->Text); k = StrToInt (Edit2->Text); d3a = n/2 + 3; d3b = (n - n % 2)/2; StringGrid1->ColCount = d3a; StringGrid2->ColCount = d3b; for (int i=1; i<StringGrid1->ColCount; i++) StringGrid1->Cells[i] [0]=i; for (int i=1; i<StringGrid2->ColCount; i++) StringGrid2->Cells[i] [0]=i; String stroca1 [7]={«», «Ao1», «Ao2», «Ao3», «Ao4», «Auo1», «Auo2»}; for (int i=0; i<=7; i++) { StringGrid1->Cells[0] [i]=stroca1 [i].c_str(); StringGrid2->Cells[0] [i]=stroca1 [i].c_str(); } StrGr1 (); StrGr2 (); } // - void __fastcall TForm1: Cycle (TStringGrid *tab, int imin, int imax, int iinc, int jmin, int jmax, int jinc) { for (int i=imin; i<imax; i=i+iinc) { for (int j = jmin; j<jmax; j=j+jinc) { if (n % 2 == 1) { tab->Cells[i] [1] = tab->Cells [j-1] [6]; tab->Cells[i] [2] = tab->Cells [j-1] [5]; tab->Cells[i] [3] = tab->Cells[j] [6]; tab->Cells[i] [4] = tab->Cells[j] [5]; } else { tab->Cells[i] [1] = tab->Cells [j-1] [5]; tab->Cells[i] [2] = tab->Cells [j-1] [6]; tab->Cells[i] [3] = tab->Cells[j] [5]; tab->Cells[i] [4] = tab->Cells[j] [6]; } }}} // - void __fastcall TForm1:IF1 (TStringGrid *tab, int head, int tail, int m) { if (n % 2 == 1) { StringGrid1->Cells[head] [1] = StringGrid1->Cells[tail] [5]; StringGrid1->Cells[head] [2] = StringGrid1->Cells[tail] [6]; StringGrid1->Cells[head] [3] = StringGrid1->Cells[m] [5]; StringGrid1->Cells[head] [4] = StringGrid1->Cells[m] [6]; } else { StringGrid1->Cells[head] [1] = StringGrid1->Cells[tail] [6]; StringGrid1->Cells[head] [2] = StringGrid1->Cells[tail] [5]; StringGrid1->Cells[head] [3] = StringGrid1->Cells[m] [6]; StringGrid1->Cells[head] [4] = StringGrid1->Cells[m] [5]; }} // - void __fastcall TForm1:IF2 (TStringGrid *tab, int head, int tail, int m, int m1) { if (n % 2 == 1) { StringGrid1->Cells[head] [1] = StringGrid1->Cells[tail] [5]; StringGrid1->Cells[head] [2] = StringGrid1->Cells[tail] [6]; StringGrid1->Cells[head] [3] = StringGrid1->Cells[m] [5]; StringGrid1->Cells[head] [4] = StringGrid1->Cells[m] [6]; } else { StringGrid1->Cells[head] [1] = StringGrid1->Cells[tail] [6]; StringGrid1->Cells[head] [2] = StringGrid1->Cells[tail] [5]; StringGrid1->Cells[head] [3] = m; StringGrid1->Cells[head] [4] = m1; }} // - void __fastcall TForm1: StrGr1 () { int L, as1, as2, as3, as4, as5, d2a; as1 = n/4 + n % 2; as2 = as1 + L; as3 = as2/2 + as2% 2; as4 = as3/2 + as3% 2; d2a = 4*n-k +5; L = n-k; StringGrid1->Cells[1] [5] = d2a; StringGrid1->Cells[1] [6] = d2a+1; for (int i=2; i<StringGrid1->ColCount; i++) { StringGrid1->Cells[i] [5] = StringGrid1->Cells [i-1] [5]+2; StringGrid1->Cells[i] [6] = StringGrid1->Cells[i] [6]+2; } StringGrid1->Cells[as1] [1] = n - 3; StringGrid1->Cells[as1] [2] = n - 2; StringGrid1->Cells[as1] [3] = n - 1; StringGrid1->Cells[as1] [4] = n; for (int i=(as1-1); i>=0; i-) for (int j=4; j<=0; j-) StringGrid1->Cells[i] [j] = StringGrid1->Cells [i+1] [j] - 4; if (n % 2 == 1) { StringGrid1->Cells[1] [1] = 0;
Страницы: 1, 2, 3, 4
|