2024(e)ko martxoaren 21(a), osteguna

10. astea | mediana eta batezbestekoa


Gehienez 40 elementu gordetzeko gai den array batekin lan egingo dugu. Arrayaren elementuak zenbaki errealak izango dira.

Array zehatz honen datuek bi baldintza betetzen dituzte:

  1. Arrayaren datu guztiak desberdinak dira. Arraya betetzean, datua den zenbaki erreala arrayean gorde aurretik, frogatu beharra dago errepikaturik ez dela egongo. Horretarako, teoriako blogearen 9. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, beharko dituen moldapenak eginez
  2. Arrayaren datu guztiak ordenaturik daude. Arraya betetzean, datu berria dela frogatu ondoren, zein tokitan txertatuko den zehaztu beharra dago eta non txertatu dakiguka tartekaketaren algoritmoa aplikatu (gogoratu 10. astea | txertaketa array batean non elementu bat arrayaren posizio jakin batean tartekatzen den)

Zein da datuen rMed medianaren balioa? eta zein da datuen rBaBe batezbestekoaren balioa?

Mediana. Estatistikan, rMed mediana hainbat datu txikienetik handienera ordenaturik daudela, erdian dagoen datua da. Datu-kopurua bakoitia bada, denak ordenaturik daudela, rMed mediana erdiko datuak hartzen duen balioa da. Datu-kopurua bikoitia bada, datuak ordenaturik daudela, erdiko datu bi dagoenez, rMed mediana erdiko bi datu horien batezbestekoa dela esan daiteke (rMed aldagaiaren datu-mota real izango da).

Batezbestekoa. Batezbestekoaren balioa kalkulatzeko, rBaBe aldagaia erabiliko da (real datu-motakoa). Arrayak dituen balioen metekata egin ondoren, arrayaren elementu kopuruagatik zatiketa egingo da.









Arrayaren datu-mota eta arrayaren edukia

Arrayaren elementuak zenbaki errealak dira. Zehatzago hitz eginez, elementuen egitura hau da: 0 eta 9 arteko unitate bat, eta, 0 eta 9 arteko dezimal bat.

     program MedianaEtaBatezbestekoa ;
     const
        BEHEMUGA = 1 ;
        GOIMUGA = 40 ;
     type
        tarZenbakienSorta = array[BEHEMUGA..GOIMUGA] of real ;
     ...   

Arrayaren elementu guztiak desberdinak dira elkarrekiko, eta sailkaturik daude txikitik handira. Adibidez, hau izan daiteke 9 elementu dituen array baten edukia:

       balioak ===>     0.3   2.1   2.2   3.9   5.6   7.4   8.8   8.9   9.5
      indizeak ===>      1     2     3     4     5     6     7     8     9



Programa nagusia

Programa nagusian array bat (eta bere luzera efektiboa) daukagu eta eskatzen diren mediana eta batezbesteko aritmetikoa kalulatzen dira.

{ =============================programa nagusia============================ }
var
   arZenbakiak: tarZenbakienSorta ;
   iLuzera: integer ;
   rMed, rBaBe: real ;
begin
   writeln ;
   writeln ;
   
   randomize ;    (* ArrayaBete prozeduran random(10) funtzioa erabiltzen delako *)

   ArrayaBete_DesberdinakEtaOrdenaturik(arZenbakiak, iLuzera) ;
   writeln ;
   
   writeln('Arrayaren edukia: ') ;
   ArrayaIkusi(arZenbakiak, iLuzera) ;
   writeln ;

   rMed := fnrMedianaKalkulatu(arZenbakiak, iLuzera) ;
   writeln('Mediana = ', rMed:0:2) ;
   writeln ;

   rBaBe := fnrBatezbestekoaKalkulatu(arZenbakiak, iLuzera) ;
   writeln('Batezbestekoa = ', rBaBe:0:2) ;
   writeln ;
   
   writeln ;
   writeln('====================================================') ;
   writeln('RETURN sakatu amaitzeko ') ;
   writeln('====================================================') ;
   readln ;
end.



ArrayaBete_DesberdinakEtaOrdenaturik prozedura

Programaren eginkizun zailena ArrayaBete_DesberdinakEtaOrdenaturik prozedura honetan burutzen da, bere lana bikoitza da: 1) elementu desberdinak eta 2) ordenaturik gorde.

...
procedure ArrayaBete_DesberdinakEtaOrdenaturik(var arZenbakiak: tarZenbakienSorta;
                                                   var iLuzera: integer) ;
var
   iKont, iUnitatea, iDezimala, iNonDago, iNonTxertatu: integer ;
   rZbk: real ;
begin
   iLuzera := random(GOIMUGA) + 1 ;     (* 1 eta 40 arteko balioa *)
   
   for iKont:=BEHEMUGA to iLuzera do
   begin
      repeat
         iUnitatea := random(10) ;      (* 0 eta 9 arteko balioa *)
         iDezimala := random(10) ;      (* 0 eta 9 arteko balioa *)

         rZbk := iUnitatea*1.0 + iDezimala*0.1 ;

         iNonDago := fniZenbakiaBilatu(arZenbakiak, iLuzera, rZbk) ;
         
         if iNonDago <> 0 then
            writeln('iKont = ', iKont:2, ' -------- ', rZbk:0:1, ' ----errepikatuta---- ', iNonDago:2, ' ----posizioan--------') ;
            
      until iNonDago = 0 ;    (* errepikatu elementu berria izan arte *)

      iNonTxertatu := fniBerePosizioaAurkitu(arZenbakiak, iKont, rZbk) ;
      //writeln('iNonTxertatu = ', iNonTxertatu) ;  
      ZbkTartekatu(arZenbakiak, iKont, rZbk, iNonTxertatu) ;
   end ;
end ;
...

fniBerePosizioaAurkitu funtzioak bilaketa sekuentzialaren algoritmoa barneratzen du. Eta, ZbkTartekatu prozedurak elementu baten tartekataren algoritmoa barneratzen du.

Hona hemen MedianaEtaBatezbestekoa.pas programaren kodea eta bi exekuzioen balizko pantailaraketak:

Datu-kopurua bakoitia izatean
Datu-kopurua bikoitia izatean
 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.