Kezdőoldal » Számítástechnika » Programozás » Mi az istenér írja ki azt,...

Mi az istenér írja ki azt, hogy a háromszög nem létrehozható?

Figyelt kérdés

Miért teljesül a feltétel nem értem.

[link]


2012. aug. 3. 12:51
1 2 3
 11/26 anonim ***** válasza:

Van elírás, illetve iostream tökéletesen megfogalmazta.


A precedencia a "végrehajtás sorrendje".


Azaz ha nézzük a példát:

"A és B vagy C

zárójelezve:

(A és B) vagy C"


Látszik, hogy az és ELŐBB hajtódik végre, mint a vagy művelet.

Ez zárójelezéssel módosítható.


Azaz, ha a célod az, hogy itt B vagy C hajtódjon előbb/együtt végre, akkor ilyen formában kell írni:

A és (B vagy C)


Ekkor végrehajtódik a B vagy C és ennek eredményére jön az és A művelet.


Ha nem teszel zárójelet, azaz A és B vagy C van csak, akkor előbb lefut az A és B, majd ennek az eredményére a vagy C.

2012. aug. 3. 14:25
Hasznos számodra ez a válasz?
 12/26 anonim ***** válasza:

Amúgy röviden és tömören a válasz a kérdésre:

Mert rossz a feltétel, amit megszabtál.


Ha még mindig nem lenne világos a dolog, akkor: [link]

2012. aug. 3. 14:30
Hasznos számodra ez a válasz?
 13/26 A kérdező kommentje:

Én ezt értem de minek módosítani?

Nem értem miért lesz más az eredmény akkor,ha módosítok zárójelekkel a precedencián.


Minkét esetben le fog futni az egész feltétel.

Mi értelme van annak,hogy zárójelbe teszem ezt a részt?

(a < b + c) or (b < a + c) or (c < a + b)


Nem mindegy mejik hajtódik végre először ugyanannak az eredménynek kellene lennie és megsem.

2012. aug. 3. 14:34
 14/26 anonim ***** válasza:

Nem értem, mi ezen a bonyolult.


A nincs zárójel, akkor a maradék három "or"-ral összekapcsolt feltétel balról-jobbra egymás után kiértékelődik a már kiszámolt boolean értékhez. Tehát hiába false az első három "összeéselt" művelet, az egyik or után jövő feltétel igaz, ezért az egész kifejezés értéke igaz lesz.


Ha zárójelbe teszed az (A or B or C) kifejezést, akkor kiderül, hogy true, viszont ez csak ezután lesz és kapcsolatba hozva a már false értékkel -> az eredmény false.

2012. aug. 3. 14:45
Hasznos számodra ez a válasz?
 15/26 anonim ***** válasza:

Akkor mégsem érted és nem itt, hanem a az and és or határánál van a gond.


A konkrét példában ez történik:


not a <= 0, mivel a = 6 -> not 6 <= 0 -> not HAMIS -> IGAZ

Ugyan így egészen a C, ahol is ugye mivel a C = 0, not IGAZ, vagyis HAMIS jön ki.

Az első rész így néz ki:

(i és i és h) -> ami ugye hamis


Na de itt jön a gond.

A többi feltételt is kiértékelve:

h vagy (a < b + c) vagy (b < a + c) vagy (c < a + b)

h vagy (8 < 6 + 0) vagy (6 < 8 + 0) vagy (0 < 8 + 6)

h vagy (8 < 6 ) vagy (6 < 8 ) vagy (0 < 14)

h vagy h vagy i vagy i

Ezt tovább megoldva, ugye h vagy h az h, az i vagy h az viszont már i!

És így igaz a feltétel és a háromszög létrehozható jön ki.


Na akkor most gondolkodj el, hogy ezt hogy lehetne megoldani.

2012. aug. 3. 14:45
Hasznos számodra ez a válasz?
 16/26 anonim ***** válasza:

Helyesbítés csak siettem:


h és (a < b + c) vagy (b < a + c) vagy (c < a + b)

h és (8 < 6 + 0) vagy (6 < 8 + 0) vagy (0 < 8 + 6)

h és (8 < 6 ) vagy (6 < 8 ) vagy (0 < 14)

h és h vagy i vagy i


h és h -> h

Marad:

h vagy i vagy i

h vagy i -> viszont már i!


Vagyis a feltétel igaz lesz.

2012. aug. 3. 14:48
Hasznos számodra ez a válasz?
 17/26 A kérdező kommentje:

Én ezeket amiket mondtatok eddig mind tudtam.

if( ( (not a <= 0) and (not b <= 0) and (not c <= 0) ) and (a < b + c) or (b < a + c) or (c < a + b) ):


Na akkor mindig a legbelső zárójelpáros hajtódik végre.


Ez az a rész ami először le fog futni:

(not a <= 0) and (not b <= 0) and (not c <= 0)


balról jobbra. a c = 0 val akkor ez a feltétel hamis:(not c <= 0) És mivel ez hamis hamis lesz az egész feltétel ennek ellenére azt írja ki,hogy a háromszög létrehozható.Tehát annak ellenére,hogy a feltétel hamis mégis úgy viselkedik mintha igaz lenne.Innentől a többi része a feltételnek le sem fog futni mert ez a rész (not c <= 0) nem teljesült.


Miért működik rosszul?


Nézzétek meg:

[link]


Jól mondtam először ez a rész fog lefutni:

(not a <= 0) and (not b <= 0) and (not c <= 0)

Aztán ha ez a három feltétel mind igaz akkor még megvizsgálja azt is,hogy ezek közül igaz e valamelyik:

(a < b + c) and (b < a + c) and (c < a + b)

ha igen akkor igaz a az egész feltétel ha nem akkor pedig nem.

Ez történik itt?


Ha igen akkor mégis miért teljesül a feltétel,ha a c értéke egyenlő 0 val?

2012. aug. 3. 14:53
 18/26 anonim ***** válasza:

Hol teljesül itt ebben neked?

[link]


a = 8

b = 6

c = 0

"A haromszoget nem lehet letrehozni" az eredmény.



Kielemeztem neked részletesen, hogy mi történik az első feladott példában.

Fogj egy darab papírt és te is csináld meg különböző módokon, ha nem megy, de ezt ennél jobban már nem lehet magyarázni.

2012. aug. 3. 14:57
Hasznos számodra ez a válasz?
 19/26 A kérdező kommentje:

Tik nem értitek.

Az egész feltétel hamis mert:

(not a <= 0) and (not b <= 0) and (not c <= 0)

igaz,igaz,hamis

Az utolsó hamis lett és ha az utolsó hamis akkor az egész hamis lett

ez az egész hamis lett miatta ahhoz,hogy igaz legyen mindháromnak teljesülnie kell.


És mivel és van

and (not c <= 0) ) and (a < b + c) or (b < a + c) or (c < a + b) ):


ezért nem számít az,hogy itt már melyik igaz és melyik nem

Ahhoz,hogy az egész feltétel igaz legyen ahhoz

itt:

(not a <= 0) and (not b <= 0) and (not c <= 0)

három igazt kell kapni a másik felében az and után pedig legalább egyet.


Az általam belinkelt kódban pedig

(not a <= 0) and (not b <= 0) and (not c <= 0)

a harmadik hamis.


És ennek ellenére mégis igaz a feltétel.

2012. aug. 3. 15:02
 20/26 A kérdező kommentje:

Elírtam ebben:

[link]

2012. aug. 3. 15:03
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!