Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть две бочки, надо определить, какая имеет больше объем [D7, XP]


Максим ©   (2005-12-10 15:40:00) 

Дали мне такое упражнение.

Есть две бочки, надо определить, какая имеет больше объем.

Бочка - это цилиндр. Имеет размеры: h - высота, d - диаметр.

Пользователь вводит параметры двух бочек (в метрах), нажимает кнопку
и получает ответ: какая больше вместит воды.

Сначала напишем функцию, которая определяет объем бочки (в метрах
кубических):

V(h, d:Real):Real  (буквой V обычно и обозначают объем, но можно назвать
функцию и Obyom и как угодно :-) )

После этого по нажатию на кнопку найдем какая бочка больше и выдадим
сообщение об этом.

(объем цилиндра считается: V = h * pi * r * r
где r - радиус (r = d / 2)

Мне надо написать функцию, которая определяет объем бочки (в метрах
кубических).

Вот я и пишу функцию. Но не совсем понимаю как.

Вот что я написал:


function v(h, d: real): real; //где v - объем, h - высота, d - диаметр.
const
 pi = 3.1415926;

var
  r : real;
 begin
  r := d / 2;
  v := h * pi * r * r;
 end;


Просьба, не пишите пожалуйста код, а дайте подсказок, чтобы я дописал функцию. и Конечно, приму замечания по уже написанной функции. Спасибо.


begin...end   (2005-12-10 17:17:00) [1]

> Максим ©   (10.12.05 17:11) [10]

> Вот только не могу найти как пишется функция Pi.
Так и пишется -- Pi.

> Можно вызвать операцию возведения в степень (Power из модуля
> Math)
Можно. Но для случая возведения в квадрат Power будет медленнее работать.

> De1uxe ©   (10.12.05 17:11) [11]

Нет, функция извлечения корня -- это Sqrt.


De1uxe   (2005-12-10 17:17:00) [2]

2 Максим ©
 
Сначала вычисляешь V(объёмы по формуле), а затем сравниваешь сами объемы.
var
d1, d2, h1, h2, res : real;
...
v1 := h1 * pi * d1 * d1 / 4;
v2 := h2 * pi * d2 * d2 / 4;
if v1>v2 then ...
else...


Максим   (2005-12-10 17:16:00) [3]


> De1uxe ©   (10.12.05 17:11) [11]
>
>
> > begin...end ©   (10.12.05 16:58) [9]
>
> Небольшая поправка если я не ошибаюсь то sqr это функция
> извлечения корня


Sqrt извлечение корня, а Sqr возведение в квадрат.


Максим   (2005-12-10 17:11:00) [4]


> begin...end ©   (10.12.05 16:58) [9]
>
> Замечания такие:
>
> а) в Delphi есть встроенная функция Pi;
> б) для возведения в квадрат есть функция Sqr;
> в) формулу можно переписать как h * Pi * Sqr(d) / 4.


Спасибо большое. Вот только не могу найти как пишется функция Pi.

И еще.

Мне вот что порекомендовали по поводу возведения в степень.

Можно вызвать операцию возведения в степень (Power из модуля Math)
Но эта операция не поддерживается напрямую ЦП в машинном коде
нет операции степень. Она есть в блоке математич. вычислений с плав. запятой, (этот блок встроен в ЦП). Так вот это займет дольше времени, чем просто  умножить z * z. Потому что умножать будет более простое вычислительное устройство и операция займет меньшее число тактов.

Или насчет Sqr я не так понял?


De1uxe   (2005-12-10 17:11:00) [5]


> begin...end ©   (10.12.05 16:58) [9]

Небольшая поправка если я не ошибаюсь то sqr это функция извлечения корня


begin...end   (2005-12-10 16:58:00) [6]

> Максим ©   (10.12.05 15:40)
> Конечно, приму замечания по уже написанной функции.

Замечания такие:

а) в Delphi есть встроенная функция Pi;
б) для возведения в квадрат есть функция Sqr;
в) формулу можно переписать как h * Pi * Sqr(d) / 4.


Максим   (2005-12-10 16:54:00) [7]

И все-таки. Есть ли необходимость создать условие в функции?

Или условие создавать уже в процедуре  ButtonClick?

Вот такой вариант условия подойдет?


var
 d1, d2, h1, h2, res : real;

if d1 and h1 > d2 and h2 then
...
else


Или намекните насчет правильностьи условия.


De1uxe   (2005-12-10 16:28:00) [8]

эдитов должно быть 4:
1.d1
2.d2
3.h1
4.h2


Максим   (2005-12-10 16:23:00) [9]

Так я не понял. В полях edit1 и edit2 мне надо ввести только высоту бочки?
Потому что в функции не известно значение переменной h(высота).

А как же тогда d(диаметр)? Ведь написано, что надо найти объем в кубических метрах.


De1uxe   (2005-12-10 16:18:00) [10]

IF ы и ветвления у тебя будут когда ты будешь сравнивать объемы


Максим   (2005-12-10 16:14:00) [11]

Вот мне написали, что это упражнение на if ы и ветвления.

Это уже как я понял в процедуре ButtonClick??


palva   (2005-12-10 16:06:00) [12]

> Вот что я написал:
По моему, правильно написали.


Piero   (2005-12-10 16:04:00) [13]

а извини, стормозил, а чего все правильно, в чем вопрос?


Piero   (2005-12-10 16:01:00) [14]

а где объявление переменной r?


Наверх

Титульная страница Поиск, карта сайта Написать письмо