ZER DAKIDAN: Ariketa bati dagokion kodifikazioa programa monolitiko batean idazteko gai naiz eta programa moduluetan zatitzeko gai naiz. ZER IKASIKO DUDAN: Programa bat zatitzen ikasiko dut moduluak sortuz, modulu horiek azpiprogramak deitzen dira eta bi motatakoak izan daitezke: funtzioak edo prozedurak. Ikas dezagun noiz erabili funtzioa eta noiz prozedura. |
ESKATZEN DEN PROGRAMA
Zirkunzentro: Poligono batera zirkunskribatua dagoen zirkunferentziaren zentroa. Poligonoa triangelua bada, hiru erdibitzaileek elkar ebakitzen duten puntua da zirkunzentroa.
![]() |
Triangeluaren zirkunzentroa eta zirkunferentzia zirkunskribatua |
Triangeluaren zirkunzentroa non kokatzen den triangeluak dituen angeluen araberakoa da. Horrela, triangelu angeluzuzena bada zirkunzentroa triangeluaren hipotenusaren gainean kokatzen da, baina angelu kamutsa badu zirkunzentroa triangelutik kanpo geratzen da eta triangeluaren barruan angelu zorrotzak baditu.
![]() |
Zirkunzentroaren kokapena triangeluarekiko |
TRIANGELUAREN HIRU ERPINAK:
|
Goiko baldintzak betetzen dituzten triangeluaren hiru erpinen rAx, rAy, rBx, rBy, rCx eta rCy koordenatuak datutzat emanik, zirkunferentzia zirkunskribatuaren rR erradioa kalkulatu ondoko formula erabiliz:
Horregatik, triangeluaren rA, rB eta rC aldeen luzerak eta rS azalera kalkulatu behar dira. Aldeak lortzeko pitagoras aplikatuko dugu funtzio baten bitartez, eta S azalera eskuratzeko ondoko formula barneratzen duen funtzioa idatziko dugu:
![]() |
Irudiko P puntua, ariketa honetan bilatzen den Z zentroa litzateke |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | { 15. ariketa: A, B eta C erpinez triangelua definitu (6 koordenatu). } { AB aldea horizontala izango da eta ABC triangeluari dagokion } { zirkunferentzia zirkunskribatuaren R erradioa kalkulatu. } { ABC triangeluari dagokion zirkunferentzia zirkunskribatuaren Z } { zentroaren bi koordenatuak Zx eta Zy kalkulatu. } { Datuak hiru erpinen koordenatuak dira eta prozedura batean } { hartzen dira, adibidez: (0.0, 0.0), (4.0, 0.0) eta (2.0, 2.0) } program Ariketa__15 ; { Eskatzen diren azpiprogramak hemen idatzi: } { - ErpinakEskuratu prozedura (irteerako 6 parametro) } { - fnrAldeaLortu funtzioa (sarrerako 4 parametro) } { - fnrAzaleraLortu funtzioa (sarrerako 6 parametro) } { - fnrErradioaLortu funtzioa (sarrerako 4 parametro) } { - fnrZuzenarenMalda funtzioa (sarrerako 4 parametro) } { - SegmentuarenErdia prozedura (sarrerako 4 parametro, } { irteerako 2 parametro) } { - ZentroaKalkulatu prozedura (sarrerako 4 parametro, } { irteerako 2 parametro) } { - fnboErpinaZirkunferentzianDago funtzioa (sarrerako 5 parametro) } { ---------------------------Programaren Nagusia--------------------------- } var rAx, rAy, rBx, rBy, rCx, rCy, rZx, rZy : real ; { koordenatuak } rErdiaACx, rErdiaACy, rErdiaBCx, rErdiaBCy : real ; { koordenatuak } rA, rB, rC, rR : real ; { distantziak } rS : real ; { azalera } rMaldaAC, rPerpendikularraAC : real ; { maldak } rMaldaBC, rPerpendikularraBC : real ; { maldak } rDesplazamendu1 : real ; { distantzia } rDesplazamendu2 : real ; { distantzia } begin writeln ; writeln ; writeln ; writeln ; { triangeluaren hiru erpinak irakurri } ErpinakEskuratu(rAx, rAy, rBx, rBy, rCx, rCy) ; writeln ; { triangeluaren hiru aldeak lortu } rA := fnrAldeaLortu(rBx, rBy, rCx, rCy) ; { BC segmentuaren luzera lortu } rB := fnrAldeaLortu(rAx, rAy, rCx, rCy) ; { AC segmentuaren luzera lortu } rC := fnrAldeaLortu(rAx, rAy, rBx, rBy) ; { AB segmentuaren luzera lortu } writeln ( ' BC aldea, rA = ' , rA: 0 : 2 , ' m' ) ; { BC aldearen luzera erakutsi } writeln ( ' AC aldea, rB = ' , rB: 0 : 2 , ' m' ) ; { AC aldearen luzera erakutsi } writeln ( ' AB aldea, rC = ' , rC: 0 : 2 , ' m' ) ; { AB aldearen luzera erakutsi } { triangeluaren azalera kalkulatu erpinak ezagunak izatean } rS := fnrAzaleraLortu(rAx, rAy, rBx, rBy, rCx, rCy) ; writeln ( ' rS azal. = ' , rS: 0 : 3 , ' m^2' ) ; writeln ; { erradioa kalkulatzeko formula: (rA·rB·rC)/(4·rS) } rR := fnrErradioaLortu(rA, rB, rC, rS) ; writeln ( ' rR erra. = ' , rR: 0 : 3 , ' m' ) ; writeln ; { AC perpendikularraren malda } rMaldaAC := fnrZuzenarenMalda(rAx, rAy, rCx, rCy) ; writeln ( ' AC malda = ' , rMaldaAC: 0 : 2 ) ; rPerpendikularraAC := -( 1 /rMaldaAC) ; writeln ( ' AC perp. = ' , rPerpendikularraAC: 0 : 2 ) ; { AC perpendikularren zuzenak duen desplazamendua } SegmentuarenErdia(rAx, rAy, rCx, rCy, rErdiaACx, rErdiaACy) ; writeln ( ' AC erdia = (' , rErdiaACx: 0 : 2 , ', ' , rErdiaACy: 0 : 2 , ')' ) ; rDesplazamendu1 := rErdiaACy + rErdiaACx/rMaldaAC ; writeln ( ' Desplaz1 = ' , rDesplazamendu1: 0 : 2 , ' m' ) ; writeln ; { BC perpendikularraren malda } rMaldaBC := fnrZuzenarenMalda(rBx, rBy, rCx, rCy) ; writeln ( ' BC malda = ' , rMaldaBC: 0 : 2 ) ; rPerpendikularraBC := -( 1 /rMaldaBC) ; writeln ( ' BC perp. = ' , rPerpendikularraBC: 0 : 2 ) ; { BC perpendikularren zuzenak duen desplazamendua } SegmentuarenErdia(rBx, rBy, rCx, rCy, rErdiaBCx, rErdiaBCy) ; writeln ( ' BC erdia = (' , rErdiaBCx: 0 : 2 , ', ' , rErdiaBCy: 0 : 2 , ')' ) ; rDesplazamendu2 := rErdiaBCy + rErdiaBCx/rMaldaBC ; writeln ( ' Desplaz2 = ' , rDesplazamendu2: 0 : 2 , ' m' ) ; writeln ; { Zentroa bi zuzen perpendikularren arteko ebakidura izango da } { Zuzen z1: m1 = rPerpendikularraAC | d1 = rDesplazamendu1 } { Zuzen z2: m2 = rPerpendikularraBC | d2 = rDesplazamendu2 } { Zuzen z1: rZy = m1·rZx + d1 } { Zuzen z2: rZy = m2·rZx + d2 } { m1·rZx + d1 = m2·rZx + d2 ==> rZx = (d1 - d2) / (-m1 + m2) } { rZy = m1·rZx + d1 ==> rZy = m1·(d1 - d2) / (-m1 + m2) + d1 } { rZx = (d1 - d2) / (-m1 + m2) } { rZy = (m2·d1 - m1·d2) / (-m1 + m2) } ZentroaKalkulatu(rPerpendikularraAC, rPerpendikularraBC, rDesplazamendu1, rDesplazamendu2, rZx, rZy) ; writeln ( ' Z zentr. = (' , rZx: 0 : 2 , ', ' , rZy: 0 : 2 , ')' ) ; writeln ; writeln ; writeln ( ' (x - rZx)^2 + (y - rZy)^2 - rR^2 < 0.000001' ) ; if fnboErpinaZirkunferentzianDago(rZx, rZy, rR, rAx, rAy) then writeln ( ' (' , rAx: 0 : 2 , ', ' , rAy: 0 : 2 , ') erpina zirkunferentzian dago' ) else writeln ( ' Errorea A erpinean' ) ; if fnboErpinaZirkunferentzianDago(rZx, rZy, rR, rBx, rBy) then writeln ( ' (' , rBx: 0 : 2 , ', ' , rBy: 0 : 2 , ') erpina zirkunferentzian dago' ) else writeln ( ' Errorea B erpinean' ) ; if fnboErpinaZirkunferentzianDago(rZx, rZy, rR, rCx, rCy) then writeln ( ' (' , rCx: 0 : 2 , ', ' , rCy: 0 : 2 , ') erpina zirkunferentzian dago' ) else writeln ( ' Errorea C erpinean' ) ; writeln ; readln ; end . { Programaren amaiera } |
Programaren balizko exekuzio bat hurrrengo irudian erakusten da:
|