1

Тема: Функцiя у мовi C

Обчислити висоти ha,hb,hc трикутника АВС за формулою
h = 2/a sqrt p(p-a)(p-b)(p-c), де  p=(a+b+c)/2.

2

Re: Функцiя у мовi C

Zazvytcaj do labax dodajutj pryklady tcy dekotri pojasky, vidky mogna pidtcerpnuty potrjibne.

3 Востаннє редагувалося koala (22.09.2021 10:43:56)

Re: Функцiя у мовi C

Де ваші напрацювання?

Прихований текст

а рано цього року студіозуси почали

Подякували: P.Y.1

4

Re: Функцiя у мовi C

Я не побачив, щоб почали. Тут навіть питання не сформульовано — лише репост завдання. Незрозуміло, що заважає студентові виконати цю роботу, і яких порад він очікує — треба йому пояснювати, як пишеться програма на Сі, як оформлюється функція, як переписати цю формулу, щоб програма з нею працювала. У такій нотації, до речі, справді незовсім зрозуміло, яка там формула насправді (хоча не проблема її відшукати в мат. довідникові або нагуглити) — я її знаю, але незовсім зрозуміло, треба її розказувати студентові, чи він сам її звів до такого вигляду, вводячи завдання з клавіатури.

5 Востаннє редагувалося tchort (22.09.2021 15:02:02)

Re: Функцiя у мовi C

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);

6

Re: Функцiя у мовi C

tchort написав:
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);

Це щоб студента заплутати?

Формула в завданні проста й зрозуміла: площу можна обчислити за формулою Герона, а можна за стороною й висотою — тут же береться площа за формулою Герона, з якої, знаючи також сторону, знаходимо опущену на неї висоту.
Оскільки в трикутнику три висоти, то, очевидно, треба провести обчислення кожної з висот, передаючи у функцію відповідну сторону.

7 Востаннє редагувалося tchort (22.09.2021 16:26:16)

Re: Функцiя у мовi C

Чогось...Збило з пантелику те як записано.
Тобто в результаті треба представити щось таке у відповідь на завдання? :

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' в ній же треба знайти?...не зовсім те як я б підійшов до запису всього цього. Трохи дивно.

8

Re: Функцiя у мовi C

Чи ще й 'p' в ній же треба знайти?..

Мабуть. Нема такого трикутника, в якого півпериметр не дорівнював би половині суми сторін, тому передавати його додатковим параметром нелогічно.

Власне, й без forSide_x можна обійтися, якщо обчислювати завжди для першої сторони у списку параметрів, а потрібну сторону вказувати, змінюючи порядок параметрів при виклику.

Подякували: tchort1

9 Востаннє редагувалося tchort (22.09.2021 17:12:25)

Re: Функцiя у мовi C

а потрібну сторону вказувати, змінюючи порядок параметрів при виклику.

Звісно, але такого краще, не робити. Вже тоді ліпше, щоб ненароком не сплутати, "char 'b' " передавати і визначати там, коли вже так...
Один біс.

10

Re: Функцiя у мовi C

З точки зору швидкодії, краще взагалі обчислити площу наперед і ділити на кожну із сторін. З точки зору кількості параметрів, краще 3 параметри в різному порядку. Символьний параметр для вибору — непотріюне переускладнення, якщо площа обчислюється заново при кожному виклику.

Подякували: tchort1

11

Re: Функцiя у мовi C

Написав на 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

Try it online!

Це не Сі й не мова, схожа на Сі, але можете використати цю програму для перевірки правильності результатів.