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