Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция по упаковке даты. Функция по упаковке даты. 
:(
    Опции темы
stas52
Дата 20.12.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Люди, подскажите пожалуйста. 
Я написал функцию по упаковке даты. 
Надо, чтобы эта функция возвращала беззнаковое целое упакованной даты.
Как это сделать я не знаю!  Ведь dat - это не unsigned int?!?!?!

Код

    int PackingData2(int a)
        {
        unsigned int seconds, minutes, hours, days, months;   
        unsigned int result=0;

        union { 
             struct { 
                    unsigned seconds:6;        
                    unsigned minutes:6;         
                    unsigned hours:5;
                    unsigned days:5;
                    unsigned months:5;
                    }d;    
            }dat;

        printf( "Seconds: ");
        scanf ( "%d", &seconds );
        dat.d.seconds=seconds;

        printf( "Minutes: ");
        scanf ( "%d", &minutes );
        dat.d.minutes=minutes;
        
        printf( "Hours: ");
        scanf ( "%d", &hours );
        dat.d.hours=hours;

        printf( "Days: ");
        scanf ( "%d", &days );
        dat.d.days=days;

        printf( "Months: ");
        scanf ( "%d", &months );
        dat.d.months=months;

        return a;
        }

PM MAIL   Вверх
MAKCim
Дата 20.12.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



есть time(), ачем что-то еще писать


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
stas52
Дата 20.12.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Надо. Задание такое в институте. Никак не могу сделать. Это вообще возможно?
PM MAIL   Вверх
Voldemar2004
Дата 20.12.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



stas52, у тебя там ошибочка: в аргументе a и ф-ция опять возвращает a - так что бы ты не вводил - будет всегда тоже, что и в фактическом параметре функции. smile 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
GIK
Дата 20.12.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Цитата(stas52)

Как это сделать я не знаю!  Ведь dat - это не unsigned int?!?!?!

А что мат. способ не подходит? Перемножай на секунды, минуты, или на что тебе надо и все. Ну и распоковать легко потом.

Это сообщение отредактировал(а) GIK - 20.12.2006, 13:48


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
stas52
Дата 20.12.2006, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



Это я знаю. Вместо возвращаемого "а" надо что-то подставить чтобы вернуть беззнаковое целое упакованной даты. А вот что именно - не понимаю!!!

Добавлено @ 13:58 
Ок. Ставлю вопрос конкретнее: Можно ли вернуть из функции то, что получилось в результате упаковки...... и если да, то как?
PM MAIL   Вверх
KelTron
Дата 20.12.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Во первых, что такое а? Во вторых если тебе надо упаковать дату в unsigned int, то придется воспользоваться побитовыми операциями.
Судя по твоему коду для секунд и минут должно отводиться 6 бит, для часов, дней и месяцев по 5 бит.
Например, можно написать такую функцию:
Код

unsigned int packDate(int day, int mon, int sec, int min, int hour)
{
    unsigned int result = 0;
    result = (result | mon) << 5;
    result = (result | day) << 5;
    result = (result | hour) << 6;
    result = (result | min) << 6;
    result = (result | sec);
    return result;
}

где старшие(слева) 5 битов нулевые(не используются), следующие 5 - месяц, затем день, час и тд.
В результате получится 32 битное число.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
stas52
Дата 20.12.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 25.10.2006

Репутация: нет
Всего: нет



KelTron, ты сделал первую часть моего задания. А вторая часть - упаковать дату используя  union и struct. Так как сделал я, но результат надо вернуть из функции.
PM MAIL   Вверх
KelTron
Дата 20.12.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: нет
Всего: 38



Во первых : зачем тебе union если у тебя в нем только одна переменная d.
Во вторых, ты уверен что тебе надо возвратить unsigned int? Если да, то какой ваще смысл в этой структуре.

P.S. F что тебе мешает после ввода данных написать
Код

result = packDate(dat.d.days, dat.d.months, dat.d.seconds, dat.d.minutes, dat.d.hours);
return result;


Это сообщение отредактировал(а) KelTron - 20.12.2006, 15:21


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2104 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.