2024(e)ko martxoaren 21(a), osteguna

10. astea | NAN baten letra kalkulatu

NAN batek zortzi zifra eta letra bat dauzka. Letra kalkulatzeko algoritmoa jarraian deskribatzen den hau da:

  1. NAN-aren zenbaki zati 23 egiten da hondarra eskuratzeko
  2. Zatiketa osoaren hondarra taula honetara ekarriz letra lortzen da: 
HONDARRA  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22
LETRA T R W A G M Y F P D X B N J Z S Q V H L C K E

Adibidez, NAN-aren zenbakia 12345678 bada, zati 23 eginez zatiketa osoa egin ondoren ateratzen hondarra 14 da, horregatik dagokion letra Z da.

Ariketaren balizko emaitza ikusi, non karaktereen array konstante bat erabiltzen den:

{-------------------------------------------------------------
 NAN baten zifrak teklatuaren bitartez jaso kate batean eta
 programak letra kalkulatu ondoren, NAN osoa pantailaratuko du
 -------------------------------------------------------------}

program NANrenLetra ;

const
   iZATITZAILEA = 23 ;
   
type
   tsKate9 = string[9] ;
   tacNANarenLetra = array[0..iZATITZAILEA-1] of char ;

const
   acNANarenLetra: tacNANarenLetra = (	'T',	(*  0 *)
										'R',	(*  1 *)
										'W',	(*  2 *)
										'A',	(*  3 *)
										'G',	(*  4 *)
										'M',	(*  5 *)
										'Y',	(*  6 *)
										'F',	(*  7 *)
										'P',	(*  8 *)
										'D',	(*  9 *)
										'X',	(* 10 *)
										'B',	(* 11 *)
										'H',	(* 12 *)
										'J',	(* 13 *)
										'Z',	(* 14 *)
										'S',	(* 15 *)
										'Q',	(* 16 *)
										'V',	(* 17 *)
										'H',	(* 18 *)
										'L',	(* 19 *)
										'C',	(* 20 *)
										'K',	(* 21 *)
										'E') ; 	(* 22 *)


function fnboDenakZifrak(sZifrak: tsKate9): boolean ;
var
   boOndoDago: boolean ;
   k: integer ;
begin
   if length(sZifrak)=8 then
   begin
      boOndoDago := TRUE ;
      for k:=1 to 8 do
      begin
         if (sZifrak[k] < '0') or (sZifrak[k] > '9') then
         begin
            boOndoDago := FALSE ;
            writeln('Datuaren ':13, k, '. karakterea ez da zifra bat') ;
         end ;
   end ;
   end
   else
   begin
      boOndoDago := FALSE ;
      writeln('Zortzi zifra izan behar dira':32) ;
   end  ;

   fnboDenakZifrak := boOndoDago ;
end ;


function fncLetraLortu(sZifrak: tsKate9): char ;
var
   liNANzenbakia: longint ;
       iHondarra: integer ;
begin
   val(sZifrak, liNANzenbakia) ;
   //write('liNAN = ':12, liNANzenbakia) ;
   
   iHondarra := liNANzenbakia mod iZATITZAILEA ;
   //write('iHond. = ':13, iHondarra:2) ;
  
   fncLetraLortu := acNANarenLetra[iHondarra] ;
end ;

(* -------------------------------------------------- *)

var
   sZifrak: tsKate9 ;
     sNANa: tsKate9 ;
    cLetra: char ;
begin
   writeln ;
   repeat
      writeln ;
      write('NANren zortzi zifrak eman: ':31) ;
      readln(sZifrak) ;
   until fnboDenakZifrak(sZifrak) ;

   //write('sZifrak = |':14, sZifrak, '|') ;
   
   cLetra := fncLetraLortu(sZifrak) ;

   sNANa := sZifrak + cLetra ;

   writeln('NAN = ':10, sNANa) ;

   writeln ;
   write('ENTER sakatu exekuzioa amaitzeko... ') ;
   readln ;
end.
 

iruzkinik ez:

Argitaratu iruzkina

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