Feladat: KSz.11 Korcsoport: 14-15 Nehézségi fok: könnyű
Füzet: 1983/december, 217 - 218. oldal  PDF  |  MathML 
Témakör(ök): Programozási feladatok, Feladat
Hivatkozás(ok):Feladatok: 1983/október: KSz.11

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Megoldás Az 1. ábrán bemutatott program könnyen érthető, részletes, hibátlan megoldásnak tűnik. Ellenőrizzükműködését az alábbi adatokkal is:

 

  AX    AY    AR    BX    BY    BR  -4    5    2  -7    1    3  7    16    2    2    4    5


005CLS: PRINT "KOROK KOLCSONOS HELYZETENEK MEGHATAROZASA" 010PRINT "ADD MEG AZ ELSO KOR KOZEPPONTJANAK KOORDINATAITES SUGARAT!"020INPUT AX, AY, AR030PRINT "ADD MEG A MASODIK KOR ADATAIT IS!"040INPUT BX, BY, BR045IF AR<0 OR BR<0 THEN10050T=SQR((AX-BX) * (AX-BX)+(AY-BY) * (AY-BY))060IFT>0THEN90070IF AR=BR THEN PRINT "A KET KOR AZONOS!": STOP080PRINT "A KET KOR KONCENTRIKUS!": STOP090IF T<ABS(AR-BR) THEN PRINT "A NAGYOBBIK KOR TARTALMAZZAA KISEBBIKET": STOP100IF T=ABS(AR-BR) THEN PRINT "A KISEBBIK KOR BELULROLERINTI A NAGYOBBIKAT":  STOP110IF T=AR+BR THEN PRINT "A KET KOR KIVULROL ERINTIEGYMAST": STOP120IF T>AR+BR THEN PRINT "A KET KOR ELKERULI EGYMAST": STOP130IF "A KET KOR METSZI EGYMAST,140IF T=AR OR T=BR THEN PRINT "AZ EGYIK KOR KOZEPPONTJARAJTA VAN A MASIK KORON":  STOP150IF T<AR AND T<BR THEN PRINT "MINDKET KOR TARTALMAZZAA MASIK KOZEPPONTJAT": STOP160IF T<AR OR T<BR THEN PRINT "A NAGYOBBIK KOR TARTALMAZZAA KISEBBIK KOZEPPONTJAT": STOP170PRINT "EGYIK SEM TARTALMAZZA A MASIK KOZEPPONTJAT": STOP

1. ábra
Ezekben az esetekben az érintkező köröket programunk közös pont nélküli, ill. metsző köröknek nyilvánítja. Mi ennek a magyarázata? A négyzetgyökvonást még négyzetszámok esetén sem végzi el teljes pontossággal a gép ‐ így némi eltérést észlel T és AR + BR, ill. T és ABS(AR -BR) között. Ezért ír téves választ. Ha úgy módosítjuk programunkat, hogy gyökvonás helyett szorzással elvégzett négyzetre emelést írunk elő, egész adatok esetén korrekt eredményt kapunk. A 2. ábra csak a megváltozó, ill. új program-sorokat tartalmazza.
050T=(AX-BX) * (AX-BX) +(AY-BY) * (AY-BY)070IF AR=BR THEN PRINT" A KET KOR AZONOS! ": GOTO200080PRINT" A KET KOR KONCENTRIKUS!": GOTO 200090D=(AR-BR) * (AR-BR): IF T<D THEN PRINT "A NAGYOBBIK KORTARTALMAZZA A KISEBBIKET": GOTO 200100IF T=D THEN PRINT "A KISEBBIK KOR BELULROL ERINTI ANAGYOBBIKAT": GOTO 200110E=(AR+BR) * (AR+BR): IF T=E THEN PRINT "A KET KOR KIVULROLERINTI EGYMAST": GOTO 200120IF T>E THEN PRINT "A KET KOR ELKERULI EGYMAST": GOTO 200140IF T=AR*AR OR T=BR*BR THEN PRINT "AZ EGYIK KOR KOZEPPONTJARAJTA VAN A MASIK KORON ": GOTO 200150  IF T<AR * AR and T<BR*BR THEN PRINT "MINDKET KOR TARTALMAZZAA MASIK KOZEPPONTJAT": GOTO 200160IF T<AR*AR OR T<BR*BR THEN PRINT A NAGYOBBIK KORTARTALMAZZA A KISEBBIK KOZEPPONTJAT": GOTO 200170PRINT " EGYIK SEM TARTALMAZZA A MASIK KOZEPPONTJAT"200A$=INKEY$210IF INKEY$=""THEN 210 ELSE 5

2. ábra
 

Megjegyzés. STOP utasítás után CONT parancsra folytatódik a program futása. Az első programváltozat esetén ilyenkor oda nem illő válaszokat ad a gép. Ennek elkerülésére írtuk be a GOTO 200 utasításokat. A RUN parancs ismételt begépelését egy tetszőleges billentyű benyomása helyettesíti, ha beírjuk a KSz. 10. megoldásából már ismert 200 és 210 jelű sorokat. A 200-as sor az esetleges előre lenyomott billentyűt hatástalanítja, hogy a képernyőre írt válasz elolvasására legyen időnk.