ZER DAKIDAN: Ikasi dudan Ariketa 16 | Triangeluaren azalera artikuluko programan ekidin dira AB zuzen perpendikularraren kasu partikularra eta CP zuzen perpendikularraren kasu partikularra. ZER IKASIKO DUDAN: Ariketa honetan edozein maldatako zuzenekin lan egiten ikasiko dut. |
Programa bat inkrementalki garatzen
Ariketa 16 | Triangeluaren azalera ariketa gogoratu eta osatu: XOY lehen koadranteko triangelu bat bere ABC erpinen bitartez definiturik dator (erpinen koordenatuak zenbaki errealak dira). A puntua eta B puntua lotzen dituen AB lerroa edozein izan daiteke: bertikala, horizontala edo zeiharra.
A, B eta C sarrerako datuek bete behar dituzten baldintza bakarrak hiru dira:
- A, B eta C puntuak lehen koadrantean kokaturik daude
- A eta B puntuak ez direla bat
- C puntua ez dagoela kokaturik AB segmentuaren zuzenean
- Emanik A puntua eta B puntua, AB zuzena lortu eta bere izaeraren arabera (bertikala, horizontala edo zeiharra) erabaki hurrengo urratsak nola burutuko diren
- Emanik C puntua, AB zuzenari dagokion lerro perpendikularra C puntuan lortu
- AB zuzena eta bere perpendikularra C puntuan ditugula, lerro biren ebakidura kalkulatu (P puntua lortu)
- Erpinen arteko AB distantzia eta puntuen arteko CP distantzia kalkulatu ondoren azalera zehaztu
Emanik A puntua eta B puntua, programak hiru atal izago ditu. Honako hiru atal hauek:
/* Ariketa-17_EdozeinTriangelu: kasu partikularrak aintzat hartzen dira, AB segmentua bertikala edo horizontala. */ // A eta B bi puntu desberdin eman jakinik ez direla bertikal berean egongo // ezta horizontal berean, dagozkien zuzenaren y = mx + n ekuazioa lortu // ondoren, beste hirugarren C puntu bat eskatu aurrekoen lerroan ez dagoena // eta hortik pasatzen den zuzen perpendikularraren y = m'x + n' ekuazioa // kalkulatu. Ostean, bi lerroen arteko ebakidura P puntua zehaztu. // A eta B puntuen arteko distantzia lortu (oinarria), C eta P puntuen arteko // distantzia eskuratu (altuera). ABC triangeluaren azalera kalkulatu. // Kasu partikularrak: /* if (fAx == fBx) // 1. ATALA: AB segmentua bertikala denean { ... }; else // AB segmentua bertikala EZ denean { if (fAy == fBy) // 2. ATALA: AB segmentua horizontala denean { ... }; else // 3. ATALA: AB segmentua zeiharra denean, ez bertikala ez horizontala { ... }; }; */ #include <stdio.h> #include <math.h> // sqrt() funtziorako int main() { float fAx, fAy, fBx, fBy; float fMalda, fDesplazamendua; float fCx, fCy; float fMaldaPerpendikularra, fDesplazamenduPerpendikularra; float fPx, fPy; float fOinarria, fAltuera; printf("\n"); // A puntua lehen koadrantekoa da do { printf("\n OXY lehen koadrantean lan eginez...\n"); printf(" Eman A puntuaren x koordenatua: "); scanf("%f", &fAx); printf(" Eman A puntuaren y koordenatua: "); scanf("%f", &fAy); } while (_________________); printf("\n"); // B puntua ere lehen koadrantekoa izango da eta horrez gain // B puntua eta A puntua ez dira bat izango do { printf("\n OXY lehen koadrantean lan eginez...\n"); printf(" Eman B puntuaren x koordenatua: "); scanf("%f", &fBx); printf(" Eman B puntuaren y koordenatua: "); scanf("%f", &fBy); } while (_________________); if (fAx == fBx) // 1. ATALA: AB segmentua bertikala denean { printf("\n"); printf("\n AB segmentua bertikala da"); printf("\n -------------------------\n"); printf("\n Zuzenaren malda = INFINITU"); printf("\n Zuzen perpendikularraren desplazamendu bertikala = INFINITU"); printf("\n Zuzenaren ekuazioa r | x=%.3f", fAx); // C puntua ere lehen koadrantekoa izango da eta horrez gain // C puntua ez da egongo bertikala den AB segmentuaren zuzenean printf("\n"); printf("\n OXY lehen koadrantean jarraituz...\n"); do { printf(" Eman C puntuaren x koordenatua: "); scanf("%f", &fCx); printf(" Eman C puntuaren y koordenatua: "); scanf("%f", &fCy); } while (_________________); ... printf("\n Bi zuzenen arteko ebakidura puntua P(%.3f, %.3f)", fPx, fPy); } else // AB segmentua bertikala EZ denean: AB horizontala da, edo AB zeiharra da { if (fAy == fBy) // 2. ATALA: AB segmentua horizontala denean { printf("\n"); printf("\n AB segmentua horizontala da"); printf("\n ---------------------------\n"); fMalda = 0.0; fDesplazamendua = fAy; printf("\n Zuzenaren malda = %.3f", fMalda); printf("\n Zuzenaren desplazamendu bertikala = %.3f", fDesplazamendua); printf("\n Zuzenaren ekuazioa r | y=%.3f", fDesplazamendua); // C puntua ere lehen koadrantekoa izango da eta horrez gain // C puntua ez da egongo bertikala den AB segmentuaren zuzenean printf("\n"); printf("\n OXY lehen koadrantean jarraituz...\n"); do { printf(" Eman C puntuaren x koordenatua: "); scanf("%f", &fCx); printf(" Eman C puntuaren y koordenatua: "); scanf("%f", &fCy); } while (_________________); ... printf("\n Bi zuzenen arteko ebakidura puntua P(%.3f, %.3f)", fPx, fPy); } else // 3. ATALA: AB segmentua zeiharra denean, ez bertikala ez horizontala { printf("\n"); printf("\n AB segmentua zehiarra da"); printf("\n ------------------------\n"); // C puntua ere lehen koadrantekoa izango da eta horrez gain // C puntua ez da egongo AB segmentuari dagokion r zuzenean printf("\n"); printf("\n OXY lehen koadrantean jarraituz...\n"); do { printf(" Eman C puntuaren x koordenatua: "); scanf("%f", &fCx); printf(" Eman C puntuaren y koordenatua: "); scanf("%f", &fCy); } while (_________________); ... printf("\n Bi zuzenen arteko ebakidura puntua P(%.3f, %.3f)", fPx, fPy); } } // AB segmentuaren luzera oinarria da eta CP segmentuaren luzera altuera da ... printf("\n Triangeluaren azalera = %.3f m^2\nÂșn", fOinarria*fAltuera/2); getchar(); getchar(); return 0; }
Hauxe izan daiteke programaren balizko exekuzio bat, AB segmentua bertikala denean:
Hau izan daiteke programaren balizko exekuzio bat, AB segmentua horizontala denenan:
Eta hauxe izan daiteke programaren balizko beste exekuzio bat, AB segmentua zeiharra denenan:
AB eta CP bi segmentuen luzera ezagutzean, triangeluaren azalera berehala lor daiteke. Ariketa osatuago honen programa exekutagarria Triangelu_5.exe hartu eta hura exekutatuz programaren logika zein den ulertu.
|||||||||||||||||||| LASTER IKUSGAI ||||||||||||||||||||
iruzkinik ez:
Argitaratu iruzkina