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

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

Войти
Регистрация
Восстановить пароль
 
Кооошечка
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
#1

Найдите ошибку - C++

27.09.2010, 16:34. Просмотров 505. Ответов 4
Метки нет (Все метки)

Даны действительные числа x1, x2, x3, y1, y2, y3. Принадлежит ли начало координат треугольнику с вершинами (x1, y1), (x2, y2), (x3, y3)?
Проверьте пожалуйста код...какие б значения я не вводила всегда пишет принадлежит, не могу найти ошибку
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
#include <iostream>
int main()
{
    float x1,x2,x3,y1,y2,y3,s1,s2,s3,S;
    std::cout << "x1=";
    std::cin >> x1;
    std::cout << "y1=";
    std::cin >> y1;
    std::cout << "x2=";
    std::cin >> x2;
    std::cout << "y2=";
    std::cin >> y2;
    std::cout << "x3=";
    std::cin >> x3;
    std::cout << "y3=";
    std::cin >> y3;
    s1 =abs(((y2)*abs(x2)+(y3+y2)*abs(x3-x2)-(y3)*abs(x3))/2);
    s2 =abs(((y1)*abs(x1)+(y3)*abs(x3)-(y1+y3)*abs(x3-x1))/2);
    s3 =abs(((y1+y2)*abs(x2-x1)+(y2)*abs(x2)-(y1)*abs(x1))/2);
    S  =abs(((y1+y2)*abs(x2-x1)+(y3+y2)*abs(x3-x2)-(y1+y3)*abs(x3-x1))/2);
    std::cout<<"s1="<<s1<<" s2="<<s2<<" s3="<<s3<<" S="<<S;
    if ((S-s1-s2-s3)<0.00001) std::cout<<"prinadlejit";
    else std::cout<<"ne prinadlejit"<<"\n";
    system("pause");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2010, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найдите ошибку (C++):

Найдите ошибку - C++
#include &lt;iostream.h&gt; class cat { public: int itsAge; int itsWeight; }; int main () {

найдите ошибку - C++
программа создает обьект Вид спорта (Название, Вид, Мировой рекорд, Год, когда стал олимпийским и т.п.) при компиляции выдает ошибку...

Найдите ошибку! - C++
Компилятор пишет, что где-то 1 ошибка. #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; using namespace std; int main() ...

Найдите ошибку - C++
#include &lt;iostream.h&gt; int sort(int x, int n) {int i,j,tmp; for (i=1;i&lt;n;i++) for (j=n-1;j&gt;=i;j--) if (x&gt;x) {tmp=x; ...

Найдите ошибку - C++
#include &lt;iostream.h&gt; int Add (int x, int y) { cout &lt;&lt; &quot;In add(), received &quot; &lt;&lt; x &lt;&lt; &quot; and &quot; &lt;&lt; y &lt;&lt; &quot;\n&quot;; return (x+y); ...

Найдите ошибку! - C++
Добрый день! Не могу найти ошибку. #include &lt;iostream.h&gt; int main() { enum Days { Sunday, Monday, Tuesday, Wednesday,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dexter
285 / 145 / 16
Регистрация: 13.10.2009
Сообщений: 164
27.09.2010, 17:16 #2
Немного не понимаю что принимают значения s1,s2,s3 и S, но вот вкратце что может помочь:
1. Строка 22: if ((S-s1-s2-s3)<0.00001) - если значение будет отрицательное, то будет правда, как понимаю там порог для ошибки, потому надо брать его по модулю.
2. abs - возвращает абсолютное значение для 32битного int, потому нужно использовать fabs(), или преобразовать явно в флоат.

Если я правильно понял принцип, то s1,s2,s3 - площади треугольников в которых две вершины из нашего треугольника и третья 0, а S - общая площадь треугольника.
Если это так, то проще было бы писать так:

Код
s1 =fabs(x2*y3-x3*y2)/2;
s2 =fabs(x1*y3-x3*y1)/2;
s3 =fabs(x2*y1-x1*y2)/2;
S  =fabs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2;
0
Кооошечка
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
27.09.2010, 17:39  [ТС] #3
Цитата Сообщение от DexterUa Посмотреть сообщение
Немного не понимаю что принимают значения s1,s2,s3 и S, но вот вкратце что может помочь:
1. Строка 22: if ((S-s1-s2-s3)<0.00001) - если значение будет отрицательное, то будет правда, как понимаю там порог для ошибки, потому надо брать его по модулю.
2. abs - возвращает абсолютное значение для 32битного int, потому нужно использовать fabs(), или преобразовать явно в флоат.

Если я правильно понял принцип, то s1,s2,s3 - площади треугольников в которых две вершины из нашего треугольника и третья 0, а S - общая площадь треугольника.
Если это так, то проще было бы писать так:

Код
s1 =fabs(x2*y3-x3*y2)/2;
s2 =fabs(x1*y3-x3*y1)/2;
s3 =fabs(x2*y1-x1*y2)/2;
S  =fabs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2;
Спасибо, дельный совет, но ни чего не поменялось, всё равно пишет принадлежит в любом случае
0
Dexter
285 / 145 / 16
Регистрация: 13.10.2009
Сообщений: 164
27.09.2010, 17:41 #4
а поменяли ли вы if ((S-s1-s2-s3)<0.00001) на if (fabs(S-s1-s2-s3)<0.00001)?
1
Кооошечка
0 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
27.09.2010, 17:54  [ТС] #5
Цитата Сообщение от DexterUa Посмотреть сообщение
а поменяли ли вы if ((S-s1-s2-s3)<0.00001) на if (fabs(S-s1-s2-s3)<0.00001)?
Огромнейшее спасибо я поменяла но не правильно написала написала abs)) теперь всё прекрасно работает. Очень Вам презнательна
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2010, 17:54
Привет! Вот еще темы с ответами:

Найдите ошибку - C++
Вот пример Вот решение #include&lt;iostream.h&gt; #include&lt;math.h&gt; void main ()

Найдите ошибку... - C++
C++ изучать начал недавно. Вот написал программу и столкнулся с проблемой. #include &lt;iostream.h&gt; class Employee { ...

найдите ошибку - C++
программа еще не дописана но компилятор уже ругается.....CODE BLOCKS #include &lt;windows.h&gt; #include &lt;iostream.h&gt; #include &lt;stdio.h&gt;...

Найдите ошибку - C++
Помогите найти ошибку в программе /*prog222.pas Программа решает следующую задачу: Даны вещественные положительные a, b, c, d, e,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.09.2010, 17:54
Ответ Создать тему
Опции темы

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