Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практическое занятие №1234 по си++.docx
Скачиваний:
9
Добавлен:
08.11.2018
Размер:
787.62 Кб
Скачать

5.2. Программа распаковки

5.2.1. Разработка алгоритма решения.

Алгоритм программы линейный и состоит из таких шагов.

5.2.1.1. Ввод значения слова состояния устройства.

5.2.1.2. Выделение из слова состояния устройства кода состояния. Код слова состояния устройства нужно сдвинуть на 11 разрядов вправо и выделить 5 младших разрядов - "побитовое логическое И" с константой 1F16. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для кода состояния.

5.2.1.3. Выделение из слова состояния устройства признака ошибки. Код слова состояния устройства сдвинуть на 9 разрядов вправо и выделить 1 младший разряд - "побитовое логическое И" с константой 1. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для признака ошибки.

5.2.1.4. Выделение из слова состояния устройства признака занятости. Код слова состояния устройства сдвинуть на 9 разрядов вправо и выделить 1 младший разряд. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для признака занятости.

5.2.1.5. Выделение из слова состояния устройства количества байт. В коде слова состояния устройства нужно выделить 8 младших разрядов - "побитовое логическое И" с константой FF16. Полученное значение записывается в переменную для количества байт.

5.2.2. Определение переменных программы Для работы программы нам будут нужны такие же переменные, что и в пп. 5.1.2.

5.2.3. Разработка текста программы

Начало программы - заголовок и определение переменных - по пп. 5.1.3. Далее идет формирования упакованного кода, которое точно повторяет шаги алгоритма, описанного в пп. 5.2.1:

  • по пп.5.1.2.2:

  • c=(UnitStateWord>>11)&0x1F;

  • по пп.5.1.2.3:

  • f=(UnitStateWord>>9)&1;

  • по пп.5.1.2.4:

  • b=(UnitStateWord>>8)&1;

  • по пп.5.1.2.5:

  • n=UnitStateWord&0xFF;

Вывод первого результата - кода состояния выполняется оператором:

printf("Код состояния = %d\n",c);

Подобными операторами выполняется и вывод остальных результатов

Полный текст программы приведен ниже.

/******************************************************/

/* Практическое занятие №4 (часть 2) */

/* Распаковка кода */

/* Пример выполнения. Вариант №30. */

/******************************************************/

#include <stdio.h>

int main(void) {

char c; /* код состояния */

char f; /* признак ошибки */

char b; /* признак занятости */

unsigned char n; /* количество байт */

unsigned int UnitStateWord; /* слово состояния */

/* ввод слова состояния устройства */

printf("Введите cлово состояния устройства \n");

printf("(16-ричное число от 0 до 0xFFFF) >");

scanf("%x",&UnitStateWord);

/* Выделение составных частей */

c=(UnitStateWord>>11)&0x1F;

f=(UnitStateWord>>9)&1;

b=(UnitStateWord>>8)&1;

n=UnitStateWord&0xFF;

/* вывод результатов */

putchar('\n');

printf("Код состояния = %d\n",c);

printf("Признак ошибки = %d\n",f);

printf("Признак занятости = %d\n",b);

printf("Количество переданных байт = %d\n",n);

return 0;

}

5.2.4. Отладка программы

Отладка программы ведется по методике, описанной в пп.5.1.4.

5.2.5. Результаты работы программы

При работе программы на экран были выведены такие результаты:

Введите cлово состояния устройства

(16-ричное число от 0 до 0xFFFF) >cb42

Код состояния = 25

Признак ошибки = 1

Признак занятости = 1

Количество переданных байт = 66