2024(e)ko abenduaren 1(a), igandea

Ariketa 17 | Edozein triangeluren azalera

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
Triangeluaren azalera kalkulatzeko 4 urratsetan egingo dugu:
  1. Emanik A puntua eta B puntua, AB zuzena lortu eta bere izaeraren arabera (bertikala, horizontala edo zeiharra) erabaki hurrengo urratsak nola burutuko diren
  2. Emanik C puntua, AB zuzenari dagokion lerro perpendikularra C puntuan lortu
  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

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