Maiztasuna: Alfabeto larrien letrak zenbat aldiz agertzen diren testu batean |
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
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.