Тема: Доброго вечора, допоможіть з лабараторною

На площині задані обмежена лініями x^2 +y^2=9, y = x/2, y <=0 область R і точки A (x1, y1), B (x2, y2), C (x3, y3). Розробити програму, яка обчислює периметр і площу трикутника ABC, якщо точки A,B,C належать області R і не лежать на одній прямій, інакше видати відповідне повідомлення.
Ось мій код:

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f %f", &x1, &y1);

    printf("Введіть координату B:");
    scanf_s("%f %f", &x2, &y2);

    printf("Введіть координату C:");
    scanf_s("%f %f", &x3, &y3);

    if ((x1 * x1) + (y1 * y1) == 9 && (x2 * x2) + (y2 * y2) == 9 && (x3 * x3) + (y3 * y3) == 9 && y1 == x1 / 2 && y2 == x2 / 2 && y3 == x3 / 2 && y1 <= 0 && y2 <= 0 && y3 <= 0) {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;
        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f", S, P);
    }
    else printf("0000");
}

2 Востаннє редагувалося PeSePol (18.09.2023 21:52:47)

Re: Доброго вечора, допоможіть з лабараторною

На площині задані обмежена лініями x^2 +y^2=9, y = x/2, y <=0 область R, тобто не ==9, а <=9, тому що площа обмежена лініями, а не чітко дорівнює їм  :)
Це сфера радіусом 9 чогось там, всередині якої ви будуєте трикутник

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

3

Re: Доброго вечора, допоможіть з лабараторною

Умова непослідовна. Сказано, що область обмежена лініями; однак наведені два рівняння ліній (кола і прямої), а також нерівність, що задає півплощину. Гадаю, малося на увазі, що точки мають бути в одній з областей, утворених лініями (включно з межею півплощини), однак не зовсім зрозуміло, в якій саме. Хоча, можливо, малося на увазі саме півплощина і лінії за її межами. Ви можете намалювати це і показати, яка саме область малася на увазі?
У будь-якому разі об'єднуючи всі умови за допомогою &&, ви перевіряєте, що точки належать лише перетинам ліній, а таких перетинів аж 2 і лише один з них має координату y, меншу за 0. Так, як ви робите, ви лише ((-1.2*sqrt(5.0), -0.6*sqrt(5.0)) можете ввести, та й то лише якщо зірки зійдуться і воно правильно округлиться (про округлення - окрема історія, краще спершу з областю розберемося).
Функції ви вже вчили? Вам тут було б зовсім незле написати функцію для перевірки координат, щоб три раз одне й те саме не перевіряти; але можна і так, треба тільки правильно умови записати.
Далі, в умові просять перевірити, чи не лежать всі точки на одній прямій. Це можна зробити кількома способами, але найпростіше тут - перевірити, чи не вийшла площа рівною 0.

4

Re: Доброго вечора, допоможіть з лабараторною

PeSePol написав:

На площині задані обмежена лініями x^2 +y^2=9, y = x/2, y <=0 область R, тобто не ==9, а <=9, тому що площа обмежена лініями, а не чітко дорівнює їм  :)
Це сфера радіусом 9 чогось там, всередині якої ви будуєте трикутник

Яка ще сфера, це ж площина. https://www.desmos.com/calculator/zlpa05gtnl

Подякували: wander, PeSePol2

5 Востаннє редагувалося PeSePol (18.09.2023 22:42:01)

Re: Доброго вечора, допоможіть з лабараторною

koala написав:
PeSePol написав:

На площині задані обмежена лініями x^2 +y^2=9, y = x/2, y <=0 область R, тобто не ==9, а <=9, тому що площа обмежена лініями, а не чітко дорівнює їм  :)
Це сфера радіусом 9 чогось там, всередині якої ви будуєте трикутник

Яка ще сфера, це ж площина. https://www.desmos.com/calculator/zlpa05gtnl

згоден, площина, обмежена колом (x,y). Вже фігнею займатися почав  :D

тоді, якщо y <=0 і y = x/2 то і х <=0, тобто центр кола, як мінімум (-9;-9), тому що координати є від'ємними числами. Треба ще перевірку на х <=0

6

Re: Доброго вечора, допоможіть з лабараторною

PeSePol написав:

На площині задані обмежена лініями x^2 +y^2=9, y = x/2, y <=0 область R, тобто не ==9, а <=9, тому що площа обмежена лініями, а не чітко дорівнює їм  :)
Це сфера радіусом 9 чогось там, всередині якої ви будуєте трикутник


Дякую

7

Re: Доброго вечора, допоможіть з лабараторною

PeSePol, https://uk.wikipedia.org/wiki/Площина

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

8

Re: Доброго вечора, допоможіть з лабараторною

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

9

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

покажіть код, знову

10

Re: Доброго вечора, допоможіть з лабараторною

FakiNyan написав:
fruktsashamaks написав:

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

покажіть код, знову

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f %f", &x1, &y1);

    printf("Введіть координату B:");
    scanf_s("%f %f", &x2, &y2);

    printf("Введіть координату C:");
    scanf_s("%f %f", &x3, &y3);

    if ((x1 * x1) + (y1 * y1) <= 9 && (x2 * x2) + (y2 * y2) <= 9 && (x3 * x3) + (y3 * y3) <= 9 &&
        y1 == x1 / 2 && y2 == x2 / 2 && y3 == x3 / 2 && y1 <= 0 && y2 <= 0 && y3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;
        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("0000\n");
    }

    return 0;
}

11 Востаннє редагувалося koala (19.09.2023 21:22:42)

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

Бо, ще раз, єдина точка, яка відповідає вашій умові - це ((-1.2*sqrt(5.0), -0.6*sqrt(5.0)). Ви взагалі читаєте, що вам пишуть?

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

12

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:
FakiNyan написав:
fruktsashamaks написав:

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

покажіть код, знову

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f %f", &x1, &y1);

    printf("Введіть координату B:");
    scanf_s("%f %f", &x2, &y2);

    printf("Введіть координату C:");
    scanf_s("%f %f", &x3, &y3);

    if ((x1 * x1) + (y1 * y1) <= 9 && (x2 * x2) + (y2 * y2) <= 9 && (x3 * x3) + (y3 * y3) <= 9 &&
        y1 == x1 / 2 && y2 == x2 / 2 && y3 == x3 / 2 && y1 <= 0 && y2 <= 0 && y3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;

        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("0000\n");
    }

    return 0;
}

1. Використовуйте тег код, коли пишете код
https://i.imgur.com/kQXII4E.png
2. Які дані ви вводили?

Подякували: fruktsashamaks, leofun012

13 Востаннє редагувалося PeSePol (19.09.2023 21:39:37)

Re: Доброго вечора, допоможіть з лабараторною

ось код

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f", &x1);
    y1 = x1/=2;
    printf("А: %f %f",x1,", %f",y1);

    printf("Введіть координату B:");
    scanf_s("%f", &x2); 
    y2 = x2/=2;
    printf("B: %f %f", x2, ", %f", y2);

    printf("Введіть координату C:");
    scanf_s("%f", &x3); 
    y3 = x3/=2;
    printf("C: %f %f", x3, ", %f", y3);

    printf("AA: %f", (x1 * x1) + (y1 * y1));
    printf("BB: %f", (x2 * x2) + (y2 * y2));
    printf("CC: %f", (x3 * x3) + (y3 * y3));

    if (((x1 * x1) + (y1 * y1)) <= 9 && ((x2 * x2) + (y2 * y2)) <= 9 && ((x3 * x3) + (y3 * y3)) <= 9 &&
        y1 <= 0 && y2 <= 0 && y3 <= 0 && x1 <= 0 && x2 <= 0 && x3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;

        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("0000\n");
    }

    return 0;
}

ось результат

http://replace.org.ua/extensions/om_images/img/6509f858b832c/66f8c6480bb8ca6e2d8bbeb90a2296de.png

Вибачаюся, що VS на москальській, сьогодні відкрив для цього коду, мову зміню

14

Re: Доброго вечора, допоможіть з лабараторною

koala написав:
fruktsashamaks написав:

Знову доброго вечора, є проблема, які числа не ввожу видає 0 :(

Бо, ще раз, єдина точка, яка відповідає вашій умові - це ((-1.2*sqrt(5.0), -0.6*sqrt(5.0)). Ви взагалі читаєте, що вам пишуть?

Вибачте, але я змінив умову, у коді :) . Тепер не x^2 + y^2 == 9 а x^2 + y^2 <= 9, тобто вся площина кола  *SCRATCH*

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

15

Re: Доброго вечора, допоможіть з лабараторною

PeSePol написав:

ось код

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f", &x1);
    y1 = x1/=2;
    printf("А: %f %f",x1,", %f",y1);

    printf("Введіть координату B:");
    scanf_s("%f", &x2); 
    y2 = x2/=2;
    printf("B: %f %f", x2, ", %f", y2);

    printf("Введіть координату C:");
    scanf_s("%f", &x3); 
    y3 = x3/=2;
    printf("C: %f %f", x3, ", %f", y3);

    printf("AA: %f", (x1 * x1) + (y1 * y1));
    printf("BB: %f", (x2 * x2) + (y2 * y2));
    printf("CC: %f", (x3 * x3) + (y3 * y3));

    if (((x1 * x1) + (y1 * y1)) <= 9 && ((x2 * x2) + (y2 * y2)) <= 9 && ((x3 * x3) + (y3 * y3)) <= 9 &&
        y1 <= 0 && y2 <= 0 && y3 <= 0 && x1 <= 0 && x2 <= 0 && x3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;

        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("0000\n");
    }

    return 0;
}

ось результат

http://replace.org.ua/extensions/om_images/img/6509f858b832c/66f8c6480bb8ca6e2d8bbeb90a2296de.png

Вибачаюся, що VS на москальській, сьогодні відкрив для цього коду, мову зміню


Ааа, точно, "y" ще до умови if має дорівнювати 1/2 * x, ось воно що.
Дуже вдячний вам і всім, хто витратив на мене час  :)

16

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:

Ааа, точно, "y" ще до умови if має дорівнювати 1/2 * x, ось воно що.

Так, і поділ від'ємних чисел /=

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

17

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:

Вибачте, але я змінив умову, у коді :) . Тепер не x^2 + y^2 == 9 а x^2 + y^2 <= 9, тобто вся площина кола  *SCRATCH*

А, перепрошую. Але лишилася третя умова, рівняння прямої y=x/2. Причому в умові сказано, що точки мають бути не на одній прямій.

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

18

Re: Доброго вечора, допоможіть з лабараторною

fruktsashamaks написав:
PeSePol написав:

ось код

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f", &x1);
    y1 = x1/=2;
    printf("А: %f %f",x1,", %f",y1);

    printf("Введіть координату B:");
    scanf_s("%f", &x2); 
    y2 = x2/=2;
    printf("B: %f %f", x2, ", %f", y2);

    printf("Введіть координату C:");
    scanf_s("%f", &x3); 
    y3 = x3/=2;
    printf("C: %f %f", x3, ", %f", y3);

    printf("AA: %f", (x1 * x1) + (y1 * y1));
    printf("BB: %f", (x2 * x2) + (y2 * y2));
    printf("CC: %f", (x3 * x3) + (y3 * y3));

    if (((x1 * x1) + (y1 * y1)) <= 9 && ((x2 * x2) + (y2 * y2)) <= 9 && ((x3 * x3) + (y3 * y3)) <= 9 &&
        y1 <= 0 && y2 <= 0 && y3 <= 0 && x1 <= 0 && x2 <= 0 && x3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
        b = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
        c = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

        p = (a + b + c) / 2;

        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("0000\n");
    }

    return 0;
}

ось результат

http://replace.org.ua/extensions/om_images/img/6509f858b832c/66f8c6480bb8ca6e2d8bbeb90a2296de.png

Вибачаюся, що VS на москальській, сьогодні відкрив для цього коду, мову зміню


Ааа, точно, "y" ще до умови if має дорівнювати 1/2 * x, ось воно що.
Дуже вдячний вам і всім, хто витратив на мене час  :)

printf("А: %f %f",x1,", %f",y1);

тут ніби лишній специфікатор ?

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

19

Re: Доброго вечора, допоможіть з лабараторною

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

20

Re: Доброго вечора, допоможіть з лабараторною

поправив

#include <stdio.h>
#include <math.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "ukr");

    float x1, x2, x3, y1, y2, y3;

    printf("Введіть координату А:");
    scanf_s("%f", &x1);
    y1 = x1 * 0.5;
    printf("А( %f , %f)\n",x1,y1);

    printf("Введіть координату B:");
    scanf_s("%f", &x2); 
    y2 = x2 * 0.5;
    printf("B( %f , %f)\n", x2, y2);

    printf("Введіть координату C:");
    scanf_s("%f", &x3); 
    y3 = x3 * 0.5;
    printf("C( %f , %f)\n", x3, y3);

    printf("AA: %f\n", (x1 * x1) + (y1 * y1));
    printf("BB: %f\n", (x2 * x2) + (y2 * y2));
    printf("CC: %f\n", (x3 * x3) + (y3 * y3));

    if (((x1 * x1) + (y1 * y1)) <= 9 && ((x2 * x2) + (y2 * y2)) <= 9 && ((x3 * x3) + (y3 * y3)) <= 9 &&
        y1 <= 0 && y2 <= 0 && y3 <= 0 && x1 <= 0 && x2 <= 0 && x3 <= 0)
    {
        float a, b, c, p, S, P;

        a = sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
        b = sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
        c = sqrt(((x1 - x3) * (x1 - x3)) + ((y1 - y3) * (y1 - y3)));
        printf("a = %f, b = %f, c = %f\n", a, b, c);

        p = (a + b + c) * 0.5;
        printf("p = %f\n", p);

        S = sqrt(p * (p - a) * (p - b) * (p - c));
        P = a + b + c;

        printf("S = %f, P = %f\n", S, P);
    }
    else
    {
        printf("Задані некоректні значення\n");
    }

    return 0;
}