Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2009, 03:25   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как кричит?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.11.2009, 03:55   #12
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

уже никак,
я чуть-чуть переделала))

есть иной вопросик !!
как сделать умножение 2-значных чисел в 2-10 формате??
должно быть что-то вроде умножения в столбик??
есть ф-ция сложения:
Код:
BCD mult (BCD a,BCD b) {
  BCD t;
  t.low=0;
  t.hi=a.hi+b.hi;
  if (t.hi>9) {
    t.low+=1;
    t.hi-=10;
  }
  t.low+=a.low+b.low;
  return t;
}
но как на ее основе можно сделать произведение??
keep it simple
aka_Kiss вне форума Ответить с цитированием
Старый 16.11.2009, 11:49   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Посидел я 15 минут и родил вот такой класс от нечего делать:
Код:
class BCD
{
public:
	BCD();
	BCD(unsigned int);
	BCD(BCD const&);
	~BCD();
public:
	operator unsigned int ();
	BCD operator + (BCD const&) const;
	BCD operator * (BCD const&) const;
private:
	static const int TETRADS_COUNT = 5;		// Колличество тетрад
	unsigned char tetrads[TETRADS_COUNT];	// тетрады
};

BCD::BCD()
{
	memset(tetrads, 0, sizeof(tetrads));
}

BCD::BCD(unsigned int value)
{
	memset(tetrads, 0, sizeof(tetrads));

	for (int i = 0; i < TETRADS_COUNT && value; ++i)
	{
		tetrads[i] = value % 10;
		value /= 10;
	}
}

BCD::BCD(BCD const &obj)
{
	memcpy(tetrads, obj.tetrads, sizeof(tetrads));
}

BCD::~BCD()
{

}

BCD::operator unsigned int ()
{
	int res = 0;
	int d = 1;
	for (int i = 0; i < TETRADS_COUNT; ++i, d *= 10)
	{
		res += tetrads[i] * d;
	}

	return res;
}

BCD BCD::operator + (BCD const &rhs) const
{
	BCD res;

	for (int i = 0; i < TETRADS_COUNT; ++i)
	{
		res.tetrads[i] += this->tetrads[i] + rhs.tetrads[i];
		if (res.tetrads[i] > 9)
		{
			if (i + 1 == TETRADS_COUNT)
			{	// Произошло переполнение числа
				res.tetrads[i] -= 10;
			}
			else
			{	// Перенос бита в старший полубайт
				res.tetrads[i+1] += 1;
				res.tetrads[i] -= 10;
			}
		}
	}

	return res;
}

BCD BCD::operator * (BCD const &rhs) const
{
	BCD res;

	for (int i = 0; i < TETRADS_COUNT; ++i)
	{
		for (int j = 0; j + i < TETRADS_COUNT; ++j)
		{
			res.tetrads[j+i] += this->tetrads[j] * rhs.tetrads[i];
			if (res.tetrads[j+i] > 9)
			{
				if (j + i + 1 == TETRADS_COUNT)
				{	// Произошло переполнение числа
					res.tetrads[j+i] -= 10;
				}
				else
				{	// Перенос бита в старший полубайт
					res.tetrads[j+i+1] += 1;
					res.tetrads[j+i] -= 10;
				}
			}
		}
	}

	return res;
}
Реализация тупая, скорость работы абы какая будет, почти не тестил, но вроде правильно считает.
Умножение реализовано тупо столбиком, как в школе считали.
tetrads[0] - это получается как у тебя hi, ну и tetrads[1] - соответствует low. Так что можешь циклы развернуть и под себя переписать, а может и этот класс пригодится. Благодаря преобразованию к unsigned int, его легко на экран выводить. Просто:
Код:
BCD a(50), b(11);
BCD c;
c = a * b;
cout << c;

Последний раз редактировалось pu4koff; 16.11.2009 в 11:52.
pu4koff вне форума Ответить с цитированием
Старый 16.11.2009, 20:29   #14
aka_Kiss
Пользователь
 
Аватар для aka_Kiss
 
Регистрация: 23.10.2009
Сообщений: 33
По умолчанию

Спасибо всем за помощь))
Программку дописала))
keep it simple
aka_Kiss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры Wertex Помощь студентам 3 30.10.2009 13:52
Структуры Shadovv13 Общие вопросы C/C++ 18 15.10.2009 23:03
Структуры в Си osichev Помощь студентам 2 12.09.2009 15:51
С++ структуры KOLYTFR Помощь студентам 2 24.05.2009 19:02
Структуры BaSk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.05.2009 15:33