2024(e)ko otsailaren 28(a), asteazkena

11. Ariketa: bi letren arteko distantzia

ZER DAKIDAN:
Funtzio batek sarreraren bat hartzen du eta emaitza bakar bat itzultzen du. Dagoeneko zenbakien funtzio estandarrak erabili ditut.



ZER IKASIKO DUDAN:
CHAR datu-mota, eta CHAR datu-motarekin lotutako funtzio estandar batzuk:
  • upcase eta lowercase
  • chr eta ord
  • pred eta succ
  • readkey
Bide batez, hainbat zenbakiren artean minimoa zein den zehazten ikasiko dut.


A eta Z arteko letra maiuskula bat gure erreferentzia da. Prozesu errepikakor bat hasi eta teklatuaren bitartez letra bat irakurri, ereferentziaren eta irakurriko letraren arteko distantzia (zenbaki bat) kalkulatu balio minimoa gordez. Prozesu errepikakorretik irteteko erreferentzia den letra teklatuz irakurri. Programa amaitu aurretik pantailaratu letrarik hurbilena eta bere distantzia erreferentziarekiko.

Algoritmoa:
  1. Erreferentzia teklatutik irakurri, cErreferentzia aldagaiari balioa eman (jakinik letra maiuskula bat izan beharko dela)
  2. Hasieraketak. Bi izan daitezke, alde batetik distantzia minimoa gordeko duen iMinimoa zenbaki osoa (minimoa bilatzen ari garelako hasieran kopurua handi bat jarri beharko da); bigarren hasieraketa letrarik hurbilena gordetzeko cHurbilena aldagaia izango da, baina aurreko aldagaiarekin lotuta dagoenez bere hasieraketa ez da derrigorrezkoa
  3. Begiztaren iterazio bakoitzeko: cLetra aldagaiari balioa teklatuz eman, eta erreferentziarekiko iDistantzia aldagaiari distantzia kalkulatu ord funtzio estandarra aplikatuz, iDistantzia aldagaiaren balioa eta iMinimoa aldagaiaren balioa alderatu erabakiak hartzeko (emaitzak zehazteko, hots, minimoak zehazteko)
  4. Prozesu errepikakorretik irten cErreferentzia aldagaiaren balioa eta cLetra aldagaiaren balioa bat bera denean, baina kontuz, irtetean haien arteko diztantzia 0 izango da eta horrek minimoaren kalkuluarengan eragina du
  5. cLetra aldagaiaren balioa eta iMinimoa aldagaiaren balioa pantailaratu



ESKATZEN DEN PROGRAMA

Programa honek goiko algoritmoa aplikatzen du:

{ Erreferentzia bat emanik, letra sorta bateko letrarik hurbilena. }
program Ariketa_11 ;
uses
  crt ;
var
  cErreferentzia, cLetra, cItxoin, cHurbilena : char ;
  iDistantzia, iMinimoa : integer ;
begin
    clrscr ;
    repeat
       write('Erreferentzia izango den A..Z alfabetoko letra eman: ') ;
       readln(cErreferentzia) ;
    until (cErreferentzia >= 'A') and (cErreferentzia <= 'Z') ;
 
    writeln ;
    writeln('Orain prozesu errepikakor batean sartuko gara, begizta edo itzuli bakoitzean') ;
    writeln('letra majuskula bat sartuz eta erreferentziarekiko distantzia kalkulatuz.') ;
    writeln ;
 
    iMinimoa := ord('Z') - ord('A') + 1 ;   (* alfabetoaren maximoa baino 1 gehiago *)
    cHurbilena := cErreferentzia ;          (* hasieraketa hau ez da derrigorrezkoa *)
    repeat
       repeat
          write('A..Z alfabetoko letra eman (bukatzeko ', cErreferentzia, ' eman): ' ) ;
          readln(cLetra) ;
       until (cLetra >= 'A') and (cLetra <= 'Z') ;
 
       if cLetra <> cErreferentzia then
       begin
          iDistantzia := abs(ord(cErreferentzia) - ord (cLetra)) ;
          writeln(cLetra, ' eta ', cErreferentzia, ' arteko aldea ', iDistantzia, ' da') ;
          writeln ;
          if iDistantzia < iMinimoa then
          begin
             cHurbilena := cLetra ;
             iMinimoa := iDistantzia ;
          end ;
       end ;
    until cLetra = cErreferentzia ;
 
    writeln('Letrarik hurbilena: ', cHurbilena) ;
    writeln(cHurbilena, ' eta ', cErreferentzia, ' arteko aldea ', iMinimoa, ' da') ;
 
    cItxoin := readkey ;
    write(cItxoin) ;
end.







 

iruzkinik ez:

Argitaratu iruzkina

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