Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюки на тригонометрии при углах в 90n градусов. 
:(
    Опции темы
Mal Hack
Дата 6.1.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



_hunter а с точки зрения грамотности будет выгоднее вынести это преобразование в отдельную функцию? При условии, что мне надо меня формат, т.е. кол-во отображаемых знаков после запятой?
PM ICQ   Вверх
_hunter
Дата 6.1.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



в отдельную функцию смысла нет ( разве что читаемость немного повысить )
можно в том месте, где задается число знаков и формировать строку формата:
formatStr = "%0." + IntToStr(precision) + "f";
AnsiString().sprintf(formatStr, (double)(Sin(DegToRad(angle))));


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mal Hack
Дата 6.1.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Окей. Спасибо. Так и сделаю.
PM ICQ   Вверх
Mal Hack
Дата 6.1.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Хм, пишу вот так:
Код
 Prec = "%." +  IntToStr(PrecComboBox -> ItemIndex)+"f ";

Выдает:
Цитата
[C++ Error] Unit2.cpp(39): E2277 Lvalue required

или
Код
  Prec = "%." + IntToStr( PrecComboBox -> ItemIndex ) + "f";

Выдает:
Цитата
[C++ Error] [C++ Error] Unit2.cpp(269): E2085 Invalid pointer addition


Объявленно, как:
Код
char Prec[5];

PM ICQ   Вверх
Partizan
Дата 6.1.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Потому что слева у тебя char...а справа AnsiString...

Писать нужно так:
Код

  Prec = ("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

или так...
Код

  Prec = AnsiString("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

Либо вообще так:
Код

  AnsiString Prec;
  Prec = "%." + IntToStr( PrecComboBox -> ItemIndex ) + "f";
//и уже дальше
 sprintf(Prec.c_str(), ...., ...);


Это сообщение отредактировал(а) Partizan - 6.1.2006, 18:36


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Mal Hack
Дата 6.1.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Partizan @ 6.1.2006, 18:33 Найти цитируемый пост)

Либо вообще так:

Это в моем случае получается несколько не рационально.
Воспользовался вариантом:
Цитата(Partizan @ 6.1.2006, 18:33 Найти цитируемый пост)

  Prec = AnsiString("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

Эх, никак не могу привыкнуть, что AnsiString это не простая строка, а целый класс...

Спасибо.
Добавлено @ 18:43
Стоп. Выдает все равно [C++ Error] Unit2.cpp(39): E2277 Lvalue required
PM ICQ   Вверх
Partizan
Дата 6.1.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



а...ну дык пральна...
если уж ты остановился на том варианте переопредели Prec так
Код

char *Prec;



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
_hunter
Дата 6.1.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



+ не понятно чем AnsiString не нравится. почему бы ее и не использовать?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mal Hack
Дата 6.1.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(_hunter @ 6.1.2006, 18:56 Найти цитируемый пост)

+ не понятно чем AnsiString не нравится. почему бы ее и не использовать?

Когда подставляю в формат, мне пишет несоответствие типов cont char * и AnsiString.
Цитата(Partizan @ 6.1.2006, 18:49 Найти цитируемый пост)

если уж ты остановился на том варианте переопредели Prec так

Пробовал.
Ругается вот так: [C++ Error] Unit2.cpp(39): E2235 Member function must be called or its address taken
Т.е. мы как-то не правильно в указатель пишем.
PM ICQ   Вверх
Partizan
Дата 6.1.2006, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



Цитата

Цитата(_hunter @  6.1.2006,  18:56 Найти цитируемый пост)

+ не понятно чем AnsiString не нравится. почему бы ее и не использовать?

Когда подставляю в формат, мне пишет несоответствие типов cont char * и AnsiString.

когда подставляешь в формат не забывай вызывать !!!c_str()!!!
Prec.c_str() - это у тебя должно быть в формате в случае AnsiString Prec;

Цитата
Цитата(Partizan @  6.1.2006,  18:49 Найти цитируемый пост)

если уж ты остановился на том варианте переопредели Prec так

Пробовал.
Ругается вот так: [C++ Error] Unit2.cpp(39): E2235 Member function must be called or its address taken
Т.е. мы как-то не правильно в указатель пишем.

гммм...щас посмотрим...
E2235 Member function must be called or its address taken
A reference to a member function must be called, or its address must be taken with & operator....
возможно ты опечатался...
лично у меня следующий тест проходит на ура:
Код

char *Prec;
float MyVar = 1.099999;

Prec = ("%." + IntToStr( 2 ) + "f").c_str();

char *Buffer = new char[strlen(Prec)];

sprintf(Buffer, Prec, MyVar );
ShowMessage(Buffer);

delete[] Buffer;




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Mal Hack
Дата 6.1.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(Partizan @ 6.1.2006, 19:58 Найти цитируемый пост)

Prec = ("%." + IntToStr( 2 ) + "f").c_str();

Вот тут выкидывает на таком же коде.
PM ICQ   Вверх
TIGERоX
Дата 6.1.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


начинающий...
*


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

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



используя ансистринг
Код

  int intPrec = 2;//точность
  double value = 1.099999;
  AnsiString ansiPrec = "%." + IntToStr( intPrec ) + "f";
  AnsiString rez;//результат тут
  rez.sprintf(ansiPrec.c_str(),value);

если не нравится замени на char
Код

  int intPrec = 2;
  double value = 1.099999;
  char *charPrec = ("%." + IntToStr( intPrec ) + "f").c_str();
  AnsiString rez;
  rez.sprintf(charPrec,value);

Все должно ботать
PM MAIL   Вверх
Mal Hack
Дата 6.1.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(TIGERоX @ 6.1.2006, 22:12 Найти цитируемый пост)

  char *charPrec = ("%." + IntToStr( intPrec ) + "f").c_str();

Не катит. Таже фигня.
Может это уже особенности BDS, но факт остается фактом.
Цитата(TIGERоX @ 6.1.2006, 22:12 Найти цитируемый пост)

используя ансистринг

Такой вариант работает, но не хочу я каждый раз вызывать лишнюю функцию.
В общем, сделал вот так:
Код

 *Prec = * ("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

Добавлено @ 22:39
Блин, а так AccessViolation выкидывает smile
Добавлено @ 22:51
Код

 Prec = ("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

- Компилится, но когда подставляю формат, появляются какие-то квадраты smile
PM ICQ   Вверх
BreakPointMAN
Дата 6.1.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



НУ МАТЬ МОЯ ЖЕНЩИНА!..
Код

Prec = ("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f").c_str();

Нельзя, блин, так, блин, делать... блин... ибо "("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f")" это временный объект... Нельзя взять его char*-представление, и потом использовать этот адрес для инициализации указателя... Временный объект будет разрушен после выполнения этой строки, и по указателю фиг знает что будет лежать, блин.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Partizan
Дата 6.1.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



А ты весь код приведи....вот и разберёмся...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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