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
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.