Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2018, 09:07   #1
helu
 
Регистрация: 02.10.2018
Сообщений: 9
По умолчанию Проверка на выпуклость многоугольника - C (СИ).Помогите разобраться с кодом,можно ли было как то полегче?

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
#define size 100

struct koordinati
{
double x, y;
};

koordinati vector_koord(koordinati a, koordinati b);

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
koordinati mas[size];
koordinati vec1, vec2;
int vershini, i;

printf("Введите количество вершин: ");
vershini = getche() - 48;
putchar('\n');

double vect_dob,znak,post_znak;
int perevir;

perevir = 1;

for (i = 0; i < vershini; i++){
printf("%d - а точка\n", i+1);
printf("x = ");
scanf("%lf", &mas[i].x);
printf("y = ");
scanf("%lf", &mas[i].y);
putchar('\n');
}

vec1 = vector_koord (mas[vershini-1],mas[0]);
vec2 = vector_koord (mas[0],mas[1]);

vect_dob = vec1.x * vec2.y - vec2.x * vec1.y;
znak = vect_dob/fabs(vect_dob);

post_znak = znak;

vec1 = vec2;

for (i = 1; i < vershini - 1; i++){
vec2 = vector_koord (mas[i], mas[i+1]);
vect_dob = vec1.x * vec2.y - vec2.x * vec1.y;

znak = vect_dob / fabs (vect_dob);
if (znak != post_znak) {
printf ("Точка %d создает впуклость\n", i + 1);
perevir = 0;
}
vec1 = vec2;
}
i--;
vec1 = vec2;
vec2 = vector_koord (mas[i], mas[0]);
vect_dob = vec1.x * vec2.y - vec2.x * vec1.y;

znak = vect_dob / fabs (vect_dob);
if (znak != post_znak) {
printf ("Точка %d создает впуклость!\n", i + 2);
perevir = 0;
}

printf ("%d-угольник ",vershini);
if (perevir)
printf("выпуклый\n");
else
printf("впуклый\n");
getch();
}

koordinati vector_koord (koordinati a, koordinati b){
koordinati dod;
dod.x = b.x - a.x;
dod.y = b.y - a.y;
return dod;
}
helu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом sarsen PHP 2 11.11.2017 09:17
Помогите разобраться с кодом! Astiya Помощь студентам 3 29.03.2015 15:33
Требуется определить выпуклость многоугольника по координатам на Си Gerold_103 Помощь студентам 0 03.10.2012 16:13
Как можно собрать Builder чтобы можно было бы заменять большие части кода? cargo29 Общие вопросы Delphi 17 18.02.2011 20:47