2025(e)ko otsailaren 18(a), asteartea

Ariketa 26 | do-while aginduaren egitura eta adibide bat

ZER DAKIDAN:
Dagoeneko do-while agindu errepikakorra erabili dut teklatu bidez irakurritako balioak onargarriak direla ziurtatzeko.



ZER IKASIKO DUDAN:
Orain do-while agindu errepikakorrekin jarraituz, bere eskema logikoa ikasiko dut eta while agindu errepikakorrekiko aldeak ikasiko ditut.

Jarraian do-while agindu errepikakorraren eskema erakusten da:


do-while kontrol-egituraren eskema

   do-while aginduaren gorputza:
     - pantailako mezua
     - aldagai baten irakurketa
     - if agindu bat
do
{   
   printf("\n fZbk eman: ");
   scanf("%f", &fZbk);
   
   if (fZbk < 1.4 || fZbk > 7.9)
     printf("\a Datua mugetik at!\n");
     
} while (fZbk < 1.4 || fZbk > 7.9);
   do-while aginduaren baldintza:
     - datua badago 1.4 eta 7.9 balioen
       artean (biak barne), do-while
       prozesu errepikakorra etengo da
     - bestela, beste iterazio berri bat

Ikus daitekeen bezala, do-while begiztaren baldintza behealdean dago. Hori dela eta, begizta gutxienez behin exekutatzen da. Logikari dagokiola, do-while aginduaren baldintza betetzen denean beste iterazio berri bat exekutatuko da, bestela ez. Hhau da:

  • do-while aginduak integraturik duen galderaren erantzuna egia bada begiztak beste iterazio bat hasiaraziko du.
  • Aldiz, galderaren erantzuna gezurra bada prozesu errepikakorra eten egingo da.

 Kontuan izan behar da C lengoaian zero ez dena egia dela. 


Zenbaki baten faktoriala kalkulatzeko egokiagoa da for agindua do-while baino, hala eta guztiz faktorialaren ariketa hau har dezagun do-while aginduaren adibide bezala.

iZbk zenbaki osoa eta positiboa teklatuaren bitartez irakurri ondoren, bere faktoriala honelaxe definitzen da:
iZbk! = 1 * 2 * 3 * ... * (iZbk-1) * iZbk

Ariketa-26_dowhileFaktoriala.cbp proiektua idatz dezakegu do-while aginduari buruz gorago emandako azalpenak aintzat harturik. Non ikusten den bezala faktoriala birritan kalkulatzen den:
/* Ariketa-26_dowhileFaktoriala: do-while aginduaren adibidea. */

// Zenbaki osoekin lan eginez, iZenbakia teklatuz irakurri
// ziurtatuz datua positiboa eta 15001 baina txikiagoa dela.
// Datuaren faktoriala kalkulatu do-while bitartez.

#include <stdio.h>      // printf() eta scanf() funtzioetarako
#define GUREMINIMOA 0
#define GUREMAXIMOA 13  // long datu-motarekin 14! faktorialak neurria gainditzen du

int main()
{
    int iZenbakia, iKont;
    long lFaktoriala;

    printf("\n");
    printf("\n Kopuru osoko eta positiboekin lan egingo da");
    printf("\n -------------------------------------------\n");

    printf("\n %d edo txikiagoa den zenbaki osokoa eman eta bere faktoriala", GUREMAXIMOA);
    printf("\n birritan kalkulatu do-while kontrol-egitura erabiliz.\n\n");
    do
    {
        printf(" Zenbaki osokoa eman (6 adibidez): ");
        scanf("%d", &iZenbakia);
        if (iZenbakia < GUREMINIMOA)
            printf(" Datua %d edo handiago izango da! \n", GUREMINIMOA);
        if (iZenbakia > GUREMAXIMOA)
            printf(" Datua %d edo txikiago izango da! \n", GUREMAXIMOA);
    } while (iZenbakia < GUREMINIMOA || iZenbakia > GUREMAXIMOA);

    printf("\n \t Lehen kalkulua...");   // iKont kontagailuaren inkrementua begiztaren bukaeran
    lFaktoriala = 1;
    iKont = 1;
    do
    {
        lFaktoriala = lFaktoriala*iKont;
        printf("\n \t %2d. iterazioa \t faktoriala = %ld", iKont, lFaktoriala);
        iKont++;
    } while (iKont <= iZenbakia);
    printf("\n \t Faktorialaren azken emaitza:  %d! = %ld", iZenbakia, lFaktoriala);

    printf("\n\n \t Bigarren kalkulua...");   // iKont kontagailuaren inkrementua begiztaren hasieran
    lFaktoriala = 1;
    iKont = 0;
    do
    {
        iKont++;
        lFaktoriala = lFaktoriala*iKont;
        printf("\n \t %2d. iterazioa \t faktoriala = %ld", iKont, lFaktoriala);
    } while (iKont < iZenbakia);
    printf("\n \t Faktorialaren azken emaitza:  %d! = %ld", iZenbakia, lFaktoriala);

    printf("\n\n");
    return 0;
}

Faktorialaren bi kalkuluen arteko aldea irudi honetan antzeman daiteke:


Ariketa-26_dowhileFaktoriala.cbp proiektua exekutatzean honelako irteera lor daiteke:
:






  • Ariketa-26_dowhileFaktoriala.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina