| 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:
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:
:



iruzkinik ez:
Argitaratu iruzkina