| 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