2023(e)ko apirilaren 4(a), asteartea

10. astea | alfabetoko letren maiztasuna testu batean

Maiztasuna: Alfabeto larrien letrak zenbat aldiz agertzen diren testu batean




Demagun testu bat daukagula array batean gorderik, karaktere-kateen array bat da testuaren edukiontzia:


const
iZENBATIKASLE = 10;
type
tsKate49 = string[49];
tasIzenenZerrenda = array[1..iZENBATIKASLE] of tsKate49;




Bestalde, alfabetoko letra bat zenbat aldiz agertzen den gordetzeko zenbaki osoen array bat beharko dugu, arraiaren posizio bakoitzean kopuru bat (posizio horretako letrari dagokion maiztasuna). Maiztasunak gordeko dituen osoen arrayaren datu-mota hauxe izan daiteke, non arrayaren indizeak karaktereak diren:


type
taiAlfabetoMaizta = array['A'..'Z'] of integer;




Adibide honetan testua konstantea da, izen abizenen zerrenda konstante bat da. Alfabetoko letren maiztasuna kalkulatzeko horrela egingo genuke:


program AlfabetokoLetrenMaiztasuna;
uses
crt;
const
iZENBATIKASLE = 10;
type
taiAlfabetoMaizta = array['A'..'Z'] of integer;
tsKate49 = string[49];
tasIzenenZerrenda = array[1..iZENBATIKASLE] of tsKate49;
const
asZERRENDA: tasIzenenZerrenda = ('AGIRRE ROMERO, UNAI', // 01
'ANGULEMA CARAZO, JON ANDER', // 02
'BIKARREGI IGLESIAS, JULEN', // 03
'CANO RUIZ DE HEREDIA, JULIAN', // 04
'CORRAL EGIA, JOSEBA ANDONI', // 05
'DIAZ DE ULZURRUN, ROY, LEONOR', // 06
'EGIGUREN MARKINEZ, IRUNE', // 07
'ERKIAGA ANDONEGI, IKER', // 08
'FERNANDEZ FEITO, FELIX', // 09
'GARTZIA DE ALZA GIL, KATALIN'); // 10

{ ikasleen izena array konstante batean daude, bere edukia pantailaratu }
{ parametrorik gabe, asZERRENDA eta iZENBATIKASLE konstante direlako }
procedure TestuaIkusi;
var
k: integer;
begin
for k:=1 to iZENBATIKASLE do
begin
writeln(k:20, '. ikaslea: ', asZERRENDA[k]);
end;
end;

{ asZERRENDA eta iZENBATIKASLE konstante direlako ez dira parametro }
{ luzerarik ez aiAlfabetoMaizta arrayarentzat bete-beterik dagoelako }
procedure LetrenZenbaketakEgin(var aiAlfabetoMaizta: taiAlfabetoMaizta);
var
cKontLetr: char;
iKontIkas: integer;
iKont: integer;
cLetra: char;
begin
(* hasiera batean letra guztien maiztasuna 0 da *)
for cKontLetr:='A' to 'Z' do
aiAlfabetoMaizta[cKontLetr] := 0;

(* ikasle guztiak arakatu *)
for iKontIkas:=1 to iZENBATIKASLE do
begin
(* ikasle baten letrak prozesatu *)
for iKont:=1 to length(asZERRENDA[iKontIkas]) do
begin
cLetra := asZERRENDA[iKontIkas][iKont];
//aiAlfabetoMaizta[asZERRENDA[iKontIkas][iKont]] := aiAlfabetoMaizta[asZERRENDA[iKontIkas][iKont]] + 1;
aiAlfabetoMaizta[cLetra] := aiAlfabetoMaizta[cLetra] + 1;
end;
end;
end;

{ luzerarik ez aiAlfabetoMaizta arrayarentzat bete-beterik dagoelako, A-tik Z-tara }
function fnrBatezBestekoaKalkulatu(const aiAlfabetoMaizta: taiAlfabetoMaizta): real;
var
cKontLetr: char;
iMetatua: integer;
iZenbatLetra: integer;
begin
iMetatua := 0;
for cKontLetr:='A' to 'Z' do
iMetatua := iMetatua + aiAlfabetoMaizta[cKontLetr];

iZenbatLetra := ord('Z') - ord('A') + 1;
fnrBatezBestekoaKalkulatu := 1.0*iMetatua/iZenbatLetra;
end;

{ luzerarik ez aiAlfabetoMaizta arrayarentzat A-tik Z-tara doalako }
procedure MaiztasunakIkusi(const aiAlfabetoMaizta: taiAlfabetoMaizta);
var
cKont: char;
begin
for cKont:='A' to 'Z' do
begin
writeln('"':20, cKont, '" ===> ', aiAlfabetoMaizta[cKont]:3, ' aldiz');
end;
end;

{ ---------------------------------- Programa Nagusia ---------------------------------- }
var
aiAlfabetoMaizta: taiAlfabetoMaizta;
rBBA: real;
begin
clrscr;

writeln('Zeintzuk dira letra guzti hauen maiztasuna?');
writeln;
TestuaIkusi; { parametrorik ez, izenen arraya konstante delako }
writeln;

LetrenZenbaketakEgin(aiAlfabetoMaizta); { parametrorik bakarra, izenen arraya konstante delako }
MaiztasunakIkusi(aiAlfabetoMaizta); { luzerarik ez, arraya beterik dagoelako (26 letra) }
writeln;

rBBA := fnrBatezBestekoaKalkulatu(aiAlfabetoMaizta); { luzerarik ez, alfabeto osoa }
writeln('Letren agerpenen atezbesteko aritmetikoa = ', rBBA:0:2, ' aldiz');

repeat until keypressed;
end.


 

iruzkinik ez:

Argitaratu iruzkina