2019(e)ko martxoaren 28(a), osteguna

29. astea | zenbaki lehen


Zenbaki jakin bat lehena ote den erabakitzen duen funtzioa hau litzateke:
FUNCTION fnboLehenaDa(iZenbakia: Integer): Boolean ;
VAR
   boLehenaDa : Boolean ;
   k : Integer ;
BEGIN
   boLehenaDa := TRUE ;
   k := 2 ;            (* 1 eta iZenbakia kopuruak ez ditugu aintzat hartuko *)
   WHILE (k <= iZenbakia-1) AND boLehenaDa DO
   BEGIN
      IF iZenbakia MOD k = 0 THEN
      BEGIN
         WriteLn('     ZATIGARRIA  iZenbakia MOD k = 0', '    k = ', k) ;
         boLehenaDa := FALSE      (* iZenbakia kopurua zatigarria dela    *)
      END                         (* jakitean WHILE-DO begiztatik irten,  *) 
      ELSE                        (* bestela jarraitu k inkrementatuz.    *)
      BEGIN 
         WriteLn('MOMENTUZ LEHENA  iZenbakia MOD k <> 0', '   k = ', k) ;                                
         k := k + 1 ;             (* Hurrengoa aztertu edo WHILE amaitu.  *)
      END ;   
   END ;
   fnboLehenaDa := boLehenaDa ;
END ;

29. astea | zenbakiak kendu


Programaren balizko exekuzio bat jarraian erakusten da:

Arraya datuz bete ondoren, hauxe da bakoitiak eta negatiboak diren zenbakiak kentzen dituen programa non array laguntzailerik ez den erabiltzen:
PROGRAM NegatiboakBakoitiakKendu ;
CONST
  BEHEMUGA = 1 ;
  GOIMUGA = 25 ;

TYPE
  taiZerrenda = ARRAY[BEHEMUGA..GOIMUGA] OF Integer ;


PROCEDURE ArrayaDatuzBete(VAR aiZerrenda: taiZerrenda;
                             VAR iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   REPEAT
      Write('Zenbat elementu sartuko dituzu? ') ;
      ReadLn(iLuzera) ;
   UNTIL (iLuzera >= BEHEMUGA) AND (iLuzera <= GOIMUGA) ;

   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      Write('Eman ', k, '. zenbaki osoa (negatiboa edo positiboa): ') ;
      ReadLn(aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE ArrayarenEdukiaIkusi(CONST aiZerrenda: taiZerrenda;
                                        iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      WriteLn(k, '. zenbaki osoa = ', aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE EzabatuZenbakiBat(VAR aiZerrenda: taiZerrenda;
                               VAR iLuzera: Integer;
                                      iNon: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=iNon TO iLuzera-1 DO
   BEGIN
      aiZerrenda[k] := aiZerrenda[k+1];
   END ;

   iLuzera := iLuzera-1 ;
END ;


{ programa nagusiko aldagaiak }

VAR
  aiZerrenda: taiZerrenda ;
  iLuzera, i: Integer ;

BEGIN
   WriteLn ('-----------------------------') ;
   ArrayaDatuzBete(aiZerrenda, iLuzera) ;
   WriteLn ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   i := BEHEMUGA ;
   WHILE i <= iLuzera DO
   BEGIN
      IF (aiZerrenda[i] < 0) AND (aiZerrenda[i] MOD 2 <> 0) THEN
      BEGIN
         EzabatuZenbakiBat(aiZerrenda, iLuzera, i) ;
      END
      ELSE
         i := i+1 ;
   END ;

   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   WriteLn ;
   WriteLn('Amaituta!') ;
   ReadLn ;
END. { programaren bukaera }

Eta hau da bakoitiak eta negatiboak diren zenbakiak kentzen dituen programa non array laguntzaile bat erabiltzen den:
PROGRAM NegatiboakBakoitiakKenduLaguntzailearekin ;
CONST
  BEHEMUGA = 1 ;
  GOIMUGA = 25 ;

TYPE
  taiZerrenda = ARRAY[BEHEMUGA..GOIMUGA] OF Integer ;


PROCEDURE ArrayaDatuzBete(VAR aiZerrenda: taiZerrenda;
                             VAR iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   REPEAT
      Write('Zenbat elementu sartuko dituzu? ') ;
      ReadLn(iLuzera) ;
   UNTIL (iLuzera >= BEHEMUGA) AND (iLuzera <= GOIMUGA) ;

   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      Write('Eman ', k, '. zenbaki osoa (negatiboa edo positiboa): ') ;
      ReadLn(aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE ArrayarenEdukiaIkusi(CONST aiZerrenda: taiZerrenda;
                                        iLuzera: Integer) ;
VAR
   k: Integer ;
BEGIN
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      WriteLn(k, '. zenbaki osoa = ', aiZerrenda[k]) ;
   END ;
END ;


PROCEDURE Zenbakiakezabatu(VAR aiZerrenda: taiZerrenda;
                              VAR iLuzera: Integer) ;
VAR
   k: Integer ;
   aiLaguntzailea: taiZerrenda ;
   iLuzeraLaguntzailea: Integer ;
BEGIN
   iLuzeraLaguntzailea := 0 ;
   FOR k:=BEHEMUGA TO iLuzera DO
   BEGIN
      IF (aiZerrenda[k] >= 0) OR
         (aiZerrenda[k] MOD 2 = 0) THEN
      BEGIN
         iLuzeraLaguntzailea := iLuzeraLaguntzailea + 1 ;
         aiLaguntzailea[iLuzeraLaguntzailea] := aiZerrenda[k] ;
      END ;
   END ;

   aiZerrenda := aiLaguntzailea ;
   iLuzera := iLuzeraLaguntzailea ;
END ;


{ programa nagusiko aldagaiak }

VAR
  aiZerrenda: taiZerrenda ;
  iLuzera: Integer ;

BEGIN
   WriteLn ('-----------------------------') ;
   ArrayaDatuzBete(aiZerrenda, iLuzera) ;
   WriteLn ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   ZenbakiakEzabatu(aiZerrenda, iLuzera) ;

   WriteLn('Ezabatu ondoren:') ;
   ArrayarenEdukiaIkusi(aiZerrenda, iLuzera) ;
   WriteLn ;

   WriteLn ;
   WriteLn('Amaituta!') ;
   ReadLn ;
END. { programa bukaera }

29. astea | elkar trukatu


Zenbaki errealak gordetzen dituen array bat daukagu. Arrayaren elementu handienaren posizioa zehaztu, eta, halaber, Arrayaren elementu txikienaren posizioa zehaztu. Elementu biak posizioz elkar trukatu.

Hauxe da programaren lehen hurbilpena. Programa osoa ez da ematen baina bai bere egitura, zuen lana da hezardura horri haragia ezartzea:

Lehenik eta behin programa nagusia ulertu:

Ondoren aztertu astiro parametroak nola erabiltzen diren eta azpiprogramen kodea idatzi:

29. astea | laborategia prestatzen

29. astea (2019/04/03) laborategirako eginda ekarri behar dena

Datorren saioan arrayekin lan egingo dugu. Hona hemen enuntziatuak:

28. astea | mintegian egindakoa

28. astea (2019/03/27) mintegian egin dena
  • Azterketa egitean zerrenda pasatu dugu, deitutakoen artean ez etorriak:
    • Markos Mikolta.
    • Jon Vazquez.
  • Azterketa aurreko egunean Aintzanerekin egindakoa:
    • Nerea Zelaia.
  • Proiektuari buruz hitz egin dugu.
  • Kontrola egin dugu.

2019(e)ko martxoaren 20(a), asteazkena

28. astea | mintegia prestatzen

28. astea (2019/03/27) mintegirako eginda ekarri behar dena

Datorren saioan azterketa izango dugu.

Laster arrayen ariketekin hasiko gara. Hona hemen enuntziatuak:

27. astea | laborategian egin dena

27. astea (2019/03/20) laborategian egindakoa
  • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
    • Aitzol Gordo.
  • Bakoitza bere kabuz ibili da aurreko egunetako ariketak bukatuz eta datorren eguneko azterketa prestatuz.
    • Nik ariketa bat planteatu dut, hau:
      • iZenbatIkasle teklatuaren bitartez irakurri.
      • Prozesu errepikakor bat hasi non 7Ana45 itxurako katea irakurriko den, eta 7.45 katea lortu ondoren, berari dagokion zenbakia eskuratu eta metatuz joan (adibidez rMeta aldagaian).
      • Prozesu errepikakorretik irtetean rMeta/iZenbatIkasle eginez emaitza kalkulatu, hots, nota guztien batezbesteko aritmetikoa kalkulatu.

    2019(e)ko martxoaren 13(a), asteazkena

    27. astea | laborategia prestatzen

    27. astea (2019/03/20) laborategirako eginda ekarri behar dena

    Gaurko ariketen bitartez agindu karaktere-kateak eta azpiprogramak landuko dira. Hona hemen enuntziatuak:

    26. astea | laborategian egin dena

    26. astea (2019/03/13) laborategian egindakoa
    • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
      • Imanol Loinaz.
      • Markos Mikolta.
      • Izaskun Olasagasti.
      • Akronimoak izena duen ariketa egin dugu ondoko egoera partikularrak kontsideraturik:
        1. Sarrerako katean letrak edo espazioak daude, hitzak beti bi dira eta hitz bi horien artean espazio bakarra dago. Adibidez: Sobiet batasuna.
        2. Sarrerako katean letrak edo espazioak daude, hitzak beti hiru dira eta hitz horien artean espazio bakarra dago. Adibidez: amerikako estatu batuak.
        3. Akronimoak_DatuPartikularrak1.pas.
      • Akronimoak izena duen ariketa egin dugu ondoko egoera partikularrak kontsideraturik:
        1. Sarrerako katean letrak edo espazioak daude, hitzak hainbat izan daitezke eta hitz bi horien artean espazio bakarra dago. Adibidez: Estatu batuak edo nere etxeko errepublika askea.
        2. Akronimoak_DatuPartikularrak2.pas.
      • Akronimoak izena duen ariketarekin jarraitu dugu baina ondoko egoerak onartuz:
        1. Sarrerako katean sinboloak egon daitezke eta sarrerako katea garbituz letrak eta espazioak utziko dira, hitzak hainbat izan daitezke eta hitz bi horien artean espazio bakarra dago. Adibidez: E#sta@tu ba;tu?ak edo n8ere e€txeko erre*publika as4kea
        2. Sarrerako katearen hasieran espazioak egon daitezke eta fnsAurrekoakKendu funtzioaren bitartez soberan dauden espazio horiek kenduko ditugu. Adibidez:         sobiet batasuna.
        3. Sarrerako katearen bukaeran espazioak egon daitezke eta fnsAtzekoakKendu funtzioaren bitartez soberan dauden espazio horiek kenduko ditugu. Adibidez: amerikako estatu batuak      .
        4. Sarrerako katearen htzien artean espazio bat baino gehiago egon daitezke eta fnsErdikoakKendu funtzioaren bitartez soberan dauden espazio horiek kenduko ditugu. Adibidez: nere     etxeko      errepublika      askea.
        5. Akronimoak_EdozeinDatu.pas.

      2019(e)ko martxoaren 8(a), ostirala

      26. astea | laborategia prestatzen

      26. astea (2019/03/13) laborategirako eginda ekarri behar dena

      Gaurko ariketen bitartez karaktere-kateak landuko dira. Hona hemen enuntziatuak:

      Beste ariketa bat:

      2019(e)ko martxoaren 6(a), asteazkena

      Azpiprogramak: Divide et Impera

      AzpiprogramakDivide et Impera

      PROGRAM AzpiprogramenParametroak_01 ;
      VAR
         iKopuru1, iKopuru2 : Integer ;
      
      PROCEDURE Gehitu5Gehiago (Zenbaki1: Integer; Zenbaki2: Integer) ;
      BEGIN
         Writeln('    Gehitu5Gehiago BARRUAN, batuketa egin baino LEHEN:          ', Zenbaki1:4, Zenbaki2:4) ;
         Zenbaki1 := Zenbaki1 + 5 ;
         Zenbaki2 := Zenbaki2 + 5 ;
         Writeln('    Gehitu5Gehiago BARRUAN, batuketa egin ONDOREN:              ', Zenbaki1:4, Zenbaki2:4) ;
      END;
      
      BEGIN {---------------------- Programa Nagusia ---------------------------}
         iKopuru1 := 10 ;
         iKopuru2 := 20 ;
         Writeln('PROGRAMA NAGUSIAN Gehitu5Gehiago prozedurari deitu baino LEHEN: ', iKopuru1:4, iKopuru2:4) ;
         Writeln ;
         Gehitu5Gehiago(iKopuru1, iKopuru2) ;
         Writeln ;
         Writeln('PROGRAMA NAGUSIAN Gehitu5Gehiago prozedurari deitu ONDOREN:     ', iKopuru1:4, iKopuru2:4) ;
         WriteLn ;
         ReadLn ;
      END.
      1 Uneko parametroak eta parametro formalak

      Programa bat daukagu Gehitu5Gehiago izeneko prozedurari deitzen diona, honako hauek ikusi:
      • Gehitu5Gehiago prozedurak bi parametro ditu, biak Integer datu-motatakoak.
      • Gehitu5Gehiago prozeduraren bi parametroak sarrerakoak dira.
      • Gehitu5Gehiago prozedurari deia egiteko sententzia bezala idazten da.
      • Gehitu5Gehiago prozedurari deia egitean uneko parametroak komaz banatzen dira.
      • Gehitu5Gehiago prozeduraren parametro formalak puntu eta komaz banatzen dira.
      AzpiprogramenParametroak_01.pas programaren bitartez zer ikasi duzu?

      2 Sarrerako parametroak

      Programa bat daukagu Gehitu5Gehiago prozeduraren parametroak sarrerakoak direla ikusi, honako frogak egin:
      • AzpiprogramenParametroak_02 programa exekutatu eta emaitza aztertu.
      • AzpiprogramenParametroak_02 programaren emaitza aztertu aldaketa hauek eginez:
        • iKopuru1 uneko parametroaren balioa 100 izan dadila.
        • iKopuru2 uneko parametroaren balioa 200 izan dadila.
      • Gehitu5Gehiago prozedura barruko parametroen izenak aldatu:
        • Zenbaki1 parametro formala iKopuru1 izendatu.
        • Zenbaki2 parametro formala iKopuru2 izendatu.
      • Gehitu5Gehiago prozeduraren deian uneko parametroak elkar trukatu:
        • iKopuru1 uneko parametroaren posizioan iKopuru2 idatzi.
        • iKopuru2 uneko parametroaren posizioan iKopuru1 idatzi.
      • Gehitu5Gehiago prozeduraren deia aldatu adierazpen matematiko hauek jarriz:
        • Gehitu5Gehiago(iKopuru1 + 10, iKopuru2 + 20) ;
      AzpiprogramenParametroak_02.pas programaren bitartez zer ikasi duzu?

      3 Uneko parametro eta parametro formalen arteko bateragarritasuna

      Gehitu5Gehiago prozeduraren parametroen datu-motak aldatu, honako frogak egin:
      • AzpiprogramenParametroak_03 programaren hasieran parametro guztiak Integer dira:
        • iKopuru1 eta iKopuru2 aldagaiak Integer bezala erazagutu dira.
        • Zenbaki1 eta Zenbaki2 parametro formalak Integer dira ere.
      • Gehitu5Gehiago prozeduraren parametro formal baten datu-mota aldatu:
        • Zenbaki1 parametro formala Integer bezala mantendu.
        • Zenbaki2 parametro formala Real datu-motara aldatu.
        • iKopuru1 eta iKopuru2 uneko parametroak Integer bezala mantendu.
      • Gehitu5Gehiago prozeduraren deian uneko parametroa baten datu-mota aldatu:
        • Zenbaki1 parametro formala Integer bezala mantendu.
        • Zenbaki2 parametro formala Integer bezala berriro jarri.
        • iKopuru1 uneko parametroa Integer bezala mantendu.
        • iKopuru2 uneko parametroari datu-mota aldatu Real jarriz.
      AzpiprogramenParametroak_03.pas programaren bitartez zer ikasi duzu?

      4 Irteerako parametroak

      Gehitu5Gehiago prozeduraren parametro bat irteerakoa izanik, honako frogak egin:
      • Gehitu5Gehiago prozedura hasierakoa da eta lehen bezala:
        • Zenbaki1 parametro formala Integer izanik sarrerakoa da.
        • Zenbaki2 parametro formala Integer izanik sarrerakoa da.
      • Programa exekutatu Gehitu5Gehiago prozeduraren deia hasierako hau delarik:
        • Gehitu5Gehiago(iKopuru1, iKopuru2) ;
      • Programa exekutatu Gehitu5Gehiago prozeduraren deia aldatu adierazpen matematiko hauek jarriz:
        • Gehitu5Gehiago(iKopuru1 + 10, iKopuru2 + 20) ;
      • Aldaketa, Gehitu5Gehiago prozeduraren parametro formal baten datu-mota aldatu:
        • iKopuru1 eta iKopuru2 uneko parametroak Integer dira.
        • Zenbaki1 parametro formala Integer bezala mantendu.
        • Zenbaki2 parametro formala Real datu-motara aldatu.
        • Gehitu5Gehiago prozedura berriarekin, programa exekutatu deiak hauek direla:
          • Gehitu5Gehiago(iKopuru1, iKopuru2) ;
          • Gehitu5Gehiago(iKopuru1 + 10, iKopuru2) ;
          • Gehitu5Gehiago(iKopuru1, iKopuru2 + 20) ;
        AzpiprogramenParametroak_04.pas programaren bitartez zer ikasi duzu?

        5 Aldagai orokorrak

        iKopuru1 eta iKopuru2 aldagaiak non erazagutzen diren garrantzitsua da:
        • Gehitu5Gehiago prozedura barruko lehen esleipena aldatu hau idatziz:
          • iKopuru1 := Zenbaki1 + 5 ;
          • Ikusi iKopuru1 eta iKopuru2 aldagaiak prozedura baino lehenago erazaguturik daudela.
        • Gehitu5Gehiago prozedura barruko esleipen berria mantenduz, iKopuru1 eta iKopuru2 aldagaiak tokiz aldatu:
          • iKopuru1 := Zenbaki1 + 5 ;
          • iKopuru1 eta iKopuru2 aldagaiak prozedura eta gero erazagutu.
        AzpiprogramenParametroak_05.pas programaren bitartez zer ikasi duzu?

        6 Bertako aldagaiak

        Gehitu5Gehiago prozeduraren barruan aldagai laguntzaileak sortuko ditugu, egiteko daukagun asmoa hauxe da urratsez-urrats:
        1. iLaguntzaile1 izeneko aldagaia sortu Integer bezala.
        2. iLaguntzaile1 izeneko aldagaiari hasieraketarik ez egin eta...
        3. ...iLaguntzaile1 aldagaiaren balioa pantailaratu prozedura barruan.
        Gehitu5Gehiago prozeduraren bertako aldagaiak iker ditzagun:
        • Aurrekoa egin bi aldagai laguntzaile sortuz:
          • VAR iLaguntzaile1, iLaguntzaile2 : Integer ;
          • iLaguntzaile1 eta iLaguntzaile2 aldagaiei hasieraketarik ez egin eta...
          • Writeln('    iLaguntzaile1 = ', iLaguntzaile1, '      iLaguntzaile2 = ', iLaguntzaile2) ;
        • Aurrekoa errepikatu bi aldagai laguntzaileen sorreran ordena trukatuz:
          • VAR iLaguntzaile2, iLaguntzaile1 : Integer ;
          • iLaguntzaile1 eta iLaguntzaile2 aldagaiei hasieraketarik ez egin eta...
          • Writeln('    iLaguntzaile1 = ', iLaguntzaile1, '      iLaguntzaile2 = ', iLaguntzaile2) ;
        • Programa nagusian lan eginez iKopuru1 eta iKopuru2 aldagaien balioak pantailaratu.
        • Programa nagusian lan eginez iLaguntzaile1 eta iLaguntzaile2 aldagaien balioak pantailaratu. 
          AzpiprogramenParametroak_06.pas programaren bitartez zer ikasi duzu?

          7 Funtzioak

          Programa bat daukagu fniBatuBiEtaGehitu5Gehiago izeneko funtzioari deitzen diona, honako hauek ikusi:
          • fniBatuBiEtaGehitu5Gehiago funtzioak bi parametro ditu, biak Integer datu-motatakoak.
          • fniBatuBiEtaGehitu5Gehiago funtzioaren bi parametroak sarrerakoak dira.
          • fniBatuBiEtaGehitu5Gehiago funtzioak irteera bakarra du eta Integer datu-motatakoa da.
          • fniBatuBiEtaGehitu5Gehiago funtzioari deia egitean esleipen bat idatziko da.
          • fniBatuBiEtaGehitu5Gehiago funtzioaren deia adierazpen aritmetiko batean ager daiteke.
          • fniBatuBiEtaGehitu5Gehiago funtzioaren deia beste azpiprograma baten uneko parametroa izan daiteke.
          • fniBatuBiEtaGehitu5Gehiago funtzioak balioa programa nagusiari itzultzeko.  fniBatuBiEtaGehitu5Gehiago etiketa behar du.
          AzpiprogramenParametroak_07.pas programaren bitartez zer ikasi duzu?

          8 Errekurtsibitatea

          Gehitu5Gehiago prozedurari deituko diogu Gehitu5Gehiago prozeduraren barrutik:
          • Gehitu5Gehiago prozedura barruko esleipenak mantendu baina IF-THEN bat gehitu, honelaxe:
            • Zenbaki1 := Zenbaki1 + 5 ;
            • IF Zenbaki1 <= 25 THEN Gehitu5Gehiago(Zenbaki1, Zenbaki2) ;
            • Zenbaki2 := Zenbaki2 + 5 ;
          • Aurrekoa errepikatu baina Zenbaki1 parametro formala irteerakoa izanik:
            • PROCEDURE Gehitu5Gehiago (VAR Zenbaki1: Integer; Zenbaki2: Integer) ;
          • Aurrekoa errepikatu IF-THEN egitura kenduz eta dei errekurtsiboa mantenduz:
            • Zenbaki1 := Zenbaki1 + 5 ;
            • Gehitu5Gehiago(Zenbaki1, Zenbaki2) ;
            • Zenbaki2 := Zenbaki2 + 5 ;

            AzpiprogramenParametroak_08.pas programaren bitartez zer ikasi duzu?

            9 Faktoriala kalkulatzen duen funtzioa

            iZenbaki zenbaki baten faktoriala kalkulatzen duen funtzioak eragiketa hau egin behar du eta horretarako FOR-DO egitura bat erabil daiteke:
            • iZenbaki! = 1 * 2 * 3 * ... (iZenbaki - 1) * iZenbaki
              PROGRAM FaktorialaKalkulatzen ;
              {$MODE TP}
              
              FUNCTION fnliFaktoriala (iZbk:Integer) : LongInt ;
              VAR
                 k : Integer ;
                 liMetatua : LongInt ;
              BEGIN
                 liMetatua := 1 ;
                 FOR k:=1 TO iZbk DO
                 BEGIN
                    liMetatua := liMetatua*k ;
                    WriteLn(k, ' ---> ', liMetatua) ;
                 END ;
                 fnliFaktoriala := liMetatua ;
              END ;
              
              VAR
                liEmaitza : LONGINT;
                iDatua : INTEGER;
              BEGIN
                 REPEAT
                    Write('Eman zenbaki osoa: ') ;
                    ReadLn (iDatua) ;
                 UNTIL iDatua > 0 ;
                 liEmaitza := fnliFaktoriala (iDatua) ;
                 WriteLn(iDatua, '! = ', liEmaitza) ;
                 ReadLn ;
              END.

              Programa horretan fnliFaktoriala() funtzioari dei bakar bat egiten zaio,  programa nagusian liEmaitza aldagaiari balioa ematen zaio baino lehenago iDatua aldagaiaren balioa teklatuaren bitartez irakurri dugu. fnliFaktoriala() funtzioaren kodifikazioan FOR-DO egitura bat behar dugu eta hura kontrolatzeko k aldagaia behar dugu, faktoriala kalkulatzen duen liMetatua aldagaia beharko dugu ere.

              fnliFaktoriala() funtzioak programa nagusiari emaitza itzultzeko fnliFaktoriala etiketa erabili behar da derrigorrez, bestela liMetatua aldagaiak faktorialaren balioa gordeko du baina programa nagusiari ez zaio inolaz ere helduko.


              AzpiprogramenParametroak_09.pas programaren bitartez zer ikasi duzu?

              10 Faktoriala kalkulatzen duen funtzio errekurtsiboa

              iZenbaki zenbaki baten faktoriala kalkulatzen duen funtzio errekurtsiboa erakusten da jarraian. Faktorialaren kalkulu errekurtsiboa algoritmo honetan oinarritzen da:
              • iZenbaki! = iZenbaki * (iZenbaki - 1)!
                PROGRAM FaktorialErrekurtsiboa ;
                {$MODE TP}
                
                FUNCTION fnliFaktoriala (iZbk:Integer) : LongInt  ;
                BEGIN
                   WriteLn ('Dei errekurtsiboa baino lehen ---> ', iZbk) ;   
                   IF iZbk = 1 THEN
                      fnliFaktoriala := 1
                   ELSE
                      fnliFaktoriala := iZbk * fnliFaktoriala (iZbk - 1) ;
                   WriteLn ('Dei errekurtsiboa eta gero ------> ', iZbk) ;   
                END ;
                
                VAR
                  liEmaitza : LONGINT;
                  iDatua : INTEGER;
                
                BEGIN
                   REPEAT
                      Write ('Eman zenbaki osoa: ') ;
                      ReadLn (iDatua) ;
                   UNTIL iDatua > 0 ;
                   liEmaitza := fnliFaktoriala (iDatua) ;
                   WriteLn (iDatua, '! = ', liEmaitza) ;
                   ReadLn ;
                END.


                AzpiprogramenParametroak_10.pas programaren bitartez zer ikasi duzu? Azalpenak eta irudiak ikusteko Errekurtsibitatea zertan den izeneko blog-artikulua irakurri.


                25. astea | laborategian egin dena

                25. astea (2019/03/06) laborategian egindakoa
                • Zerrenda pasatu dugu, deitutakoen artean ez etorriak:
                  • Uxue Zubeldia.
                • Zerrenda pasatu dugu, beste azpitalde batetik etorriak:
                  • Nahia Lopez.
                • Etxerako proposaturik zegoen batukariaren ariketa egin dugu.
                • Zenbaki osoen segidan aurrekoa baino handiagoa zenbat izan diren ariketa egin dugu.
                • Tenperaturen taularekin hasi zarete batzuk.
                • Erabiltzaileak teklatu bidez emandako zenbaki oso bat irakurri eta zenbaki horrekiko zenbakirik hurbilena zehaztea ariketa ez duzue egin.