- •1. Краткие теоретические сведения
- •1.1. Алгоритмизация вычислительного процесса
- •1.2. Арифметические операции
- •1.2.1. Знаки операций
- •1.2.2. Операции
- •1.2.3. Арифметические операции
- •1.2.4.1. Операция присваивания
- •1.2.4.6. Операция sizeof
- •1.3. Порядок (старшинство) выполнения арифметических операций
- •1.4. Круглые скобки позволяют переопределить приоритет
- •{ // Начало главной функции double X, y, z, a, b, c, h; // Объявление переменных
- •1.6. Побитовые логические операции и операции сдвига
- •3.6. Использование операторов сдвига для организации ввода и вывода
- •2. Задание
- •2.12. Задания
- •2.12.1. Задание на алгоритмизацию вычислительных процессов (домашнее)
- •2.12.2.1. Формулировка задания
- •2.12.2.2. Варианты задания Варианты задания приведены в табл. 3.14. Вариант соответствует номеру в журнале группы.
- •2.12.2.3. Разработка алгоритма решения
- •2.12.2.4. Определение переменных программы
- •2.12.2.5. Разработка текста программы
- •2.12.2.6. Текст программы
- •При работе программы на экран было выдано следующее:
- •Варианты задания приведены в табл. 3.15. Вариант соответствует номеру в журнале группы.
- •2.12.3.3. Пример решения задачи для варианта № 30 Решение задачи предполагает создание двух программ: упаковки (см. 2.12.3.3.1) и распаковки (см. 2.12.3.3.2)
- •2.12.3.3.1. Программа упаковки
- •2.12.3.3.1.1. Разработка алгоритма решения
- •2.12.3.3.1.2. Определение переменных программы
- •2.12.3.3.1.3. Разработка текста программы
- •2.12.3.3.1.4. Программа
- •2.12.3.3.1.5. Отладка программы
- •2.12.3.3.1.6. Результаты работы программы
- •2.12.3.3.2. Программа распаковки
- •2.12.3.3.2.1. Разработка алгоритма решения.
- •2.12.3.3.2.4. Текст программы
- •2.12.3.3.2. 5. Отладка программы
- •2.12.3.3.2.6. Результаты работы программы
- •2.12.4. Домашнее задание
- •2.12.4.1. Текст программы
- •2.12.4.2. Результаты работы программы
- •3. Выводы
- •4. Требование к отчету
- •5. Вопросы для самоконтроля
- •Литература
- •Оглавление
- •1. Краткие теоретические сведения 2
- •1.1. Алгоритмизация вычислительного процесса 2
2.12.3.3.1.4. Программа
Полный текст программы приведен ниже.
/*******************************************************/
/* Лабораторная работа № 3 /
/* Задание 3 (часть 1) */
/* Упаковка кода */
/* Пример выполнения. Вариант № 30. */
/*******************************************************/
#include <stdio.h>
# include<conio.h>
int main(void)
{
char c; /* код состояния */
char f; /* признак ошибки */
char b; /* признак занятости */
unsigned char n; /* количество байт */
unsigned int UnitStateWord; /* слово состояния */
/* ввод составных частей */
printf("Введите код состояния (0 - 31) >");
scanf("%d",&c);
printf("Введите признак ошибки (0 / 1) >");
scanf("%d",&f);
printf("Введите признак занятости (0 / 1) >");
scanf("%d",&b);
printf("Введите количество переданных байт (0 - 255) >");
scanf("%d",&n);
/* формирование упакованного кода */
UnitStateWord=((unsigned int)c&0x1F)<<11;
UnitStateWord|=((unsigned int)f&1)<<9;
UnitStateWord|=((unsigned int)b&1)<<8;
UnitStateWord|=n&0xFF;
/* вывод результата */
printf("\nСлово состояния устройства = %04x\n",
UnitStateWord);
getch();
return 0;
}
2.12.3.3.1.5. Отладка программы
Отладку программы можно вести в пошаговом режиме с отслеживанием значений переменных - составных частей при их вводе и кода-результата на шагах его формирования. Для последнего может возникнуть неудобство, т.к. в режиме отладки значение переменной UnitStateWord будет представляться как десятичное число, а нам удобнее видеть его как 16-ричное или как 2-ичное. Поэтому для такого отслеживания удобнее будет вставить в соответствующие места текста программы вызовы функции printf, которые будут выводить промежуточные значения кода в 16-ричном формате.
2.12.3.3.1.6. Результаты работы программы
При работе программы на экран были выведены такие результаты:
Введите код состояния (0 - 31) >27
Введите признак ошибки (0 / 1) >1
Введите признак занятости (0 / 1) >1
Введите количество переданных байт (0 - 255) >74
Слово состояния устройства = db4a
2.12.3.3.2. Программа распаковки
2.12.3.3.2.1. Разработка алгоритма решения.
Алгоритм программы линейный и состоит из таких шагов.
2.12.3.3.2.1.1. Ввод значения слова состояния устройства.
2.12.3.3.2.1.2. Выделение из слова состояния устройства кода состояния. Код слова состояния устройства нужно сдвинуть на 11 разрядов вправо и выделить 5 младших разрядов - "побитовое логическое И" с константой 1F16. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для кода состояния.
2.12.3.3.2.1.3. Выделение из слова состояния устройства признака ошибки. Код слова состояния устройства сдвинуть на 9 разрядов вправо и выделить 1 младший разряд - "побитовое логическое И" с константой 1. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для признака ошибки.
2.12.3.3.2.1.4. Выделение из слова состояния устройства признака занятости. Код слова состояния устройства сдвинуть на 9 разрядов вправо и выделить 1 младший разряд. Слово состояния устройства остается неизменным, а полученное значение записывается в переменную для признака занятости.
2.12.3.3.2.1.5. Выделение из слова состояния устройства количества байт. В коде слова состояния устройства нужно выделить 8 младших разрядов - "побитовое логическое И" с константой FF16. Полученное значение записывается в переменную для количества байт.
2.12.3.3.2. 2. Определение переменных программы Для работы программы нам будут нужны такие же переменные, что и в пп. 2.12.3.3.1.2.
2.12.3.3.2.3. Разработка текста программы
Начало программы - заголовок и определение переменных - по пп. 2.12.3.3.1.3. Далее идет формирования упакованного кода, которое точно повторяет шаги алгоритма, описанного в пп. 2.12.3.3.2.1:
по пп. 2.12.3.3.2.1.2:
c=(UnitStateWord>>11)&0x1F;
по пп. 2.12.3.3.2.1.3:
f=(UnitStateWord>>9)&1;
по пп. 2.12.3.3.2.1.4:
b=(UnitStateWord>>8)&1;
по пп. 2.12.3.3.2.1.5:
n=UnitStateWord&0xFF;
Вывод первого результата - кода состояния выполняется оператором:
printf("Код состояния = %d\n",c);
Подобными операторами выполняется и вывод остальных результатов