2023(e)ko martxoaren 26(a), igandea

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