48682 (Разработка средства функционального диагностирования вычислительных устройств), страница 2
Описание файла
Документ из архива "Разработка средства функционального диагностирования вычислительных устройств", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48682"
Текст 2 страницы из документа "48682"
Таблица 2
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
Вх1 | 39 | 43 | 55 | 59 | 63 | 67 | 71 | 161 | 165 | 171 | 177 | 169 | 177 | 167 | 185 |
Вх2 | 40 | 44 | 56 | 60 | 64 | 68 | 72 | 162 | 166 | 172 | 178 | 170 | 178 | 168 | 186 |
Вх1 | 41 | 0 | 57 | 61 | 65 | 69 | 73 | 163 | 53 | 173 | 51 | 179 | 49 | 183 | 47 |
Вх2 | 42 | 0 | 58 | 62 | 66 | 70 | 74 | 164 | 54 | 174 | 52 | 180 | 50 | 184 | 48 |
Вых1 | 161 | 163 | 165 | 167 | 169 | 171 | 173 | 175 | 177 | 179 | 181 | 183 | 185 | 187 | 189 |
Вых2 | 162 | 164 | 166 | 168 | 170 | 172 | 174 | 176 | 178 | 180 | 182 | 184 | 186 | 188 | 190 |
Таблица 2 продолжение
16 | 17 | 18 | 19 | |
Вх1 | 175 | 189 | 191 | 76 |
Вх2 | 176 | 190 | 192 | 75 |
Вх1 | 187 | 45 | 193 | 195 |
Вх2 | 188 | 46 | 197 | 196 |
Вых1 | 191 | 193 | 195 | 197 |
Вых2 | 192 | 194 | 196 | 198 |
6. Алгоритмы получения описаний
Процедуры получения описаний схем блоков устройства контроля формализованы в виде алгоритмов составления таблиц.
Таблицы представляются двухмерными массивами данных.
Для разработки алгоритмов были выполнены:
-
Обобщение содержания таблиц, с помощью выделения среди ее чисел ключевых данных и выражения их через параметры n, k;
-
Определение закономерностей изменения чисел в столбцах и строках таблицы.
Алгоритм, описывающий табл. 1., представлен в приложении 3.
Блок 2 описывает ввод данных:
-
n – разрядность МКП;
-
k – количество отбрасываемых разрядов.
В блоке 3,4 и 5 представлены ключевые данные:
-
d1 = первое значение в таблице 1, которое соответствует разрядности МКП;
-
d2 = 4*n – k + 5 – номер выхода первого сумматора по модулю три в схеме.
-
d3 = n/2+3 – количество столбцов в таблице 1.
-
L = n – k – Количество разрядов в усеченном результате.
-
as1 = (n/4 +n % 2) – Количество сумматоров в первом ряду.
-
as2 = as1 + L – Количество сумматоров во втором ряду.
-
as3 = (as2+as2% 2) /2 – Количество сумматоров в третьем ряду.
-
as4 = (as3+as3% 2) /2 – Количество сумматоров в четвертом ряду.
Блоки 10,6 определяет данные последнего столбца элементоа первого ряда табл. 1.
В блоках 7 – 9 задан цикл по столбцам, начиная со второго и заканчивая последним столбцом. В цикле определяют данные последних двух строк таблицы. Номер выхода в строке увеличивается на 2 для каждого последующего столбца.
В блоках 11 – 15 заданы циклы по строкам 1: 4 и по столбцам 1: as1. В цикле определяются входы сумматоров по модулю три, определяющих вычисляемые контрольные коды.
Блок 16,17 определяет данные первого столбца элементоа первого ряда табл. 1.
Блок 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. Листинг программы, реализующей алгоритмы
-
Текст программы, реализующей описание схемы блока контроля БКА.БКв
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; iColCount; i++)
StringGrid1->Cells[i] [0]=i;
for (int i=1; iColCount; i++)
StringGrid2->Cells[i] [0]=i;
String stroca1 [7]={«», «Âõ1», «Âõ2», «Âõ3», «Âõ4», «Âûõ1», «Âûõ2»};
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 for (int j = jmin; j 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;