0 / 0 / 1
Регистрация: 24.09.2012
Сообщений: 85
1

Типы данных, определяемые пользователем

25.11.2012, 23:32. Показов 3816. Ответов 24
Метки нет (Все метки)

3. Разработать битовое поле, описывающее состояния элементов прибора. Ввести с консоли число в 16-ричной системе счисления, преобразовать его в битовое поле за счёт использования объединения. Вывести на консоль состояния элементов прибора, соответствующие состоянию битов во введённом числе.

(MP3 проигрыватель-диктофон. Элементы: воспроизведение вкл/выкл, пауза вкл/выкл, запись вкл/выкл.)
По возможности . можете написать на си
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2012, 23:32
Ответы с готовыми решениями:

Структуры, объединения и определяемые пользователем типы. Массивы структур
Здравтсвуйте! Помогите, пожалуйста, разобраться с одной задачкой! Условие следующее: ...

Манипуляторы, определяемые пользователем
Суть программки в то, что нужно создать класса MyClass, в которой добавлены манипуляторы iOnly и...

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

24
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 00:24 2
Это форум С++, поэтому напишу на С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
union status{
    struct{
        unsigned rec  : 1;
        unsigned pause: 1;
        unsigned play : 1;
    }bits;
    unsigned char data;
};
int main(){
    union status MyStat;
    printf("input hex byte:");
    scanf("%x", &(MyStat.data));
    printf("\ndevice status:");
    printf("\nrec  :%s", (MyStat.bits.rec  )?"on":"off");
    printf("\npause:%s", (MyStat.bits.pause)?"on":"off");
    printf("\nplay :%s", (MyStat.bits.play )?"on":"off");
    getchar();
return 0;
}
0
go
Эксперт С++
3645 / 1377 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.11.2012, 00:41 3

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это форум С++, поэтому напишу на С++
А написали на чистом Си.



Добавлено через 1 минуту
Цитата Сообщение от Jumb0 Посмотреть сообщение
Разработать битовое поле,
std::bitset. Раз уж С++.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 00:59 4
Цитата Сообщение от Jumb0 Посмотреть сообщение
Ввести с консоли число в 16-ричной системе счисления, преобразовать его в битовое поле за счёт использования объединения.
разъяснить бы
0
go
Эксперт С++
3645 / 1377 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.11.2012, 01:03 5
del...
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 01:05 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от go Посмотреть сообщение
activnaya, если просите помощи, так уважайте других.
не поняла. Я говорю что мне непонятно это предложение, и поэтому я не понимаю как помочь человеку. Хотя с удовольствием бы ему написала эту программу. Вот ты можешь мне растолковать это предложение?
0
go
Эксперт С++
3645 / 1377 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.11.2012, 01:06 7
activnaya, Простите, это не к Вам относится. Я ошибся. Извините.
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 01:06 8
Цитата Сообщение от go Посмотреть сообщение
Просто зачем изобретать велосипед?
просто для того, чтобы изучить язык. А то так можно довольно долго программировать и не подозревать, что в языке С++ существуют объединения, битовые поля и поразрядные операторы.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 01:13 9
мало того, что преобразовать число в битовое поле, так еще и с помощью операции объединения.
https://www.cyberforum.ru/cgi-bin/latex.cgi?A\cup B = C, \{ c \in C : \(c \in A \) \wedge \(c \in B\) \}
Преподы там упоротые сидят что ли?
0
0 / 0 / 1
Регистрация: 24.09.2012
Сообщений: 85
26.11.2012, 01:19  [ТС] 10
Все . я разобрался . спасибо . мне бы вот эту помочь Рекурсия: удаление из строки всех лишние пробелов
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 01:26 11
Цитата Сообщение от activnaya Посмотреть сообщение
мало того, что преобразовать число в битовое поле, так еще и с помощью операции объединения.
Преподы там упоротые сидят что ли?
Во, о чём я говорю. Нынешние изучающие С++, даже не поняли, что задание требует использовать union. Но конечно, зато про std::bitset все знают и что-то на преподов катят. Извиняюсь если что.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 01:41 12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Во, о чём я говорю. Нынешние изучающие С++, даже не поняли, что задание требует использовать union.
Если ты про ЯП Си, то напрасно. Я уверена, что могу использовать его возможности как минимум не хуже тебя. Кстати, было бы разумнее не структуру вложить в объединение, а наоборот - объединение в структуру (как это обычно и делается). О птичках.

Добавлено через 3 минуты
+ еще спецификатор %x подразумевает тип unsigned int (который далеко не всегда, точнее почти никогда) не равен двум байтам.
0
go
Эксперт С++
3645 / 1377 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
26.11.2012, 01:57 13
Цитата Сообщение от activnaya Посмотреть сообщение
+ еще спецификатор %x подразумевает тип unsigned int (который далеко не всегда, точнее почти никогда) не равен двум байтам.
Кстати да.
Kuzia domovenok, чем мотивирован его выбор?
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 02:09 14
Цитата Сообщение от go Посмотреть сообщение
Кстати да.
Kuzia domovenok, чем мотивирован его выбор?
не знаю. а что придётся читать байт и сохранять только младший? или хранить эти биты в int?
Выбор то мотивирован условием, требующим вводить с консоли число в 16ричной системе.
Можно конечно вообще тупо читать 2 символа (0..9a..f) и переводить их в число из 16й системы.
Цитата Сообщение от activnaya Посмотреть сообщение
Кстати, было бы разумнее не структуру вложить в объединение, а наоборот - объединение в структуру
А вот с этим ну никак не могу согласиться. Объединение каких элементов в структуру вкладывать? У меня объединение байта и вложенной структуры. Всё логично: благодаря объединению к одной и той же переменной можно обращаться или как к байту или как к структуре битов. А иначе что за белиберда получится?
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 03:33 15
Kuzia domovenok, в том-то и дело, что под объединением в ТЗ скорее всего подразумевается именно побитовое ИЛИ. Я вообще не понимаю зачем и для чего (и как это сюда прилепить, чтобы было похоже на программу) в данном случае необходимо использовать union. Вот мой вариант
C
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
#include <stdio.h>
#include <stdlib.h>
 
enum {PLAY = 1, PAUSE = 2, RECORD = 4};
 
typedef struct {
    size_t status : 3;
} status_t;
 
int main()
{
    status_t standing;
    size_t value;
 
    while( scanf("%x", &value) != 1)
        ;
    standing.status |= value;
 
    if(standing.status & PLAY)
        printf("is playing\n");
    if(standing.status & PAUSE)
        printf("is paused\n");
    if(standing.status & RECORD)
        printf("is records\n");
 
    exit(EXIT_SUCCESS);
}
Добавлено через 15 минут
тут разработано
Цитата Сообщение от Jumb0 Посмотреть сообщение
битовое поле, описывающее состояния элементов прибора
есть ввод
Цитата Сообщение от Jumb0 Посмотреть сообщение
с консоли число в 16-ричной системе счисления
есть преобразование
Цитата Сообщение от Jumb0 Посмотреть сообщение
его в битовое поле за счёт использования объединения
есть вывод
Цитата Сообщение от Jumb0 Посмотреть сообщение
на консоль состояния элементов прибора, соответствующие состоянию битов во введённом числе.
всё по ТЗ
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 03:35 16
Цитата Сообщение от activnaya Посмотреть сообщение
использования объединения
нету такого
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 03:44 17
Kuzia domovenok, ну почему? я же учила. Я что неправильно учила? вот вики http://ru.wikipedia.org/wiki/Объединение_множеств. В примере два однородных множества битов. Операция побитовое ИЛИ и есть объединение двух множеств.
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 03:52 18
Цитата Сообщение от activnaya Посмотреть сообщение
Kuzia domovenok, ну почему? я же учила. Я что неправильно учила? вот вики http://ru.wikipedia.org/wiki/Объединение_множеств. В примере два однородных множества битов. Операция побитовое ИЛИ и есть объединение двух множеств.
Ой, а у меня тоже ссылочка имеется! http://ru.wikipedia.org/wiki/%... 1%8B%D1%85)



Проблема в том, что объединения(union) в языке Си действительно чаще всего используются для организации доступа к битам в байте, байтам в слове и.т.д.
Это собственно причина, по которой в языке Си++ есть слово union. Поэтому его использование и требует препод для задания "Разработать битовое поле...".
Собственно это первая моя ассоциация: доступ к битам - используй union.
А вот как связаны битовые поля и эти твои логические операции объединения? Довольно слабо... Я бы сказал притянуто за уши.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
26.11.2012, 04:03 19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А вот как связаны битовые поля и эти твои логические операции объединения? Довольно слабо... Я бы сказал притянуто за уши.
так я же их и не связывала я связывала (и связываю) объединение и битовое ИЛИ. Кантор, знакомая фамилия? 2 переменные - 2 однородных множества битов. Объединение переменных есть объединение множеств битов. Я же специально просила уточнить топик стартера разъяснить ТЗ. В общем - то как я его поняла, так и написала. А вот с какой целью использовать (как притянуть за уши) union я не понимаю. Изуродовать можно что угодно, но зачем? Что мешает написать так?
C
1
2
3
typedef union {
    size_t status : 3;
}
0
3657 / 2994 / 828
Регистрация: 25.03.2012
Сообщений: 11,031
Записей в блоге: 1
26.11.2012, 04:28 20
Цитата Сообщение от activnaya Посмотреть сообщение
А вот с какой целью использовать (как притянуть за уши) union я не понимаю. Изуродовать можно что угодно, но зачем? Что мешает написать так?
C++
1
2
3
typedef union {
size_t status : 3;
}
Оп-па! Ну, во-первых, typedef здесь ну совсем не к месту. Да, его иногда пишут, но после объявления должно идти имя - "псевдоним" для типа данных. Но суть не в этом.

Во-вторых, почитай, что такое union в языке С++. Почитай, и скажи, если этот случай использования union (union байта и бит.полей) ты считаешь притянутым за уши, то приведи пример типичного (по-твоему) использования union.

В-третьих, почитай, что такое union в языке С++, и скажи, зачем создавать union из одного элемента.
Ссылку я дал.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2012, 04:28
Помогаю со студенческими работами здесь

Типы Данных
Извиняюсь, за тупой вопрос, но какой самый большой целочисленный тип данных доступный в компиляторе...

Типы данных
Добрый день. Очень нужна помощь умных людей в написании программы, задание приведено ниже. Буду...

типы данных
какой диапазон данных у main, getch? и какой тип данных у getch?

Типы данных
Перекопал везде и всюду, может где-то и есть обьяснение по поводу типов данных. Какая разница...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru