Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Выяснить, сколько натуральных чисел состоит из нечётных цифр и сколько из различных цифр https://www.cyberforum.ru/ c-beginners/ thread1717513.html
Выяснить, сколько натуральных чисел между n и m>n состоит из нечётных цифр и сколько из различных цифр. Напечатать сами числа и их количества. Идей на данную программу просто нет...Помогите пж...
Задачка на считывание и запись чисел в файл C (СИ)
Доброго времени! Помогите с задачкой. Задачка на поиск данных в файле: "Осуществить: 1 – добавление, 2 – поиск (фамилия, з/п, должность)вывод строки ". Не вижу в коде ошибки, но в случае...
C (СИ) Точки заменить их порядковым номером https://www.cyberforum.ru/ c-beginners/ thread1717407.html
Задание звучит так: заменить все точки цифрами, с соответствующими им номерами. Написал этот код. Но тут проверка уже на самом выводе. Подскажите, как поменять в самой строке? #include "stdafx.h"...
C (СИ) Выбор трех точек по условию https://www.cyberforum.ru/ c-beginners/ thread1717375.html
Среди данного множества точек на плоскости выбрать 3 такие, чтобы треугольник, вершинами которого эти точки есть, содержал бы наибольшее количество точек множества. Может кто-то помочь?
Создать игру "кто хочет стать миллионером" C (СИ)
здравствуйте, можите помочь создать игру "кто хочет стать миллионером ", вся проблема в том что нужно создать в графическое меню,и брать вопросы с файла
C (СИ) ArtMoney. Тип переменной - "С точкой 4 байта". Что за тип? https://www.cyberforum.ru/ c-beginners/ thread1717169.html
Привет! В чужой программе имеется 4х байтовая переменная (значение (hex) - 00 00 10 42). ArtMoney выводит её правильно (тип - "С точкой 4 байта") - 36.0. Но если попробовать преобразовать её через...
C (СИ) Исключить из строки группы символов, расположенные между скобками [, ] https://www.cyberforum.ru/ c-beginners/ thread1717047.html
Можете помочь решить? С объяснением пожалуйста. На чистом СИ | Дана строка символов. Исключить из этой строки группы символов, расположенные между скобками . Сами скобки тоже должны быть исключены....
Поиск рейсов между заданными пунктами C (СИ)
Не могу понять, почему не работает функция find_punkt, она должна обеспечить поиск рейсов между заданными пунктами. И если есть возможность, помогите допилить функцию time, она должна искать три...
C (СИ) Сформировать матрицу, у которой в каждом столбце содержатся все числа из исходного набора https://www.cyberforum.ru/ c-beginners/ thread1716867.html
Даны целые положительные числа M, N и набор из M чисел. Сформировать матрицу размера M × N, у которой в каждом столбце содержатся все числа из исходного набора (в том же порядке).
C (СИ) Подсчитать количество различных слов, входящих в заданный текст С клавиатуры вводится текстовая строка. Написать программу, которая подсчитывает количество различных слов, входящих в заданный текст; выводит на экран количество использованных символов; удаляет все... https://www.cyberforum.ru/ c-beginners/ thread1716756.html
Дано слово. Проверить, можно ли его одинаково прочитать с права на лево и наоборот C (СИ)
Дано слово. Проверить, можно ли его одинаково прочитать с права на лево и наоборот.
C (СИ) Дано слово «информатика». Путем склеивания и вырезания получить слова форма и мак https://www.cyberforum.ru/ c-beginners/ thread1716753.html
Дано слово «информатика». Путем склеивания и вырезания получить слова «форма» и «мак».
3 / 3 / 5
Регистрация: 07.12.2013
Сообщений: 189
25.04.2016, 18:49  [ТС] 0

Найти выпуклую оболочку множества - C (СИ) - Ответ 9068697

25.04.2016, 18:49. Показов 575. Ответов 1
Метки (Все метки)

Ответ

Последний раз апаю, может сейчас повезет.
Вот "новый" код. Работает почти. Где ошибка - не понимаю.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
int main()
{
    int masX[50], masY[50], i,j;
    
    srand(time(NULL));
    
    for (i=0; i<6; i++)
    {
        masX[i]=rand()%10;
        masY[i]=rand()%10;
        printf("(%d; %d)\n", masX[i], masY[i]); 
    }
    
    int lowest, lowest_id, dop_masX[50], dop_masY[50], id_minangle;
    double minangle, angle;
    
    lowest_id=0;
    
    lowest=masY[0];
    
    for (i=0; i<6; i++)
    if (masY[i]<lowest) 
    {
    lowest = masY[i];
    
    lowest_id=i;
    }
    dop_masX[0]=masX[lowest_id];
    
    dop_masY[0]=masY[lowest_id];
    
    printf("Lowest = %d\n", lowest_id);
    //printf("0 element = (%d;%d)\n", *masX, *masY);
    i=0;
    
    minangle=acos(0)-atan(double(abs(masX[i]-masX[lowest_id]))/double(abs(masY[i]-masY[lowest_id]))); //определяется арккотангенс, т.к с арктангенсом были проблемы, работает 1 раз, начальное значение
    
    if (masX[i]<=masX[lowest_id]) minangle=3.14-minangle; // если во второй четверти - 2пи - угол, иначе не работает)
    
        if (masY[i]==masY[lowest_id]) masX[i]>masX[lowest_id] ? minangle=0 : minangle=1.57*2; //если совпадает ордината, определяем, справа или слева
    
    printf("Minangle = %lf\n", minangle);
    
    for (j=1; j<6; j++)
    {
        printf("\n\n\n");
        
        minangle=acos(0)-atan(double(abs(masX[j]-masX[lowest_id]))/double(abs(masY[j]-masY[lowest_id]))); //все тоже самое, каждую итерацию расчитываем минимальный угол
        
        if (masX[j]<=masX[lowest_id]) minangle=3.14-minangle;
        
        if (masY[j]==masY[lowest_id]) masX[j]>masX[lowest_id] ? minangle=0 : minangle=1.57*2;
    //  if (j!=1) minange
    for (i=0; i<6; i++)
    {
        
        if (i==lowest_id) continue; //нет смысла проверять низшую точку
        
        if (masX[i]==-1 && masY[i]==-1) continue; //пропуск "удаленных" точек
        
        angle=acos(0)-atan(double(abs(masX[i]-masX[lowest_id]))/double(abs(masY[i]-masY[lowest_id]))); // для сравнения с внешним
        
        printf("%d - %d / %d - %d\n", masX[i], masX[lowest_id], masY[i], masY[lowest_id]); //отладка
        
        if (masX[i]<=masX[lowest_id]) angle=3.14-angle; 
        
        if (masY[i]==masY[lowest_id]) masX[i]>masX[lowest_id] ? angle=0 : angle=1.57*2;
        
        printf("angle[%d] = %lf\n",i, angle);
        
        if (angle<minangle) //минимальный угол 
        {
        
        minangle=angle;
        
        id_minangle=i;
        }
    }
    
    dop_masX[j]=masX[id_minangle];
    //запись в конечный, отсортированый массив
    dop_masY[j]=masY[id_minangle];
    if (j==5) //Маленький костыль - на практике почему-то не записывает последнюю точку, это что бы наверняка :)
    {
        for (int k=0; k<6; k++) 
        {
        if (masX[k]!=-1)
        {
        dop_masX[j]=masX[k];
    
        dop_masY[j]=masY[k];
        }
    
        }
    
    }
    masX[id_minangle]=-1; //велосипед на квадратных колесах, ведь удалить элемент массива нельзя, тогда будем игнорить
    
    masY[id_minangle]=-1;
    
    printf("Min = %lf with id %d\n", minangle, id_minangle);
    
    }
    
    for (i=0; i<6; i++)
    printf("(%d; %d)\n", dop_masX[i], dop_masY[i]);
}


Вернуться к обсуждению:
Найти выпуклую оболочку множества C (СИ)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2016, 18:49
Готовые ответы и решения:

Найти выпуклую оболочку множества
Задано множество N точек. Ai=1..N.Найти выпуклую оболочку этого множества,т.е. те точки,которые...

Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества
Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества, то есть выпуклый...

Дано n точек на плоскости. Построить их выпуклую оболочку - минимальную выпуклую фигуру, их содержащую
Дано n точек на плоскости. Построить их выпуклую оболочку - минимальную выпуклую фигуру, их...

Задано множество точек в трехмерном пространстве, найти выпуклую оболочку наименьшего объема
Задано множество точек в трехмерном пространстве. Найти его выпуклую оболочку, то есть множество...

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2016, 18:49

Построить выпуклую замкнутую оболочку
Построить выпуклую замкнутую оболочку y=1-x^(4/5)

пжста найдите ошибку в задаче на выпуклую оболочку
Здравствуйте,уже 2 дня не могу найти ошибку в коде,валится на 5 тесте. Задача: Даны точки(их...

Найти линейную оболочку векторов
Найти линейную оболочку векторов - элементов векторного пространства (2,2) - матриц: A=...

Найти проекцию вектора на линейную оболочку
дан вектор x = (14,16,2,5) . Нужно найти проекцию вектора x на L = (a,b) где a = (7,3,1,2) b =...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru