2023(e)ko martxoaren 8(a), asteazkena

8. astea | palindromoak

Teklatuaren bidez sartutako esaldia palindromoa den aztertu behar du programak. Horretarako, honako azpiprograma haek derrigorrez erabili behar dira:




  • Esaldiaren karaktere alfabetikoak letra larriz idazten dituen funtzioa

  • Alfabetikoak ez diren esaldiko karaktereak kentzen dituen funtzioa

  • Aurreko azpiprogramak aplikatu ondoren, esaldia palindromoa den aztertzen duen funtzio boolearra



Palindromoa: Definizioz, aurretik atzera eta atzetik aurrera irakurketa berdina duen esaldia.



Adibidez:




  • Zein?, Ni ez                                                    [ZEINNIEZ]

  • Atara zarata!!!                                              [ATARAZARATA]

  • Iker! Ireki                                                      [IKERIREKI]

  • Ama zen ene zama                                           [AMAZENENEZAMA]

  • Nik enara neraman amaren aranekin      [NIKENARANERAMANAMARENARANEKIN]

  • Ze nekeza inori atea irekitzea eztikeria eta ironia zekenez                                                                              [ZENEKEZAINORIATEAIREKITZEAEZTIKERIAETAIRONIAZEKENEZ]









Ñ eta ñ kontsonante berezien prozesaketa da egin gabe geratu da laborategian. Hona hemen azalpena.




  • Hasteko, froga ezazu upcase funtzio estandarrak ñ kontsonantea hartzen badu ez duela bihurtzen Ñ karakterea, beraz eskuz egin beharko dugu. 





  • Horrez gain, ñ karakterea katean identifikatzeko ezin daiteke egin normala den konparaketa hau:



    (* katearen k-garren karakterea ñ da? *) { HAU EZ }
    if sEsaldi[k] = 'ñ' then


    Derrigorrez, ASCII taularen araberako ñ karaktereari dagokion ordinala erabili beharko dugu, 164 zenbakia. Horrela:



    (* katearen k-garren karakterearen ordinala 164 da? *) { HAU BAI }
    if ord(sEsaldi[k]) = 164 then






  • Bukatzeko, ñ karakterea identifikaturik daukagunean ezin dugu bere ordez Ñ jarri esleipen arruntaren bitartez:



    (* katearen k-garren karakterea orain Ñ gorde *) {HAU EZ}
    sEsaldi[k] := 'Ñ';


    Derrigorrez, berriro ere, ASCII taularen araberako Ñ karaktereari dagokion ordinala erabili beharko dugu, 165 zenbakia. Horrela:



    (* k-garren posizioan 165 ordinalari dagokion Ñ karakterea gorde *)
    sEsaldi[k] := chr(165); (* k-garren posizioan Ñ gorde *) { HAU BAI }









Programa osatuaren kodea:






{---------------------------------------------------------
Palindromoak.pas
Deskribapena: Esaldia palindromoa den aztertu
---------------------------------------------------------}
program Palindromoak;
uses crt;

const
MAX = 100;

type
tKateBat = string[MAX];


{ FUNTZIOA: fnsKontsonanteBerezia
SARRERA PARAMETROAK: string bat
IRTEERA PARAMETROAK: string bat
ATAZA: Emandako testuan ñ minuskula badago upcase funtzioak ez du Ñ larri bihurtuko,
guk geuk egin beharko dugu. Baina, tamalez, konparaketa hau ez dabil:
if sEsaldi[k] = 'ñ' then
eta ñ minuskularen 164 ordinala erabili beharko dugu, horrela:
if ord(sEsaldi[k]) = 164 then
Gero, Ñ larria esleitzeko ezin daiteke egin naturala litzetekeen hau:
sEsaldi[k] := 'Ñ';
eta berriro ere ordinala erabili beharko da, Ñ larriaren 165 zenbakia:
sEsaldi[k] := chr(ord(165)); }
function fnsKontsonanteBerezia(sEsaldi: tKateBat): tKateBat;
var
k: integer;
begin
{ Esaldiko karaktereak banan-banan aztertu eta ñ bada bere ordez Ñ jarri }
for k:=1 to length(sEsaldi) do
begin
//writeln(sEsaldi[k],' ord(sEsaldi[k]) = ', ord(sEsaldi[k]));

//if sEsaldi[k] = 'ñ' then (* konparaketa modu arruntan eginik, baina ez dabil *)
if ord(sEsaldi[k]) = 164 then
begin
//writeln(sEsaldi[k],' aldatu baino lehen: ORD(sESALDI[k]) = ', ord(sEsaldi[k]));

//sEsaldi[k] := 'Ñ'; (* esleipena modu arruntan eginik, baina ez dabil *)
sEsaldi[k] := chr(165);
//writeln(sEsaldi[k],' aldatu ondoren: ORD(sESALDI[k]) = ', ord(sEsaldi[k]));
end;
end;
fnsKontsonanteBerezia := sEsaldi;
end;


{ FUNTZIOA: fnsEzabatu
SARRERA PARAMETROAK: string bat
IRTEERA PARAMETROAK: string bat
ATAZA: Emandako testuan Ñ edo A..Z artekoa ez dena ezabatzen da }
function fnsEzabatu(sEsaldi: tKateBat): tKateBat;
var
sK: tKateBat;
k: integer;
begin
sK := ''; { sK aldagai lokala hasieratu }
{ Esaldiko karaktereak banan-banan aztertu eta Ñ edo A..Z artekoa ote den }
for k:=1 to length(sEsaldi) do
begin
if (sEsaldi[k] >= 'A') and (sEsaldi[k] <= 'Z') or (ord(sEsaldi[k]) = 165) then
sK := sK + sEsaldi[k]; { sEsaldi[k] = 'Ñ' }
end; { konparaketa arrunta ez dabil }
fnsEzabatu := sK;
end;


{ FUNTZIOA: fnsSimetrikoalortu
SARRERA PARAMETROAK: string bat
IRTEERA PARAMETROAK: string bat
ATAZA: Sartutako string hori atzekoz aurrera jarri }
function fnsSimetrikoalortu(sEsaldi: tKateBat): tKateBat;
var
sSimetriko: tKateBat; { sEsaldi katearen simetrikoa }
k: integer;
begin
sSimetriko := ''; { kate simetrikoa hasieratu }
for k:=length(sEsaldi) downto 1 do
begin
sSimetriko := sSimetriko + sEsaldi[k]; { kate simetrikoa osatu }
end;
fnsSimetrikoalortu := sSimetriko;
end;


{--------------------------PROGRAMA NAGUSIA--------------------------}
var
sHasierakoKatea, sSarreraMoldatua, sSimetrikoa: tKateBat;
cAukera: char;
begin
writeln('--------------------------------':50);
writeln('Palindromoak aztertzeko programa':50);
writeln('--------------------------------':50);
writeln;

{ Azterketa errepikatzen da erabiltzaileak kontrakoa erabaki arte }
repeat
writeln('Sar ezazu aztertu behar den testua:');
write(' ');
readln(sHasierakoKatea);
writeln('Irakurritakoa: sHasierakoKatea >>>>>', sHasierakoKatea, '<<<<<');

{ Letra larriz idatzi }
sSarreraMoldatua := upcase(sHasierakoKatea);
writeln('Letra larriz: sSarreraMoldatua >>>>>', sSarreraMoldatua, '<<<<<');

{ ñ minuskula bada Ñ larria jarri }
sSarreraMoldatua := fnsKontsonanteberezia(sSarreraMoldatua);
writeln(chr(164), ' badago ', chr(165), ' jarri: sSarreraMoldatua >>>>>', sSarreraMoldatua, '<<<<<');

{ Letra ez dena ezabatu }
sSarreraMoldatua := fnsEzabatu(sSarreraMoldatua);

{ Sarreraren simetrikoa lortu }
sSimetrikoa := fnsSimetrikoalortu(sSarreraMoldatua);

writeln;
writeln('Sarrera moldatua---|', sSarreraMoldatua, '|---Simetrikoa---|', sSimetrikoa);
writeln;

{ Emaitza pantailaratu, adierazi testua palindromoa den ala ez den }
if sSarreraMoldatua = sSimetrikoa then
writeln('"', sHasierakoKatea, '" datua palindromo da')
else
writeln('"', sHasierakoKatea, '" datua ez da palindromo');

{ Hurrengo iterazioa prestatu }
writeln;
write('Beste testu bat aztertu nahi duzu: (B ala E): ');
readln(cAukera);
cAukera := upcase(cAukera);
until cAukera = 'E'; { Ez, testu gehiagorik ez }

repeat until keypressed;
end.


 


iruzkinik ez:

Argitaratu iruzkina

15. ASTEA | laborategi/mintegian egin dena

 15. astea (2023/05/08) laborategi/mintegian egindakoa 24 ikasleetatik 11 ikasleek kontrol-ariketaren bidalketa egin dute Hirugarren kont...