Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8484
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 2739
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2636
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1685
Дата выхода:20.09.2011, 10:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:292 / 170
Вопросов / ответов:1 / 1

Консультация # 184002: Уважаемые эксперты! Пожалуйста, ответьте на вопрос:Помогите пожалуйста написать объектно-ориентированную программу. OS Windows XP, Borland C++ Builder 6,2006, Visual Studio 2005. Код прокомментировать. Условие задачи: 1. Разработать класс "двоичное число" в соответствии со следующим заданием: Состояние класса- Целое двоичное чис...


Консультация # 184002:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:Помогите пожалуйста написать объектно-ориентированную программу. OS Windows XP, Borland C++ Builder 6,2006, Visual Studio 2005. Код прокомментировать. Условие задачи:
1. Разработать класс "двоичное число" в соответствии со следующим заданием:
Состояние класса-
Целое двоичное число в прямом коде со знаком определяется его длиной (кол-во цифр в числе, например, до 74) и массивом значений двоичных цифр (типа char). Число со знаком хранится в прямом коде. При выполнении арифметических операций использовать дополнительный код. Память под массив выделяется статически, во время компиляции, и задается массивом фиксированного предельного размера.
Протокол класса-
Определяет возможности создания и инициализации экземпляров класса и правила их использования (методы класса).
Предусмотреть следующие возможности:
пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчани ю;
создание экземпляров класса с инициализацией значением целого числа типа long;
создание экземпляров класса с инициализацией значением числа как строки символов;
ввод экземпляров класса из входного потока и вывод их значений в выходной поток (с помощью перегруженных операторов >> и <<);
получение дополнительного кода числа (с помощью перегруженного оператора ~);
выполнение операции сложения чисел с разными знаками в дополнительном коде (с помощью перегруженного оператора +);
выполнение операции увеличения числа на единицу до использования числа (с помощью префиксной перегруженного оператора ++);
выполнение операции уменьшения числа после его использования (с помощью постфиксной перегруженного оператора --);
выполнение операции определения знака числа.
2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для от ладки и исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов. Для обработки ошибочных ситуаций использовать механизм исключительных ситуаций.
3. Написать прикладную программу, использующую разработанный класс.

Дата отправки: 11.09.2011, 09:17
Вопрос задал: Magma (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Magma!
Примерно так. Все математические (вычитание и сложение) операции происходят через дополнительный код. Благодаря этому они сводятся к общему виду. Особенности сложения в дополнительном коде можно посмотреть здесь.
Несмотря на то, что число хранится в массиве char, я храню там просто 0 и 1 (числа), а не '0' и '1' (символы), преобразовывая к символам только для вывода на экран. Для манипуляций с массивом часто используются функции memset и memcpy.
Пример использования класса:

Код :
#include <conio.h>
#include <stdlib.h>
#include "Binary.h"


int _tmain(int argc, _TCHAR* argv[])
{ //пример
 try {
  CBinary a (2), b(12);
  cin >> a;
  cout << "a=" << a << endl;
  cout << "b=" << b << endl;
  cout << "a-b = " << (a-b) << endl;
  cout << "a+b = " << (a+b) << endl;
  cout << "a++ = " << (++a) << endl;
  cout << "a-- = " << (--a) << endl;
  cout << "~a = " << (~a) << endl;
 } catch (char* ex) {
  cout << ex;
 }
 getch(); //ожидаем пользователя
 return 0;
}

Если нужны более подробные комментарии или расширенный пример использования, пишите. Основной код в приложении, на всякий случай, прилагаю исходники в архиве.
Проверено на Visual Studio 2005.
Удачи!

Приложение:

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 19.09.2011, 21:09
Прикреплённый файл: посмотреть » [2.3 кб]
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное