Форум программистов, компьютерный форум CyberForum.ru

Задание для выполнения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
OPAKJI
47 / 42 / 4
Регистрация: 14.12.2010
Сообщений: 249
24.10.2011, 02:44     Задание для выполнения #1
Очень прошу . Добрые люди . Помогите зделать лабу . По етому варианту задания http://khpi-iip.mipk.kharkiv.edu/lib...ab/v04_03.html. Очень буду признателен .

с ув Алексей .

Задания :

Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.
4. Варианты индивидуальных заданий
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30


5. Пример решения задачи (вариант 30)
5.1. Программа упаковки

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

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

5.1.1.1. Ввод значений составных частей слова состояния устройства. Для каждой составной части нужно вывести приглашение на ввод и ввести данные.

5.1.1.2. Занесение в слово состояния устройства кода состояния. У переменной, которая хранит значение кода состояния, нужно выделить 5 младших разрядов - это можно сделать, выполнив операцию "побитовое логическое И" между значением переменной и двоичной константой 00011111 (16-ричной константой 1F). Потом полученное значения следует сдвинуть на 11 разрядов влево.

5.1.1.3. Занесение в слово состояния устройства признака ошибки. В переменной - признаке ошибки выделить один младший разряд - операция "побитовое логическое И" с константой 1. Полученное значение сдвинуть на 9 разрядов влево. Чтобы добавит полученный код к тому коду, который уже получен на предыдущем шаге, нужно выполнить операцию "побитовое логическое ИЛИ" между предыдущим значением слова состояния устройства и полученным кодом.

5.1.1.4. Занесение в слово состояния устройства признака занятости. В переменной - признаке занятости выделить один младший разряд. Полученное значение сдвинуть на 8 разрядов влево и добавить к тому коду, который получен на предыдущем шаге (так же как в пп.5.1.1.3.).

5.1.1.5. Занесение в слово состояния устройства количества байт. В переменной - количестве байт выделить 8 младших разрядов - "побитовое логическое И" с константой FF16. Полученное значение добавить (см. пп.5.1.1.3.) к тому коду, который уже есть.
Отметим, что если значения составных частей кода, введенные оператором, не выходят за диапазон допустимых для них значений, то операция выделения младших байтов излишня. Но мы предусматриваем ее на случай ошибок оператора.

5.1.2. Определение переменных программы

Для работы программы нам будут нужны переменные, в которых будут храниться составные части кода. Для сохранения всех составных частей будет достаточно по 1 байту, следовательно, тип этих переменных может быть char или unsigned char. Диапазоны возможных значений этих переменных:
c - код состояния - 0 ...31
f - признак ошибки - 0, 1
b - признак занятости - 0, 1
n - количество байт - 0 ... 255
Отметим, что в переменных c, f, b старший разряд байта не используется, так что не имеет значения, будут они типа char или unsigned char. В переменной n используется старший разряд, следовательно, она обязательно должна быть типа unsigned char.
Нужна также переменная для сохранения результирующего кода слова состояния устройства. Это 2-байтная переменная, у которой старший разряд используется как кодовый, а не как знаковый. Так что, эта переменная должна быть типа unsigned int.

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

Текст программы начинается с включения в программу файла:
#include <stdio.h>

В этом файле содержатся описания стандартных функций ввода-вывода, которые непременно будут использоваться в программе.

Далее идет заголовок функции main():
int main(void) {
и объявления переменных - точно по пп 5.1.2:
char c;
char f;
char b;
unsigned char n;
unsigned int UnitStateWord;

Ввод кода состояния складывается из вывода на экран приглашения:
printf("Введите код состояния (0 - 31) >");
и собственно ввода значения в переменную c:
scanf("%d",&c);

Такие же пары операторов повторяются для ввода значений f, b, n. Все значения вводятся как десятичные числа, используется тип %d в спецификациях формата.

Далее идет формирование упакованного кода, которое точно повторяет шаги алгоритма описанного в пп. 5.1.1:
по пп.5.1.1.2:
UnitStateWord=((unsigned char)c&0x1F)<<11;
Преобразование типа переменной c в unsigned char необходимо, потому что иначе сдвиг 8-разрядного кода на 11 разрядов приведет к потере нужных нам кодов.

по пп.5.1.1.3:
UnitStateWord|=((unsigned char)f&1)<<9;
по пп.5.1.1.4:
UnitStateWord|=((unsigned char)b&1)<<8;
пл пп.5.1.1.5:
UnitStateWord|=n&0xFF;

Вывод результата выполняется оператором:
printf("\nСлово состояния устройства = %04x\n",UnitStateWord);

Результат выводится как 16-ричное число из 4 цифр (что соответствует 2 байтам), обязательно выводятся ведущие нули.

Полный текст программы приведен ниже.
/******************************************************/
/* Лабораторная работа ╧4 (часть 1) */
/* Упаковка кода */
/* Пример выполнения. Вариант ╧30. */
/******************************************************/
#include <stdio.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);
return 0;
}

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

Отладку программы можно вести в пошаговом режиме с отслеживанием значений переменных - составных частей при их вводе и кода-результата на шагах его формирования. Для последнего может возникнуть неудобство, т.к. в режиме отладки значение переменной UnitStateWord будет представляться как десятичное число, а нам удобнее видеть его как 16-ричное или как 2-ичное. Поэтому для такого отслеживания удобнее будет вставить в соответствующие места текста программы вызовы функции printf, которые будут выводить промежуточные значения кода в 16-ричном формате.

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

При работе программы на экран были выведены такие результаты:
Введите код состояния (0 - 31) >27
Введите признак ошибки (0 / 1) >1
Введите признак занятости (0 / 1) >1
Введите количество переданных байт (0 - 255) >74

Слово состояния устройства = db4a
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

Добавлено через 59 минут
Помгите програмисты на с++ , я учил другой язык и мне теперь сложно .

Добавлено через 3 часа 31 минуту
помогите плз , плз , плз ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 02:44     Задание для выполнения
Посмотрите здесь:

Сколько врени надо для выполнения программы C++
C++ задание с матрицей!для С
C++ Нужна программа для выполнения практических
C++ подскажите что и как гуглить для выполнения задания
C++ Программа для выполнения указанных операций над матрицами
C++ Создайте класс с именем Rational для выполнения действий с дробями
C++ Сумма ряда, разработать цикл для выполнения
Используя перегрузки, написать функцию для выполнения действий, для следующих типов данных: float, int, double C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
24.10.2011, 07:11     Задание для выполнения #2

Не по теме:

Oh my god, сколько букв


Может что-то конкретно не понятно? Если вопрос сократиться до нескольких строк, вероятность помощи возрастет в несколько раз.
OPAKJI
47 / 42 / 4
Регистрация: 14.12.2010
Сообщений: 249
24.10.2011, 23:02  [ТС]     Задание для выполнения #3
Я и сам непонимаю , по етому напсал , возможно есть те кто понимают .
Надо :
Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.
Yandex
Объявления
24.10.2011, 23:02     Задание для выполнения
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru