NAN batek zortzi zifra eta letra bat dauzka. Letra kalkulatzeko algoritmoa jarraian deskribatzen den hau da:
- NAN-aren zenbaki zati 23 egiten da hondarra eskuratzeko
- 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