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:
- 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
- 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