| ZER DAKIDAN: printf() eta scanf() funtzioak menperatzen ditut. Programan bideak aukeratzeko if agindua ikasi dut ere. ZER IKASIKO DUDAN: Aurrera jo baino lehen, if baldintzako kontrol-agindu erabiliko dut programa handiago batean. Planteamendua ikusi Ariketa 15 | Triangeluaren azalera (hasiera) artikulu honetan eta programa aztertu Ariketa 16 | Triangeluaren azalera artikuluan. |
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 ez da bertikala ezta horizontala, eta C puntua ez dago kokaturik AB lerroan. Datuak:
- A eta B puntuak AB zuzena lortzeko, AB zuzena zeiharra izango da (ez bertikala, ez horizontala)
- C puntua AB segmentuaren zuzenetik kanpo dago
Algoritmoa:
- Emanik A puntua eta B puntua, AB zuzena lortu
- Emanik C puntua, AB zuzenaren 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
Goian erakutsi den algoritmoaren 1. urratsa erakusten da programa hasiera honetan. Emanik A puntua eta B puntua, AB zuzena lortu:
/* Ariketa-15_Triangelua: A eta B puntuak emanik, dagokien zuzenaren ekuazioa y=mx+n lortu. */
// A eta B bi puntu desberdin eman (jakinik ez direla bertikal berean egongo
// ezta horizontal berean) eta dagozkien zuzenaren ekuazioa y = mx + n lortu.
#include <stdio.h>
int main()
{
float fAx, fAy, fBx, fBy;
// float fMalda, fDesplazamendua;
printf("\n");
// A puntua lehen koadrantekoa da
do
{
printf("\n A puntua:");
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);
if (fAx < 0.0 || fAy < 0.0) // A-ren bi koordenatuak positiboak izan behar dira
{
printf(" A puntuaren bi koordenatuak positiboak izan behar dira\n");
if (fAx < 0.0)
printf(" A puntuaren x koordenatua ezin daiteke negatiboa izan\n");
if (fAy < 0.0)
printf(" A puntuaren y koordenatua ezin daiteke negatiboa izan\n");
}
} while (fAx < 0.0 || fAy < 0.0);
printf("\n");
// B puntua ere lehen koadrantekoa izango da eta horrez gain
// B puntua eta A puntua "diagonal" batean egongo dira kokaturik
do
{
printf("\n B puntua:");
printf("\n OXY lehen koadrantean jarraituz...\n");
printf(" Eman B puntuaren x koordenatua: ");
scanf("%f", &fBx);
printf(" Eman B puntuaren y koordenatua: ");
scanf("%f", &fBy);
if (fBx < 0.0 || fBy < 0.0) // B-ren bi koordenatuak positiboak izan behar dira
printf(" B puntuaren bi koordenatuak positiboak izan behar dira\n");
if (fAx == fBx && fAy == fBy) // A eta B bat dira?
printf(" A eta B ezin dira bat izan\n");
else if (fAx == fBx)
printf(" AB segmentua ezin daiteke bertikala izan\n");
else if (fAy == fBy)
printf(" AB segmentua ezin daiteke horizontala izan\n");
} while (fBx < 0.0 || fBy < 0.0 || fAx == fBx || fAy == fBy);
printf("\n\n");
// A eta B ezagunak direla, AB segmentuari dagokion r zuzenaren bi
// parametroak kalkulatu:
// fMalda := _______________;
// fDesplazamendua := ___________;
// ALGORITMO OSOA:
// 1. Emanik A puntua eta B puntua, AB zuzena lortu
// 2. Emanik C puntua, lortu AB zuzenaren perpendikularra C puntuan
// 3. AB zuzena eta bere perpendikularra C puntuan ditugula, lerro
// biren ebakidura kalkulatu (P puntua lortu)
// 4. Erpinen arteko AB distantzia eta puntuen arteko CP distantzia
// kalkulatu ondoren azalera zehaztu
printf(" fMalda eta fDesplazamendua kalkulatu...\n");
printf("\n");
return 0;
}
|

iruzkinik ez:
Argitaratu iruzkina