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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | {------------------------------------------------------------- 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