Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> integer в double, приведение типов 
V
    Опции темы
Лапоть
Дата 8.4.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Тривиальная задача - соотношение высоты и ширины чего-то. На Си я делал так:
Код

  double coeff = (double)PaintBox->Height / (double)PaintBox->Width;
На Дельфи (после ругани компилятора о несовместимых типах данных) вымучал вот такое:
Код

var
  w, h, coeff : double;
begin
  w := PaintBox.Width;
  h := PaintBox.Height;
  coeff := h / w;
end;
А поизящней нельзя? smile 

Это сообщение отредактировал(а) Лапоть - 8.4.2009, 09:32
PM MAIL   Вверх
Rodman
Дата 8.4.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Код

var
  coeff : double;
begin
  coeff := PaintBox.Height / PaintBox.Width;
end;
а так?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
cemick
Дата 8.4.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

var
  coeff: double;
begin
  with PaintBox do
    coeff := Height / Width;
end;

PM MAIL WWW   Вверх
Лапоть
Дата 8.4.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я дико извиняюсь, но вчера делал именно так и получал ошибку несовместимости типов!
А сегодня - работает... Дельфи глючит? smile 
---
Работает, но есть нюанс - coeff получается равным нулю!

Это сообщение отредактировал(а) Лапоть - 8.4.2009, 12:08
PM MAIL   Вверх
THandle
Дата 8.4.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Цитата(Лапоть @  8.4.2009,  13:00 Найти цитируемый пост)
Работает, но есть нюанс - coeff получается равным нулю!


Он скорее равен не нулю, а нулю с чем-то, что и должно быть. Видимо, скорее всего, ты где-то округляешь/отсекаешь дробную часть.
PM   Вверх
Лапоть
Дата 8.4.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(THandle @  8.4.2009,  15:10 Найти цитируемый пост)
Он скорее равен не нулю, а нулю с чем-то, что и должно быть


THandle,  не поленись, в любом из своих проектов прямо в FormCreate() добавь код
Код

var
  coeff : double;
begin
  coeff := Form1.Height / Form1.Width;
  coeff := Form1.Width / Form1.Height;
  //...
end;
и пошагово посмотри в отладчике на значения coeff. В зависимости от фактического соотношения габаритов формы получишь 0 и 1 (либо 1 и 0).
В общем, Паскаль это не Си...
PM MAIL   Вверх
volvo877
Дата 8.4.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Цитата(Лапоть @  8.4.2009,  18:32 Найти цитируемый пост)
и пошагово посмотри в отладчике на значения coeff
и что будет? 

Код
  coeff := Form1.Height / Form1.Width;
  ShowMessage(FloatToStr(coeff));
  coeff := Form1.Width / Form1.Height;
  ShowMessage(FloatToStr(coeff));

, получаю 2 значения: 0.67130434783 и 1.4896373057... В отладчике - то же самое. Что я делаю не так?

Это сообщение отредактировал(а) volvo877 - 8.4.2009, 19:43
PM MAIL   Вверх
Crw
Дата 8.4.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Лапоть @  8.4.2009,  19:32 Найти цитируемый пост)
добавь код

У меня все работает нормально. Правда чтобы увидеть значение оптимизацию надо отключить.
PM MAIL   Вверх
Лапоть
Дата 8.4.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



volvo877, ещё раз могу предположить, что у меня глючит Дельфи. Потому что сделать что-то НЕ так тут просто не получается. Завтра утром попробую ещё раз. О результатах сообщу.

Добавлено @ 19:48
Цитата(Crw @  8.4.2009,  19:45 Найти цитируемый пост)
чтобы увидеть значение оптимизацию надо отключить

Где и как? Похоже, проблема именно в этом!
---
В том же Билдере при необходимости я встраивал нечто подобное
Код

  int i = 0;
и ставил на эту строку точку остановки. Дельфи подобное просто игнорирует...

Это сообщение отредактировал(а) Лапоть - 8.4.2009, 19:50
PM MAIL   Вверх
THandle
Дата 8.4.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Директива 
{$O-}

Лапоть, смотреть значения удобнее в Watches.
PM   Вверх
Crw
Дата 8.4.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Лапоть @  8.4.2009,  19:47 Найти цитируемый пост)
и ставил на эту строку точку остановки. Дельфи подобное просто игнорирует...

При включеной оптимизации, Делфи при компиляции не обращает внимания на переменные которые не используются.  Так что нет смысла ставить брекпоинт на код которого небудет в бинарнике.
Оптимизацию можно также отключить в настройках проекта. Для Делфи 7 это "Project->Options...->Compiler->Optimization".
PM MAIL   Вверх
Лапоть
Дата 8.4.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(THandle @  8.4.2009,  20:02 Найти цитируемый пост)
Лапоть, смотреть значения удобнее в Watches

Трудно избавляться от Билдеровских привычек.
Всем спасибо, вопрос решён, жалко, что не могу плюсики вам добавить.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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