zenbaki konbinatorioa, kopuru osoa da eta hura lortzeko m eta n zenbaki osoak eta positiboak ezagutu behar dira. Jakinik ere, zenbaki negatiboen faktoriala definiturik ez dagoelako datuek baldintza hau betetzen dutela: m >= n.
Ikusita daukagun ondoko programa honek ZenbakiKonbinatorioaMonolitikoa.pas zenbaki konbinatorioa kalkulatzen du, baina aintzat hartu beharra dago programak inolako barne antolaketarik ez duelako faktorialaren kalkulua hiru aldiz egiten duela:
Aurreko programaren beste bertsio bat ondoko irudian erakusten da, non programa nagusian datuak irakurri eta gero EmaitzaKalkulatu()izeneko prozedurari deia egiten zaion. Prozedura horren barruan hiru faktorialak kalkulatuko dira:
Aurrekoa ikusita, prozeduraren barruan faktorialak kalkulatzen duen programa egizu. Beraz, ZenbakiKonbinatorioaProzeduraz.PAS programa idatz ezazu, hauek izanik hiru azpiprogramen deskribapenak eta definizioak.
1. DatuakHartu()prozedura barruan bi ReadLn() egin ondoren irakurritako bi balioak programa nagusira bidaltzen dira. Hauxe litzateke DatuakHartu()prozeduraren definizioa:
- DatuakHartu() prozedura,
- sarrera: sarrerarik ez dago
- irteera: bi irteera, biak Integer datu-motakoak
- EmaitzaKalkulatu() prozedura,
- sarrera: bi sarrera, Integer datu-motako bi sarrera
- irteera: irteera bakarra, LongInt datu-motakoa
- fniFaktoriala() funtzioa,
- sarrera: Integer bat
- irteera: LongInt bat
Hona hemen ZenbakiKonbinatorioaAzpiprogramaz.pas programa non datuak prozedura batean irakurtzen diren:
program ZenbakiKonbinatorioa_Azpiprogramaz ; procedure DatuakHartu(var iZbkM, iZbkN: integer) ; begin repeat write('m zenbaki osoa eta positiboa eman: ') ; readln(iZbkM) ; write('n zenbaki osoa (non n <= m ): ') ; readln(iZbkN) ; until (iZbkN >= 0) AND (iZbkM >= iZbkN) ; end ; function fnliFaktoriala(iZbk: integer): longint ; var iKontagailua: integer ; liMetagailua: longint ; begin liMetagailua := 1 ; for iKontagailua:=1 to iZbk do liMetagailua := liMetagailua * iKontagailua ; fnliFaktoriala := liMetagailua ; end ; procedure EmaitzaKalkulatu(iZbkM, iZbkN: integer; var iEmaitza: integer) ; var iZbkM_N: integer ; liFaktM, liFaktN, liFaktM_N: longint ; begin liFaktM := fnliFaktoriala(iZbkM) ; liFaktN := fnliFaktoriala(iZbkN) ; iZbkM_N := iZbkM - iZbkN ; liFaktM_N := fnliFaktoriala(iZbkM_N) ; iEmaitza := liFaktM div (liFaktN * liFaktM_N) ; end ; { ----------PROGRAMA NAGUSIA---------- } var iZbkM, iZbkN, iEmaitza: integer ; begin DatuakHartu(iZbkM, iZbkN) ; EmaitzaKalkulatu(iZbkM, iZbkN, iEmaitza) ; write('Zenbaki konbinatorioa ---> ', iZbkM, '! div (', iZbkN,'! * ', iZbkM-iZbkN,'!)') ; write(' = ', iEmaitza) ; readln ; end.
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.