Форум программистов, компьютерный форум CyberForum.ru

Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины - C++

Восстановить пароль Регистрация
 
Loose My Braines
 Аватар для Loose My Braines
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
29.12.2008, 06:28     Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины #1
Формулировка задания: Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины и упорядочить их в порядке убывания расстояния.

Математическая постановка задачи:
Дано:
Входные данные – значение переменной коэффициентов А, В и С, наибольшее расстояние от точек множества Р до прямой (D), массив E, содержащий координаты точек по оси Х, массив F, содержащий координаты точек по оси У.
Выходные данные – массив Р, содержащий точки в порядке убывания расстояния между ними и заданной прямой.
Способ решения:
1) Ввод коэффициентов А, В и С, расстояния от точек множества Р до прямой (D),при этом если А=0, В=0, то и С=0;
2) Т.к. расстояние от точки до прямой определяется выражением:
, где и - координаты точки, то проверяем R на выполнение условия . Точки, удовлетворяющие этому условию, входят в данное множество Р, остальные нет.
3) Сортировка точек, в порядке убывания расстояния;

Ну помогите!!!сортирооооовка!!!
Ввод и вывод с файлов!!!

Добавлено через 5 минут 8 секунд
вот текст,но мне надо,чтобы ввод из разных файлов!!!!!!!!
и там еще како-то косяк(((
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
 
#define MAX_LEN 50
 
float A;
float B;
float C;
float D;
 
float E[MAX_LEN];
unsigned int E_Len = 0;
float F[MAX_LEN];
unsigned int F_Len = 0;
 
struct Point
{
float x;
float y;
float len;
};
 
Point P[MAX_LEN];
unsigned int P_Len = 0;
 
char GetVal( char buf[] )
{
if( strcmp(buf,"A=")==0 )
return 'A';
if( strcmp(buf,"B=")==0 )
return 'B';
if( strcmp(buf,"C=")==0 )
return 'C';
if( strcmp(buf,"D=")==0 )
return 'D';
if( strcmp(buf,"E=")==0 )
return 'E';
if( strcmp(buf,"F=")==0 )
return 'F';
return 0;
}
 
float LenToLine( unsigned int i )
{
float chisl = A*E[i]+B*F[i]+C;
float znam = sqrt(A*A+B*B);
if(chisl<0) chisl*=-1;
 
return chisl/znam;
}
 
void main(void)
{
clrscr();
FILE* input = fopen("input.txt","r");
if(!input)
{
printf("Cannot open input.txt\n");
return;
}
 
char ch;
char buf[256];
char read_flag = 0;
int buf_pos = 0;
fseek(input, 0, SEEK_SET);
do
{
ch = fgetc(input);
buf[buf_pos] = ch;
buf[buf_pos+1] = '\0';
buf_pos++;
 
if( read_flag!=0 && !((ch>=48 && ch<=57)||ch==46||ch==45) )
{
buf[buf_pos] = '\0';
float res = atof(buf);
switch(read_flag)
{
case 'A':
A = res;
break;
case 'B':
B = res;
break;
case 'C':
C = res;
break;
case 'D':
D = res;
break;
case 'E':
E[E_Len] = res;
E_Len++;
break;
case 'F':
F[F_Len] = res;
F_Len++;
break;
}
buf_pos=0;
buf[buf_pos] = '\0';
if(ch!=';')
read_flag=0;
}
 
char res = GetVal(buf);
if( res!=0 )
{
read_flag = res;
buf_pos=0;
buf[buf_pos] = '\0';
}
} while (ch != EOF);
fclose(input);
if(A==0&&B==0) C=0;
 
printf("Ishodnui dannue:\n");
printf("A=%f\nB=%f\nC=%f\nD=%f\n",A,B,C,D);
int i;
for( i=0; i<E_Len; i++)
{
printf(" %d = (%f;%f) len=%f\n",i,E[i],F[i],LenToLine(i));
}
printf("\nVuhodnue dannue:\n");
 
P_Len = 0;
for( i=0; i<E_Len; i++ )
{
if( LenToLine(i) < D )
{
P[P_Len].x = E[i];
P[P_Len].y = F[i];
P[P_Len].len = LenToLine(i);
P_Len++;
}
}
 
if(P_Len==0)
{
printf("Net takih vershin.\n");
FILE* output = fopen("output.txt","w");
fprintf(output,"Net takih vershin.\n");
fclose(output);
getch();
return;
}
 
int flag = 0;
int j;
Point TP;
do
{
flag = 1;
for( j = 0; j<P_Len-1; j++)
{
if(P[j].len<P[j+1].len)
{
TP = P[j];
P[j] = P[j+1];
P[j+1] = TP;
flag = 0;
}
}
}while(flag!=1);
 
for(i=0; i<P_Len; i++)
{
printf(" %d = (%f;%f) len=%f\n",i,P[i].x,P[i].y,P[i].len);
}
 
FILE* output = fopen("output.txt","w");
for( i=0; i< P_Len; i++)
{
fprintf(output, "P[%d] x=%f y=%f\n",i,P[i].x,P[i].y);
}
fclose(output);
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2008, 06:28     Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины
Посмотрите здесь:

C++ задано множество n точек на плоскости своими координатами.
C++ Множества точек на плоскости
C++ Множество точек на плоскости
C++ Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества
C++ На плоскости задано множество точек. Выбрать три различные точки так, чтобы проходящая через них окружность делила это множество на группы
Дано множество точек на плоскости C++
C++ Дано множество точек на плоскости, заданных полярными координатами. Получить декартовы координаты этих точек
C++ Среди заданных точек на плоскости найти ту, у которой расстояние суммы равно наибольшему от остальных точек
C++ Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества
C++ На плоскости задано множество N (1<N≤20) материальных точек
Из множества точек на плоскости найти точки, образующие параллелограмм с наибольшим количеством точек внутри C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 10:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru