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

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


Информационный Канал Subscribe.Ru

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 300
от 18.01.2006, 01:03

Администратор:Калашников О.А.
В рассылке:Подписчиков: 243, Экспертов: 38
В номере:Вопросов: 3, Ответов: 11


Вопрос № 33104: Доброго времени суток. Есть устройство, которое понимает только 4 арифметические действия. Нужно "научить" его извлекать квадратный корень с помощью этих действий (это точно можно сделать) и sin получить (можно ли вообще с 4 действи...
Вопрос № 33128: Пишу программу ( калькулятор) на C#. В программе создаются 18 кнопок и один TextBox. Подскажите как в функции click узнать какую кнопку нажал пользователь и записать соответствующую информацию в TextBox или выполнить соответстующее действие....
Вопрос № 33136: Помогите, пожайлуста решить проблему с деструкторами. В приложении приведён текст тестовой программы, в которой происходит неправильная (не ожидаемая) работа. Коментариями помечены ключевые места. Почему так происходит? Как сделать правил...

Вопрос № 33.104
Доброго времени суток.
Есть устройство, которое понимает только 4 арифметические действия.
Нужно "научить" его извлекать квадратный корень с помощью этих действий (это точно можно сделать) и sin получить (можно ли вообще с 4 действиями это?)
Есть ли у кого алгоритм на С (потом сам переведу в понятный уст-ву язык) и как можно проще, без функ. и т.д.
За пример алгоритма Большое спасибо, да и вообще спасибо за внимание.
Отправлен: 12.01.2006, 11:03
Вопрос задал: nicholasal (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Straight
Здравствуйте, nicholasal!
Синус раскладывается в ряд Тейлора - вот Вам и четыре арифметических действия.
Ответ отправил: Straight (статус: 3-ий класс)
Отправлен: 12.01.2006, 11:10
Оценка за ответ: 4

Отвечает: Danil
Здравствуйте, nicholasal!
Помогут вам ряды Тэйлора.
Ответ отправил: Danil (статус: 1-ый класс)
Отправлен: 12.01.2006, 11:32
Оценка за ответ: 4

Отвечает: PROD
Здравствуйте, nicholasal!
если это и можно, то думаю будет довольно проблематично.
рекомендую копать в сторону таблицы Брадиса и/или низко уровневого программирования - ASM и т.д. ведь на уровне булевых выражений они как-то это делают, а там как раз только сложение и умножение.

Приложение:

Ответ отправил: PROD (статус: 2-ой класс)
Отправлен: 12.01.2006, 11:56
Оценка за ответ: 4
Комментарий оценки:
ок

Отвечает: XMF
Здравствуйте, nicholasal!
--
1. Пробуйте формулу приближенного вычисления.
2. Можно. Учите вышку, формула Маклорена:
f(x)=sin(x)
f'(n) = sin(x+n(pi/2))
sinx = x - (x^3)/3!+ (x^5)/5! - (x^7)/7!+ ... + ((-1)^((n-1)/2))*((x^n)/n!+ R(n+2)
R(n+2) = ((x^(n+2))/(n+2)!
Ответ отправил: XMF (статус: 2-ой класс)
Отправлен: 12.01.2006, 17:27
Оценка за ответ: 4

Отвечает: Ataman N. N.
Здравствуйте, nicholasal!
К сожалению код на С привести не могу, но могу дать наводку.
В мат анализе есть такое понятие как разложение функции в ряд Тейлора.
Функцию f(x)=x^(1/2) можно разложить в ряд Тейлора. В этом методе можно также менять точность вычисления значения функции. Но есть одно "но" - при разложении приходиться вычислять факториалы, справиться ли ваше устройство с этой проблемой, не знаю, если не справиться, то скорей всего Вам прийдеться отказаться от идеи вычисления корня - других способов, на сколько мне известно, просто не существует.
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 13.01.2006, 19:08
Оценка за ответ: 4
Комментарий оценки:
Спасибо

Отвечает: Raptor1
Здравствуйте, nicholasal!
Подробное исследование данного вопроса можно найти здесь:
http://algolist.manual.ru/maths/count_fast/intsqrt.php
Ответ отправил: Raptor1 (статус: Студент)
Отправлен: 14.01.2006, 13:08
Оценка за ответ: 5
Комментарий оценки:
Отлично, спасибо.


Вопрос № 33.128
Пишу программу ( калькулятор) на C#. В программе создаются 18 кнопок и один TextBox. Подскажите как в функции click узнать какую кнопку нажал пользователь и записать соответствующую информацию в TextBox или выполнить соответстующее действие.

Приложение:

Отправлен: 12.01.2006, 16:21
Вопрос задал: psevdo (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ataman N. N.
Здравствуйте, psevdo!
Если класс Button обладает свойством Caption или что-то на подобии, то попробуйте так:
Button(obj).Caption == "1" // нажата кнопка "1",
и т.д.
Ответ отправил: Ataman N. N. (статус: 5-ый класс)
Отправлен: 12.01.2006, 21:44


Вопрос № 33.136
Помогите, пожайлуста решить проблему с деструкторами.
В приложении приведён текст тестовой программы, в которой происходит неправильная (не ожидаемая) работа. Коментариями помечены ключевые места.
Почему так происходит?
Как сделать правильно?
Какие существуют походие тонкости в C/C++?

Приложение:

Отправлен: 12.01.2006, 19:11
Вопрос задал: Tundravarg (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: BOIL
Здравствуйте, Tundravarg!

Изучите еще раз тему конструкторов копирования и вызовов конструктора в C++
Соотв места в приложении помечены комментариями, начинающимися с BOIL

Удачи!...

Приложение:

Ответ отправил: BOIL (статус: 6-ой класс)
Отправлен: 12.01.2006, 19:25

Отвечает: NET
Здравствуйте, Tundravarg!
Всё дело в том что при присваивани создаётся временный обЪект Asd, сразу после присваивания уничтожается

А здесь Asd *asd; вызывается конструктор без параметров...
Попробуйте его изменить так
Asd() { std::cout << " Asd construction without parameters ";
}
Будет всё сразу видно
Ответ отправил: NET (статус: 1-ый класс)
Отправлен: 12.01.2006, 20:01

Отвечает: Danil
Здравствуйте, Tundravarg!
Глньте в приложение.
В примере 2 компилятор не обязан создавать временный объект.

Приложение:

Ответ отправил: Danil (статус: 1-ый класс)
Отправлен: 12.01.2006, 20:03

Отвечает: Raptor1
Здравствуйте, Tundravarg!
Так все правильно,
asd[i] = Asd(q, (unsigned char)3);
эта строка создает новый объект Asd(q, (unsigned char)3);
присвивает asd[i] этот объек и потом его уничтожает, так как оператор присваивания у тебя не определен, что берется оператор по умолчанию, т.е. физическое копирование переменных одного объекта в другой, потом в
деструкторе переменная освобождается и адрес становится недействительным, но второй объект об этом ничего не знаяет и продолжает его использовать, для решения проблемы добавь в класс Asd оператор присваивания, (для пролного счастья пригодится и конструктор из объекта
Asd(const Asd& objSrc) но у тебя в коде он не используется, поэтому приводить я его не стал, он тоже должен выделять свой буфер )

Asd& operator=(const Asd& objSrc)
{
if((i!=NULL)&&(ic!=objSrc.ic))
{
delete [] i;
i=NULL;
ic=0;
}

if((i==NULL)&&(objSrc.ic>0))
{
i = new unsigned int[objSrc.ic];
}

if(objSrc.ic>0)
memcpy(i,objSrc.i,sizeof(unsigned int)*objSrc.ic)
ic=objSrc.ic;

return *this;
}

// и измени конструктор по умолчанию чтобы он задавал начальные значения
// переменных, а то получишь проблемы в release версии
Asd(): i(NULL),ic(0) {}
Ответ отправил: Raptor1 (статус: Студент)
Отправлен: 14.01.2006, 13:05


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное