Miért nem működik az else ág ennél a feladatnál (Python-ba)?
Egy háromszög oldalainak beolvasása, megvizsgálása, hogy lehet-e háromszög, és a szerint írja ki a kerületét, területét, vagy hogy nem lehet háromszög.
# -*- coding: cp1250 -*-
# 6.2 Gyakorlat
from math import *
print "Egy haromszog oldalainak hosszat kernem!"
A = raw_input('Adja meg az a oldal hosszat:')
a = float(A)
B = raw_input('Adja meg a b oldal hosszat:')
b = float(B)
C = raw_input('Adja meg a c oldal hosszat:')
c = float(C)
K = a + b + c
d = (a + b + c)/2
T = sqrt(d*(d-a)*(d-b)*(d-c))
if ((a+b > c) and (a+c > b) and (b+c > a )):
print "A haromszog kerulete:", K
print "A haromszog terulete:", T
else:
print "Az oldalak nem alkothatnak haromszoget."
print "Ket oldal osszege nem lehet kisebb a harmadik oldalnal!"
Én most lusta vagyok kipróbálni, de ha az utolsónál megy, akkor bizony az lesz a "hiba" ami miatt olvashatatlan a kód itt.
Azaz valószínűleg rosszul vannak a behúzások. (Tab/Space csere, esetleg egy helyen plusz space ami nem kéne...)
Nem az else ág nem működik. A program szemantikailag hibás.
Ha egy számhármas nem teljesíti a háromszög egyenlőtlenséget, akkor a területet kiszámoló képletben szereplő szorzattagok közül az egyik negatív lesz.
Mivel negatív számból a valós számok körében nem lehet gyököt vonni, emiatt a terültszámolási képlet domainerrorral összeomlik.
A megoldás az lenne, hogy az adatok bekérése után kell végrehajtani az ellenőrzést és ha a bekért adatok nem teljesítik a háromszög egyenlőtlenségeket, akkor kilépni, egyébként végre kell hajtani a terület és kerület számítást.
C++-ban azért, mert a cmath könyvtár C-s lib, nem dobál kivételeket, csak beállít valami error jelzőt. Azaz nem akasztja meg a program futását, és mivel nem használod az eredményét, nem okoz gondot.
De amúgy eleve jó gyakorlat, hogy csak akkor számolsz ki valamit, ha szükséged van rá (és lehetséges), szóval az ilyeneket mindig pakold bele az if-be.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!