Programa bat inkrementalki garatzen
Triangelu bat bere ABC erpinen bitartez definiturik dator. A eta B puntuak ezagunak dira eta C erpinaren koordenatuak eskatzen dira.
ABC triangelu angeluzuzena da eta horrez gain triangelu isoszelea da.
A puntua eta B puntua lotzen dituen AB lerroa ez da bertikala ezta horizontala, eta C puntua ez dago kokaturik AB segmentuaren lerroan. Esan bezala, ABC triangelua angeluzuzena eta isoszelea da, non AB erpinek kateto bat osatzen duten. ABC triangelu angeluzuzenaren beste katetoa A eta B puntuen kokapenaren araberakoa da:
- ABC triangelu angeluzuzenaren beste katetoa BC erpinek osatuko dute B puntua A puntua baino gorago badago, ondorioz AC erpinek triangelu angeluzuzenaren hipotenusa osatuko dute (kasu hau da beheko irudian erakusten dena)
- ABC triangelu angeluzuzenaren beste katetoa AC erpinek osatuko dute A puntua B puntua baino gorago badago, ondorioz BC erpinek triangelu angeluzuzenaren hipotenusa osatuko dute
ABC triangelu angeluzuzena isoszelea da, hots, kateto biek luzera bera dutela. Eta bukatzeko, C puntua hiru erpinetatik gorena da.
Datuak:
- A(Ax,Ay)eta B(Bx,By)puntuak AB segmentuaren zuzena lortzeko, AB zuzena zeiharra izango da (ez bertikala, ez horizontala)
- C puntua AB zuzenaren perpendikular batean dago (beheko irudian C puntua lortzeko perpendikularra B puntutik abiatzen da By>Ay delako). Beste egoera posible bat badago (Ay>By kasua) eta C puntuaren kokapena berdin lortuko litzateke baina AB zuzenaren perpendikularra A puntutik abiatuko litzateke
- ABC triangelu angeluzuzena isoszelea da
- Beheko irudian C puntua goian dago, hauxe betetzen dela Cy>By>Ay alegia. Halaber, izan daitekeen Ay>By beste egoeran C puntua goian egongo litzateke ere, eta hauxe Cy>Ay>By beteko litzateke
Algoritmoa
Problema bat urrats-kopuru finituan ebazteko agindu-multzo edo ekintza-multzo esplizituari algoritmo esaten zaio. Ariketaren algoritmoa honelaxe adieraziko genuke:
- Emanik A puntua eta B puntua, AB zuzena lortu (jakinik AB ez dela horizontala izango eta ez dela bertikala izango)
- A eta B puntuen arteko D distantzia kalkulatu
- A eta B puntuen artetik zehaztu zein dagoen gorago (esate baterako, B puntua gorago dago), jakinik B puntua gorago dagoela:
- AB zuzenaren perpendikularra B puntuan lortu
- AB zuzenaren perpendikularra ezaguna da eta B puntutik D distantziara C puntua aurkituko da
- Ateratzen diren bi soluzioetatik bilatzen dugun C puntua, Cy handiena duena da.
- A eta B puntuen artetik zein dagoen gorago zehaztu (esate baterako, A puntua gorago dago), jakinik A puntua gorago dagoela:
- AB zuzenaren perpendikularra A puntuan lortu
- AB zuzenaren perpendikularra ezaguna da eta A puntutik D distantziara C puntua aurkituko da
- Ateratzen diren bi soluzioetatik bilatzen dugun C puntua, Cy handiena duena da.
- Amaitu
Sasikodea
Algoritmoa ulertu ondoren, ariketaren urratsak ikus ditzagun. Urrats multzo honek algoritmoa jarraitzen du eta programaren kodifikaziotik nahiko hurbil dagoelako pseudokodea edo sasikodea esaten zaio. Hona hemen ariketaren sasikodea:
1. urratsa
Hau ezaguna zaigu 3. astea | triangeluaren azalera artikuluan egiten zelako, ondorioz Ax, Ay, Bx eta By balioen sarrerak REPEAT-UNTIL edo WHILE-DO baten bitartez kontrolatuko ditugu.
2. urratsa
A eta B puntuen arteko D distantzia kalkulatu ordez, hobe D2 lortzen badugu. Horretarako (By-Ay)2+(Bx-Ax)2 kalkulatuko dugu, beti balio positibo bat izango da A eta B puntuak edozein kokapenetan egonik ere.
3. urratsa
IF By > Ay THEN perpendikularra lortzeko erreferentzia B puntua izango da
ELSE perpendikularra lortzeko erreferentzia A puntua (4. urratsa).
3.1. urratsa
AB zuzena y=mx+n izanik, AB zuzenaren perpendikularra B puntuan lortuko dugu. Hau ere ezaguna zaigu 3. astea | triangeluaren azalera artikuluan egiten zelako, ondorioz, urrats honetan, y=m'x+n' zuzen perpendikularraren m' eta n' balioak zehazturik izango ditugu.
3.2. urratsa
C puntuaren Cx eta Cy koordenatuak eskuratzeko ondoko ekuazio-sistema planteatuko dugu:
Cy=m'Cx+n'
D2=(Cy-By)2+(Cx-Bx)2
Ekuazio-sistema horretatik JCx2+KCx+L=0 itxurako ekuazioa lortuko dugu non J, K eta L ezagunak diren eta Cx inkognita den, Cx-ek bi balio izango ditu eta Cx-en balio horiek Cy=m'Cx+n' perpendikularrera eramanik bi Cy lortuko ditugu, bietatik handiena da bilatzen ari garen soluzioa.
3.3. urratsa
Aurreko 3.2. urratsean Cx1 bitartez Cy1 lortu dugu eta Cx2 bitartez Cy2 lortu dugu. Baldin eta Cy1>Cy2 soluzioa C(Cx1,Cy1)izango da, bestela soluzioa C(Cx2,Cy2)izango da.
4. urratsa
IF By > Ay THEN perpendikularra lortzeko erreferentzia B puntua (3. urratsa)
ELSE perpendikularra lortzeko erreferentzia A puntua izango da.
4.1. urratsa
AB zuzena y=mx+n izanik, AB zuzenaren perpendikularra A puntuan lortuko dugu, ondorioz y=m'x+n' zuzen perpendikularraren m' eta n' balioak zehazturik izango ditugu.
4.2. urratsa
C puntuaren Cx eta Cy koordenatuak eskuratzeko ondoko ekuazio-sistema planteatuko dugu:
Cy=m'Cx+n'
D2=(Cy-Ay)2+(Cx-Ax)2
Ekuazio-sistematik JCx2+KCx+L=0 itxurako ekuazioa lortuko dugu non J, K eta L ezagunak diren eta Cx inkognita den, Cx-ek bi balio izango ditu eta Cx-en balio horiek perpendikularrera eramanik bi Cy lortuko ditugu.
4.3. urratsa
Aurreko 3.2. urratsean Cx1 bitartez Cy1 lortu dugu eta Cx2 bitartez Cy2 lortu dugu. Baldin eta Cy1>Cy2 soluzioa C(Cx1,Cy1)izango da, bestela soluzioa C(Cx2,Cy2)izango da.
5. urratsa
Programa amaitu. Amaitu adibidez Readln; prozeduraren bitartez exekuzioaren emaitza pantailan irakurri ahal izateko, honek RETURN tekla sakatzeari behartzen gaitu. Edo bestela programa bukatu cItxaron:=ReadKey; esleipenaren bitartez, honek ere pantailan dagoena irakurtzeko beta emango digu, baina programatik irteteko edozein tekla sakatzea nahikoa da (ez da zertan derrigorrrez RETURN tekla izan behar).
Kodea
Algoritmoa eta sasikodea antzekoak dira eta programaren kodea idazteko bitartekariak dira. Ariketa ebazteko programa idatzi beharra dago Pascal lengoaiak ezartzen dituen sintaxi arau guztiak aintzakotzat hartuz. Hemen duzu TriangeluarenErpina.exe programa exekutagarria eta hauexek dira exekuzio biren irteerak; batean B puntua A puntua baino gorago dagoenean eta bestean, alderantziz, A puntua B puntua baino gorago dagoenean:
B puntua A puntua baino gorago dagoenean.
A puntua B puntua baino gorago dagoenean.
Komeni da frogatzea ere programaren portaera muturreko datuak emanez, esate baterako A eta B puntuak bertikal batetik oso hurbil daudenean (edo AB segmentua horizontal batetik oso hurbil daudenean). Jarraian bi kasu horien irteerak erakusten dira:
AB segmentua ia bertikala denean.
AB segmentua ia horizontala denean.
Autoebaluazioa dela eta, hauxe da ariketari dagokion balizko emaitza bat...
TriangeluarenErpina.pas
...iturburu-programa, azpimarratu beharra dago, beti bezala, triangelu angeluzuzen isoszelearen problema honi ederki erantzun dioten bestelako soluzioak ere badaudela. Zein da zurea?
iruzkinik ez:
Argitaratu iruzkina