- •5.1. Разработка алгоритма решения
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Результат работы программы представлен на рисунке:
- •Int a; // глобальная переменная
- •Int с; // локальная переменная
- •5.6. Выводы
- •6. Контрольные вопросы
- •Приложение 1. Математические функции.
- •Приложение 2. Порядок создания консольного приложения в интегрированной среде разработки Microsoft Visual Studio 10.0
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения
- •5.1.1. Общий метод решения
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •6. Контрольные вопросы
- •Приложение 2. Некоторые функции стандартного ввода-вывода
- •5. Пример решения задачи (вариант 30)
- •5.1. Программа упаковки
- •5.1.1. Разработка алгоритма решения.
- •5.1.2. Определение переменных программы
- •5.2. Программа распаковки
- •5.2.1. Разработка алгоритма решения.
- •5.3. Выводы
- •6. Контрольные вопросы
- •5. Пример решения задачи (вариант 30)
- •5.1. Программа упаковки
- •5.1.1. Разработка алгоритма решения.
- •5.1.2. Определение переменных программы
- •5.2. Программа распаковки
- •5.2.1. Разработка алгоритма решения.
- •5.3. Выводы
- •6. Контрольные вопросы
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •Задание 1.
- •Задание 2
- •6. Контрольные вопросы
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