Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

09.12.2008, 00:21
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
Код:
#! usr/bin/env python
#! -*- coding: utf-8 -*-
x11=3
x21=7
x31=12
x12=5
x22=7
x32=8
y11=1
y21=9
y31=1
y12=3
y22=5
y32=3
try:
x11=float(x11)
x21=float(x21)
x31=float(x31)
x12=float(x12)
x22=float(x22)
x32=float(x32)
y11=float(y11)
y21=float(y21)
y31=float(y31)
y12=float(y12)
y22=float(y22)
y32=float(y32)
except ValueError:
print "Error!"
## проверка существования треугольников
A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике
B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике
A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике
A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике
B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике
A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике
if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1:
print "Error"
elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2:
print "Error"
else:
a=0
## построение отрезков от вершины второго к вершинам первого
A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5
A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5
A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5
## вычисление площадей треугольников
S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона
S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона
S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона
S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона
S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона
## построение отрезков от вершины первого к вершинам второго
A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5
A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5
A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5
## вычисление площадей треугольников
S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона
S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона
S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона
## сравнение площадей треугольников
if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1:
print "Second triangle in first"
elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2:
print "First triangle in second"
else:
print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2)
оТработал нормально, вышло 3.000000 | 9.000000 блин, в упор не вижу проблемы у себя, ткни носом плиз, цикл то работает норм, проверял то уже, где проблема ?
|
|
|

09.12.2008, 00:21
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
Провел на форуме: 89596
Репутация:
21
|
|
Сообщение от login999
Короче, читаю твой цикл, как его вижу я :
Код:
if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1:
print "Second triangle in first"
elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2:
print "First triangle in second"
else:
print "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2)
ЕСЛИ
S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1, то : напечатать "Second triangle in first"
ЕЩЕ ЕСЛИ
S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2, то : напечатать "First triangle in second"
ЕЩЕ (во всех остальных случаях)
НАПЕЧАТАТЬ "%f | %f" %(S_A2_B2_C2, S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2) - где здесь сравнение ?
в первых двух ветках сравнение есть, в третьей же ветке сравнения нету, есть только задание вывода на печать, цикл отрабатывает все так как ему указано, скажи, что должна делать третья ветка ?
Дело в том, что если убрать третью ветку, то прога вообще ничего не выдаёт (то есть, она выполняет первое сравнение - оно у неё почему-то не выполняется, выполняет второе сравнение - оно не выполняется (это правильно, так как там и должны получаться разные числа)), а затем она тупо встаёт и ничего не делает... Последнюю ветку я сделал, для того, чтобы понять почему она встаёт и заодно просмотреть значения переменных во время выполнения проги (это пока просто для тестирования сделано).
|
|
|

09.12.2008, 00:27
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
По заданным тобой данным выполняется только 3 условие, все она нормально работает, я в ней в упор не вижу того что видишь ты, хз короче
|
|
|

09.12.2008, 00:32
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
Провел на форуме: 89596
Репутация:
21
|
|
Сообщение от login999
По заданным тобой данным выполняется только 3 условие, все она нормально работает, я в ней в упор не вижу того что видишь ты, хз короче
Код:
#! usr/bin/env python
#! -*- coding: utf-8 -*-
x11=3
x21=7
x31=12
x12=5
x22=7
x32=8
y11=1
y21=9
y31=1
y12=3
y22=5
y32=3
try:
x11=float(x11)
x21=float(x21)
x31=float(x31)
x12=float(x12)
x22=float(x22)
x32=float(x32)
y11=float(y11)
y21=float(y21)
y31=float(y31)
y12=float(y12)
y22=float(y22)
y32=float(y32)
except ValueError:
print "Error!"
## проверка существования треугольников
A1_B1=((x21-x11)**2+(y21-y11)**2)**0.5 ## нахождение длины AB в первом треугольнике
B1_C1=((x31-x21)**2+(y31-y21)**2)**0.5 ## нахождение длины BC в первом треугольнике
A1_C1=((x31-x11)**2+(y31-y11)**2)**0.5 ## нахождение длины AC в первом треугольнике
A2_B2=((x22-x12)**2+(y22-y12)**2)**0.5 ## нахождение длины AB вo втором треугольнике
B2_C2=((x32-x22)**2+(y32-y22)**2)**0.5 ## нахождение длины BC во втором треугольнике
A2_C2=((x32-x12)**2+(y32-y12)**2)**0.5 ## нахождение длины AC во втором треугольнике
if A1_B1+B1_C1<=A1_C1 or A1_B1+A1_C1<=B1_C1 or A1_C1+B1_C1<=A1_B1:
print "Error"
elif A2_B2+B2_C2<=A2_C2 or A2_B2+A2_C2<=B2_C2 or A2_C2+B2_C2<=A2_B2:
print "Error"
else:
a=0
## построение отрезков от вершины второго к вершинам первого
A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5
A2_B1=((x21-x12)**2+(y21-y12)**2)**0.5
A2_C1=((x31-x12)**2+(y31-y12)**2)**0.5
## вычисление площадей треугольников
S_A1_B1_C1=(((A1_B1+B1_C1+A1_C1)/2)*(((A1_B1+B1_C1+A1_C1)/2)-A1_B1)*(((A1_B1+B1_C1+A1_C1)/2)-B1_C1)*(((A1_B1+B1_C1+A1_C1)/2)-A1_C1))**0.5 ## площадь первого треугольника по формуле Герона
S_A2_B2_C2=(((A2_B2+B2_C2+A2_C2)/2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_B2)*(((A2_B2+B2_C2+A2_C2)/2)-B2_C2)*(((A2_B2+B2_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь второго треугольника по формуле Герона
S_A2_A1_C1=(((A2_A1+A1_C1+A2_C1)/2)*(((A2_A1+A1_C1+A2_C1)/2)-A2_A1)*(((A2_A1+A1_C1+A2_C1)/2)-A1_C1)*(((A2_A1+A1_C1+A2_C1)/2)-A2_C1))**0.5 ## площадь треугольника A2_A1_C1 по формуле Герона
S_A2_A1_B1=(((A2_A1+A1_B1+A2_B1)/2)*(((A2_A1+A1_B1+A2_B1)/2)-A2_A1)*(((A2_A1+A1_B1+A2_B1)/2)-A1_B1)*(((A2_A1+A1_B1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_A1_B1 по формуле Герона
S_A2_C1_B1=(((A2_C1+B1_C1+A2_B1)/2)*(((A2_C1+B1_C1+A2_B1)/2)-A2_C1)*(((A2_C1+B1_C1+A2_B1)/2)-B1_C1)*(((A2_C1+B1_C1+A2_B1)/2)-A2_B1))**0.5 ## площадь треугольника A2_C1_B1 по формуле Герона
## построение отрезков от вершины первого к вершинам второго
A2_A1=((x11-x12)**2+(y11-y12)**2)**0.5
A1_B2=((x11-x22)**2+(y11-y22)**2)**0.5
A1_C2=((x11-x32)**2+(y11-y32)**2)**0.5
## вычисление площадей треугольников
S_A1_A2_B2=(((A2_A1+A1_B2+A2_B2)/2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_A1)*(((A2_A1+A1_B2+A2_B2)/2)-A1_B2)*(((A2_A1+A1_B2+A2_B2)/2)-A2_B2))**0.5 ## площадь треугольника A2_A1_B2 по формуле Герона
S_A1_B2_C2=(((A1_B2+A1_C2+B2_C2)/2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_B2)*(((A1_B2+A1_C2+B2_C2)/2)-A1_C2)*(((A1_B2+A1_C2+B2_C2)/2)-B2_C2))**0.5 ## площадь треугольника A1_B2_C2 по формуле Герона
S_A1_A2_C2=(((A2_A1+A1_C2+A2_C2)/2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_A1)*(((A2_A1+A1_C2+A2_C2)/2)-A1_C2)*(((A2_A1+A1_C2+A2_C2)/2)-A2_C2))**0.5 ## площадь треугольника A1_A2_C2 по формуле Герона
## сравнение площадей треугольников
if S_A1_B1_C1==S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1:
print "Second triangle in first"
elif S_A2_B2_C2==S_A1_A2_B2+S_A1_B2_C2+S_A1_A2_C2:
print "First triangle in second"
else:
print "%f | %f" %(S_A1_B1_C1, S_A2_A1_C1+S_A2_A1_B1+S_A2_C1_B1)
Вот этот код не работает. Когда он сравнивает числа, которые получаются в первой ветке цикла они получаются 36 и 36, а он уходит в ELSE.
В этом коде он на печать выдаёт переменные из первой ветки цикла
|
|
|

09.12.2008, 00:38
|
|
Постоянный
Регистрация: 12.06.2008
Сообщений: 654
Провел на форуме: 4512757
Репутация:
973
|
|
ЫЫ (вырезано цензурой), (вырезано цензурой), (вырезано цензурой), понял, в чем срань - ты походу сравниваешь разные типы данных, попробуй первый if написать так :
if str(S_A1_B1_C1)==str(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1 _B1)  rint "Second triangle in first" - то есть, перевести его в строку, походу у тебя сравниваются int и float - что для интерпритатора походу разные вещи
Хотя это какие-то бакапоры самого if - он сцуко не хочет нормально сравнивать никакие значения, кроме тех случаев когда они не str() - пробовал и
if int(S_A1_B1_C1)==int(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1 _B1)  rint "Second triangle in first"
и
if float(S_A1_B1_C1)==float(S_A2_A1_C1+S_A2_A1_B1+S_A 2_C1_B1)  rint "Second triangle in first"
корректно работает только если
if str(S_A1_B1_C1)==str(S_A2_A1_C1+S_A2_A1_B1+S_A2_C1 _B1)  rint "Second triangle in first"
Последний раз редактировалось login999; 09.12.2008 в 00:47..
|
|
|

16.12.2008, 12:27
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
Провел на форуме: 89596
Репутация:
21
|
|
Сегодня мне объяснили в чём проблема: оказывается там не ровно 36 получается, а с хвостиком, поэтому надо было вводить погрешность =)
Спасибо тем, кто мне помогал!
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Books Python
|
FRAGNATIC |
PHP, PERL, MySQL, JavaScript |
1 |
01.11.2009 18:20 |
|
Начинаем программировать на PHP, Python, AS3
|
nerezus |
PHP, PERL, MySQL, JavaScript |
0 |
19.08.2008 10:42 |
|
TCL/TK and PYTHON...
|
Rejjin |
С/С++, C#, Delphi, .NET, Asm |
9 |
25.07.2008 22:03 |
|
[Immunity Dbg Python Scripting]
|
0x0c0de |
Реверсинг |
5 |
28.06.2008 15:32 |
|
Python быть или не быть
|
procedure |
PHP, PERL, MySQL, JavaScript |
28 |
24.01.2008 21:19 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|