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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Loose My Braines
0 / 0 / 0
Регистрация: 29.12.2008
Сообщений: 12
#1

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

29.12.2008, 06:28. Просмотров 966. Ответов 0
Метки нет (Все метки)

Формулировка задания: Из множества точек на плоскости сформировать множество точек , расстояние от которых до прямой меньше заданной величины и упорядочить их в порядке убывания расстояния.

Математическая постановка задачи:
Дано:
Входные данные – значение переменной коэффициентов А, В и С, наибольшее расстояние от точек множества Р до прямой (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++
Заданное множество точек на плоскости. Найти выпуклую оболочку этого множества, то есть выпуклый многоугольник с вершинами в некоторых...

Множество точек на плоскости - C++
Даны 2 множества точек на плоскости. Выбрать 3 различные точки первого множества так , что бы треугольник с вершинами в этих точках...

Дано множество точек на плоскости - C++
Пожалуйста, если не сложно, нужен алгоритм с объяснением!! Заранее спасибо)) Дано множество точек на плоскости,заданных полярными...

Множества точек на плоскости - C++
Помогите пожалуйста решить задачу ну или объясните принцип решения. Даны 2 множества точек на плоскости. Выбрать 3 различные точки...

Расстояние между двумя заданными множествами точек на плоскости - C++
Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

задано множество n точек на плоскости своими координатами. - C++
задано множество n точек на плоскости своими координатами. найти и вывести на экран все точки, симметричные относительно координатных осей...

На плоскости задано множество N (1<N≤20) материальных точек - C++
Если честно я как то не могу полностью понять суть задачи, помогите желательно кодом мне срочно надо Заранее спасибо) На плоскости...

Даны два множества точек на плоскости - C++
Не хотят ставить зачёт=(( Помогите, хотя бы как начать этот ужас?? Заранее благодарен) Даны два множества точек на плоскости....

написать программу которая рассчитывает расстояние N точек на плоскости. Координаты х и у. - C++
Значит занимаемся программированием 3ье занятие а препод в институте уже задает огого задачки)) Вот в чем проблема. Нужно написать...

Найти наименьшее расстояние от точки В до любой из точек множества А - C++
дано множество точек с координатами(х,у) и точка В с координатами(х,у), лежащая в другом множестве. Найти наименьшее расстояние от точки...


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

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

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