| ZER DAKIDAN: Dagoeneko do-while agindu errepikakorra erabili dut teklatu bidez irakurritako balioak onargarriak direla ziurtatzeko. ZER IKASIKO DUDAN: Orain while agindu errepikakorra ikasiko dut, bere eskema eta logiko ikasiko ditut. Bide batez, do-while agindu errepikakorrekiko aldeak aztertuko ditut. |
Jarraian while agindu errepikakorraren eskema erakusten da:
Ikus daitekeen bezala, while begiztaren baldintza goialdean dago. Hori dela eta, baliteke begizta ez exekutatzea. Bestalde, baldintzan agertzen diren aldagai guztiek balio ezagunik eduki behar dute. Logikari dagokiola, while aginduaren baldintza betetzen denean beste iterazio berri bat exekutatuko da, bestela ez. Hau da:
- 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.
Berresten dugu zenbaki baten faktoriala kalkulatzeko egokiagoa da for agindua while baino, hala eta guztiz faktorialaren ariketa hau har dezagun while aginduaren lehen adibide bezala.
iZbk zenbaki osoa eta positiboa teklatuaren bitartez irakurri ondoren, bere faktoriala honelaxe definitzen da:Ariketa-27_whileFaktoriala.cbp proiektua idatz dezakegu while aginduari buruz gorago emandako azalpenak aintzat harturik. Non ikusten den bezala faktoriala birritan kalkulatzen den:
/* Ariketa-27_whileFaktoriala: 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 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;
while (iKont <= iZenbakia)
{
lFaktoriala = lFaktoriala*iKont;
printf("\n \t %2d. iterazioa \t faktoriala = %ld", iKont, lFaktoriala);
iKont++;
}
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;
while (iKont < iZenbakia)
{
iKont++;
lFaktoriala = lFaktoriala*iKont;
printf("\n \t %2d. iterazioa \t faktoriala = %ld", iKont, lFaktoriala);
}
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-27_whileFaktoriala.cbp proiektua exekutatzean honelako irteera lor daiteke:
:



iruzkinik ez:
Argitaratu iruzkina