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

прога неверно считает и выводит - C++

Восстановить пароль Регистрация
 
diantre
Сообщений: n/a
05.06.2013, 13:03     прога неверно считает и выводит #1
Собственно сабж, с меня сотни нефти. багрепорт молчит, ошибка в логике. Программа неправильно считает, не могу понять в чем ошибка


Формулировка условия задачи.

Из множества прямых М, заданных коэффициентами уравнения A*x + B*y + C, сформировать множество прямых P принадлежащих множеству M, расстояние от которых до точки А(Xа,Ya) принадлежит заданному интервалу, и упорядочить прямые в порядке возрастания расстояний.

Пример решения задачи.

Пусть заданы уравнения прямых М:
3X+6y+15=0(I)
5x+9y+25=0(II)
x+4y+1=0(III)
Пусть задана точка A(3,4)
Пусть величина L=6
K=sqrt(A^2+B^2)
Тогда расстояние R от прямых I , II и III до точки D будет вычисляться по формуле:
R=|A*Xa+B*Ya+C|/K
(1)
K=6.7
R=48/6.7=7.16
(II)
K=10.2
R=76/10.2=7.4
(III)
K=4.12
R=20/4.12=4.8
Таким образом, расстояние от прямой I, II и III до точки A больше заданной величины L, а от прямой III – меньше.

Способ получения результатов по исходным данным.

Для решения задачи необходимо из множества заданных прямых Ax+By+C=0
выделить те, расстояние от которых до точки D (Xa,Ya) больше заданной величины.
Для этого по формуле R=|A*Xa+B*Ya+C|/K, где K= sqrt(A^2+B^2) вычисляем расстояния от точки до каждой прямой. Выделяем прямые, удовлетворяющие задаче, путем проверки условия R(i)>L.
Для упорядочивания прямых в порядке убывания расстояния используется следующий метод:
Из двух расстояний R(i) и R(i+1) проверкой условия R(i)<R(i+1) находится наибольшее. Если наибольшее расстояние стоит на месте i+1 ,то с помощью дополнительной переменной меняются местами значения переменных R(i) и R(i+1).Эти действия повторяются n раз.

Исходные данные и форма их представления.

Множество коэффициентов A,B,C представляются как 3 одномерных массива вещественного типа размера n,где n равно количеству исходных прямых.




3 6 3
5 9 8
1 4 1
3 6 7
2 10 9




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
#pragma hdrstop
#include <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <cmath>
#include <iostream>
using namespace std;
 
FILE *kof, *res;
float a[30],b[30],c[30], R[30];
float l, x0, y0, x1, y1;
int kp,k;
void vvod(int s);
void main()
{
int o;
clrscr();
printf ("Vzyat dannie iz faila?\n");
printf ("Da=1, Net=2\n");
scanf("%d",&o);
vvod(o);
fclose(kof);
res = fopen("RESULT.txt","w");
fprintf(res, "\Ishodnie pryamie\n A B C\n");
 
 
 
 
if (kof==0)
{ for (int i=0;i<kp;i++)
printf("%.3f %.3f %.3f\n", a[i],b[i],c[i]);
 
for (int i=0; i<kp; i++)
{     for (int i=0; i<kp; i++)
{for (int j=kp-1; j>i; j--)
{
if (fabs((a[j]*x0+b[j]*y0+c[j])/(pow(a[j]*a[j]+b[j]*b[j],0.5))<fabs((a[j-1]*x0+b[j-1]*y0+c[j-1])/(pow(a[j-1]*a[j-1]+b[j-1]*b[j-1],0.5)))))
{     swap (a[j], a[j-1]);
swap (b[j], b[j-1]);
swap (c[j], c[j-1]);
}
}
}
printf ("\n * * * * * * * * * * *\n");
R[i] = fabs((a[i]*x0+b[i]*y0+c[i])/(pow(a[i]*a[i]+b[i]*b[i],0.5)));
if (R[i]<l)
{
printf("%.3f %.3f %.3f\n",a[i],b[i],c[i]);
printf("Rasstoyanie do to4ki A %.3f\n", R[i]); }
 
 
 
 
 
 
}
}
else
 
{
 
printf ("\n BBedite koordinati to4ki A\n");
scanf("%f%f",&x0,&y0);
printf ("BBedite L\n");
scanf ("%f",&l);
for (int i=0;i>kp;i++)
 
fprintf(res, "%.3f %.3f %.3f\n", a[i],b[i],c[i]);
fprintf (res, "*******Analysis: \n");
for (int i=0; i<kp; i++)
 
{      for (int i=0; i<kp; i++)
{for (int j=kp-1; j>i; j--)
{   R[i] = fabs((a[i]*x0+b[i]*y0+c[i])/(pow(a[i]*a[i]+b[i]*b[i],0.5)));
if (R[j]>R[j-1])
{     swap (a[j], a[j-1]);
swap (b[j], b[j-1]);
swap (c[j], c[j-1]);
}
}
}
 
if (R[i]<l)
{
fprintf(res,  "%.3f %.3f %.3f\n",a[i],b[i],c[i]);
fprintf(res, "Rasstoyanie do to4ki %.3f\n", R[i]);
}
}
 
fprintf(res, "Ostalnie pryamie ne udovletvoryut usloviu!!\n");
 
printf("ISHODNIKI.txt had been read \n");
printf("Results saved \n");
}
printf ("\n*  *  *  *  *  *  *  *  *\n");
printf ("*  *  *  *  *  *  *  *  *\n");
 
printf("Program has been finished \n");
printf("Enter any key to exit \n");
getch();
}
void vvod (int s)
{
if (s==1)
{ kof = fopen("ISHODNIKI.txt","r");
if(kof==0)
{ printf ("\n FILE NE NAIDEN!");
}
else  {
int i=0;
while(!feof(kof))
{
fscanf(kof, "%f %f %f", &a[i], &b[i], &c[i]);
i++;
}
kp=i;
 
 
}     }
else { if
(s==2)
{printf ("\n BBedite koordinati to4ki D\n");
scanf("%f%f",&x0,&y0);
printf("BBedite koli4estvo pryamix\n");
scanf ("%d",&kp);
printf ("BBedite L\n");
scanf ("%f",&l);
for (int i=0; i<kp; i++)
{
printf("BBedite Parametru A,B,C");
printf ("\n************************\n");
scanf("%f%f%f",&a[i],&b[i],&c[i]);
}
}
else printf ("ERROR\n");
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2013, 13:03     прога неверно считает и выводит
Посмотрите здесь:

C++ Программа , которая считает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв
C++ надо что то добавить!!прога просто выводит список групп,учеников и первых 3 оценок.надо чтобы прога в конце показывала по убыванию средего балла
C++ прога, которая по нажатой клавише выводит ascii - код символа это клавиши или scan - код самой клавиши.
Неверно считает C++
Испраить ошибку - не считает(не выводит ответ) C++
с++,циклическая очередь, сразу норм выводит, а потом на где-то логика нарушается и неправильно выводит C++
Метод ранга. Неверно выводит результат C++
данный код считает количество нечетных элементов в столбце , но он считает не для каждого столбца , как сделать , чтобы считал для каждого?подскажите C++

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

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

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