Тема: Функцiя у мовi C
Обчислити висоти ha,hb,hc трикутника АВС за формулою
h = 2/a sqrt p(p-a)(p-b)(p-c), де p=(a+b+c)/2.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C → Функцiя у мовi C
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Обчислити висоти ha,hb,hc трикутника АВС за формулою
h = 2/a sqrt p(p-a)(p-b)(p-c), де p=(a+b+c)/2.
Zazvytcaj do labax dodajutj pryklady tcy dekotri pojasky, vidky mogna pidtcerpnuty potrjibne.
Я не побачив, щоб почали. Тут навіть питання не сформульовано — лише репост завдання. Незрозуміло, що заважає студентові виконати цю роботу, і яких порад він очікує — треба йому пояснювати, як пишеться програма на Сі, як оформлюється функція, як переписати цю формулу, щоб програма з нею працювала. У такій нотації, до речі, справді незовсім зрозуміло, яка там формула насправді (хоча не проблема її відшукати в мат. довідникові або нагуглити) — я її знаю, але незовсім зрозуміло, треба її розказувати студентові, чи він сам її звів до такого вигляду, вводячи завдання з клавіатури.
Обчислити висоти ha,hb,hc трикутника АВС за формулою
h = 2/a sqrt p(p-a)(p-b)(p-c), де p=(a+b+c)/2.
P = a + b + c = 2a + b
s = (a + b + c) / 2 = a + (b/2)
Щось, пролетіло повз мене, — знайти ha, hb, hc трикутника "периметр якого рівний пів-периметру його"? Чому там 'p' та що з 'h'?
A = sqrtf( s*(s-a)*(s-b)*(s-c) );
h = 2*(A/b);
Heura написав:Обчислити висоти ha,hb,hc трикутника АВС за формулою
h = 2/a sqrt p(p-a)(p-b)(p-c), де p=(a+b+c)/2.P = a + b + c = 2a + b
s = (a + b + c) / 2 = a + (b/2)Щось, пролетіло повз мене, — знайти ha, hb, hc трикутника "периметр якого рівний пів-периметру його"? Чому там 'p' та що з 'h'?
A = sqrtf( s*(s-a)*(s-b)*(s-c) );
h = 2*(A/b);
Це щоб студента заплутати?
Формула в завданні проста й зрозуміла: площу можна обчислити за формулою Герона, а можна за стороною й висотою — тут же береться площа за формулою Герона, з якої, знаючи також сторону, знаходимо опущену на неї висоту.
Оскільки в трикутнику три висоти, то, очевидно, треба провести обчислення кожної з висот, передаючи у функцію відповідну сторону.
Чогось...Збило з пантелику те як записано.
Тобто в результаті треба представити щось таке у відповідь на завдання? :
auto fhx = [](float p, float a, float b, float c, float forSide_x){return (2*(sqrtf( p*((p-a)*(p-b)*(p-c)) )) ) / forSide_x;};
Чи ще й 'p' в ній же треба знайти?...не зовсім те як я б підійшов до запису всього цього. Трохи дивно.
Чи ще й 'p' в ній же треба знайти?..
Мабуть. Нема такого трикутника, в якого півпериметр не дорівнював би половині суми сторін, тому передавати його додатковим параметром нелогічно.
Власне, й без forSide_x можна обійтися, якщо обчислювати завжди для першої сторони у списку параметрів, а потрібну сторону вказувати, змінюючи порядок параметрів при виклику.
а потрібну сторону вказувати, змінюючи порядок параметрів при виклику.
Звісно, але такого краще, не робити. Вже тоді ліпше, щоб ненароком не сплутати, "char 'b' " передавати і визначати там, коли вже так...
Один біс.
З точки зору швидкодії, краще взагалі обчислити площу наперед і ділити на кожну із сторін. З точки зору кількості параметрів, краще 3 параметри в різному порядку. Символьний параметр для вибору — непотріюне переускладнення, якщо площа обчислюється заново при кожному виклику.
Написав на APL (для сторін 3 4 5, замість яких (укінці) можна підставити свої):
⎕←{p←2÷⍨+/⍵⋄(a b c)←⍵⋄2÷a÷.5*⍨p×(p-a)×(p-b)×(p-c)}¨↓3 3↑3 4⍴ 3 4 5
Це не Сі й не мова, схожа на Сі, але можете використати цю програму для перевірки правильності результатів.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися