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

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 }

iruzkinik ez:

Argitaratu iruzkina